@aztec/txe 5.3.0-nightly.20260925 → 5.3.0-rc.1
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/bin/index.js +1 -1
- package/dest/{chunk-SO6UQKNR.js → chunk-6PUTXQ7O.js} +1 -1
- package/dest/{chunk-L3DBNWMS.js → chunk-OG57FVGC.js} +1 -1
- package/dest/{chunk-L3DBNWMS.js.map → chunk-OG57FVGC.js.map} +2 -2
- package/dest/metafile.json +14 -14
- package/dest/server.bundle.js +1 -1
- package/dest/worker.bundle.js +1 -1
- package/package.json +17 -17
- /package/dest/{chunk-SO6UQKNR.js.map → chunk-6PUTXQ7O.js.map} +0 -0
|
@@ -263,4 +263,4 @@ Details: ${e2.message}`,[])),new TxSimRevertibleInsertionsRevert):e2}this.contra
|
|
|
263
263
|
z: ${inspect44(this.z)},
|
|
264
264
|
y: ${inspect44(this.y)},
|
|
265
265
|
c: ${inspect44(this.c)},
|
|
266
|
-
}`}};var FinalBlobBatchingChallenges=class _FinalBlobBatchingChallenges{static{__name(this,"FinalBlobBatchingChallenges")}z;gamma;constructor(z2,gamma){this.z=z2,this.gamma=gamma}equals(other){return this.z.equals(other.z)&&this.gamma.equals(other.gamma)}static empty(){return new _FinalBlobBatchingChallenges(Fr.ZERO,BLS12Fr.ZERO)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _FinalBlobBatchingChallenges(Fr.fromBuffer(reader),reader.readObject(BLS12Fr))}toBuffer(){return serializeToBuffer(this.z,this.gamma)}};var ParityBasePrivateInputs=class _ParityBasePrivateInputs{static{__name(this,"ParityBasePrivateInputs")}msgs;vkTreeRoot;proverId;constructor(msgs,vkTreeRoot,proverId){this.msgs=msgs,this.vkTreeRoot=vkTreeRoot,this.proverId=proverId}static fromSlice(array2,index,vkTreeRoot,proverId){if(array2.length!==1024)throw new Error(`Msgs array length must be NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP=${1024}`);let start=index*256,end=start+256,msgs=array2.slice(start,end);return new _ParityBasePrivateInputs(msgs,vkTreeRoot,proverId)}toBuffer(){return serializeToBuffer(this.msgs,this.vkTreeRoot,this.proverId)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityBasePrivateInputs(reader.readArray(256,Fr),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _ParityBasePrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_ParityBasePrivateInputs)}};var ParityPublicInputs=class _ParityPublicInputs{static{__name(this,"ParityPublicInputs")}shaRoot;convertedRoot;vkTreeRoot;proverId;constructor(shaRoot,convertedRoot,vkTreeRoot,proverId){if(this.shaRoot=shaRoot,this.convertedRoot=convertedRoot,this.vkTreeRoot=vkTreeRoot,this.proverId=proverId,shaRoot.toBuffer()[0]!=0)throw new Error("shaRoot buffer must be 31 bytes. Got 32 bytes")}toBuffer(){return serializeToBuffer(..._ParityPublicInputs.getFields(this))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static from(fields){return new _ParityPublicInputs(..._ParityPublicInputs.getFields(fields))}static getFields(fields){return[fields.shaRoot,fields.convertedRoot,fields.vkTreeRoot,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityPublicInputs(reader.readObject(Fr),reader.readObject(Fr),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _ParityPublicInputs.fromBuffer(hexToBuffer(str))}static get schema(){return bufferSchemaFor(_ParityPublicInputs)}};var ParityRootPrivateInputs=class _ParityRootPrivateInputs{static{__name(this,"ParityRootPrivateInputs")}children;constructor(children){this.children=children}toBuffer(){return serializeToBuffer(this.children)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityRootPrivateInputs(makeTuple(4,()=>ProofData.fromBuffer(reader,ParityPublicInputs)))}static fromString(str){return _ParityRootPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_ParityRootPrivateInputs)}};var BlockConstantData=class _BlockConstantData{static{__name(this,"BlockConstantData")}lastArchive;l1ToL2TreeSnapshot;vkTreeRoot;protocolContractsHash;globalVariables;proverId;constructor(lastArchive,l1ToL2TreeSnapshot,vkTreeRoot,protocolContractsHash2,globalVariables,proverId){this.lastArchive=lastArchive,this.l1ToL2TreeSnapshot=l1ToL2TreeSnapshot,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.globalVariables=globalVariables,this.proverId=proverId}static from(fields){return new _BlockConstantData(..._BlockConstantData.getFields(fields))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockConstantData(reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),Fr.fromBuffer(reader),Fr.fromBuffer(reader),reader.readObject(GlobalVariables),Fr.fromBuffer(reader))}static getFields(fields){return[fields.lastArchive,fields.l1ToL2TreeSnapshot,fields.vkTreeRoot,fields.protocolContractsHash,fields.globalVariables,fields.proverId]}static empty(){return new _BlockConstantData(AppendOnlyTreeSnapshot.empty(),AppendOnlyTreeSnapshot.empty(),Fr.ZERO,Fr.ZERO,GlobalVariables.empty(),Fr.ZERO)}toBuffer(){return serializeToBuffer(..._BlockConstantData.getFields(this))}};var TreeSnapshotDiffHints=class _TreeSnapshotDiffHints{static{__name(this,"TreeSnapshotDiffHints")}noteHashSubtreeRootSiblingPath;nullifierPredecessorPreimages;nullifierPredecessorMembershipWitnesses;sortedNullifiers;sortedNullifierIndexes;nullifierSubtreeRootSiblingPath;feePayerBalanceMembershipWitness;constructor(noteHashSubtreeRootSiblingPath,nullifierPredecessorPreimages,nullifierPredecessorMembershipWitnesses,sortedNullifiers,sortedNullifierIndexes,nullifierSubtreeRootSiblingPath,feePayerBalanceMembershipWitness){this.noteHashSubtreeRootSiblingPath=noteHashSubtreeRootSiblingPath,this.nullifierPredecessorPreimages=nullifierPredecessorPreimages,this.nullifierPredecessorMembershipWitnesses=nullifierPredecessorMembershipWitnesses,this.sortedNullifiers=sortedNullifiers,this.sortedNullifierIndexes=sortedNullifierIndexes,this.nullifierSubtreeRootSiblingPath=nullifierSubtreeRootSiblingPath,this.feePayerBalanceMembershipWitness=feePayerBalanceMembershipWitness}static from(fields){return new _TreeSnapshotDiffHints(..._TreeSnapshotDiffHints.getFields(fields))}static getFields(fields){return[fields.noteHashSubtreeRootSiblingPath,fields.nullifierPredecessorPreimages,fields.nullifierPredecessorMembershipWitnesses,fields.sortedNullifiers,fields.sortedNullifierIndexes,fields.nullifierSubtreeRootSiblingPath,fields.feePayerBalanceMembershipWitness]}toBuffer(){return serializeToBuffer(..._TreeSnapshotDiffHints.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TreeSnapshotDiffHints(reader.readArray(36,Fr),reader.readArray(64,NullifierLeafPreimage),reader.readArray(64,{fromBuffer:__name(buffer2=>MembershipWitness.fromBuffer(buffer2,42),"fromBuffer")}),reader.readArray(64,Fr),reader.readNumbers(64),reader.readArray(36,Fr),MembershipWitness.fromBuffer(reader,40))}static empty(){return new _TreeSnapshotDiffHints(makeTuple(36,Fr.zero),makeTuple(64,NullifierLeafPreimage.empty),makeTuple(64,()=>MembershipWitness.empty(42)),makeTuple(64,Fr.zero),makeTuple(64,()=>0),makeTuple(36,Fr.zero),MembershipWitness.empty(40))}};var PrivateBaseRollupHints=class _PrivateBaseRollupHints{static{__name(this,"PrivateBaseRollupHints")}start;startSpongeBlob;treeSnapshotDiffHints;feePayerBalanceLeafPreimage;anchorBlockArchiveSiblingPath;contractClassLogsFields;constants;constructor(start,startSpongeBlob,treeSnapshotDiffHints,feePayerBalanceLeafPreimage,anchorBlockArchiveSiblingPath,contractClassLogsFields,constants){this.start=start,this.startSpongeBlob=startSpongeBlob,this.treeSnapshotDiffHints=treeSnapshotDiffHints,this.feePayerBalanceLeafPreimage=feePayerBalanceLeafPreimage,this.anchorBlockArchiveSiblingPath=anchorBlockArchiveSiblingPath,this.contractClassLogsFields=contractClassLogsFields,this.constants=constants}static from(fields){return new _PrivateBaseRollupHints(..._PrivateBaseRollupHints.getFields(fields))}static getFields(fields){return[fields.start,fields.startSpongeBlob,fields.treeSnapshotDiffHints,fields.feePayerBalanceLeafPreimage,fields.anchorBlockArchiveSiblingPath,fields.contractClassLogsFields,fields.constants]}toBuffer(){return serializeToBuffer(..._PrivateBaseRollupHints.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PrivateBaseRollupHints(reader.readObject(PartialStateReference),reader.readObject(SpongeBlob),reader.readObject(TreeSnapshotDiffHints),reader.readObject(PublicDataTreeLeafPreimage),reader.readArray(30,Fr),makeTuple(1,()=>reader.readObject(ContractClassLogFields)),reader.readObject(BlockConstantData))}static fromString(str){return _PrivateBaseRollupHints.fromBuffer(hexToBuffer(str))}static empty(){return new _PrivateBaseRollupHints(PartialStateReference.empty(),SpongeBlob.empty(),TreeSnapshotDiffHints.empty(),PublicDataTreeLeafPreimage.empty(),makeTuple(30,Fr.zero),makeTuple(1,ContractClassLogFields.empty),BlockConstantData.empty())}},PublicBaseRollupHints=class _PublicBaseRollupHints{static{__name(this,"PublicBaseRollupHints")}startSpongeBlob;lastArchive;anchorBlockArchiveSiblingPath;contractClassLogsFields;constructor(startSpongeBlob,lastArchive,anchorBlockArchiveSiblingPath,contractClassLogsFields){this.startSpongeBlob=startSpongeBlob,this.lastArchive=lastArchive,this.anchorBlockArchiveSiblingPath=anchorBlockArchiveSiblingPath,this.contractClassLogsFields=contractClassLogsFields}static from(fields){return new _PublicBaseRollupHints(..._PublicBaseRollupHints.getFields(fields))}static getFields(fields){return[fields.startSpongeBlob,fields.lastArchive,fields.anchorBlockArchiveSiblingPath,fields.contractClassLogsFields]}toBuffer(){return serializeToBuffer(..._PublicBaseRollupHints.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicBaseRollupHints(reader.readObject(SpongeBlob),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(30,Fr),makeTuple(1,()=>reader.readObject(ContractClassLogFields)))}static fromString(str){return _PublicBaseRollupHints.fromBuffer(hexToBuffer(str))}static empty(){return new _PublicBaseRollupHints(SpongeBlob.empty(),AppendOnlyTreeSnapshot.empty(),makeTuple(30,Fr.zero),makeTuple(1,ContractClassLogFields.empty))}};import{inspect as inspect45}from"util";var _computedKey47;_computedKey47=inspect45.custom;var CheckpointConstantData=class _CheckpointConstantData{static{__name(this,"CheckpointConstantData")}chainId;version;vkTreeRoot;protocolContractsHash;proverId;slotNumber;coinbase;feeRecipient;gasFees;constructor(chainId,version2,vkTreeRoot,protocolContractsHash2,proverId,slotNumber,coinbase,feeRecipient,gasFees){this.chainId=chainId,this.version=version2,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.proverId=proverId,this.slotNumber=slotNumber,this.coinbase=coinbase,this.feeRecipient=feeRecipient,this.gasFees=gasFees}static from(fields){return new _CheckpointConstantData(..._CheckpointConstantData.getFields(fields))}static getFields(fields){return[fields.chainId,fields.version,fields.vkTreeRoot,fields.protocolContractsHash,fields.proverId,fields.slotNumber,fields.coinbase,fields.feeRecipient,fields.gasFees]}static empty(){return new _CheckpointConstantData(Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,SlotNumber.ZERO,EthAddress.ZERO,AztecAddress.ZERO,GasFees.empty())}toBuffer(){return serializeToBuffer(this.chainId,this.version,this.vkTreeRoot,this.protocolContractsHash,this.proverId,new Fr(this.slotNumber),this.coinbase,this.feeRecipient,this.gasFees)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointConstantData(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),SlotNumber(Fr.fromBuffer(reader).toNumber()),reader.readObject(EthAddress),reader.readObject(AztecAddress),reader.readObject(GasFees))}getSlotNumber(){return this.slotNumber}toInspect(){return{chainId:this.chainId.toNumber(),version:this.version.toNumber(),vkTreeRoot:this.vkTreeRoot.toString(),protocolContractsHash:this.protocolContractsHash.toString(),proverId:this.proverId.toString(),slotNumber:this.slotNumber,coinbase:this.coinbase.toString(),feeRecipient:this.feeRecipient.toString(),gasFees:this.gasFees.toInspect()}}[_computedKey47](){return`CheckpointConstantData ${inspect45(this.toInspect())}`}};var BlockRollupPublicInputs=class _BlockRollupPublicInputs{static{__name(this,"BlockRollupPublicInputs")}constants;previousArchive;newArchive;startState;endState;startSpongeBlob;endSpongeBlob;timestamp;blockHeadersHash;inHash;outHash;accumulatedFees;accumulatedManaUsed;constructor(constants,previousArchive,newArchive,startState,endState,startSpongeBlob,endSpongeBlob,timestamp,blockHeadersHash,inHash,outHash,accumulatedFees,accumulatedManaUsed){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.startState=startState,this.endState=endState,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.timestamp=timestamp,this.blockHeadersHash=blockHeadersHash,this.inHash=inHash,this.outHash=outHash,this.accumulatedFees=accumulatedFees,this.accumulatedManaUsed=accumulatedManaUsed}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRollupPublicInputs(reader.readObject(CheckpointConstantData),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(StateReference),reader.readObject(StateReference),reader.readObject(SpongeBlob),reader.readObject(SpongeBlob),reader.readUInt64(),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.constants,this.previousArchive,this.newArchive,this.startState,this.endState,this.startSpongeBlob,this.endSpongeBlob,bigintToUInt64BE(this.timestamp),this.blockHeadersHash,this.inHash,this.outHash,this.accumulatedFees,this.accumulatedManaUsed)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _BlockRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}toInspect(){return{previousArchiveRoot:this.previousArchive.root.toString(),newArchiveRoot:this.newArchive.root.toString(),blockHeadersHash:this.blockHeadersHash.toString(),inHash:this.inHash.toString(),outHash:this.outHash.toString(),timestamp:this.timestamp.toString(),accumulatedFees:this.accumulatedFees.toString(),accumulatedManaUsed:this.accumulatedManaUsed.toString()}}static get schema(){return bufferSchemaFor(_BlockRollupPublicInputs)}};var BlockMergeRollupPrivateInputs=class _BlockMergeRollupPrivateInputs{static{__name(this,"BlockMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockMergeRollupPrivateInputs([ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,BlockRollupPublicInputs)])}static fromString(str){return _BlockMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockMergeRollupPrivateInputs)}};var TxRollupPublicInputs=class _TxRollupPublicInputs{static{__name(this,"TxRollupPublicInputs")}numTxs;constants;startTreeSnapshots;endTreeSnapshots;startSpongeBlob;endSpongeBlob;outHash;accumulatedFees;accumulatedManaUsed;constructor(numTxs,constants,startTreeSnapshots,endTreeSnapshots,startSpongeBlob,endSpongeBlob,outHash,accumulatedFees,accumulatedManaUsed){this.numTxs=numTxs,this.constants=constants,this.startTreeSnapshots=startTreeSnapshots,this.endTreeSnapshots=endTreeSnapshots,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.outHash=outHash,this.accumulatedFees=accumulatedFees,this.accumulatedManaUsed=accumulatedManaUsed}static empty(){return new _TxRollupPublicInputs(0,BlockConstantData.empty(),PartialStateReference.empty(),PartialStateReference.empty(),SpongeBlob.empty(),SpongeBlob.empty(),Fr.zero(),Fr.zero(),Fr.zero())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TxRollupPublicInputs(reader.readNumber(),reader.readObject(BlockConstantData),reader.readObject(PartialStateReference),reader.readObject(PartialStateReference),reader.readObject(SpongeBlob),reader.readObject(SpongeBlob),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.numTxs,this.constants,this.startTreeSnapshots,this.endTreeSnapshots,this.startSpongeBlob,this.endSpongeBlob,this.outHash,this.accumulatedFees,this.accumulatedManaUsed)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _TxRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_TxRollupPublicInputs)}};var BlockRootFirstRollupPrivateInputs=class _BlockRootFirstRollupPrivateInputs{static{__name(this,"BlockRootFirstRollupPrivateInputs")}l1ToL2Roots;previousRollups;previousL1ToL2;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousRollups,previousL1ToL2,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousRollups=previousRollups,this.previousL1ToL2=previousL1ToL2,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootFirstRollupPrivateInputs(..._BlockRootFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousRollups,fields.previousL1ToL2,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootFirstRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),[ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootFirstRollupPrivateInputs)}},BlockRootSingleTxFirstRollupPrivateInputs=class _BlockRootSingleTxFirstRollupPrivateInputs{static{__name(this,"BlockRootSingleTxFirstRollupPrivateInputs")}l1ToL2Roots;previousRollup;previousL1ToL2;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousRollup,previousL1ToL2,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousRollup=previousRollup,this.previousL1ToL2=previousL1ToL2,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxFirstRollupPrivateInputs(..._BlockRootSingleTxFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousRollup,fields.previousL1ToL2,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootSingleTxFirstRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootSingleTxFirstRollupPrivateInputs)}},BlockRootEmptyTxFirstRollupPrivateInputs=class _BlockRootEmptyTxFirstRollupPrivateInputs{static{__name(this,"BlockRootEmptyTxFirstRollupPrivateInputs")}l1ToL2Roots;previousArchive;previousState;constants;timestamp;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousArchive,previousState,constants,timestamp,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousArchive=previousArchive,this.previousState=previousState,this.constants=constants,this.timestamp=timestamp,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootEmptyTxFirstRollupPrivateInputs(..._BlockRootEmptyTxFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousArchive,fields.previousState,fields.constants,fields.timestamp,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer([this.l1ToL2Roots,this.previousArchive,this.previousState,this.constants,bigintToUInt64BE(this.timestamp),this.newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath])}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootEmptyTxFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),AppendOnlyTreeSnapshot.fromBuffer(reader),StateReference.fromBuffer(reader),CheckpointConstantData.fromBuffer(reader),reader.readUInt64(),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootEmptyTxFirstRollupPrivateInputs)}},BlockRootRollupPrivateInputs=class _BlockRootRollupPrivateInputs{static{__name(this,"BlockRootRollupPrivateInputs")}previousRollups;newArchiveSiblingPath;constructor(previousRollups,newArchiveSiblingPath){this.previousRollups=previousRollups,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootRollupPrivateInputs(..._BlockRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootRollupPrivateInputs)}},BlockRootSingleTxRollupPrivateInputs=class _BlockRootSingleTxRollupPrivateInputs{static{__name(this,"BlockRootSingleTxRollupPrivateInputs")}previousRollup;newArchiveSiblingPath;constructor(previousRollup,newArchiveSiblingPath){this.previousRollup=previousRollup,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxRollupPrivateInputs(..._BlockRootSingleTxRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootSingleTxRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxRollupPrivateInputs(ProofData.fromBuffer(reader,TxRollupPublicInputs),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootSingleTxRollupPrivateInputs)}};var EpochConstantData=class _EpochConstantData{static{__name(this,"EpochConstantData")}chainId;version;vkTreeRoot;protocolContractsHash;proverId;constructor(chainId,version2,vkTreeRoot,protocolContractsHash2,proverId){this.chainId=chainId,this.version=version2,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.proverId=proverId}static from(fields){return new _EpochConstantData(..._EpochConstantData.getFields(fields))}static getFields(fields){return[fields.chainId,fields.version,fields.vkTreeRoot,fields.protocolContractsHash,fields.proverId]}toFields(){return serializeToFields(..._EpochConstantData.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _EpochConstantData(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(..._EpochConstantData.getFields(this))}static empty(){return new _EpochConstantData(Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO)}};var CheckpointRollupPublicInputs=class _CheckpointRollupPublicInputs{static{__name(this,"CheckpointRollupPublicInputs")}constants;previousArchive;newArchive;previousOutHash;newOutHash;checkpointHeaderHashes;fees;startBlobAccumulator;endBlobAccumulator;finalBlobChallenges;constructor(constants,previousArchive,newArchive,previousOutHash,newOutHash,checkpointHeaderHashes,fees,startBlobAccumulator,endBlobAccumulator,finalBlobChallenges){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.previousOutHash=previousOutHash,this.newOutHash=newOutHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.startBlobAccumulator=startBlobAccumulator,this.endBlobAccumulator=endBlobAccumulator,this.finalBlobChallenges=finalBlobChallenges}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRollupPublicInputs(reader.readObject(EpochConstantData),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(32,Fr),reader.readArray(32,FeeRecipient),reader.readObject(BlobAccumulator),reader.readObject(BlobAccumulator),reader.readObject(FinalBlobBatchingChallenges))}toBuffer(){return serializeToBuffer(this.constants,this.previousArchive,this.newArchive,this.previousOutHash,this.newOutHash,this.checkpointHeaderHashes,this.fees,this.startBlobAccumulator,this.endBlobAccumulator,this.finalBlobChallenges)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}toInspect(){return{checkpointHeaderHash:this.checkpointHeaderHashes[0].toString(),previousArchiveRoot:this.previousArchive.root.toString(),newArchiveRoot:this.newArchive.root.toString(),previousOutHashRoot:this.previousOutHash.root.toString(),newOutHashRoot:this.newOutHash.root.toString()}}static get schema(){return bufferSchemaFor(_CheckpointRollupPublicInputs)}},FeeRecipient=class _FeeRecipient{static{__name(this,"FeeRecipient")}recipient;value;constructor(recipient,value){this.recipient=recipient,this.value=value}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _FeeRecipient(reader.readObject(EthAddress),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.recipient,this.value)}static getFields(fields){return[fields.recipient,fields.value]}toFields(){return serializeToFields(..._FeeRecipient.getFields(this))}static empty(){return new _FeeRecipient(EthAddress.ZERO,Fr.ZERO)}isEmpty(){return this.value.isZero()&&this.recipient.isZero()}toFriendlyJSON(){return this.isEmpty()?{}:{recipient:this.recipient.toString(),value:this.value.toString()}}static random(){return new _FeeRecipient(EthAddress.random(),Fr.random())}};var PrivateTxBaseRollupPrivateInputs=class _PrivateTxBaseRollupPrivateInputs{static{__name(this,"PrivateTxBaseRollupPrivateInputs")}hidingKernelProofData;hints;constructor(hidingKernelProofData,hints){this.hidingKernelProofData=hidingKernelProofData,this.hints=hints}static from(fields){return new _PrivateTxBaseRollupPrivateInputs(..._PrivateTxBaseRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.hidingKernelProofData,fields.hints]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PrivateTxBaseRollupPrivateInputs(ProofData.fromBuffer(reader,PrivateToRollupKernelCircuitPublicInputs),reader.readObject(PrivateBaseRollupHints))}toBuffer(){return serializeToBuffer(..._PrivateTxBaseRollupPrivateInputs.getFields(this))}static fromString(str){return _PrivateTxBaseRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PrivateTxBaseRollupPrivateInputs)}};var PublicChonkVerifierPublicInputs=class _PublicChonkVerifierPublicInputs{static{__name(this,"PublicChonkVerifierPublicInputs")}privateTail;proverId;constructor(privateTail,proverId){this.privateTail=privateTail,this.proverId=proverId}static from(fields){return new _PublicChonkVerifierPublicInputs(..._PublicChonkVerifierPublicInputs.getFields(fields))}static getFields(fields){return[fields.privateTail,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicChonkVerifierPublicInputs(reader.readObject(PrivateToPublicKernelCircuitPublicInputs),reader.readObject(Fr))}toBuffer(){return serializeToBuffer(..._PublicChonkVerifierPublicInputs.getFields(this))}static fromString(str){return _PublicChonkVerifierPublicInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicChonkVerifierPublicInputs)}};var PublicTxBaseRollupPrivateInputs=class _PublicTxBaseRollupPrivateInputs{static{__name(this,"PublicTxBaseRollupPrivateInputs")}publicChonkVerifierProofData;avmProofData;hints;constructor(publicChonkVerifierProofData,avmProofData,hints){this.publicChonkVerifierProofData=publicChonkVerifierProofData,this.avmProofData=avmProofData,this.hints=hints}static from(fields){return new _PublicTxBaseRollupPrivateInputs(..._PublicTxBaseRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.publicChonkVerifierProofData,fields.avmProofData,fields.hints]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicTxBaseRollupPrivateInputs(ProofData.fromBuffer(reader,PublicChonkVerifierPublicInputs),ProofDataForFixedVk.fromBuffer(reader,AvmCircuitPublicInputs),reader.readObject(PublicBaseRollupHints))}toBuffer(){return serializeToBuffer(..._PublicTxBaseRollupPrivateInputs.getFields(this))}static fromString(str){return _PublicTxBaseRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicTxBaseRollupPrivateInputs)}};var RootRollupPublicInputs=class _RootRollupPublicInputs{static{__name(this,"RootRollupPublicInputs")}previousArchiveRoot;endArchiveRoot;outHash;checkpointHeaderHashes;fees;constants;blobPublicInputs;constructor(previousArchiveRoot,endArchiveRoot,outHash,checkpointHeaderHashes,fees,constants,blobPublicInputs){this.previousArchiveRoot=previousArchiveRoot,this.endArchiveRoot=endArchiveRoot,this.outHash=outHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.constants=constants,this.blobPublicInputs=blobPublicInputs}static getFields(fields){return[fields.previousArchiveRoot,fields.endArchiveRoot,fields.outHash,fields.checkpointHeaderHashes,fields.fees,fields.constants,fields.blobPublicInputs]}toBuffer(){return serializeToBuffer(..._RootRollupPublicInputs.getFields(this))}toFields(){return serializeToFields(..._RootRollupPublicInputs.getFields(this))}static from(fields){return new _RootRollupPublicInputs(..._RootRollupPublicInputs.getFields(fields))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _RootRollupPublicInputs(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),reader.readArray(32,Fr),reader.readArray(32,FeeRecipient),EpochConstantData.fromBuffer(reader),reader.readObject(FinalBlobAccumulator))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _RootRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_RootRollupPublicInputs)}static random(){return new _RootRollupPublicInputs(Fr.random(),Fr.random(),Fr.random(),makeTuple(32,Fr.random),makeTuple(32,FeeRecipient.random),new EpochConstantData(Fr.random(),Fr.random(),Fr.random(),Fr.random(),Fr.random()),FinalBlobAccumulator.random())}};var TxMergeRollupPrivateInputs=class _TxMergeRollupPrivateInputs{static{__name(this,"TxMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TxMergeRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)])}static fromString(str){return _TxMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_TxMergeRollupPrivateInputs)}};function makeGlobalVariables(seed=1,overrides={}){return GlobalVariables.from({chainId:new Fr(seed),version:new Fr(seed+1),blockNumber:BlockNumber(seed+2),slotNumber:SlotNumber(seed+3),timestamp:BigInt(seed+4),coinbase:EthAddress.fromField(new Fr(seed+5)),feeRecipient:AztecAddress.fromFieldUnsafe(new Fr(seed+6)),gasFees:new GasFees(seed+7,seed+8),...compact(overrides)})}__name(makeGlobalVariables,"makeGlobalVariables");import{hashTypedData as hashTypedData2}from"viem";var TEST_COORDINATION_SIGNATURE_CONTEXT={chainId:31337,rollupAddress:EthAddress.fromNumber(1)};var DEFAULT_ADDRESS=AztecAddress.fromNumberUnsafe(42),MAX_PRIVATE_EVENT_LEN=10,MAX_PRIVATE_EVENTS_PER_TXE_QUERY=5,MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY=64,MAX_OFFCHAIN_EFFECT_LEN=17;function makeResolveTaggingSecretStrategyHook(strategies){if(strategies.size!==0)return({deliveryMode})=>Promise.resolve(strategies.get(deliveryMode)??DEFAULT_TAGGING_SECRET_STRATEGY)}__name(makeResolveTaggingSecretStrategyHook,"makeResolveTaggingSecretStrategyHook");function getSingleTxBlockRequestHash(blockNumber){return new Fr(blockNumber+9999)}__name(getSingleTxBlockRequestHash,"getSingleTxBlockRequestHash");async function insertTxEffectIntoWorldTrees(txEffect,worldTrees,l1ToL2Messages=[]){await worldTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,padArrayEnd(txEffect.noteHashes,Fr.ZERO,64)),await worldTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE,padArrayEnd(txEffect.nullifiers,Fr.ZERO,64).map(nullifier=>nullifier.toBuffer()),6),await worldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,padArrayEnd(l1ToL2Messages,Fr.ZERO,1024))}__name(insertTxEffectIntoWorldTrees,"insertTxEffectIntoWorldTrees");async function makeTXEBlockHeader(worldTrees,globalVariables){let stateReference=await worldTrees.getStateReference(),archiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);return BlockHeader.from({lastArchive:new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root),Number(archiveInfo.size)),spongeBlobHash:Fr.ZERO,state:stateReference,globalVariables,totalFees:Fr.ZERO,totalManaUsed:Fr.ZERO})}__name(makeTXEBlockHeader,"makeTXEBlockHeader");async function makeTXEBlock(worldTrees,globalVariables,txEffects){let header=await makeTXEBlockHeader(worldTrees,globalVariables);await worldTrees.updateArchive(header);let newArchiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE),newArchive=new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root),Number(newArchiveInfo.size)),checkpointNumber=CheckpointNumber.fromBlockNumber(globalVariables.blockNumber),indexWithinCheckpoint=IndexWithinCheckpoint(0);return new L2Block(newArchive,header,new Body(txEffects),checkpointNumber,indexWithinCheckpoint)}__name(makeTXEBlock,"makeTXEBlock");var TXEOraclePublicContext=class{constructor(contractAddress,forkedWorldTrees,txRequestHash,globalVariables,contractStore){this.contractAddress=contractAddress;this.forkedWorldTrees=forkedWorldTrees;this.txRequestHash=txRequestHash;this.globalVariables=globalVariables;this.contractStore=contractStore;this.logger=createLogger("txe:public_context"),this.logger.debug("Entering Public Context",{contractAddress,blockNumber:globalVariables.blockNumber,timestamp:globalVariables.timestamp})}static{__name(this,"TXEOraclePublicContext")}isAvm=!0;logger;transientUniqueNoteHashes=[];transientSiloedNullifiers=[];publicDataWrites=[];address(){return Promise.resolve(this.contractAddress)}sender(){return Promise.resolve(AztecAddress.ZERO)}blockNumber(){return Promise.resolve(this.globalVariables.blockNumber)}timestamp(){return Promise.resolve(this.globalVariables.timestamp)}isStaticCall(){return Promise.resolve(!1)}chainId(){return Promise.resolve(this.globalVariables.chainId)}version(){return Promise.resolve(this.globalVariables.version)}async emitNullifier(nullifier){let siloedNullifier=await siloNullifier(this.contractAddress,nullifier);this.transientSiloedNullifiers.push(siloedNullifier)}async emitNoteHash(noteHash){let siloedNoteHash=await siloNoteHash(this.contractAddress,noteHash);this.transientUniqueNoteHashes.push(siloedNoteHash)}async nullifierExists(siloedNullifier){let treeIndex=(await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE,[siloedNullifier.toBuffer()]))[0],transientIndex=this.transientSiloedNullifiers.find(n=>n.equals(siloedNullifier));return treeIndex!==void 0||transientIndex!==void 0}async storageWrite(slot,value){this.logger.debug("AVM storage write",{slot,value});let dataWrite=new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress,slot),value);this.publicDataWrites.push(dataWrite),await this.forkedWorldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,[new PublicDataTreeLeaf(dataWrite.leafSlot,dataWrite.value).toBuffer()])}async storageRead(slot,contractAddress){let leafSlot=await computePublicDataTreeLeafSlot(contractAddress,slot),lowLeafResult=await this.forkedWorldTrees.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt()),value=!lowLeafResult||!lowLeafResult.alreadyPresent?Fr.ZERO:(await this.forkedWorldTrees.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index)).leaf.value;return this.logger.debug("AVM storage read",{slot,contractAddress,value}),value}getContractInstanceDeployer(address){return this.getContractInstanceMember(address,i=>i.deployer.toField())}getContractInstanceClassId(address){return this.getContractInstanceMember(address,i=>i.originalContractClassId)}getContractInstanceInitializationHash(address){return this.getContractInstanceMember(address,i=>i.initializationHash)}getContractInstanceImmutablesHash(address){return this.getContractInstanceMember(address,i=>i.immutablesHash)}async getContractInstanceMember(address,accessor){let instance=await this.contractStore.getContractInstance(address);return instance?[{member:accessor(instance),exists:!0}]:[{member:Fr.ZERO,exists:!1}]}returndataSize(){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}returndataCopy(_rdOffset,_copySize){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}call(_l2Gas,_daGas,_address,_argsLength,_args){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}staticCall(_l2Gas,_daGas,_address,_argsLength,_args){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}successCopy(){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}async close(){this.logger.debug("Exiting Public Context, building block with collected side effects",{blockNumber:this.globalVariables.blockNumber});let txEffect=this.makeTxEffect();await insertTxEffectIntoWorldTrees(txEffect,this.forkedWorldTrees);let block=await makeTXEBlock(this.forkedWorldTrees,this.globalVariables,[txEffect]);return await this.forkedWorldTrees.close(),this.logger.debug("Exited PublicContext with built block",{blockNumber:block.number,txEffects:block.body.txEffects}),block}makeTxEffect(){let txEffect=TxEffect.empty();return txEffect.noteHashes=this.transientUniqueNoteHashes,txEffect.nullifiers=[this.txRequestHash,...this.transientSiloedNullifiers],txEffect.publicDataWrites=this.publicDataWrites,txEffect.txHash=new TxHash(new Fr(this.globalVariables.blockNumber)),txEffect}};var GAS_SETTINGS=LEAF({kind:"gas-settings",deserialization:{fn:__name(([reader])=>GasSettings.fromFields(reader.readFieldArray(8)),"fn")},shape:[{len:8}]}),STRATEGY_NON_INTERACTIVE_HANDSHAKE=1,STRATEGY_ARBITRARY_SECRET=2,STRATEGY_ADDRESS_DERIVED=3,STRATEGY_INTERACTIVE_HANDSHAKE=4,TAGGING_SECRET_STRATEGY=LEAF({kind:"tagging-secret-strategy",serialization:{fn:__name(strategy=>{switch(strategy.type){case"non-interactive-handshake":return[new Fr(STRATEGY_NON_INTERACTIVE_HANDSHAKE),Fr.ZERO,Fr.ZERO];case"interactive-handshake":return[new Fr(STRATEGY_INTERACTIVE_HANDSHAKE),Fr.ZERO,Fr.ZERO];case"address-derived":return[new Fr(STRATEGY_ADDRESS_DERIVED),Fr.ZERO,Fr.ZERO];case"arbitrary-secret":return[new Fr(STRATEGY_ARBITRARY_SECRET),strategy.secret.x,strategy.secret.y]}},"fn")},deserialization:{fn:__name(([kindReader,xReader,yReader])=>{let kind=kindReader.readField().toNumber(),[x,y]=[xReader.readField(),yReader.readField()];switch(kind){case STRATEGY_NON_INTERACTIVE_HANDSHAKE:return{type:"non-interactive-handshake"};case STRATEGY_INTERACTIVE_HANDSHAKE:return{type:"interactive-handshake"};case STRATEGY_ADDRESS_DERIVED:return{type:"address-derived"};case STRATEGY_ARBITRARY_SECRET:return{type:"arbitrary-secret",secret:Point.fromFields([x,y])};default:throw new Error(`Unrecognized tagging secret strategy kind: ${kind}`)}},"fn")},shape:["scalar","scalar","scalar"]}),PRIVATE_CONTEXT_INPUTS=LEAF({kind:"private-context-inputs",serialization:{fn:__name(v=>v.toFields(),"fn")},shape:Array(38).fill("scalar")}),COMPLETE_ADDRESS=LEAF({kind:"complete-address",serialization:{fn:__name(v=>[v.address.toField(),...v.publicKeys.toFields()],"fn")},shape:Array(8).fill("scalar")}),TXE_TX_EFFECTS=LEAF({kind:"txe-tx-effects",serialization:{fn:__name(({txHash,noteHashes,nullifiers,privateLogs})=>{let emittedLogs=privateLogs.map(log2=>log2.getEmittedFields()),rawLogStorage=emittedLogs.map(fields=>fields.concat(Array(16-fields.length).fill(Fr.ZERO))).concat(Array(64-emittedLogs.length).fill(Array(16).fill(Fr.ZERO))).flat(),logLengths=emittedLogs.map(fields=>new Fr(fields.length)).concat(Array(64-emittedLogs.length).fill(Fr.ZERO)),paddedNoteHashes=noteHashes.concat(Array(64-noteHashes.length).fill(Fr.ZERO)),paddedNullifiers=nullifiers.concat(Array(64-nullifiers.length).fill(Fr.ZERO));return[txHash.hash,paddedNoteHashes,new Fr(noteHashes.length),paddedNullifiers,new Fr(nullifiers.length),rawLogStorage,logLengths,new Fr(emittedLogs.length)]},"fn")},shape:["scalar",{len:64},"scalar",{len:64},"scalar",{len:1024},{len:64},"scalar"]}),TXE_OFFCHAIN_EFFECTS=LEAF({kind:"txe-offchain-effects",serialization:{fn:__name(({effects})=>{let rawArrayStorage=effects.map(e2=>e2.concat(Array(MAX_OFFCHAIN_EFFECT_LEN-e2.length).fill(Fr.ZERO))).concat(Array(MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY-effects.length).fill(Array(MAX_OFFCHAIN_EFFECT_LEN).fill(Fr.ZERO))).flat(),effectLengths=effects.map(e2=>new Fr(e2.length)).concat(Array(MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY-effects.length).fill(Fr.ZERO));return[rawArrayStorage,effectLengths,new Fr(effects.length)]},"fn")},shape:[{len:MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY*MAX_OFFCHAIN_EFFECT_LEN},{len:MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY},"scalar"]}),TXE_CALL_CONTEXT=LEAF({kind:"txe-call-context",serialization:{fn:__name(({txHash,anchorBlockTimestamp})=>{let isSome=txHash.isZero()?0:1;return[new Fr(isSome),txHash,new Fr(anchorBlockTimestamp)]},"fn")},shape:["scalar","scalar","scalar"]}),CONTRACT_INSTANCE_MEMBER=FIXED_ARRAY(STRUCT([{name:"exists",type:BOOL},{name:"member",type:FIELD}]),1),EVENT_SELECTOR=SCALAR({kind:"event-selector",serialization:{fn:__name(v=>[v.toField()],"fn")},deserialization:{fn:__name(([reader])=>EventSelector.fromField(reader.readField()),"fn")}}),TXE_PRIVATE_EVENTS=LEAF({kind:"txe-private-events",serialization:{fn:__name(events=>{let rawArrayStorage=events.map(e2=>e2.concat(Array(MAX_PRIVATE_EVENT_LEN-e2.length).fill(Fr.ZERO))).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY-events.length).fill(Array(MAX_PRIVATE_EVENT_LEN).fill(Fr.ZERO))).flat(),eventLengths=events.map(e2=>new Fr(e2.length)).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY-events.length).fill(Fr.ZERO));return[rawArrayStorage,eventLengths,new Fr(events.length)]},"fn")},shape:[{len:MAX_PRIVATE_EVENTS_PER_TXE_QUERY*MAX_PRIVATE_EVENT_LEN},{len:MAX_PRIVATE_EVENTS_PER_TXE_QUERY},"scalar"]}),TXE_ORACLE_REGISTRY={...ORACLE_REGISTRY,aztec_txe_assertCompatibleOracleVersion:makeEntry({params:[{name:"major",type:U32},{name:"minor",type:U32}]}),aztec_txe_setTopLevelTXEContext:makeEntry(),aztec_txe_setPrivateTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)},{name:"anchorBlockNumber",type:OPTION(BLOCK_NUMBER)},{name:"gasSettings",type:GAS_SETTINGS}],returnType:PRIVATE_CONTEXT_INPUTS}),aztec_txe_setPublicTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)}]}),aztec_txe_setUtilityTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)}]}),aztec_txe_getDefaultAddress:makeEntry({returnType:AZTEC_ADDRESS}),aztec_txe_getNextBlockNumber:makeEntry({returnType:BLOCK_NUMBER}),aztec_txe_getNextBlockTimestamp:makeEntry({returnType:U64}),aztec_txe_advanceBlocksBy:makeEntry({params:[{name:"blocks",type:U32}]}),aztec_txe_advanceTimestampBy:makeEntry({params:[{name:"duration",type:U64}]}),aztec_txe_deploy:makeEntry({params:[{name:"contractPath",type:STR},{name:"initializer",type:STR},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)},{name:"secret",type:FIELD},{name:"salt",type:FIELD},{name:"deployer",type:AZTEC_ADDRESS}],returnType:ARRAY(FIELD)}),aztec_txe_createAccount:makeEntry({params:[{name:"secret",type:FIELD},{name:"partialAddress",type:FIELD}],returnType:COMPLETE_ADDRESS}),aztec_txe_addAccount:makeEntry({params:[{name:"secret",type:FIELD}],returnType:COMPLETE_ADDRESS}),aztec_txe_addAuthWitness:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS},{name:"messageHash",type:FIELD}]}),aztec_txe_sendL1ToL2Message:makeEntry({params:[{name:"content",type:FIELD},{name:"secretHash",type:FIELD},{name:"sender",type:ETH_ADDRESS},{name:"recipient",type:AZTEC_ADDRESS}],returnType:FIELD}),aztec_txe_setTaggingSecretStrategies:makeEntry({params:[{name:"unconstrainedStrategy",type:OPTION(TAGGING_SECRET_STRATEGY)},{name:"constrainedStrategy",type:OPTION(TAGGING_SECRET_STRATEGY)}]}),aztec_txe_setAuthorizeAllUtilityCallTargets:makeEntry({params:[{name:"authorizeAll",type:BOOL}]}),aztec_txe_getLastBlockTimestamp:makeEntry({returnType:U64}),aztec_txe_getLastTxEffects:makeEntry({returnType:TXE_TX_EFFECTS}),aztec_txe_getLastCallOffchainEffects:makeEntry({returnType:TXE_OFFCHAIN_EFFECTS}),aztec_txe_getLastCallContext:makeEntry({returnType:TXE_CALL_CONTEXT}),aztec_txe_getPrivateEvents:makeEntry({params:[{name:"selector",type:EVENT_SELECTOR},{name:"contractAddress",type:AZTEC_ADDRESS},{name:"scope",type:AZTEC_ADDRESS}],returnType:TXE_PRIVATE_EVENTS}),aztec_txe_privateCallNewFlow:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"targetContractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"args",type:ARRAY(FIELD)},{name:"argsHash",type:FIELD},{name:"isStaticCall",type:BOOL},{name:"additionalScopes",type:ARRAY(AZTEC_ADDRESS)},{name:"authorizedUtilityCallTargets",type:ARRAY(AZTEC_ADDRESS)},{name:"gasSettings",type:GAS_SETTINGS}],returnType:ARRAY(FIELD)}),aztec_txe_executeUtilityFunction:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"targetContractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"args",type:ARRAY(FIELD)},{name:"authorizedUtilityCallTargets",type:ARRAY(AZTEC_ADDRESS)}],returnType:ARRAY(FIELD)}),aztec_txe_publicCallNewFlow:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"address",type:AZTEC_ADDRESS},{name:"calldata",type:ARRAY(FIELD)},{name:"isStaticCall",type:BOOL},{name:"gasSettings",type:GAS_SETTINGS}],returnType:ARRAY(FIELD)}),aztec_avm_address:makeEntry({returnType:AZTEC_ADDRESS}),aztec_avm_sender:makeEntry({returnType:AZTEC_ADDRESS}),aztec_avm_blockNumber:makeEntry({returnType:BLOCK_NUMBER}),aztec_avm_timestamp:makeEntry({returnType:U64}),aztec_avm_isStaticCall:makeEntry({returnType:BOOL}),aztec_avm_chainId:makeEntry({returnType:FIELD}),aztec_avm_version:makeEntry({returnType:FIELD}),aztec_avm_emitNullifier:makeEntry({params:[{name:"nullifier",type:FIELD}]}),aztec_avm_emitNoteHash:makeEntry({params:[{name:"noteHash",type:FIELD}]}),aztec_avm_nullifierExists:makeEntry({params:[{name:"siloedNullifier",type:FIELD}],returnType:BOOL}),aztec_avm_storageRead:makeEntry({params:[{name:"slot",type:FIELD},{name:"contractAddress",type:AZTEC_ADDRESS}],returnType:FIELD}),aztec_avm_storageWrite:makeEntry({params:[{name:"slot",type:FIELD},{name:"value",type:FIELD}]}),aztec_avm_emitPublicLog:makeEntry({params:[{name:"message",type:ARRAY(FIELD)}]}),aztec_avm_returndataSize:makeEntry({returnType:U32}),aztec_avm_returndataCopy:makeEntry({params:[{name:"rdOffset",type:U32},{name:"copySize",type:U32}],returnType:ARRAY(FIELD)}),aztec_avm_call:makeEntry({params:[{name:"l2Gas",type:U32},{name:"daGas",type:U32},{name:"address",type:AZTEC_ADDRESS},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)}]}),aztec_avm_staticCall:makeEntry({params:[{name:"l2Gas",type:U32},{name:"daGas",type:U32},{name:"address",type:AZTEC_ADDRESS},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)}]}),aztec_avm_successCopy:makeEntry({returnType:BOOL}),aztec_avm_getContractInstanceDeployer:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceClassId:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceInitializationHash:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceImmutablesHash:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER})};function toInputSlots(inputs){return inputs.map(v=>Array.isArray(v)?v.map(withHexPrefix):[withHexPrefix(v)])}__name(toInputSlots,"toInputSlots");async function callTxeHandler({oracle,inputs,handler}){let entry=TXE_ORACLE_REGISTRY[oracle],positional=entry.deserializeParams(toInputSlots(inputs)).map(p=>p.value),result=await handler(positional);return outputSlotsToForeignCallResult(entry.serializeReturn(result))}__name(callTxeHandler,"callTxeHandler");var legacyCallbacksByHandler=new WeakMap;async function callTxeLegacyHandler(oracle,inputs,oracleHandler){let callback=legacyCallbacksByHandler.get(oracleHandler);callback||(callback=buildACIRCallback(oracleHandler),legacyCallbacksByHandler.set(oracleHandler,callback));let outputSlots=await callback[oracle](...toInputSlots(inputs));return outputSlotsToForeignCallResult(outputSlots)}__name(callTxeLegacyHandler,"callTxeLegacyHandler");function outputSlotsToForeignCallResult(outputSlots){return{values:outputSlots.map(slot=>Array.isArray(slot)?slot.map(withoutHexPrefix):withoutHexPrefix(slot))}}__name(outputSlotsToForeignCallResult,"outputSlotsToForeignCallResult");import{BarretenbergSync as BarretenbergSync8}from"@aztec/bb.js";var SchnorrSignature=class _SchnorrSignature{static{__name(this,"SchnorrSignature")}buffer;static SIZE=64;constructor(buffer){if(this.buffer=buffer,buffer.length!==_SchnorrSignature.SIZE)throw new Error(`Invalid signature buffer of length ${buffer.length}.`)}get s(){return this.buffer.subarray(0,32)}get e(){return this.buffer.subarray(32)}toBuffer(){return this.buffer}toString(){return`0x${this.buffer.toString("hex")}`}toFields(){let sig=this.toBuffer(),buf1=Buffer.alloc(32),buf2=Buffer.alloc(32),buf3=Buffer.alloc(32);return sig.copy(buf1,1,0,31),sig.copy(buf2,1,31,62),sig.copy(buf3,1,62,64),mapTuple([buf1,buf2,buf3],Fr.fromBuffer)}toLimbFields(){let limb=__name(start=>{let buf=Buffer.alloc(32);return this.buffer.copy(buf,16,start,start+16),Fr.fromBuffer(buf)},"limb");return[limb(16),limb(0),limb(48),limb(32)]}};var Schnorr=class{static{__name(this,"Schnorr")}async computePublicKey(privateKey){await BarretenbergSync8.initSingleton();let response=BarretenbergSync8.getSingleton().schnorrComputePublicKey({privateKey:privateKey.toBuffer()});return Point.fromBuffer(Buffer.concat([Buffer.from(response.publicKey.x),Buffer.from(response.publicKey.y)]))}async constructSignature(msg,privateKey){await BarretenbergSync8.initSingleton();let response=BarretenbergSync8.getSingleton().schnorrConstructSignature({messageField:msg.toBuffer(),privateKey:privateKey.toBuffer()});return new SchnorrSignature(Buffer.from([...response.s,...response.e]))}async verifySignature(msg,pubKey,sig){return await BarretenbergSync8.initSingleton(),BarretenbergSync8.getSingleton().schnorrVerifySignature({messageField:msg.toBuffer(),publicKey:{x:pubKey.x.toBuffer(),y:pubKey.y.toBuffer()},s:sig.s,e:sig.e}).verified}};var TXEPublicContractDataSource=class{constructor(blockNumber,contractStore){this.blockNumber=blockNumber;this.contractStore=contractStore}static{__name(this,"TXEPublicContractDataSource")}getBlockNumber(){return Promise.resolve(this.blockNumber)}async getContractClass(id){let contractClass=await this.contractStore.getContractClassWithPreimage(id);if(contractClass)return{id:contractClass.id,artifactHash:contractClass.artifactHash,packedBytecode:contractClass.packedBytecode,privateFunctionsRoot:contractClass.privateFunctionsRoot,version:contractClass.version}}async getBytecodeCommitment(id){return(await this.contractStore.getContractClassWithPreimage(id))?.publicBytecodeCommitment}async getContract(address){let instance=await this.contractStore.getContractInstance(address);return instance&&{...instance,address,currentContractClassId:instance.originalContractClassId}}getContractClassIds(){throw new Error("Method not implemented.")}async getContractArtifact(address){let instance=await this.getContract(address);return instance&&this.contractStore.getContractArtifact(instance.originalContractClassId)}async getDebugFunctionName(address,selector){let instance=await this.getContract(address);return instance&&this.contractStore.getDebugFunctionName(instance.originalContractClassId,selector)}registerContractFunctionSignatures(_signatures){return Promise.resolve()}};var TXEOracleTopLevelContext=class{constructor(stateMachine,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,nextBlockTimestamp,version2,chainId,authwits,taggingSecretStrategies,authorizeAllUtilityCallTargets,artifactResolver,rootPath,packageName){this.stateMachine=stateMachine;this.contractStore=contractStore;this.noteStore=noteStore;this.keyStore=keyStore;this.addressStore=addressStore;this.accountStore=accountStore;this.senderTaggingStore=senderTaggingStore;this.recipientTaggingStore=recipientTaggingStore;this.taggingSecretSourcesStore=taggingSecretSourcesStore;this.capsuleStore=capsuleStore;this.factStore=factStore;this.privateEventStore=privateEventStore;this.nextBlockTimestamp=nextBlockTimestamp;this.version=version2;this.chainId=chainId;this.authwits=authwits;this.taggingSecretStrategies=taggingSecretStrategies;this.authorizeAllUtilityCallTargets=authorizeAllUtilityCallTargets;this.artifactResolver=artifactResolver;this.rootPath=rootPath;this.packageName=packageName;this.logger=createLogger("txe:top_level_context"),this.logger.debug("Entering Top Level Context")}static{__name(this,"TXEOracleTopLevelContext")}isMisc=!0;isTxe=!0;logger;contractOracleVersion;assertCompatibleOracleVersion(major2,minor){if(major2!==30){let hint=major2>30?"The contract was compiled with a newer version of Aztec.nr than this aztec cli version supports. Upgrade your aztec cli version to a compatible version.":"The contract was compiled with an older version of Aztec.nr than this aztec cli version supports. Recompile the contract with a compatible version of Aztec.nr.";throw new Error(`Incompatible aztec cli version: ${hint} See https://docs.aztec.network/errors/8 (expected oracle major version ${30}, got ${major2})`)}this.contractOracleVersion={major:major2,minor}}nonOracleFunctionGetContractOracleVersion(){return this.contractOracleVersion}getRandomField(){return Fr.random()}log(level,message,_fieldsSize,fields){if(!LogLevels[level])throw new Error(`Invalid log level: ${level}`);let levelName=LogLevels[level];return this.logger[levelName](`${applyStringFormatting(message,fields)}`,{module:`${this.logger.module}:debug_log`}),Promise.resolve()}getDefaultAddress(){return DEFAULT_ADDRESS}async getNextBlockNumber(){return BlockNumber(await this.getLastBlockNumber()+1)}getNextBlockTimestamp(){return Promise.resolve(this.nextBlockTimestamp)}async getLastBlockTimestamp(){return(await this.stateMachine.node.getBlockData("latest")).header.globalVariables.timestamp}async getLastTxEffects(){let latestBlockNumber=await this.stateMachine.archiver.getBlockNumber(),block=await this.stateMachine.archiver.getBlock({number:latestBlockNumber});if(block.body.txEffects.length!=1)throw new Error(`Expected a single transaction in the last block, found ${block.body.txEffects.length}`);let txEffects=block.body.txEffects[0],privateLogs=txEffects.privateLogs;if(privateLogs.length>64)throw new Error(`${privateLogs.length} private logs exceed max ${64}`);return{txHash:txEffects.txHash,noteHashes:txEffects.noteHashes,nullifiers:txEffects.nullifiers,privateLogs}}async syncContractNonOracleMethod(contractAddress,scope,changeSetId){if(contractAddress.equals(DEFAULT_ADDRESS)){this.logger.debug("Skipping sync in getPrivateEvents because the events correspond to the default address.");return}let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();await this.stateMachine.contractSyncService.ensureContractSynced({contract:contractAddress,functionToInvokeAfterSync:null,utilityExecutor:__name(async(call,execScopes)=>{await this.executeUtilityCall(call,{scopes:execScopes,changeSetId})},"utilityExecutor"),anchorBlockHeader,changeSetId,scopes:[scope],triggeredBy:void 0})}async getPrivateEvents(selector,contractAddress,scope,changeSetId){let events=(await this.privateEventStore.getPrivateEvents(selector,{contractAddress,scopes:[scope],fromBlock:0,toBlock:await this.getLastBlockNumber()+1},changeSetId)).map(e2=>e2.packedEvent);if(events.length>MAX_PRIVATE_EVENTS_PER_TXE_QUERY)throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);if(events.some(e2=>e2.length>MAX_PRIVATE_EVENT_LEN))throw new Error(`Some private event has length larger than maxLen ${MAX_PRIVATE_EVENT_LEN}`);return events}async advanceBlocksBy(blocks){this.logger.debug(`time traveling ${blocks} blocks`);for(let i=0;i<blocks;i++)await this.mineBlock()}advanceTimestampBy(duration3){this.logger.debug(`time traveling ${duration3} seconds`),this.nextBlockTimestamp+=duration3}deploymentNullifier(address){return siloNullifier(AztecAddress.fromNumberUnsafe(2),address.toField())}async deploy(contractPath,initializer3,args,secret,salt,deployer){let{artifact,instance}=await this.artifactResolver.resolveDeployArtifact({rootPath:this.rootPath,packageName:this.packageName,contractPath,initializer:initializer3,args,secret,salt,deployer});return await this.mineBlock({nullifiers:[await this.deploymentNullifier(instance.address)]}),secret.equals(Fr.ZERO)?(await this.contractStore.addContractInstance(instance),await this.contractStore.addContractArtifact(artifact),this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`)):await this.registerContractAndAddAccount(artifact,instance,secret),CONTRACT_INSTANCE.serialization.fn(instance).flat()}async mineDeploymentNullifiers(addresses){await this.mineBlock({nullifiers:await Promise.all(addresses.map(address=>this.deploymentNullifier(address)))})}async addAccount(secret){let{artifact,instance}=await this.artifactResolver.resolveAccountArtifact(secret);return this.registerContractAndAddAccount(artifact,instance,secret)}async registerContractAndAddAccount(artifact,instance,secret){let partialAddress=await computePartialAddress(instance);this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`),await this.contractStore.addContractInstance(instance),await this.contractStore.addContractArtifact(artifact);let completeAddress=await this.keyStore.addAccount(await deriveKeys(secret),partialAddress);return await this.accountStore.setAccount(completeAddress.address,completeAddress),await this.addressStore.addCompleteAddress(completeAddress),this.logger.debug(`Created account ${completeAddress.address}`),completeAddress}async createAccount(secret,partialAddress){let completeAddress=await this.keyStore.addAccount(await deriveKeys(secret),partialAddress);return await this.accountStore.setAccount(completeAddress.address,completeAddress),await this.addressStore.addCompleteAddress(completeAddress),this.logger.debug(`Created account ${completeAddress.address}`),completeAddress}async addAuthWitness(address,messageHash){let account=await this.accountStore.getAccount(address),ivpkMHash=await hashPublicKey(account.publicKeys.ivpkM),privateKey=await this.keyStore.getMasterSecretKey(ivpkMHash),signature=await new Schnorr().constructSignature(messageHash,privateKey),authWitness=new AuthWitness(messageHash,signature.toLimbFields());this.authwits.set(authWitness.requestHash.toString(),authWitness)}setTaggingSecretStrategies(unconstrainedStrategy,constrainedStrategy){let apply=__name((mode,strategy)=>{strategy.isSome()?this.taggingSecretStrategies.set(mode,strategy.value):this.taggingSecretStrategies.delete(mode)},"apply");apply(AppTaggingSecretKind.UNCONSTRAINED,unconstrainedStrategy),apply(AppTaggingSecretKind.CONSTRAINED,constrainedStrategy)}setAuthorizeAllUtilityCallTargets(authorizeAll){this.authorizeAllUtilityCallTargets=authorizeAll}async sendL1ToL2Message(content,secretHash,sender,recipient){let{size}=await this.stateMachine.synchronizer.getCommitted().getTreeInfo(MerkleTreeId.L1_TO_L2_MESSAGE_TREE),leafIndex=new Fr(size),message=new L1ToL2Message(new L1Actor(sender,this.chainId.toNumber()),new L2Actor(recipient,this.version.toNumber()),content,secretHash,leafIndex);return await this.mineBlock({l1ToL2Messages:[message.hash()]}),leafIndex}async mineBlock(options={}){let blockNumber=await this.getNextBlockNumber(),txEffect=TxEffect.empty();txEffect.nullifiers=[getSingleTxBlockRequestHash(blockNumber),...options.nullifiers??[]],txEffect.txHash=new TxHash(new Fr(blockNumber));let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork();await insertTxEffectIntoWorldTrees(txEffect,forkedWorldTrees,options.l1ToL2Messages??[]);let globals=makeGlobalVariables(void 0,{blockNumber,timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId}),block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await forkedWorldTrees.close(),this.logger.info(`Created block ${blockNumber} with timestamp ${block.header.globalVariables.timestamp}`),await this.stateMachine.handleL2Block(block,options.l1ToL2Messages??[])}async privateCallNewFlow(from,targetContractAddress=AztecAddress.zero(),functionSelector=FunctionSelector.empty(),args,argsHash=Fr.zero(),isStaticCall=!1,additionalScopes=[],changeSetId,authorizedUtilityCallTargets,gasSettings){let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,blockHeader);this.logger.verbose(`Executing external function ${await anchoredContractData.getDebugFunctionName(targetContractAddress,functionSelector)}@${targetContractAddress} isStaticCall=${isStaticCall}`);let artifact=await anchoredContractData.getFunctionArtifact(targetContractAddress,functionSelector);if(!artifact){let message=functionSelector.equals(await FunctionSelector.fromSignature("verify_private_authwit(Field)"))?"Found no account contract artifact for a private authwit check - use `create_contract_account` instead of `create_light_account` for authwit support.":"Function Artifact does not exist";throw new Error(message)}let scopes=from===void 0?additionalScopes:[from,...additionalScopes],utilityExecutor=__name(async(call,execScopes)=>{await this.executeUtilityCall(call,{scopes:execScopes,changeSetId})},"utilityExecutor");await this.stateMachine.contractSyncService.ensureContractSynced({contract:targetContractAddress,functionToInvokeAfterSync:functionSelector,utilityExecutor,anchorBlockHeader:blockHeader,changeSetId,scopes,triggeredBy:void 0});let blockNumber=await this.getNextBlockNumber(),msgSender=from??AztecAddress.NULL_MSG_SENDER,callContext=new CallContext(msgSender,targetContractAddress,functionSelector,isStaticCall),txContext=new TxContext(this.chainId,this.version,gasSettings),protocolNullifier=await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber)),noteCache=new ExecutionNoteCache(protocolNullifier),minRevertibleSideEffectCounter=1;await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);let taggingIndexCache=new ExecutionTaggingIndexCache,simulator=new WASMSimulator,transientArrayService=new TransientArrayService,privateExecutionOracle=new PrivateExecutionOracle({argsHash,txContext,txRequestSalt:Fr.ZERO,callContext,anchorBlockHeader:blockHeader,utilityExecutor,authWitnesses:Array.from(this.authwits.values()),capsules:[],executionCache:HashedValuesCache.create([new HashedValues(args,argsHash)]),noteCache,taggingIndexCache,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,contractSyncService:this.stateMachine.contractSyncService,changeSetId,totalPublicCalldataCount:0,sideEffectCounter:minRevertibleSideEffectCounter,scopes,senderForTags:from,simulator,txResolver:this.stateMachine.txResolver,l2TipsStore:this.stateMachine.l2TipsProvider,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook(isStaticCall?"private view":"private",authorizedUtilityCallTargets),resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies)}),transientArrayService}),result,executionResult;try{executionResult=await executePrivateFunction(simulator,privateExecutionOracle,artifact,targetContractAddress,functionSelector);let publicCallRequests=collectNested([executionResult],r2=>r2.publicInputs.publicCallRequests.getActiveItems().map(r3=>r3.inner).concat(r2.publicInputs.publicTeardownCallRequest.isEmpty()?[]:[r2.publicInputs.publicTeardownCallRequest])),publicFunctionsCalldata=await Promise.all(publicCallRequests.map(async r2=>{let calldata=await privateExecutionOracle.getHashPreimage(r2.calldataHash);return new HashedValues(calldata,r2.calldataHash)})),nonceGenerator=noteCache.getNonceGenerator();result=new PrivateExecutionResult(executionResult,nonceGenerator,publicFunctionsCalldata)}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error during private execution"))}let{publicInputs}=await generateSimulatedProvingResult(result,(addr,sel)=>anchoredContractData.getDebugFunctionName(addr,sel),this.stateMachine.node,minRevertibleSideEffectCounter),globals=makeGlobalVariables();globals.blockNumber=blockNumber,globals.timestamp=this.nextBlockTimestamp,globals.chainId=this.chainId,globals.version=this.version,globals.gasFees=GasFees.empty();let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork(),bindings=this.logger.getBindings(),contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings),guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees),config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0}),processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,new CppPublicTxSimulator(guardedMerkleTrees,contractsDB,globals,config2,bindings),new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings)),tx=await Tx.create({data:publicInputs,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:result.publicFunctionCalldata}),checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]),[processedTx]=results[0],failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);if(!processedTx.revertCode.isOK())if(processedTx.revertReason){try{await enrichPublicSimulationError(processedTx.revertReason,this.contractStore,this.stateMachine.contractClassService,await this.stateMachine.anchorBlockStore.getBlockHeader(),this.logger)}catch{}throw new Error(`Contract execution has reverted: ${processedTx.revertReason.getMessage()}`)}else throw new Error("Contract execution has reverted");let offchainEffects=collectNested([executionResult],r2=>r2.offchainEffects.map(e2=>e2.data));if(isStaticCall)return await checkpoint.revert(),await forkedWorldTrees.close(),{returnValues:executionResult.returnValues??[],offchainEffects};let txEffect=TxEffect.empty();txEffect.noteHashes=processedTx.txEffect.noteHashes,txEffect.nullifiers=processedTx.txEffect.nullifiers,txEffect.privateLogs=processedTx.txEffect.privateLogs,txEffect.publicLogs=processedTx.txEffect.publicLogs,txEffect.publicDataWrites=processedTx.txEffect.publicDataWrites,txEffect.txHash=new TxHash(new Fr(blockNumber));let l1ToL2Messages=Array(1024).fill(0).map(Fr.zero);await forkedWorldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,l1ToL2Messages);let l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);return await this.stateMachine.handleL2Block(l2Block),await forkedWorldTrees.close(),{returnValues:executionResult.returnValues??[],offchainEffects}}async publicCallNewFlow(from,targetContractAddress,calldata,isStaticCall,gasSettings){let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader);this.logger.verbose(`Executing public function ${await anchoredContractData.getDebugFunctionName(targetContractAddress,FunctionSelector.fromField(calldata[0]))}@${targetContractAddress} isStaticCall=${isStaticCall}`);let blockNumber=await this.getNextBlockNumber(),txContext=new TxContext(this.chainId,this.version,gasSettings),calldataHash=await computeCalldataHash(calldata),calldataHashedValues=new HashedValues(calldata,calldataHash),globals=makeGlobalVariables();globals.blockNumber=blockNumber,globals.timestamp=this.nextBlockTimestamp,globals.chainId=this.chainId,globals.version=this.version,globals.gasFees=GasFees.empty();let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork(),bindings2=this.logger.getBindings(),contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings2),guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees),config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0}),simulator=new CppPublicTxSimulator(guardedMerkleTrees,contractsDB,globals,config2,bindings2),processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,simulator,new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings2)),nonRevertibleAccumulatedData=PrivateToPublicAccumulatedData.empty();nonRevertibleAccumulatedData.nullifiers[0]=getSingleTxBlockRequestHash(blockNumber);let revertibleAccumulatedData=PrivateToPublicAccumulatedData.empty();revertibleAccumulatedData.publicCallRequests[0]=new PublicCallRequest(from??AztecAddress.NULL_MSG_SENDER,targetContractAddress,isStaticCall,calldataHash);let inputsForPublic=new PartialPrivateTailPublicInputsForPublic(nonRevertibleAccumulatedData,revertibleAccumulatedData,PublicCallRequest.empty()),constantData=new TxConstantData(anchorBlockHeader,txContext,Fr.zero(),Fr.zero()),txData=new PrivateKernelTailCircuitPublicInputs(constantData,new Gas(0,0),AztecAddress.zero(),0n,inputsForPublic,void 0),tx=await Tx.create({data:txData,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:[calldataHashedValues]}),checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]),[processedTx]=results[0],failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);if(!processedTx.revertCode.isOK())if(processedTx.revertReason){try{await enrichPublicSimulationError(processedTx.revertReason,this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader,this.logger)}catch{}throw new Error(`Contract execution has reverted: ${processedTx.revertReason.getMessage()}`)}else throw new Error("Contract execution has reverted");let returnValues=results[3][0].values;if(isStaticCall)return await checkpoint.revert(),await forkedWorldTrees.close(),returnValues??[];let txEffect=TxEffect.empty();txEffect.noteHashes=processedTx.txEffect.noteHashes,txEffect.nullifiers=processedTx.txEffect.nullifiers,txEffect.privateLogs=processedTx.txEffect.privateLogs,txEffect.publicLogs=processedTx.txEffect.publicLogs,txEffect.publicDataWrites=processedTx.txEffect.publicDataWrites,txEffect.txHash=new TxHash(new Fr(blockNumber));let l1ToL2Messages=Array(1024).fill(0).map(Fr.zero);await forkedWorldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,l1ToL2Messages);let l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);return await this.stateMachine.handleL2Block(l2Block),await forkedWorldTrees.close(),returnValues??[]}async executeUtilityFunction(from,targetContractAddress,functionSelector,args,changeSetId,authorizedUtilityCallTargets){let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),artifact=await new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,blockHeader).getFunctionArtifact(targetContractAddress,functionSelector);if(!artifact)throw new Error(`Cannot call ${functionSelector} as there is no artifact found at ${targetContractAddress}.`);await this.stateMachine.contractSyncService.ensureContractSynced({contract:targetContractAddress,functionToInvokeAfterSync:functionSelector,utilityExecutor:__name(async(call2,execScopes)=>{await this.executeUtilityCall(call2,{scopes:execScopes,changeSetId})},"utilityExecutor"),anchorBlockHeader:blockHeader,changeSetId,scopes:await this.keyStore.getAccounts(),triggeredBy:void 0});let call=FunctionCall.from({name:artifact.name,to:targetContractAddress,selector:functionSelector,type:FunctionType.UTILITY,hideMsgSender:!1,isStatic:!1,args,returnTypes:[]});return this.executeUtilityCall(call,{from,scopes:await this.keyStore.getAccounts(),changeSetId,authorizedUtilityCallTargets})}async executeUtilityCall(call,{from=AztecAddress.NULL_MSG_SENDER,scopes,changeSetId,authorizedUtilityCallTargets=[]}){let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader),entryPointArtifact=await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to,call.selector);if(!entryPointArtifact)throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered.`);if(entryPointArtifact.functionType!==FunctionType.UTILITY)throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);this.logger.verbose(`Executing utility function ${entryPointArtifact.name}`,{contract:call.to,selector:call.selector});try{let simulator=new WASMSimulator,utilityExecutor=__name(async(syncCall,execScopes)=>{await this.executeUtilityCall(syncCall,{scopes:execScopes,changeSetId,authorizedUtilityCallTargets})},"utilityExecutor"),oracle=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:from,contractAddress:call.to,functionSelector:call.selector,isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId,scopes,simulator,utilityExecutor,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook("utility",authorizedUtilityCallTargets)}),transientArrayService:new TransientArrayService}),acirExecutionResult=await simulator.executeUserCircuit(toACVMWitness(0,call.args),entryPointArtifact,buildACIRCallback(oracle)).catch(err=>{throw err.message=resolveAssertionMessageFromError(err,entryPointArtifact),new ExecutionError(err.message,{contractAddress:call.to,functionSelector:call.selector},extractCallStack(err,entryPointArtifact.debug),{cause:err})});return this.logger.verbose(`Utility execution for ${call.to}.${call.selector} completed`),witnessMapToFields(acirExecutionResult.returnWitness)}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error during utility execution"))}}close(){return this.logger.debug("Exiting Top Level Context"),{nextBlockTimestamp:this.nextBlockTimestamp,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets}}async getLastBlockNumber(){let block=await this.stateMachine.node.getBlock("latest");return block?block.header.globalVariables.blockNumber:BlockNumber.ZERO}buildAuthorizeUtilityCallHook(callerContext,authorizedTargets){if(this.authorizeAllUtilityCallTargets)return authorizeAllUtilityCallsHook;if(authorizedTargets.length!==0)return req=>Promise.resolve({authorized:req.callerContext===callerContext&&authorizedTargets.some(t=>t.equals(req.target))})}},authorizeAllUtilityCallsHook=__name(()=>Promise.resolve({authorized:!0}),"authorizeAllUtilityCallsHook");var TXEPrivateExecutionOracle=class extends PrivateExecutionOracle{static{__name(this,"TXEPrivateExecutionOracle")}callPrivateFunction(_targetContractAddress,_functionSelector,_argsHash,_sideEffectCounter,_isStaticCall){throw new Error("Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead")}assertValidPublicCalldata(_calldataHash){throw new Error("Enqueueing public calls is not supported in TestEnvironment::private_context")}notifyRevertiblePhaseStart(_minRevertibleSideEffectCounter){throw new Error("Enqueueing public calls is not supported in TestEnvironment::private_context")}};var UnavailableOracleError2=class extends Error{static{__name(this,"UnavailableOracleError")}constructor(oracleName){super(`${oracleName} oracles not available with the current handler`)}},RPCTranslator=class{constructor(stateHandler,oracleHandler){this.stateHandler=stateHandler;this.oracleHandler=oracleHandler}static{__name(this,"RPCTranslator")}handlerAsMisc(){if(!("isMisc"in this.oracleHandler))throw new UnavailableOracleError2("Misc");return this.oracleHandler}handlerAsUtility(){if(!("isUtility"in this.oracleHandler))throw new UnavailableOracleError2("Utility");return this.oracleHandler}handlerAsPrivate(){if(!("isPrivate"in this.oracleHandler))throw new UnavailableOracleError2("Private");return this.oracleHandler}handlerAsAvm(){if(!("isAvm"in this.oracleHandler))throw new UnavailableOracleError2("Avm");return this.oracleHandler}handlerAsTxe(){if(!("isTxe"in this.oracleHandler))throw new UnavailableOracleError2("Txe");return this.oracleHandler}aztec_txe_assertCompatibleOracleVersion(...inputs){return callTxeHandler({oracle:"aztec_txe_assertCompatibleOracleVersion",inputs,handler:__name(([major2,minor])=>{this.stateHandler.setTxeOracleVersion(major2,minor)},"handler")})}aztec_txe_setTopLevelTXEContext(){return callTxeHandler({oracle:"aztec_txe_setTopLevelTXEContext",inputs:[],handler:__name(()=>this.stateHandler.enterTopLevelState(),"handler")})}aztec_txe_setPrivateTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setPrivateTXEContext",inputs,handler:__name(([contractAddress,anchorBlockNumber,gasSettings])=>this.stateHandler.enterPrivateState(contractAddress,anchorBlockNumber,gasSettings),"handler")})}aztec_txe_setPublicTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setPublicTXEContext",inputs,handler:__name(([contractAddress])=>this.stateHandler.enterPublicState(contractAddress),"handler")})}aztec_txe_setUtilityTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setUtilityTXEContext",inputs,handler:__name(([contractAddress])=>this.stateHandler.enterUtilityState(contractAddress),"handler")})}aztec_txe_getDefaultAddress(){return callTxeHandler({oracle:"aztec_txe_getDefaultAddress",inputs:[],handler:__name(()=>this.handlerAsTxe().getDefaultAddress(),"handler")})}aztec_txe_getNextBlockNumber(){return callTxeHandler({oracle:"aztec_txe_getNextBlockNumber",inputs:[],handler:__name(()=>this.handlerAsTxe().getNextBlockNumber(),"handler")})}aztec_txe_getNextBlockTimestamp(){return callTxeHandler({oracle:"aztec_txe_getNextBlockTimestamp",inputs:[],handler:__name(()=>this.handlerAsTxe().getNextBlockTimestamp(),"handler")})}aztec_txe_advanceBlocksBy(...inputs){return callTxeHandler({oracle:"aztec_txe_advanceBlocksBy",inputs,handler:__name(([blocks])=>this.handlerAsTxe().advanceBlocksBy(blocks),"handler")})}aztec_txe_advanceTimestampBy(...inputs){return callTxeHandler({oracle:"aztec_txe_advanceTimestampBy",inputs,handler:__name(([duration3])=>this.handlerAsTxe().advanceTimestampBy(duration3),"handler")})}aztec_txe_deploy(...inputs){return callTxeHandler({oracle:"aztec_txe_deploy",inputs,handler:__name(([contractPath,initializer3,_,args,secret,salt,deployer])=>this.handlerAsTxe().deploy(contractPath,initializer3,args,secret,salt,deployer),"handler")})}aztec_txe_createAccount(...inputs){return callTxeHandler({oracle:"aztec_txe_createAccount",inputs,handler:__name(([secret,partialAddress])=>this.handlerAsTxe().createAccount(secret,partialAddress),"handler")})}aztec_txe_addAccount(...inputs){return callTxeHandler({oracle:"aztec_txe_addAccount",inputs,handler:__name(([secret])=>this.handlerAsTxe().addAccount(secret),"handler")})}aztec_txe_addAuthWitness(...inputs){return callTxeHandler({oracle:"aztec_txe_addAuthWitness",inputs,handler:__name(([address,messageHash])=>this.handlerAsTxe().addAuthWitness(address,messageHash),"handler")})}aztec_txe_sendL1ToL2Message(...inputs){return callTxeHandler({oracle:"aztec_txe_sendL1ToL2Message",inputs,handler:__name(([content,secretHash,sender,recipient])=>this.handlerAsTxe().sendL1ToL2Message(content,secretHash,sender,recipient),"handler")})}aztec_txe_setTaggingSecretStrategies(...inputs){return callTxeHandler({oracle:"aztec_txe_setTaggingSecretStrategies",inputs,handler:__name(([unconstrainedStrategy,constrainedStrategy])=>this.handlerAsTxe().setTaggingSecretStrategies(unconstrainedStrategy,constrainedStrategy),"handler")})}aztec_txe_setAuthorizeAllUtilityCallTargets(...inputs){return callTxeHandler({oracle:"aztec_txe_setAuthorizeAllUtilityCallTargets",inputs,handler:__name(([authorizeAll])=>this.handlerAsTxe().setAuthorizeAllUtilityCallTargets(authorizeAll),"handler")})}aztec_misc_assertCompatibleOracleVersion(...inputs){return callTxeHandler({oracle:"aztec_misc_assertCompatibleOracleVersion",inputs,handler:__name(([major2,minor])=>this.handlerAsMisc().assertCompatibleOracleVersion(major2,minor),"handler")})}aztec_misc_getRandomField(){return callTxeHandler({oracle:"aztec_misc_getRandomField",inputs:[],handler:__name(()=>this.handlerAsMisc().getRandomField(),"handler")})}aztec_txe_getLastBlockTimestamp(){return callTxeHandler({oracle:"aztec_txe_getLastBlockTimestamp",inputs:[],handler:__name(()=>this.handlerAsTxe().getLastBlockTimestamp(),"handler")})}aztec_txe_getLastTxEffects(){return callTxeHandler({oracle:"aztec_txe_getLastTxEffects",inputs:[],handler:__name(()=>this.handlerAsTxe().getLastTxEffects(),"handler")})}aztec_txe_getLastCallOffchainEffects(){return callTxeHandler({oracle:"aztec_txe_getLastCallOffchainEffects",inputs:[],handler:__name(()=>this.stateHandler.getLastCallOffchainEffects(),"handler")})}aztec_txe_getLastCallContext(){return callTxeHandler({oracle:"aztec_txe_getLastCallContext",inputs:[],handler:__name(()=>this.stateHandler.getLastCallContext(),"handler")})}aztec_txe_getPrivateEvents(...inputs){return callTxeHandler({oracle:"aztec_txe_getPrivateEvents",inputs,handler:__name(([selector,contractAddress,scope])=>this.stateHandler.getPrivateEvents(selector,contractAddress,scope),"handler")})}aztec_prv_setHashPreimage(...inputs){return callTxeHandler({oracle:"aztec_prv_setHashPreimage",inputs,handler:__name(([values,hash5])=>this.handlerAsPrivate().setHashPreimage(values,hash5),"handler")})}aztec_prv_getHashPreimage(...inputs){return callTxeHandler({oracle:"aztec_prv_getHashPreimage",inputs,handler:__name(([hash5])=>this.handlerAsPrivate().getHashPreimage(hash5),"handler")})}aztec_misc_log(...inputs){return callTxeHandler({oracle:"aztec_misc_log",inputs,handler:__name(([level,message,fieldsSize,fields])=>this.handlerAsMisc().log(level,message,fieldsSize,fields),"handler")})}aztec_utl_getFromPublicStorage(...inputs){return callTxeHandler({oracle:"aztec_utl_getFromPublicStorage",inputs,handler:__name(([blockHash,contractAddress,startStorageSlot,numberOfElements])=>this.handlerAsUtility().getFromPublicStorage(blockHash,contractAddress,startStorageSlot,numberOfElements),"handler")})}aztec_utl_getPublicDataWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getPublicDataWitness",inputs,handler:__name(([blockHash,leafSlot])=>this.handlerAsUtility().getPublicDataWitness(blockHash,leafSlot),"handler")})}aztec_utl_getNotes(...inputs){return callTxeHandler({oracle:"aztec_utl_getNotes",inputs,handler:__name(([owner,storageSlot,numSelects,selectByIndexes,selectByOffsets,selectByLengths,selectValues,selectComparators,sortByIndexes,sortByOffsets,sortByLengths,sortOrder,limit,offset,status,maxNotes,packedHintedNoteLength])=>this.handlerAsUtility().getNotes(owner,storageSlot,numSelects,selectByIndexes,selectByOffsets,selectByLengths,selectValues,selectComparators,sortByIndexes,sortByOffsets,sortByLengths,sortOrder,limit,offset,status,maxNotes,packedHintedNoteLength),"handler")})}aztec_prv_notifyCreatedNote(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyCreatedNote",inputs,handler:__name(([owner,storageSlot,randomness,noteTypeId,note,noteHash,counter])=>this.handlerAsPrivate().notifyCreatedNote(owner,storageSlot,randomness,noteTypeId,note,noteHash,counter),"handler")})}aztec_prv_notifyNullifiedNote(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyNullifiedNote",inputs,handler:__name(([innerNullifier,noteHash,counter])=>this.handlerAsPrivate().notifyNullifiedNote(innerNullifier,noteHash,counter),"handler")})}aztec_prv_notifyCreatedNullifier(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyCreatedNullifier",inputs,handler:__name(([innerNullifier])=>this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier),"handler")})}aztec_prv_isNullifierPending(...inputs){return callTxeHandler({oracle:"aztec_prv_isNullifierPending",inputs,handler:__name(([innerNullifier,contractAddress])=>this.handlerAsPrivate().isNullifierPending(innerNullifier,contractAddress),"handler")})}aztec_utl_getSettledNoteOrigin(...inputs){return callTxeHandler({oracle:"aztec_utl_getSettledNoteOrigin",inputs,handler:__name(([noteHash,contractAddress,noteNonce])=>this.handlerAsUtility().getSettledNoteOrigin(noteHash,contractAddress,noteNonce),"handler")})}aztec_utl_getNullifierStatuses(...inputs){return callTxeHandler({oracle:"aztec_utl_getNullifierStatuses",inputs,handler:__name(([innerNullifiers])=>this.handlerAsUtility().getNullifierStatuses(innerNullifiers),"handler")})}aztec_utl_getContractInstance(...inputs){return callTxeHandler({oracle:"aztec_utl_getContractInstance",inputs,handler:__name(([address])=>this.handlerAsUtility().getContractInstance(address),"handler")})}aztec_utl_getPublicKeysAndPartialAddress(...inputs){return callTxeHandler({oracle:"aztec_utl_getPublicKeysAndPartialAddress",inputs,handler:__name(([address])=>this.handlerAsUtility().getPublicKeysAndPartialAddress(address),"handler")})}aztec_utl_getKeyValidationRequest(...inputs){return callTxeHandler({oracle:"aztec_utl_getKeyValidationRequest",inputs,handler:__name(([pkMHash,keyIndex])=>this.handlerAsUtility().getKeyValidationRequest(pkMHash,keyIndex),"handler")})}aztec_prv_callPrivateFunction(...inputs){return callTxeHandler({oracle:"aztec_prv_callPrivateFunction",inputs,handler:__name(([contractAddress,functionSelector,argsHash,sideEffectCounter,isStaticCall])=>this.handlerAsPrivate().callPrivateFunction(contractAddress,functionSelector,argsHash,sideEffectCounter,isStaticCall),"handler")})}aztec_utl_getNullifierMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getNullifierMembershipWitness",inputs,handler:__name(([blockHash,nullifier])=>this.handlerAsUtility().getNullifierMembershipWitness(blockHash,nullifier),"handler")})}aztec_utl_getL1ToL2MembershipWitnessV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getL1ToL2MembershipWitnessV2",inputs,handler:__name(([messageHash,nullifier])=>this.handlerAsUtility().getL1ToL2MembershipWitnessV2(messageHash,nullifier),"handler")})}aztec_utl_getAuthWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getAuthWitness",inputs,handler:__name(([messageHash])=>this.handlerAsUtility().getAuthWitness(messageHash),"handler")})}aztec_prv_assertValidPublicCalldata(...inputs){return callTxeHandler({oracle:"aztec_prv_assertValidPublicCalldata",inputs,handler:__name(([calldataHash])=>this.handlerAsPrivate().assertValidPublicCalldata(calldataHash),"handler")})}aztec_prv_notifyRevertiblePhaseStart(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyRevertiblePhaseStart",inputs,handler:__name(([minRevertibleSideEffectCounter])=>this.handlerAsPrivate().notifyRevertiblePhaseStart(minRevertibleSideEffectCounter),"handler")})}aztec_prv_isExecutionInRevertiblePhase(...inputs){return callTxeHandler({oracle:"aztec_prv_isExecutionInRevertiblePhase",inputs,handler:__name(([sideEffectCounter])=>this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter),"handler")})}aztec_utl_getUtilityContext(){return callTxeHandler({oracle:"aztec_utl_getUtilityContext",inputs:[],handler:__name(()=>this.handlerAsUtility().getUtilityContext(),"handler")})}aztec_utl_getBlockHeader(...inputs){return callTxeHandler({oracle:"aztec_utl_getBlockHeader",inputs,handler:__name(([blockNumber])=>this.handlerAsUtility().getBlockHeader(blockNumber),"handler")})}aztec_utl_getNoteHashMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getNoteHashMembershipWitness",inputs,handler:__name(([blockHash,noteHash])=>this.handlerAsUtility().getNoteHashMembershipWitness(blockHash,noteHash),"handler")})}aztec_utl_getBlockHashMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getBlockHashMembershipWitness",inputs,handler:__name(([anchorBlockHash,blockHash])=>this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash,blockHash),"handler")})}aztec_utl_areBlockHashesInArchive(...inputs){return callTxeHandler({oracle:"aztec_utl_areBlockHashesInArchive",inputs,handler:__name(([anchorBlockHash,blockHashes])=>this.handlerAsUtility().areBlockHashesInArchive(anchorBlockHash,blockHashes),"handler")})}aztec_utl_getLowNullifierMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getLowNullifierMembershipWitness",inputs,handler:__name(([blockHash,nullifier])=>this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash,nullifier),"handler")})}aztec_utl_getPendingTaggedLogsV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getPendingTaggedLogsV2",inputs,handler:__name(([scope,providedSecrets])=>this.handlerAsUtility().getPendingTaggedLogsV2(scope,providedSecrets),"handler")})}aztec_utl_validateAndStoreEnqueuedNotesAndEvents(...inputs){return callTxeHandler({oracle:"aztec_utl_validateAndStoreEnqueuedNotesAndEvents",inputs,handler:__name(([noteValidationRequests,eventValidationRequests,scope])=>this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(noteValidationRequests,eventValidationRequests,scope),"handler")})}aztec_utl_getLogsByTagV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getLogsByTagV2",inputs,handler:__name(([requestArrayBaseSlot])=>this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot),"handler")})}aztec_utl_getResolvedTxs(...inputs){return callTxeHandler({oracle:"aztec_utl_getResolvedTxs",inputs,handler:__name(([requestArrayBaseSlot])=>this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot),"handler")})}aztec_utl_getTxEffects(...inputs){return callTxeHandler({oracle:"aztec_utl_getTxEffects",inputs,handler:__name(([txHashes])=>this.handlerAsUtility().getTxEffects(txHashes),"handler")})}aztec_utl_setCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_setCapsule",inputs,handler:__name(([contractAddress,slot,capsule,scope])=>this.handlerAsUtility().setCapsule(contractAddress,slot,capsule,scope),"handler")})}aztec_utl_getCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_getCapsule",inputs,handler:__name(([contractAddress,slot,tSize,scope])=>this.handlerAsUtility().getCapsule(contractAddress,slot,tSize,scope),"handler")})}aztec_utl_deleteCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_deleteCapsule",inputs,handler:__name(([contractAddress,slot,scope])=>this.handlerAsUtility().deleteCapsule(contractAddress,slot,scope),"handler")})}aztec_utl_copyCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_copyCapsule",inputs,handler:__name(([contractAddress,srcSlot,dstSlot,numEntries,scope])=>this.handlerAsUtility().copyCapsule(contractAddress,srcSlot,dstSlot,numEntries,scope),"handler")})}aztec_utl_pushEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_pushEphemeral",inputs,handler:__name(([slot,elements])=>this.handlerAsUtility().pushEphemeral(slot,elements),"handler")})}aztec_utl_popEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_popEphemeral",inputs,handler:__name(([slot])=>this.handlerAsUtility().popEphemeral(slot),"handler")})}aztec_utl_getEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_getEphemeral",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().getEphemeral(slot,index),"handler")})}aztec_utl_setEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_setEphemeral",inputs,handler:__name(([slot,index,elements])=>this.handlerAsUtility().setEphemeral(slot,index,elements),"handler")})}aztec_utl_getEphemeralLen(...inputs){return callTxeHandler({oracle:"aztec_utl_getEphemeralLen",inputs,handler:__name(([slot])=>this.handlerAsUtility().getEphemeralLen(slot),"handler")})}aztec_utl_removeEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_removeEphemeral",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().removeEphemeral(slot,index),"handler")})}aztec_utl_clearEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_clearEphemeral",inputs,handler:__name(([slot])=>this.handlerAsUtility().clearEphemeral(slot),"handler")})}aztec_utl_pushTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_pushTransient",inputs,handler:__name(([slot,elements])=>this.handlerAsUtility().pushTransient(slot,elements),"handler")})}aztec_utl_popTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_popTransient",inputs,handler:__name(([slot])=>this.handlerAsUtility().popTransient(slot),"handler")})}aztec_utl_getTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_getTransient",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().getTransient(slot,index),"handler")})}aztec_utl_setTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_setTransient",inputs,handler:__name(([slot,index,elements])=>this.handlerAsUtility().setTransient(slot,index,elements),"handler")})}aztec_utl_getTransientLen(...inputs){return callTxeHandler({oracle:"aztec_utl_getTransientLen",inputs,handler:__name(([slot])=>this.handlerAsUtility().getTransientLen(slot),"handler")})}aztec_utl_removeTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_removeTransient",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().removeTransient(slot,index),"handler")})}aztec_utl_clearTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_clearTransient",inputs,handler:__name(([slot])=>this.handlerAsUtility().clearTransient(slot),"handler")})}aztec_utl_decryptAes128(...inputs){return callTxeHandler({oracle:"aztec_utl_decryptAes128",inputs,handler:__name(([ciphertext,iv,symKey])=>this.handlerAsUtility().decryptAes128(ciphertext,iv,symKey),"handler")})}aztec_utl_getSharedSecrets(...inputs){return callTxeHandler({oracle:"aztec_utl_getSharedSecrets",inputs,handler:__name(([address,ephPksSlot,contractAddress])=>this.handlerAsUtility().getSharedSecrets(address,ephPksSlot,contractAddress),"handler")})}aztec_utl_setContractSyncCacheInvalid(...inputs){return callTxeHandler({oracle:"aztec_utl_setContractSyncCacheInvalid",inputs,handler:__name(([contractAddress,scopes])=>this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress,scopes),"handler")})}aztec_utl_emitOffchainEffect(...inputs){return callTxeHandler({oracle:"aztec_utl_emitOffchainEffect",inputs,handler:__name(([data])=>{this.stateHandler.recordOffchainEffect(data)},"handler")})}aztec_utl_recordFact(...inputs){return callTxeHandler({oracle:"aztec_utl_recordFact",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId,factTypeId,payload,originBlock])=>this.handlerAsUtility().recordFact(contractAddress,scope,factCollectionTypeId,factCollectionId,factTypeId,payload,originBlock),"handler")})}aztec_utl_deleteFactCollection(...inputs){return callTxeHandler({oracle:"aztec_utl_deleteFactCollection",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId])=>this.handlerAsUtility().deleteFactCollection(contractAddress,scope,factCollectionTypeId,factCollectionId),"handler")})}aztec_utl_getFactCollection(...inputs){return callTxeHandler({oracle:"aztec_utl_getFactCollection",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId])=>this.handlerAsUtility().getFactCollection(contractAddress,scope,factCollectionTypeId,factCollectionId),"handler")})}aztec_utl_getFactCollectionsByType(...inputs){return callTxeHandler({oracle:"aztec_utl_getFactCollectionsByType",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId])=>this.handlerAsUtility().getFactCollectionsByType(contractAddress,scope,factCollectionTypeId),"handler")})}aztec_avm_emitPublicLog(){return callTxeHandler({oracle:"aztec_avm_emitPublicLog",inputs:[],handler:__name(()=>{},"handler")})}aztec_avm_storageRead(...inputs){return callTxeHandler({oracle:"aztec_avm_storageRead",inputs,handler:__name(([slot,contractAddress])=>this.handlerAsAvm().storageRead(slot,contractAddress),"handler")})}aztec_avm_storageWrite(...inputs){return callTxeHandler({oracle:"aztec_avm_storageWrite",inputs,handler:__name(([slot,value])=>this.handlerAsAvm().storageWrite(slot,value),"handler")})}aztec_avm_getContractInstanceDeployer(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceDeployer",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceDeployer(address),"handler")})}aztec_avm_getContractInstanceClassId(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceClassId",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceClassId(address),"handler")})}aztec_avm_getContractInstanceInitializationHash(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceInitializationHash",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceInitializationHash(address),"handler")})}aztec_avm_getContractInstanceImmutablesHash(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceImmutablesHash",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceImmutablesHash(address),"handler")})}aztec_avm_sender(){return callTxeHandler({oracle:"aztec_avm_sender",inputs:[],handler:__name(()=>this.handlerAsAvm().sender(),"handler")})}aztec_avm_emitNullifier(...inputs){return callTxeHandler({oracle:"aztec_avm_emitNullifier",inputs,handler:__name(([nullifier])=>this.handlerAsAvm().emitNullifier(nullifier),"handler")})}aztec_avm_emitNoteHash(...inputs){return callTxeHandler({oracle:"aztec_avm_emitNoteHash",inputs,handler:__name(([noteHash])=>this.handlerAsAvm().emitNoteHash(noteHash),"handler")})}aztec_avm_nullifierExists(...inputs){return callTxeHandler({oracle:"aztec_avm_nullifierExists",inputs,handler:__name(([siloedNullifier])=>this.handlerAsAvm().nullifierExists(siloedNullifier),"handler")})}aztec_avm_address(){return callTxeHandler({oracle:"aztec_avm_address",inputs:[],handler:__name(()=>this.handlerAsAvm().address(),"handler")})}aztec_avm_blockNumber(){return callTxeHandler({oracle:"aztec_avm_blockNumber",inputs:[],handler:__name(()=>this.handlerAsAvm().blockNumber(),"handler")})}aztec_avm_timestamp(){return callTxeHandler({oracle:"aztec_avm_timestamp",inputs:[],handler:__name(()=>this.handlerAsAvm().timestamp(),"handler")})}aztec_avm_isStaticCall(){return callTxeHandler({oracle:"aztec_avm_isStaticCall",inputs:[],handler:__name(()=>this.handlerAsAvm().isStaticCall(),"handler")})}aztec_avm_chainId(){return callTxeHandler({oracle:"aztec_avm_chainId",inputs:[],handler:__name(()=>this.handlerAsAvm().chainId(),"handler")})}aztec_avm_version(){return callTxeHandler({oracle:"aztec_avm_version",inputs:[],handler:__name(()=>this.handlerAsAvm().version(),"handler")})}aztec_avm_returndataSize(){return callTxeHandler({oracle:"aztec_avm_returndataSize",inputs:[],handler:__name(()=>this.handlerAsAvm().returndataSize(),"handler")})}aztec_avm_returndataCopy(...inputs){return callTxeHandler({oracle:"aztec_avm_returndataCopy",inputs,handler:__name(([rdOffset,copySize])=>this.handlerAsAvm().returndataCopy(rdOffset,copySize),"handler")})}aztec_avm_call(...inputs){return callTxeHandler({oracle:"aztec_avm_call",inputs,handler:__name(([l2Gas,daGas,address,argsLength,args])=>this.handlerAsAvm().call(l2Gas,daGas,address,argsLength,args),"handler")})}aztec_avm_staticCall(...inputs){return callTxeHandler({oracle:"aztec_avm_staticCall",inputs,handler:__name(([l2Gas,daGas,address,argsLength,args])=>this.handlerAsAvm().staticCall(l2Gas,daGas,address,argsLength,args),"handler")})}aztec_avm_successCopy(){return callTxeHandler({oracle:"aztec_avm_successCopy",inputs:[],handler:__name(()=>this.handlerAsAvm().successCopy(),"handler")})}aztec_txe_privateCallNewFlow(...inputs){return callTxeHandler({oracle:"aztec_txe_privateCallNewFlow",inputs,handler:__name(([from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings])=>this.stateHandler.executePrivateCall(from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings),"handler")})}aztec_txe_executeUtilityFunction(...inputs){return callTxeHandler({oracle:"aztec_txe_executeUtilityFunction",inputs,handler:__name(([from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets])=>this.stateHandler.executeUtilityFunction(from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets),"handler")})}aztec_txe_publicCallNewFlow(...inputs){return callTxeHandler({oracle:"aztec_txe_publicCallNewFlow",inputs,handler:__name(([from,address,calldata,isStaticCall,gasSettings])=>this.stateHandler.executePublicCall(from,address,calldata,isStaticCall,gasSettings),"handler")})}aztec_prv_getSenderForTags(){return callTxeHandler({oracle:"aztec_prv_getSenderForTags",inputs:[],handler:__name(()=>this.handlerAsPrivate().getSenderForTags(),"handler")})}aztec_prv_resolveTaggingStrategy(...inputs){return callTxeHandler({oracle:"aztec_prv_resolveTaggingStrategy",inputs,handler:__name(([sender,recipient,deliveryMode])=>this.handlerAsPrivate().resolveTaggingStrategy(sender,recipient,deliveryMode),"handler")})}aztec_prv_resolveCustomRequest(...inputs){return callTxeHandler({oracle:"aztec_prv_resolveCustomRequest",inputs,handler:__name(([kind,payload])=>this.handlerAsPrivate().resolveCustomRequest(kind,payload),"handler")})}aztec_prv_getAppTaggingSecret(...inputs){return callTxeHandler({oracle:"aztec_prv_getAppTaggingSecret",inputs,handler:__name(([sender,recipient])=>this.handlerAsPrivate().getAppTaggingSecret(sender,recipient),"handler")})}aztec_prv_getNextTaggingIndex(...inputs){return callTxeHandler({oracle:"aztec_prv_getNextTaggingIndex",inputs,handler:__name(([secret,deliveryMode])=>this.handlerAsPrivate().getNextTaggingIndex(secret,deliveryMode),"handler")})}};function computeCheckpointPayloadDigest(args){let consensusPayload=new ConsensusPayload(args.header,args.archiveRoot,args.feeAssetPriceModifier,args.signatureContext);return getHashedSignaturePayloadTypedData(consensusPayload)}__name(computeCheckpointPayloadDigest,"computeCheckpointPayloadDigest");import{RollupContract,SimulationOverridesBuilder}from"@aztec/ethereum/contracts";async function buildCheckpointSimulationOverridesPlan(input){if(input.proposedCheckpointData&&input.invalidateToPendingCheckpointNumber!==void 0)throw new Error("Error in buildCheckpointSimulationOverridesPlan: proposedCheckpointData and invalidateToPendingCheckpointNumber are mutually exclusive");let builder=new SimulationOverridesBuilder,overridenChainTip=derivePendingCheckpointNumber(input)??input.checkpointedCheckpointNumber;if(builder.withChainTips({pending:overridenChainTip,proven:overridenChainTip}),input.proposedCheckpointData){let{header,archive,checkpointOutHash,feeAssetPriceModifier}=input.proposedCheckpointData;builder.withPendingArchive(archive.root),builder.withPendingTempCheckpointLogFields({headerHash:header.hash(),outHash:checkpointOutHash,slotNumber:header.slotNumber,payloadDigest:computeCheckpointPayloadDigest({header,archiveRoot:archive.root,feeAssetPriceModifier,signatureContext:input.signatureContext})});let feeHeader=await computePipelinedParentFeeHeader({checkpointNumber:input.checkpointNumber,proposedCheckpointData:input.proposedCheckpointData,rollup:input.rollup,log:input.log});feeHeader&&builder.withPendingFeeHeader(feeHeader)}return builder.build()}__name(buildCheckpointSimulationOverridesPlan,"buildCheckpointSimulationOverridesPlan");function derivePendingCheckpointNumber(input){if(input.invalidateToPendingCheckpointNumber!==void 0)return input.invalidateToPendingCheckpointNumber;if(!input.proposedCheckpointData)return;if(input.checkpointNumber<1)throw new Error(`Cannot build simulation override for checkpoint ${input.checkpointNumber}: no parent exists`);let expectedParent=CheckpointNumber(input.checkpointNumber-1);if(input.proposedCheckpointData.checkpointNumber!==expectedParent)throw new Error(`Cannot build simulation override for checkpoint ${input.checkpointNumber}: proposedCheckpointData.checkpointNumber (${input.proposedCheckpointData.checkpointNumber}) does not match expected parent ${expectedParent}`);return expectedParent}__name(derivePendingCheckpointNumber,"derivePendingCheckpointNumber");async function computePipelinedParentFeeHeader(input){if(input.checkpointNumber<2)return;let grandparentCheckpointNumber=CheckpointNumber(input.checkpointNumber-2),[grandparentCheckpoint,manaTarget]=await Promise.all([input.rollup.getCheckpoint(grandparentCheckpointNumber),input.rollup.getManaTarget()]);if(!grandparentCheckpoint?.feeHeader)throw new Error(`Grandparent checkpoint or feeHeader missing for checkpoint ${grandparentCheckpointNumber.toString()}`);return RollupContract.computeChildFeeHeader(grandparentCheckpoint.feeHeader,input.proposedCheckpointData.totalManaUsed,input.proposedCheckpointData.feeAssetPriceModifier,manaTarget)}__name(computePipelinedParentFeeHeader,"computePipelinedParentFeeHeader");var CheckpointValidationError=class extends Error{static{__name(this,"CheckpointValidationError")}checkpointNumber;slot;constructor(message,checkpointNumber,slot){super(message),this.checkpointNumber=checkpointNumber,this.slot=slot,this.name="CheckpointValidationError"}};function validateCheckpoint(checkpoint,opts){validateCheckpointStructure(checkpoint,{maxBlocksPerCheckpoint:opts.maxBlocksPerCheckpoint,allowEmptyNonFirstBlocks:opts.allowEmptyNonFirstBlocks}),validateCheckpointLimits(checkpoint,opts),validateCheckpointBlocksLimits(checkpoint,opts)}__name(validateCheckpoint,"validateCheckpoint");function validateCheckpointStructure(checkpoint,opts={}){let{maxBlocksPerCheckpoint=MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT,allowEmptyNonFirstBlocks=!1}=opts,{blocks,number:number4,slot}=checkpoint;if(blocks.length===0)throw new CheckpointValidationError("Checkpoint has no blocks",number4,slot);if(blocks.length>maxBlocksPerCheckpoint)throw new CheckpointValidationError(`Checkpoint has ${blocks.length} blocks, exceeding limit of ${maxBlocksPerCheckpoint}`,number4,slot);let firstBlock=blocks[0];if(!checkpoint.header.lastArchiveRoot.equals(firstBlock.header.lastArchive.root))throw new CheckpointValidationError("Checkpoint lastArchiveRoot does not match first block's lastArchive root",number4,slot);for(let i=0;i<blocks.length;i++){let block=blocks[i];if(block.indexWithinCheckpoint!==i)throw new CheckpointValidationError(`Block at index ${i} has indexWithinCheckpoint ${block.indexWithinCheckpoint}, expected ${i}`,number4,slot);if(block.slot!==slot)throw new CheckpointValidationError(`Block ${block.number} has slot ${block.slot}, expected ${slot} (all blocks must share the same slot)`,number4,slot);if(!checkpoint.header.matchesGlobalVariables(block.header.globalVariables))throw new CheckpointValidationError(`Block ${block.number} global variables (slot, timestamp, coinbase, feeRecipient, gasFees) do not match checkpoint header`,number4,slot);if(i>0){if(!allowEmptyNonFirstBlocks&&block.body.txEffects.length===0)throw new CheckpointValidationError(`Block ${block.number} at index ${i} has no txs; only the first block of a checkpoint may be empty`,number4,slot);let prev=blocks[i-1];if(block.number!==prev.number+1)throw new CheckpointValidationError(`Block numbers are not sequential: block at index ${i-1} has number ${prev.number}, block at index ${i} has number ${block.number}`,number4,slot);if(!block.header.lastArchive.root.equals(prev.archive.root))throw new CheckpointValidationError(`Block ${block.number} lastArchive root does not match archive root of block ${prev.number}`,number4,slot)}}}__name(validateCheckpointStructure,"validateCheckpointStructure");function validateCheckpointBlocksLimits(checkpoint,opts){let{maxL2BlockGas,maxDABlockGas,maxTxsPerBlock}=opts;if(maxL2BlockGas!==void 0)for(let block of checkpoint.blocks){let blockL2Gas=block.header.totalManaUsed.toNumber();if(blockL2Gas>maxL2BlockGas)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has L2 gas used ${blockL2Gas} exceeding limit of ${maxL2BlockGas}`,checkpoint.number,checkpoint.slot)}if(maxDABlockGas!==void 0)for(let block of checkpoint.blocks){let blockDAGas=block.computeDAGasUsed();if(blockDAGas>maxDABlockGas)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has DA gas used ${blockDAGas} exceeding limit of ${maxDABlockGas}`,checkpoint.number,checkpoint.slot)}if(maxTxsPerBlock!==void 0)for(let block of checkpoint.blocks){let blockTxCount=block.body.txEffects.length;if(blockTxCount>maxTxsPerBlock)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has ${blockTxCount} txs exceeding limit of ${maxTxsPerBlock}`,checkpoint.number,checkpoint.slot)}}__name(validateCheckpointBlocksLimits,"validateCheckpointBlocksLimits");function validateCheckpointLimits(checkpoint,opts){let{rollupManaLimit,maxTxsPerCheckpoint}=opts,maxBlobFields=6*4096,maxDAGas=MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT2;if(rollupManaLimit!==void 0){let checkpointMana=sum(checkpoint.blocks.map(block=>block.header.totalManaUsed.toNumber()));if(checkpointMana>rollupManaLimit)throw new CheckpointValidationError(`Checkpoint mana cost ${checkpointMana} exceeds rollup limit of ${rollupManaLimit}`,checkpoint.number,checkpoint.slot)}let checkpointDAGas=sum(checkpoint.blocks.map(block=>block.computeDAGasUsed()));if(checkpointDAGas>maxDAGas)throw new CheckpointValidationError(`Checkpoint DA gas cost ${checkpointDAGas} exceeds limit of ${maxDAGas}`,checkpoint.number,checkpoint.slot);let checkpointBlobFields=checkpoint.toBlobFields().length;if(checkpointBlobFields>maxBlobFields)throw new CheckpointValidationError(`Checkpoint blob field count ${checkpointBlobFields} exceeds limit of ${maxBlobFields}`,checkpoint.number,checkpoint.slot);if(maxTxsPerCheckpoint!==void 0){let checkpointTxCount=sum(checkpoint.blocks.map(block=>block.body.txEffects.length));if(checkpointTxCount>maxTxsPerCheckpoint)throw new CheckpointValidationError(`Checkpoint tx count ${checkpointTxCount} exceeds limit of ${maxTxsPerCheckpoint}`,checkpoint.number,checkpoint.slot)}}__name(validateCheckpointLimits,"validateCheckpointLimits");var ArchiverDataSourceBase=class{static{__name(this,"ArchiverDataSourceBase")}stores;l1Constants;initialHeader;initialBlockHash;genesisArchiveRoot;genesisBlock;genesisBlockData;constructor(stores,l1Constants,initialHeader,initialBlockHash,genesisArchiveRoot){this.stores=stores,this.l1Constants=l1Constants,this.initialHeader=initialHeader,this.initialBlockHash=initialBlockHash,this.genesisArchiveRoot=genesisArchiveRoot;let genesisArchive=new AppendOnlyTreeSnapshot(genesisArchiveRoot,1);this.genesisBlock=new L2Block(genesisArchive,initialHeader,Body.empty(),CheckpointNumber.ZERO,IndexWithinCheckpoint(0)),this.genesisBlockData={header:initialHeader,archive:genesisArchive,blockHash:initialBlockHash,checkpointNumber:CheckpointNumber.ZERO,indexWithinCheckpoint:IndexWithinCheckpoint(0)}}getGenesisBlockHash(){return this.initialBlockHash}getGenesisBlock(){return this.genesisBlock}getGenesisBlockData(){return this.genesisBlockData}isGenesisBlockQuery(query){return"genesis"in query}async isPruneDueAtSlot(slot){if(!this.l1Constants)throw new Error("isPruneDueAtSlot requires l1Constants");let tips=await this.getL2Tips(),proven=tips.proven.checkpoint.number;if(tips.checkpointed.checkpoint.number===proven)return!1;let oldestUnproven=await this.getCheckpointData({number:CheckpointNumber(Number(proven)+1)});if(!oldestUnproven)return!1;let slotTs=getLastL1SlotTimestampForL2Slot(slot,this.l1Constants),slotEpoch=getEpochNumberAtTimestamp(slotTs,this.l1Constants),oldestUnprovenEpoch=getEpochAtSlot(oldestUnproven.header.slotNumber,this.l1Constants),deadlineEpoch=getProofSubmissionDeadlineEpoch(oldestUnprovenEpoch,this.l1Constants);return slotEpoch>=deadlineEpoch}getCheckpointNumber(){return this.stores.blocks.getLatestCheckpointNumber()}getProvenCheckpointNumber(){return this.stores.blocks.getProvenCheckpointNumber()}async getBlockNumber(query){if(!query)return this.stores.blocks.getLatestL2BlockNumber();let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?BlockNumber.ZERO:this.stores.blocks.getBlockNumber(resolved)}resolveCheckpointQuery(query){if("number"in query)return Promise.resolve(query.number);if("slot"in query)return this.stores.blocks.getCheckpointNumberBySlot(query.slot);switch(query.tag){case"checkpointed":return this.stores.blocks.getLatestCheckpointNumber();case"proven":return this.stores.blocks.getProvenCheckpointNumber();case"finalized":return this.stores.blocks.getFinalizedCheckpointNumber()}}async getCheckpoint(query){let number4=await this.resolveCheckpointQuery(query);if(number4===void 0||number4===0)return;let data=await this.stores.blocks.getCheckpointData(number4);if(data)return this.getPublishedCheckpointFromCheckpointData(data)}async getCheckpoints(query){let checkpoints=await this.getCheckpointsData(query);return Promise.all(checkpoints.map(ch=>this.getPublishedCheckpointFromCheckpointData(ch)))}async getCheckpointData(query){let number4=await this.resolveCheckpointQuery(query);if(!(number4===void 0||number4===0))return this.stores.blocks.getCheckpointData(number4)}async getCheckpointsData(query){if("fromSlot"in query)return this.stores.blocks.getCheckpointsBySlot(query.fromSlot,query.limit,query.reverse??!1);if("from"in query)return this.stores.blocks.getRangeOfCheckpoints(query.from,query.limit);let numbers=await this.getCheckpointNumbersForEpoch(query.epoch);return numbers.length>0?this.stores.blocks.getRangeOfCheckpoints(numbers[0],numbers.length):[]}getProposedCheckpointData(query){return!query||"tag"in query?this.stores.blocks.getLastProposedCheckpoint():"number"in query?this.stores.blocks.getProposedCheckpointByNumber(query.number):this.stores.blocks.getProposedCheckpointBySlot(query.slot)}getTxEffect(txHash){return this.stores.blocks.getTxEffect(txHash)}isPendingChainInvalid(){return this.getPendingChainValidationStatus().then(status=>!status.valid)}async getPendingChainValidationStatus(){return await this.stores.blocks.getPendingChainValidationStatus()??{valid:!0}}getPrivateLogsByTags(query){return this.stores.logs.getPrivateLogsByTags(query)}getPublicLogsByTags(query){return this.stores.logs.getPublicLogsByTags(query)}getContractClass(id){return this.stores.contractClasses.getContractClass(id)}getBytecodeCommitment(id){return this.stores.contractClasses.getBytecodeCommitment(id)}getContract(address,timestamp){return this.stores.contractInstances.getContractInstance(address,timestamp)}getContractClassIds(){return this.stores.contractClasses.getContractClassIds()}getDebugFunctionName(_address,selector){return Promise.resolve(this.stores.functionNames.get(selector))}registerContractFunctionSignatures(signatures){return this.stores.functionNames.register(signatures)}getL1ToL2Messages(checkpointNumber){return this.stores.messages.getL1ToL2Messages(checkpointNumber)}getL1ToL2MessageIndex(l1ToL2Message){return this.stores.messages.getL1ToL2MessageIndex(l1ToL2Message)}async getPublishedCheckpointFromCheckpointData(checkpoint){let blocksForCheckpoint=await this.stores.blocks.getBlocksForCheckpoint(checkpoint.checkpointNumber);if(!blocksForCheckpoint)throw new Error(`Blocks for checkpoint ${checkpoint.checkpointNumber} not found`);let fullCheckpoint=new Checkpoint(checkpoint.archive,checkpoint.header,blocksForCheckpoint,checkpoint.checkpointNumber,checkpoint.feeAssetPriceModifier);return new PublishedCheckpoint(fullCheckpoint,checkpoint.l1,checkpoint.attestations)}getBlocksForSlot(slotNumber){return this.stores.blocks.getBlocksForSlot(slotNumber)}getCheckpointNumbersForEpoch(epochNumber){if(!this.l1Constants)throw new Error("L1 constants not set");let[start,end]=getSlotRangeForEpoch(epochNumber,this.l1Constants);return this.stores.blocks.getCheckpointNumbersForSlotRange(start,end)}async getBlock(query){let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?this.getGenesisBlock():this.stores.blocks.getBlock(resolved)}async getBlocks(query){let resolved=await this.resolveBlocksQuery(query);return resolved?this.stores.blocks.getBlocks(resolved):[]}async getBlockData(query){let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?this.getGenesisBlockData():this.stores.blocks.getBlockData(resolved)}async getBlocksData(query){let resolved=await this.resolveBlocksQuery(query);return resolved?this.stores.blocks.getBlocksData(resolved):[]}async resolveBlockQuery(query){if("number"in query)return query.number===BlockNumber.ZERO?{genesis:!0}:query;if("hash"in query)return query.hash.equals(this.initialBlockHash)?{genesis:!0}:query;if("archive"in query)return query.archive.equals(this.genesisArchiveRoot)?{genesis:!0}:query;let number4=await this.resolveBlockTag(query.tag);return number4===BlockNumber.ZERO?{genesis:!0}:{number:number4}}resolveBlockTag(tag){switch(tag){case"latest":case"proposed":return this.stores.blocks.getLatestL2BlockNumber();case"checkpointed":return this.stores.blocks.getCheckpointedL2BlockNumber();case"proven":return this.stores.blocks.getProvenBlockNumber();case"finalized":return this.stores.blocks.getFinalizedL2BlockNumber()}}async resolveBlocksQuery(query){if(!("epoch"in query)){if(query.from<INITIAL_L2_BLOCK_NUM2)throw new Error(`getBlocks/getBlocksData: 'from' must be >= ${INITIAL_L2_BLOCK_NUM2}, got ${query.from}. Use getBlock({number:0})/getBlockData({number:0}) for genesis-aware single-block lookups.`);return query}let checkpointNumbers=await this.getCheckpointNumbersForEpoch(query.epoch);if(checkpointNumbers.length===0)return;let firstNumber=checkpointNumbers[0],lastNumber=checkpointNumbers[checkpointNumbers.length-1],first2=await this.stores.blocks.getCheckpointData(firstNumber);if(!first2)return;let last=firstNumber===lastNumber?first2:await this.stores.blocks.getCheckpointData(lastNumber);if(!last)return;let from=BlockNumber(first2.startBlock),limit=last.startBlock+last.blockCount-first2.startBlock;return{from,limit,onlyCheckpointed:!0}}};var Operation=(function(Operation2){return Operation2[Operation2.Store=0]="Store",Operation2[Operation2.Delete=1]="Delete",Operation2})(Operation||{}),ArchiverDataStoreUpdater=class{static{__name(this,"ArchiverDataStoreUpdater")}stores;l2FrontierCache;opts;log;constructor(stores,l2FrontierCache,opts={}){this.stores=stores,this.l2FrontierCache=l2FrontierCache,this.opts=opts,this.log=createLogger("archiver:store_updater")}async addProposedBlock(block,pendingChainValidationStatus){let result=await this.stores.db.transactionAsync(async()=>(await this.stores.blocks.addProposedBlock(block),(await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs([block]),this.addContractDataToDb(block)])).every(Boolean)));return await this.l2FrontierCache?.refresh(),result}async addCheckpoints(checkpoints,pendingChainValidationStatus,promoteProposed,evictProposedFrom){let validateOpts={rollupManaLimit:this.opts?.rollupManaLimit,maxBlocksPerCheckpoint:MAX_CAPACITY_BLOCKS_PER_CHECKPOINT,allowEmptyNonFirstBlocks:!0};for(let checkpoint of checkpoints)validateCheckpoint(checkpoint.checkpoint,validateOpts);promoteProposed&&validateCheckpoint(promoteProposed.checkpoint.checkpoint,validateOpts);let result=await this.stores.db.transactionAsync(async()=>{let{prunedBlocks,lastAlreadyInsertedBlockNumber}=await this.pruneMismatchingLocalBlocks(checkpoints),newBlocks=(await this.stores.blocks.addCheckpoints(checkpoints)).flatMap(ch=>ch.checkpoint.blocks).filter(b=>lastAlreadyInsertedBlockNumber===void 0||b.number>lastAlreadyInsertedBlockNumber);return await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs(newBlocks),...newBlocks.map(block=>this.addContractDataToDb(block)),promoteProposed?this.stores.blocks.promoteProposedToCheckpointed(promoteProposed.checkpoint.checkpoint.number,promoteProposed.l1,promoteProposed.attestations,promoteProposed.checkpoint.checkpoint.archive.root):void 0,evictProposedFrom!==void 0?this.stores.blocks.evictProposedCheckpointsFrom(evictProposedFrom):void 0]),{prunedBlocks,lastAlreadyInsertedBlockNumber}});return await this.l2FrontierCache?.refresh(),result}async addProposedCheckpoint(proposedCheckpoint){let result=await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.addProposedCheckpoint(proposedCheckpoint)});return await this.l2FrontierCache?.refresh(),result}async pruneMismatchingLocalBlocks(checkpoints){let[lastCheckpointedBlockNumber,lastBlockNumber]=await Promise.all([this.stores.blocks.getCheckpointedL2BlockNumber(),this.stores.blocks.getLatestL2BlockNumber()]);if(lastBlockNumber===lastCheckpointedBlockNumber)return{prunedBlocks:void 0,lastAlreadyInsertedBlockNumber:void 0};let uncheckpointedLocalBlocks=await this.stores.blocks.getBlocksData({from:BlockNumber.add(lastCheckpointedBlockNumber,1),limit:lastBlockNumber-lastCheckpointedBlockNumber}),lastAlreadyInsertedBlockNumber;for(let publishedCheckpoint of checkpoints){let checkpointBlocks=publishedCheckpoint.checkpoint.blocks,slot=publishedCheckpoint.checkpoint.slot;if(checkpointBlocks.length===0){this.log.warn(`Checkpoint ${publishedCheckpoint.checkpoint.number} for slot ${slot} has no blocks`);continue}for(let checkpointBlock of checkpointBlocks){let blockNumber=checkpointBlock.number,existingBlock=uncheckpointedLocalBlocks.find(b=>b.header.getBlockNumber()===blockNumber),blockInfos={existingBlock:existingBlock?.header.toInspect(),checkpointBlock:checkpointBlock.toBlockInfo()};if(!existingBlock)this.log.verbose(`No local block found for checkpointed block number ${blockNumber}`,blockInfos);else if(existingBlock.archive.root.equals(checkpointBlock.archive.root))this.log.verbose(`Block number ${blockNumber} already inserted and matches checkpoint`,blockInfos),lastAlreadyInsertedBlockNumber=blockNumber;else{this.log.info(`Conflict detected at block ${blockNumber} between checkpointed and local block`,blockInfos);let prunedBlocks=await this.removeBlocksAfter(BlockNumber(blockNumber-1));return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),{prunedBlocks,lastAlreadyInsertedBlockNumber}}}let lastCheckpointBlockNumber=checkpointBlocks.at(-1).number,lastLocalBlockNumber=uncheckpointedLocalBlocks.filter(b=>b.header.getSlot()===slot).at(-1)?.header.getBlockNumber();if(lastLocalBlockNumber!==void 0&&lastLocalBlockNumber>lastCheckpointBlockNumber){this.log.warn(`Local chain for slot ${slot} ends at block ${lastLocalBlockNumber} but checkpoint ends at ${lastCheckpointBlockNumber}. Pruning blocks after block ${lastCheckpointBlockNumber}.`);let prunedBlocks=await this.removeBlocksAfter(lastCheckpointBlockNumber);return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),{prunedBlocks,lastAlreadyInsertedBlockNumber}}}return{prunedBlocks:void 0,lastAlreadyInsertedBlockNumber}}async removeUncheckpointedBlocksAfter(blockNumber){let result=await this.stores.db.transactionAsync(async()=>{let lastCheckpointedBlockNumber=await this.stores.blocks.getCheckpointedL2BlockNumber();if(blockNumber<lastCheckpointedBlockNumber)throw new Error(`Cannot remove blocks after ${blockNumber} because checkpointed blocks exist up to ${lastCheckpointedBlockNumber}`);let prunedBlocks=await this.removeBlocksAfter(blockNumber);return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),prunedBlocks});return await this.l2FrontierCache?.refresh(),result}async removeBlocksWithoutProposedCheckpointAfter(blockNumber){let result=await this.stores.db.transactionAsync(async()=>{let lastCheckpointedBlockNumber=await this.stores.blocks.getProposedCheckpointL2BlockNumber();if(blockNumber<lastCheckpointedBlockNumber)throw new Error(`Cannot remove blocks after ${blockNumber} because proposed checkpointed blocks exist up to ${lastCheckpointedBlockNumber}`);return await this.removeBlocksAfter(blockNumber)});return await this.l2FrontierCache?.refresh(),result}async evictProposedCheckpointsForPrunedBlocks(prunedBlocks){if(prunedBlocks.length===0)return;let fromCheckpointNumber=prunedBlocks[0].checkpointNumber;await this.stores.blocks.evictProposedCheckpointsFrom(fromCheckpointNumber)}async removeBlocksAfter(blockNumber){let removedBlocks=await this.stores.blocks.removeBlocksAfter(blockNumber);return await Promise.all([this.stores.logs.deleteLogs(removedBlocks),...removedBlocks.map(block=>this.removeContractDataFromDb(block))]),removedBlocks}async removeCheckpointsAfter(checkpointNumber){let result=await this.stores.db.transactionAsync(async()=>{let{blocksRemoved=[]}=await this.stores.blocks.removeCheckpointsAfter(checkpointNumber);return(await Promise.all([this.stores.blocks.setPendingChainValidationStatus({valid:!0}),...blocksRemoved.map(block=>this.removeContractDataFromDb(block)),this.stores.logs.deleteLogs(blocksRemoved)])).every(Boolean)});return await this.l2FrontierCache?.refresh(),result}async setProvenCheckpointNumber(checkpointNumber){await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.setProvenCheckpointNumber(checkpointNumber)}),await this.l2FrontierCache?.refresh()}async setFinalizedCheckpointNumber(checkpointNumber){await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.setFinalizedCheckpointNumber(checkpointNumber)}),await this.l2FrontierCache?.refresh()}addContractDataToDb(block){return this.updateContractDataOnDb(block,0)}removeContractDataFromDb(block){return this.updateContractDataOnDb(block,1)}async updateContractDataOnDb(block,operation){let contractClassLogs=block.body.txEffects.flatMap(txEffect=>txEffect.contractClassLogs),privateLogs=block.body.txEffects.flatMap(txEffect=>txEffect.privateLogs),publicLogs=block.body.txEffects.flatMap(txEffect=>txEffect.publicLogs);return(await Promise.all([this.updatePublishedContractClasses(contractClassLogs,block.number,operation),this.updateDeployedContractInstances(privateLogs,block.number,operation),this.updateUpdatedContractInstances(publicLogs,block.header.globalVariables.timestamp,operation)])).every(Boolean)}async updatePublishedContractClasses(allLogs,blockNum,operation){let contractClassPublishedEvents=allLogs.filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2));if(operation==1){let contractClasses2=contractClassPublishedEvents.map(e2=>e2.toContractClassPublic());return contractClasses2.length>0?(contractClasses2.forEach(c2=>this.log.verbose(`${Operation[operation]} contract class ${c2.id.toString()}`)),await this.stores.contractClasses.deleteContractClasses(contractClasses2,blockNum)):!0}let contractClasses=[];for(let event of contractClassPublishedEvents){let contractClass=await event.toContractClassPublicWithBytecodeCommitment(),computedClassId=await computeContractClassId({artifactHash:contractClass.artifactHash,privateFunctionsRoot:contractClass.privateFunctionsRoot,publicBytecodeCommitment:contractClass.publicBytecodeCommitment});if(!computedClassId.equals(contractClass.id)){this.log.warn(`Skipping contract class with mismatched id at block ${blockNum}. Claimed ${contractClass.id}, computed ${computedClassId}`,{blockNum,contractClassId:event.contractClassId.toString()});continue}contractClasses.push(contractClass)}return contractClasses.length>0?(contractClasses.forEach(c2=>this.log.verbose(`${Operation[operation]} contract class ${c2.id.toString()}`)),await this.stores.contractClasses.addContractClasses(contractClasses,blockNum)):!0}async updateDeployedContractInstances(allLogs,blockNum,operation){let allInstances=allLogs.filter(log2=>ContractInstancePublishedEvent.isContractInstancePublishedEvent(log2)).map(log2=>ContractInstancePublishedEvent.fromLog(log2)).map(e2=>e2.toContractInstance()),contractInstances=operation===1?allInstances:await filterAsync(allInstances,async instance=>{let computedAddress=await computeContractAddressFromInstance(instance);return computedAddress.equals(instance.address)?!0:(this.log.warn(`Found contract instance with mismatched address at block ${blockNum}. Claimed ${instance.address} but computed ${computedAddress}.`,{instanceAddress:instance.address.toString(),computedAddress:computedAddress.toString(),blockNum}),!1)});if(contractInstances.length>0){if(contractInstances.forEach(c2=>this.log.verbose(`${Operation[operation]} contract instance at ${c2.address.toString()}`)),operation==0)return await this.stores.contractInstances.addContractInstances(contractInstances,blockNum);if(operation==1)return await this.stores.contractInstances.deleteContractInstances(contractInstances)}return!0}async updateUpdatedContractInstances(allLogs,timestamp,operation){let contractUpdates=allLogs.filter(log2=>ContractInstanceUpdatedEvent.isContractInstanceUpdatedEvent(log2)).map(log2=>ContractInstanceUpdatedEvent.fromLog(log2)).map(e2=>e2.toContractInstanceUpdate());if(contractUpdates.length>0){if(contractUpdates.forEach(c2=>this.log.verbose(`${Operation[operation]} contract instance update at ${c2.address.toString()}`)),operation==0)return await this.stores.contractInstances.addContractInstanceUpdates(contractUpdates,timestamp);if(operation==1)return await this.stores.contractInstances.deleteContractInstanceUpdates(contractUpdates,timestamp)}return!0}};var CheckpointMergeRollupPrivateInputs=class _CheckpointMergeRollupPrivateInputs{static{__name(this,"CheckpointMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointMergeRollupPrivateInputs([ProofData.fromBuffer(reader,CheckpointRollupPublicInputs),ProofData.fromBuffer(reader,CheckpointRollupPublicInputs)])}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointMergeRollupPrivateInputs)}};var CheckpointRootRollupHints=class _CheckpointRootRollupHints{static{__name(this,"CheckpointRootRollupHints")}previousBlockHeader;previousArchiveSiblingPath;previousOutHash;newOutHashSiblingPath;startBlobAccumulator;finalBlobChallenges;blobFields;blobCommitments;blobsHash;constructor(previousBlockHeader,previousArchiveSiblingPath,previousOutHash,newOutHashSiblingPath,startBlobAccumulator,finalBlobChallenges,blobFields,blobCommitments,blobsHash){this.previousBlockHeader=previousBlockHeader,this.previousArchiveSiblingPath=previousArchiveSiblingPath,this.previousOutHash=previousOutHash,this.newOutHashSiblingPath=newOutHashSiblingPath,this.startBlobAccumulator=startBlobAccumulator,this.finalBlobChallenges=finalBlobChallenges,this.blobFields=blobFields,this.blobCommitments=blobCommitments,this.blobsHash=blobsHash}static from(fields){return new _CheckpointRootRollupHints(..._CheckpointRootRollupHints.getFields(fields))}static getFields(fields){return[fields.previousBlockHeader,fields.previousArchiveSiblingPath,fields.previousOutHash,fields.newOutHashSiblingPath,fields.startBlobAccumulator,fields.finalBlobChallenges,fields.blobFields,fields.blobCommitments,fields.blobsHash]}toBuffer(){return serializeToBuffer(..._CheckpointRootRollupHints.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootRollupHints(BlockHeader.fromBuffer(reader),reader.readArray(30,Fr),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(5,Fr),reader.readObject(BlobAccumulator),reader.readObject(FinalBlobBatchingChallenges),Array.from({length:4096*6},()=>Fr.fromBuffer(reader)),reader.readArray(6,BLS12Point),Fr.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootRollupHints.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootRollupHints)}},CheckpointRootRollupPrivateInputs=class _CheckpointRootRollupPrivateInputs{static{__name(this,"CheckpointRootRollupPrivateInputs")}previousRollups;hints;constructor(previousRollups,hints){this.previousRollups=previousRollups,this.hints=hints}static from(fields){return new _CheckpointRootRollupPrivateInputs(..._CheckpointRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootRollupPrivateInputs([ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,BlockRollupPublicInputs)],CheckpointRootRollupHints.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootRollupPrivateInputs)}},CheckpointRootSingleBlockRollupPrivateInputs=class _CheckpointRootSingleBlockRollupPrivateInputs{static{__name(this,"CheckpointRootSingleBlockRollupPrivateInputs")}previousRollup;hints;constructor(previousRollup,hints){this.previousRollup=previousRollup,this.hints=hints}static from(fields){return new _CheckpointRootSingleBlockRollupPrivateInputs(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootSingleBlockRollupPrivateInputs(ProofData.fromBuffer(reader,BlockRollupPublicInputs),CheckpointRootRollupHints.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootSingleBlockRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootSingleBlockRollupPrivateInputs)}},CheckpointPaddingRollupPrivateInputs=class _CheckpointPaddingRollupPrivateInputs{static{__name(this,"CheckpointPaddingRollupPrivateInputs")}constructor(){}toBuffer(){return Buffer.alloc(0)}static fromBuffer(_buffer){return new _CheckpointPaddingRollupPrivateInputs}toString(){return"0x"}static fromString(_str){return new _CheckpointPaddingRollupPrivateInputs}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointPaddingRollupPrivateInputs)}};var PublicChonkVerifierPrivateInputs=class _PublicChonkVerifierPrivateInputs{static{__name(this,"PublicChonkVerifierPrivateInputs")}hidingKernelProofData;proverId;constructor(hidingKernelProofData,proverId){this.hidingKernelProofData=hidingKernelProofData,this.proverId=proverId}static from(fields){return new _PublicChonkVerifierPrivateInputs(..._PublicChonkVerifierPrivateInputs.getFields(fields))}static getFields(fields){return[fields.hidingKernelProofData,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicChonkVerifierPrivateInputs(ProofData.fromBuffer(reader,PrivateToPublicKernelCircuitPublicInputs),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(..._PublicChonkVerifierPrivateInputs.getFields(this))}static fromString(str){return _PublicChonkVerifierPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicChonkVerifierPrivateInputs)}};var RootRollupPrivateInputs=class _RootRollupPrivateInputs{static{__name(this,"RootRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(..._RootRollupPrivateInputs.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static from(fields){return new _RootRollupPrivateInputs(..._RootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _RootRollupPrivateInputs([ProofData.fromBuffer(reader,CheckpointRollupPublicInputs),ProofData.fromBuffer(reader,CheckpointRollupPublicInputs)])}static fromString(str){return _RootRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_RootRollupPrivateInputs)}};var BlockNumberNotSequentialError=class extends Error{static{__name(this,"BlockNumberNotSequentialError")}constructor(newBlockNumber,previous){super(`Cannot insert new block ${newBlockNumber} given previous block number is ${previous??"undefined"}`),this.name="BlockNumberNotSequentialError"}},InitialCheckpointNumberNotSequentialError=class extends Error{static{__name(this,"InitialCheckpointNumberNotSequentialError")}newCheckpointNumber;previousCheckpointNumber;constructor(newCheckpointNumber,previousCheckpointNumber){super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous checkpoint number in store is ${previousCheckpointNumber??"undefined"}`),this.newCheckpointNumber=newCheckpointNumber,this.previousCheckpointNumber=previousCheckpointNumber,this.name="InitialCheckpointNumberNotSequentialError"}},CheckpointNumberNotSequentialError=class extends Error{static{__name(this,"CheckpointNumberNotSequentialError")}newCheckpointNumber;previousCheckpointNumber;constructor(newCheckpointNumber,previousCheckpointNumber,source){let qualifier=source?`${source} `:"";super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous ${qualifier}checkpoint number is ${previousCheckpointNumber??"undefined"}`),this.newCheckpointNumber=newCheckpointNumber,this.previousCheckpointNumber=previousCheckpointNumber,this.name="CheckpointNumberNotSequentialError"}},BlockCheckpointNumberNotSequentialError=class extends Error{static{__name(this,"BlockCheckpointNumberNotSequentialError")}constructor(blockNumber,blockCheckpointNumber,previous){super(`Cannot insert new block ${blockNumber} for checkpoint ${blockCheckpointNumber} given previous checkpoint number is ${previous??"undefined"}`),this.name="BlockCheckpointNumberNotSequentialError"}},BlockIndexNotSequentialError=class extends Error{static{__name(this,"BlockIndexNotSequentialError")}constructor(newBlockIndex,previousBlockIndex){super(`Cannot insert new block at checkpoint index ${newBlockIndex} given previous block index is ${previousBlockIndex??"undefined"}`),this.name="BlockIndexNotSequentialError"}},BlockArchiveNotConsistentError=class extends Error{static{__name(this,"BlockArchiveNotConsistentError")}constructor(newBlockNumber,previousBlockNumber,newBlockArchive,previousBlockArchive){super(`Cannot insert new block number ${newBlockNumber} with archive ${newBlockArchive.toString()} previous block number is ${previousBlockNumber??"undefined"}, previous archive is ${previousBlockArchive?.toString()??"undefined"}`),this.name="BlockArchiveNotConsistentError"}},CheckpointNotFoundError=class extends Error{static{__name(this,"CheckpointNotFoundError")}constructor(checkpointNumber){super(`Failed to find expected checkpoint number ${checkpointNumber}`),this.name="CheckpointNotFoundError"}},BlockNotFoundError=class extends Error{static{__name(this,"BlockNotFoundError")}constructor(blockNumber){super(`Failed to find expected block number ${blockNumber}`),this.name="BlockNotFoundError"}},BlockAlreadyCheckpointedError=class extends Error{static{__name(this,"BlockAlreadyCheckpointedError")}blockNumber;constructor(blockNumber){super(`Block ${blockNumber} has already been checkpointed with the same content`),this.blockNumber=blockNumber,this.name="BlockAlreadyCheckpointedError"}},L1ToL2MessagesNotReadyError=class extends Error{static{__name(this,"L1ToL2MessagesNotReadyError")}checkpointNumber;inboxTreeInProgress;constructor(checkpointNumber,inboxTreeInProgress){super(`Cannot get L1 to L2 messages for checkpoint ${checkpointNumber}: inbox tree in progress is ${inboxTreeInProgress}, messages not yet sealed`),this.checkpointNumber=checkpointNumber,this.inboxTreeInProgress=inboxTreeInProgress,this.name="L1ToL2MessagesNotReadyError"}};var ProposedCheckpointNotSequentialError=class extends Error{static{__name(this,"ProposedCheckpointNotSequentialError")}proposedCheckpointNumber;latestTipNumber;constructor(proposedCheckpointNumber,latestTipNumber){super(`Proposed checkpoint ${proposedCheckpointNumber} is not sequential: expected ${latestTipNumber+1} (latest tip + 1, where tip is highest of confirmed or pending)`),this.proposedCheckpointNumber=proposedCheckpointNumber,this.latestTipNumber=latestTipNumber,this.name="ProposedCheckpointNotSequentialError"}};var NoProposedCheckpointToPromoteError=class extends Error{static{__name(this,"NoProposedCheckpointToPromoteError")}constructor(){super("Cannot promote proposed checkpoint: no proposed checkpoint exists"),this.name="NoProposedCheckpointToPromoteError"}},ProposedCheckpointArchiveRootMismatchError=class extends Error{static{__name(this,"ProposedCheckpointArchiveRootMismatchError")}expectedArchiveRoot;actualArchiveRoot;constructor(expectedArchiveRoot,actualArchiveRoot){super(`Cannot promote proposed checkpoint: archive root mismatch (expected ${expectedArchiveRoot}, got ${actualArchiveRoot})`),this.expectedArchiveRoot=expectedArchiveRoot,this.actualArchiveRoot=actualArchiveRoot,this.name="ProposedCheckpointArchiveRootMismatchError"}},ProposedCheckpointPromotionNotSequentialError=class extends Error{static{__name(this,"ProposedCheckpointPromotionNotSequentialError")}proposedCheckpointNumber;latestCheckpointNumber;constructor(proposedCheckpointNumber,latestCheckpointNumber){super(`Cannot promote proposed checkpoint: not sequential (latest ${latestCheckpointNumber}, proposed ${proposedCheckpointNumber})`),this.proposedCheckpointNumber=proposedCheckpointNumber,this.latestCheckpointNumber=latestCheckpointNumber,this.name="ProposedCheckpointPromotionNotSequentialError"}},CannotOverwriteCheckpointedBlockError=class extends Error{static{__name(this,"CannotOverwriteCheckpointedBlockError")}blockNumber;lastCheckpointedBlock;constructor(blockNumber,lastCheckpointedBlock){super(`Cannot add block ${blockNumber}: would overwrite checkpointed data (checkpointed up to block ${lastCheckpointedBlock})`),this.blockNumber=blockNumber,this.lastCheckpointedBlock=lastCheckpointedBlock,this.name="CannotOverwriteCheckpointedBlockError"}};var BlockStore=class{static{__name(this,"BlockStore")}db;#blocks;#proposedCheckpoints;#checkpoints;#slotToCheckpoint;#blockTxs;#txEffects;#lastSynchedL1Block;#lastProvenCheckpoint;#lastFinalizedCheckpoint;#pendingChainValidationStatus;#contractIndex;#blockHashIndex;#blockArchiveIndex;#rejectedCheckpoints;#rejectedCheckpointsByNumber;#log;constructor(db){this.db=db,this.#log=createLogger("archiver:block_store"),this.#blocks=db.openMap("archiver_blocks"),this.#blockTxs=db.openMap("archiver_block_txs"),this.#txEffects=db.openMap("archiver_tx_effects"),this.#contractIndex=db.openMap("archiver_contract_index"),this.#blockHashIndex=db.openMap("archiver_block_hash_index"),this.#blockArchiveIndex=db.openMap("archiver_block_archive_index"),this.#lastSynchedL1Block=db.openSingleton("archiver_last_synched_l1_block"),this.#lastProvenCheckpoint=db.openSingleton("archiver_last_proven_l2_checkpoint"),this.#lastFinalizedCheckpoint=db.openSingleton("archiver_last_finalized_l2_checkpoint"),this.#pendingChainValidationStatus=db.openSingleton("archiver_pending_chain_validation_status"),this.#checkpoints=db.openMap("archiver_checkpoints"),this.#slotToCheckpoint=db.openMap("archiver_slot_to_checkpoint"),this.#proposedCheckpoints=db.openMap("archiver_proposed_checkpoints"),this.#rejectedCheckpoints=db.openMap("archiver_rejected_checkpoints"),this.#rejectedCheckpointsByNumber=db.openMap("archiver_rejected_checkpoints_by_number")}async getFinalizedL2BlockNumber(){let finalizedCheckpointNumber=await this.getFinalizedCheckpointNumber();if(finalizedCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return BlockNumber(INITIAL_L2_BLOCK_NUM2-1);let checkpointStorage=await this.#checkpoints.getAsync(finalizedCheckpointNumber);if(!checkpointStorage)throw new CheckpointNotFoundError(finalizedCheckpointNumber);return BlockNumber(checkpointStorage.startBlock+checkpointStorage.blockCount-1)}async addProposedBlock(block,opts={}){return await this.db.transactionAsync(async()=>{let blockNumber=block.number,blockCheckpointNumber=block.checkpointNumber,blockIndex=block.indexWithinCheckpoint,blockLastArchive=block.header.lastArchive.root,previousBlockNumber=await this.getLatestL2BlockNumber(),latestCheckpointNumber=await this.getLatestCheckpointNumber(),lastCheckpointedBlockNumber=await this.getCheckpointedL2BlockNumber();if(!opts.force&&blockNumber<=lastCheckpointedBlockNumber){let existingBlock=await this.getBlockData({number:BlockNumber(blockNumber)});throw existingBlock&&existingBlock.archive.root.equals(block.archive.root)?new BlockAlreadyCheckpointedError(blockNumber):new CannotOverwriteCheckpointedBlockError(blockNumber,lastCheckpointedBlockNumber)}if(!opts.force&&previousBlockNumber!==blockNumber-1)throw new BlockNumberNotSequentialError(blockNumber,previousBlockNumber);let expectedCheckpointNumber=blockCheckpointNumber-1,hasPendingAtExpected=await this.#proposedCheckpoints.hasAsync(expectedCheckpointNumber);if(!opts.force&&latestCheckpointNumber!==expectedCheckpointNumber&&!hasPendingAtExpected){let[latestPendingKey]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1})),previous=CheckpointNumber(Math.max(latestCheckpointNumber,latestPendingKey??0));throw new BlockCheckpointNumberNotSequentialError(BlockNumber(blockNumber),blockCheckpointNumber,previous)}let previousBlockResult=await this.getBlockData({number:previousBlockNumber}),expectedBlockIndex=0,previousBlockIndex;if(previousBlockResult!==void 0&&(previousBlockResult.checkpointNumber===blockCheckpointNumber&&(previousBlockIndex=previousBlockResult.indexWithinCheckpoint,expectedBlockIndex=previousBlockIndex+1),!previousBlockResult.archive.root.equals(blockLastArchive)))throw new BlockArchiveNotConsistentError(blockNumber,previousBlockResult.header.globalVariables.blockNumber,blockLastArchive,previousBlockResult.archive.root);if(!opts.force&&expectedBlockIndex!==blockIndex)throw new BlockIndexNotSequentialError(blockIndex,previousBlockIndex);return await this.addBlockToDatabase(block,block.checkpointNumber,block.indexWithinCheckpoint),!0})}async addCheckpoints(checkpoints,opts={}){return checkpoints.length===0?[]:await this.db.transactionAsync(async()=>{let firstCheckpointNumber=checkpoints[0].checkpoint.number,previousCheckpointNumber=await this.getLatestCheckpointNumber();if(!opts.force&&firstCheckpointNumber<=previousCheckpointNumber){if(checkpoints=await this.skipOrUpdateAlreadyStoredCheckpoints(checkpoints,previousCheckpointNumber),checkpoints.length===0)return[];let newFirstNumber=checkpoints[0].checkpoint.number;if(previousCheckpointNumber!==newFirstNumber-1)throw new InitialCheckpointNumberNotSequentialError(newFirstNumber,previousCheckpointNumber)}else if(previousCheckpointNumber!==firstCheckpointNumber-1&&!opts.force)throw new InitialCheckpointNumberNotSequentialError(firstCheckpointNumber,previousCheckpointNumber);let previousBlock=await this.getPreviousCheckpointBlock(checkpoints[0].checkpoint.number),previousCheckpoint;for(let checkpoint of checkpoints){if(!opts.force&&previousCheckpoint&&previousCheckpoint.checkpoint.number+1!==checkpoint.checkpoint.number)throw new CheckpointNumberNotSequentialError(checkpoint.checkpoint.number,previousCheckpoint.checkpoint.number);previousCheckpoint=checkpoint,this.validateCheckpointBlocks(checkpoint.checkpoint.blocks,previousBlock);for(let i=0;i<checkpoint.checkpoint.blocks.length;i++)await this.addBlockToDatabase(checkpoint.checkpoint.blocks[i],checkpoint.checkpoint.number,i);previousBlock=checkpoint.checkpoint.blocks.at(-1),await this.#checkpoints.set(checkpoint.checkpoint.number,{header:checkpoint.checkpoint.header.toBuffer(),archive:checkpoint.checkpoint.archive.toBuffer(),checkpointOutHash:checkpoint.checkpoint.getCheckpointOutHash().toBuffer(),l1:checkpoint.l1.toBuffer(),attestations:checkpoint.attestations.map(attestation=>attestation.toBuffer()),checkpointNumber:checkpoint.checkpoint.number,startBlock:checkpoint.checkpoint.blocks[0].number,blockCount:checkpoint.checkpoint.blocks.length,feeAssetPriceModifier:checkpoint.checkpoint.feeAssetPriceModifier.toString()}),await this.#slotToCheckpoint.set(checkpoint.checkpoint.header.slotNumber,checkpoint.checkpoint.number),await this.#proposedCheckpoints.delete(checkpoint.checkpoint.number),await this.removeRejectedCheckpointByArchiveRoot(checkpoint.checkpoint.archive.root)}return await this.advanceSynchedL1BlockNumber(checkpoints[checkpoints.length-1].l1.blockNumber),checkpoints})}async skipOrUpdateAlreadyStoredCheckpoints(checkpoints,latestStored){let i=0;for(;i<checkpoints.length&&checkpoints[i].checkpoint.number<=latestStored;i++){let incoming=checkpoints[i],stored=await this.getCheckpointData(incoming.checkpoint.number);if(!stored)break;if(!stored.archive.root.equals(incoming.checkpoint.archive.root))throw new Error(`Checkpoint ${incoming.checkpoint.number} already exists in store but with a different archive root. Stored: ${stored.archive.root}, incoming: ${incoming.checkpoint.archive.root}`);this.#log.warn(`Checkpoint ${incoming.checkpoint.number} already stored, updating L1 info (L1 block ${stored.l1.blockNumber} -> ${incoming.l1.blockNumber})`),await this.#checkpoints.set(incoming.checkpoint.number,{header:incoming.checkpoint.header.toBuffer(),archive:incoming.checkpoint.archive.toBuffer(),checkpointOutHash:incoming.checkpoint.getCheckpointOutHash().toBuffer(),l1:incoming.l1.toBuffer(),attestations:incoming.attestations.map(a=>a.toBuffer()),checkpointNumber:incoming.checkpoint.number,startBlock:incoming.checkpoint.blocks[0].number,blockCount:incoming.checkpoint.blocks.length,feeAssetPriceModifier:incoming.checkpoint.feeAssetPriceModifier.toString()}),await this.advanceSynchedL1BlockNumber(incoming.l1.blockNumber)}return checkpoints.slice(i)}async getPreviousCheckpointBlock(checkpointNumber){let previousCheckpointNumber=CheckpointNumber(checkpointNumber-1);if(previousCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return;let predecessor=await this.getProposedCheckpointByNumber(previousCheckpointNumber)??await this.getCheckpointData(previousCheckpointNumber);if(!predecessor)throw new CheckpointNotFoundError(previousCheckpointNumber);let previousBlockNumber=BlockNumber(predecessor.startBlock+predecessor.blockCount-1),previousBlock=await this.getBlock({number:previousBlockNumber});if(previousBlock===void 0)throw new BlockNotFoundError(previousBlockNumber);return previousBlock}validateCheckpointBlocks(blocks,previousBlock){for(let block of blocks){if(previousBlock){if(previousBlock.number!==block.number-1)throw new BlockNumberNotSequentialError(block.number,previousBlock.number);if(previousBlock.checkpointNumber===block.checkpointNumber){if(previousBlock.indexWithinCheckpoint!==block.indexWithinCheckpoint-1)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,previousBlock.indexWithinCheckpoint)}else if(block.indexWithinCheckpoint!==0)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,previousBlock.indexWithinCheckpoint);if(!previousBlock.archive.root.equals(block.header.lastArchive.root))throw new BlockArchiveNotConsistentError(block.number,previousBlock.number,block.header.lastArchive.root,previousBlock.archive.root)}else{if(block.indexWithinCheckpoint!==0)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,void 0);if(block.number!==INITIAL_L2_BLOCK_NUM2)throw new BlockNumberNotSequentialError(block.number,void 0)}previousBlock=block}}async addBlockToDatabase(block,checkpointNumber,indexWithinCheckpoint){let blockHash=await block.hash();await this.#blocks.set(block.number,{header:block.header.toBuffer(),blockHash:blockHash.toBuffer(),archive:block.archive.toBuffer(),checkpointNumber,indexWithinCheckpoint});for(let i=0;i<block.body.txEffects.length;i++){let txEffect={data:block.body.txEffects[i],l2BlockNumber:block.number,l2BlockHash:blockHash,txIndexInBlock:i,slotNumber:block.header.globalVariables.slotNumber};await this.#txEffects.set(txEffect.data.txHash.toString(),serializeIndexedTxEffect(txEffect))}await this.#blockTxs.set(blockHash.toString(),Buffer.concat(block.body.txEffects.map(tx=>tx.txHash.toBuffer()))),await this.#blockHashIndex.set(blockHash.toString(),block.number),await this.#blockArchiveIndex.set(block.archive.root.toString(),block.number)}async deleteBlock(blockNumber,blockStorage){await this.#blocks.delete(blockNumber);let blockHash=bufferToHex(blockStorage.blockHash),blockTxsBuffer=await this.#blockTxs.getAsync(blockHash);if(blockTxsBuffer!==void 0){let reader=BufferReader.asReader(blockTxsBuffer),txHashes=[];for(;!reader.isEmpty();)txHashes.push(reader.readObject(TxHash).toString());await Promise.all(txHashes.map(txHash=>this.deleteTxEffect(txHash,blockStorage.blockHash)))}await this.#blockTxs.delete(blockHash),await this.#blockHashIndex.delete(blockHash),await this.#blockArchiveIndex.delete(AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive).root.toString())}async deleteTxEffect(txHash,blockHash){let stored=await this.#txEffects.getAsync(txHash);if(stored===void 0){this.#log.warn(`Missing tx effect for tx ${txHash} while removing its block`,{txHash,blockHash:bufferToHex(blockHash)});return}if(!Buffer.from(stored.buffer,stored.byteOffset,32).equals(blockHash)){this.#log.warn(`Tx effect for tx ${txHash} is owned by a block other than the one being removed`,{txHash,removedBlockHash:bufferToHex(blockHash),owningBlockHash:bufferToHex(Buffer.from(stored.buffer,stored.byteOffset,32))});return}await this.#txEffects.delete(txHash)}async removeCheckpointsAfter(checkpointNumber){return await this.db.transactionAsync(async()=>{let latestCheckpointNumber=await this.getLatestCheckpointNumber();if(checkpointNumber>=latestCheckpointNumber)return this.#log.warn(`No checkpoints to remove after ${checkpointNumber} (latest is ${latestCheckpointNumber})`),{blocksRemoved:void 0};let proven=await this.getProvenCheckpointNumber();proven>checkpointNumber&&(this.#log.warn(`Updating proven checkpoint ${proven} to last valid checkpoint ${checkpointNumber}`),await this.setProvenCheckpointNumber(checkpointNumber));let lastBlockToKeep;if(checkpointNumber<=0)lastBlockToKeep=BlockNumber(INITIAL_L2_BLOCK_NUM2-1);else{let targetCheckpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!targetCheckpoint)throw new Error(`Target checkpoint ${checkpointNumber} not found in store`);lastBlockToKeep=BlockNumber(targetCheckpoint.startBlock+targetCheckpoint.blockCount-1)}let blocksRemoved=await this.removeBlocksAfter(lastBlockToKeep);for(let c2=latestCheckpointNumber;c2>checkpointNumber;c2=CheckpointNumber(c2-1)){let checkpointStorage=await this.#checkpoints.getAsync(c2);if(checkpointStorage){let slotNumber=CheckpointHeader.fromBuffer(checkpointStorage.header).slotNumber;await this.#slotToCheckpoint.delete(slotNumber)}await this.#checkpoints.delete(c2),this.#log.debug(`Removed checkpoint ${c2}`)}return await this.evictProposedCheckpointsFrom(CheckpointNumber(checkpointNumber+1)),{blocksRemoved}})}async getCheckpointData(checkpointNumber){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);if(checkpointStorage)return this.checkpointDataFromCheckpointStorage(checkpointStorage)}async getRangeOfCheckpoints(from,limit){let checkpoints=[];for(let checkpointNumber=from;checkpointNumber<from+limit;checkpointNumber++){let checkpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!checkpoint)break;checkpoints.push(this.checkpointDataFromCheckpointStorage(checkpoint))}return checkpoints}async getCheckpointsBySlot(fromSlot,limit,reverse){let range=reverse?{end:fromSlot,reverse:!0,limit}:{start:fromSlot,limit},result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync(range)){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);checkpointStorage&&result.push(this.checkpointDataFromCheckpointStorage(checkpointStorage))}return result}async getCheckpointDataForSlotRange(startSlot,endSlot){let result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync({start:startSlot,end:endSlot+1})){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);checkpointStorage&&result.push(this.checkpointDataFromCheckpointStorage(checkpointStorage))}return result}async getCheckpointNumbersForSlotRange(startSlot,endSlot){let result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync({start:startSlot,end:endSlot+1}))result.push(CheckpointNumber(checkpointNumber));return result}checkpointDataFromCheckpointStorage(checkpointStorage){return{header:CheckpointHeader.fromBuffer(checkpointStorage.header),archive:AppendOnlyTreeSnapshot.fromBuffer(checkpointStorage.archive),checkpointOutHash:Fr.fromBuffer(checkpointStorage.checkpointOutHash),checkpointNumber:CheckpointNumber(checkpointStorage.checkpointNumber),startBlock:BlockNumber(checkpointStorage.startBlock),blockCount:checkpointStorage.blockCount,feeAssetPriceModifier:BigInt(checkpointStorage.feeAssetPriceModifier),l1:L1PublishedData.fromBuffer(checkpointStorage.l1),attestations:checkpointStorage.attestations.map(buf=>CommitteeAttestation.fromBuffer(buf))}}async getBlocksForCheckpoint(checkpointNumber){let checkpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!checkpoint)return;let blocksForCheckpoint=await toArray(this.#blocks.entriesAsync({start:checkpoint.startBlock,end:checkpoint.startBlock+checkpoint.blockCount}));return(await Promise.all(blocksForCheckpoint.map(x=>this.getBlockFromBlockStorage(x[0],x[1])))).filter(isDefined)}async getBlocksForSlot(slotNumber){let blocks=[];for await(let[blockNumber,blockStorage]of this.#blocks.entriesAsync({reverse:!0})){let block=await this.getBlockFromBlockStorage(blockNumber,blockStorage),blockSlot=block?.header.globalVariables.slotNumber;if(block&&blockSlot===slotNumber)blocks.push(block);else if(blockSlot&&blockSlot<slotNumber)break}return blocks.reverse()}async removeBlocksAfter(blockNumber){return await this.db.transactionAsync(async()=>{let removedBlocks=[],latestBlockNumber=await this.getLatestL2BlockNumber();for(let bn=blockNumber+1;bn<=latestBlockNumber;bn++){let blockStorage=await this.#blocks.getAsync(bn);if(blockStorage===void 0){this.#log.warn(`Cannot remove block ${bn} from the store since we don't have it`);continue}let block=await this.getBlockFromBlockStorage(bn,blockStorage);block!==void 0?removedBlocks.push(block):this.#log.warn(`Removing block ${bn} whose body could not be fully loaded`),await this.deleteBlock(bn,blockStorage),this.#log.debug(`Removed block ${bn} ${bufferToHex(blockStorage.blockHash)}`)}return removedBlocks})}async getProvenBlockNumber(){let provenCheckpointNumber=await this.getProvenCheckpointNumber();if(provenCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return BlockNumber(INITIAL_L2_BLOCK_NUM2-1);let checkpointStorage=await this.#checkpoints.getAsync(provenCheckpointNumber);if(checkpointStorage)return BlockNumber(checkpointStorage.startBlock+checkpointStorage.blockCount-1);throw new CheckpointNotFoundError(provenCheckpointNumber)}async getLatestCheckpointNumber(){let[latestCheckpointNumber]=await toArray(this.#checkpoints.keysAsync({reverse:!0,limit:1}));return latestCheckpointNumber===void 0?CheckpointNumber(INITIAL_CHECKPOINT_NUMBER2-1):CheckpointNumber(latestCheckpointNumber)}async hasProposedCheckpoint(){let[key]=await toArray(this.#proposedCheckpoints.keysAsync({limit:1}));return key!==void 0}async deleteProposedCheckpoints(){for await(let key of this.#proposedCheckpoints.keysAsync())await this.#proposedCheckpoints.delete(key)}async promoteProposedToCheckpointed(checkpointNumber,l1,attestations,expectedArchiveRoot){return await this.db.transactionAsync(async()=>{let proposed=await this.getProposedCheckpointByNumber(checkpointNumber);if(!proposed)throw new NoProposedCheckpointToPromoteError;if(!proposed.archive.root.equals(expectedArchiveRoot))throw new ProposedCheckpointArchiveRootMismatchError(expectedArchiveRoot,proposed.archive.root);let latestCheckpointNumber=await this.getLatestCheckpointNumber();if(latestCheckpointNumber!==proposed.checkpointNumber-1)throw new ProposedCheckpointPromotionNotSequentialError(proposed.checkpointNumber,latestCheckpointNumber);await this.#checkpoints.set(proposed.checkpointNumber,{header:proposed.header.toBuffer(),archive:proposed.archive.toBuffer(),checkpointOutHash:proposed.checkpointOutHash.toBuffer(),l1:l1.toBuffer(),attestations:attestations.map(attestation=>attestation.toBuffer()),checkpointNumber:proposed.checkpointNumber,startBlock:proposed.startBlock,blockCount:proposed.blockCount,feeAssetPriceModifier:proposed.feeAssetPriceModifier.toString()}),await this.#slotToCheckpoint.set(proposed.header.slotNumber,proposed.checkpointNumber),await this.#proposedCheckpoints.delete(proposed.checkpointNumber),await this.removeRejectedCheckpointByArchiveRoot(proposed.archive.root),await this.advanceSynchedL1BlockNumber(l1.blockNumber)})}async getLastProposedCheckpoint(){let[key]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1}));if(key===void 0)return;let stored=await this.#proposedCheckpoints.getAsync(key);return stored?this.convertToProposedCheckpointData(stored):void 0}async getProposedCheckpointByNumber(n){let stored=await this.#proposedCheckpoints.getAsync(n);return stored?this.convertToProposedCheckpointData(stored):void 0}async getProposedCheckpointBySlot(slot){for await(let[,stored]of this.#proposedCheckpoints.entriesAsync())if(CheckpointHeader.fromBuffer(stored.header).slotNumber===slot)return this.convertToProposedCheckpointData(stored)}async evictProposedCheckpointsFrom(fromNumber){let keysToDelete=[];for await(let key of this.#proposedCheckpoints.keysAsync())key>=fromNumber&&keysToDelete.push(key);for(let key of keysToDelete)await this.#proposedCheckpoints.delete(key)}async getLastCheckpoint(){let latest=await this.getLastProposedCheckpoint();return latest||this.getCheckpointData(await this.getLatestCheckpointNumber())}convertToProposedCheckpointData(stored){return{checkpointNumber:CheckpointNumber(stored.checkpointNumber),header:CheckpointHeader.fromBuffer(stored.header),archive:AppendOnlyTreeSnapshot.fromBuffer(stored.archive),checkpointOutHash:Fr.fromBuffer(stored.checkpointOutHash),startBlock:BlockNumber(stored.startBlock),blockCount:stored.blockCount,totalManaUsed:BigInt(stored.totalManaUsed),feeAssetPriceModifier:BigInt(stored.feeAssetPriceModifier)}}async getProposedCheckpointNumber(){let proposed=await this.getLastCheckpoint();return proposed?CheckpointNumber(proposed.checkpointNumber):await this.getLatestCheckpointNumber()}async getProposedCheckpointL2BlockNumber(){let proposed=await this.getLastCheckpoint();return proposed?BlockNumber(proposed.startBlock+proposed.blockCount-1):await this.getCheckpointedL2BlockNumber()}async getCheckpointNumberBySlot(slot){let checkpointNumber=await this.#slotToCheckpoint.getAsync(slot);return checkpointNumber===void 0?void 0:CheckpointNumber(checkpointNumber)}async getBlock(query){let blockNumber=await this.getBlockNumber(query);if(blockNumber===void 0)return;let blockStorage=await this.#blocks.getAsync(blockNumber);if(blockStorage)return this.getBlockFromBlockStorage(blockNumber,blockStorage)}getBlocks(query){return toArray(this.iterateBlocks(query))}async getBlockData(query){let blockNumber=await this.getBlockNumber(query);if(blockNumber===void 0)return;let blockStorage=await this.#blocks.getAsync(blockNumber);if(!(!blockStorage||!blockStorage.header))return this.getBlockDataFromBlockStorage(blockStorage)}getBlocksData(query){return toArray(this.iterateBlocksData(query))}async*iterateBlocks(query){let cap=query.onlyCheckpointed?await this.getCheckpointedL2BlockNumber():void 0;for await(let[blockNumber,blockStorage]of this.getBlockStorages(query.from,query.limit)){if(cap!==void 0&&blockNumber>cap)break;let block=await this.getBlockFromBlockStorage(blockNumber,blockStorage);block&&(yield block)}}async*iterateBlocksData(query){let cap=query.onlyCheckpointed?await this.getCheckpointedL2BlockNumber():void 0;for await(let[blockNumber,blockStorage]of this.getBlockStorages(query.from,query.limit)){if(cap!==void 0&&blockNumber>cap)break;yield this.getBlockDataFromBlockStorage(blockStorage)}}async*getBlockStorages(start,limit){let expectedBlockNumber=start;for await(let[blockNumber,blockStorage]of this.#blocks.entriesAsync(this.#computeBlockRange(start,limit))){if(blockNumber!==expectedBlockNumber)throw new Error(`Block number mismatch when iterating blocks from archive (expected ${expectedBlockNumber} but got ${blockNumber})`);expectedBlockNumber++,yield[blockNumber,blockStorage]}}async getBlockNumber(query){let blockNumber;if("number"in query)blockNumber=query.number;else if("hash"in query){let n=await this.#blockHashIndex.getAsync(query.hash.toString());blockNumber=n!==void 0?BlockNumber(n):void 0}else{let n=await this.#blockArchiveIndex.getAsync(query.archive.toString());blockNumber=n!==void 0?BlockNumber(n):void 0}if(blockNumber!==void 0)return blockNumber}getBlockDataFromBlockStorage(blockStorage){return{header:BlockHeader.fromBuffer(blockStorage.header),archive:AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive),blockHash:BlockHash.fromBuffer(blockStorage.blockHash),checkpointNumber:CheckpointNumber(blockStorage.checkpointNumber),indexWithinCheckpoint:IndexWithinCheckpoint(blockStorage.indexWithinCheckpoint)}}async getBlockFromBlockStorage(blockNumber,blockStorage){let{header,archive,blockHash,checkpointNumber,indexWithinCheckpoint}=this.getBlockDataFromBlockStorage(blockStorage);header.setHash(blockHash);let blockHashString=bufferToHex(blockStorage.blockHash),blockTxsBuffer=await this.#blockTxs.getAsync(blockHashString);if(blockTxsBuffer===void 0){this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber} ${blockHash}`);return}let txEffects=[],reader=BufferReader.asReader(blockTxsBuffer);for(;!reader.isEmpty();){let txHash=reader.readObject(TxHash),txEffect=await this.#txEffects.getAsync(txHash.toString());if(txEffect===void 0){this.#log.warn(`Could not find tx effect for tx ${txHash} in block ${blockNumber}`);return}txEffects.push(deserializeIndexedTxEffect(txEffect).data)}let body=new Body(txEffects),block=new L2Block(archive,header,body,checkpointNumber,indexWithinCheckpoint);if(block.number!==blockNumber)throw new Error(`Block number mismatch when retrieving block from archive (expected ${blockNumber} but got ${block.number} with hash ${blockHashString})`);return block}async getTxEffect(txHash){let buffer=await this.#txEffects.getAsync(txHash.toString());if(buffer)return deserializeIndexedTxEffect(buffer)}async getTxLocation(txHash){let txEffect=await this.#txEffects.getAsync(txHash.toString());if(!txEffect)return;let view=Buffer.from(txEffect.buffer,txEffect.byteOffset,txEffect.byteLength),l2BlockNumber=view.readUInt32BE(32),txIndexInBlock=view.readUInt32BE(36);return[l2BlockNumber,txIndexInBlock]}getNoteHashesAndNullifiers(txHashes){return Promise.all(txHashes.map(async txHash=>{let buffer=await this.#txEffects.getAsync(txHash.toString());if(!buffer)return[[],[]];let reader=BufferReader.asReader(buffer);reader.readBytes(109);let noteHashes=reader.readVectorUint8Prefix(Fr),nullifiers=reader.readVectorUint8Prefix(Fr);return[noteHashes,nullifiers]}))}getContractLocation(contractAddress){return this.#contractIndex.getAsync(contractAddress.toString())}async getCheckpointedL2BlockNumber(){let latestCheckpointNumber=await this.getLatestCheckpointNumber(),checkpoint=await this.getCheckpointData(latestCheckpointNumber);return checkpoint?BlockNumber(checkpoint.startBlock+checkpoint.blockCount-1):BlockNumber(INITIAL_L2_BLOCK_NUM2-1)}async getLatestL2BlockNumber(){let[lastBlockNumber]=await toArray(this.#blocks.keysAsync({reverse:!0,limit:1}));return typeof lastBlockNumber=="number"?BlockNumber(lastBlockNumber):BlockNumber(INITIAL_L2_BLOCK_NUM2-1)}async getL2Frontier(genesisBlockHash){return await this.db.transactionAsync(async()=>{let genesisBlockNumber=BlockNumber(INITIAL_L2_BLOCK_NUM2-1),genesisCheckpointNumber=CheckpointNumber(INITIAL_CHECKPOINT_NUMBER2-1),genesisBlockId={number:genesisBlockNumber,hash:genesisBlockHash.toString()},genesisCheckpointId={number:genesisCheckpointNumber,hash:GENESIS_CHECKPOINT_HEADER_HASH.toString()},genesisTip={block:genesisBlockId,checkpoint:genesisCheckpointId},[latestBlockEntry]=await toArray(this.#blocks.entriesAsync({reverse:!0,limit:1})),[latestCheckpointEntry]=await toArray(this.#checkpoints.entriesAsync({reverse:!0,limit:1})),latestCheckpointNumber=latestCheckpointEntry?CheckpointNumber(latestCheckpointEntry[0]):genesisCheckpointNumber,[provenRaw,finalizedRaw]=await Promise.all([this.#lastProvenCheckpoint.getAsync(),this.#lastFinalizedCheckpoint.getAsync()]),provenCheckpointNumber=CheckpointNumber(Math.min(provenRaw??0,latestCheckpointNumber)),finalizedCheckpointNumber=CheckpointNumber(Math.min(finalizedRaw??0,provenCheckpointNumber)),checkpointStorageCache=new Map;latestCheckpointEntry&&checkpointStorageCache.set(CheckpointNumber(latestCheckpointEntry[0]),latestCheckpointEntry[1]);let loadCheckpointStorage=__name(async n=>{if(n!==0){if(!checkpointStorageCache.has(n)){let checkpointStorage=await this.#checkpoints.getAsync(n);if(!checkpointStorage)throw new CheckpointNotFoundError(n);checkpointStorageCache.set(n,checkpointStorage)}return checkpointStorageCache.get(n)}},"loadCheckpointStorage"),provenCheckpoint=await loadCheckpointStorage(provenCheckpointNumber),finalizedCheckpoint=await loadCheckpointStorage(finalizedCheckpointNumber),blockHashCache=new Map;blockHashCache.set(genesisBlockNumber,genesisBlockHash.toString()),latestBlockEntry&&blockHashCache.set(latestBlockEntry[0],BlockHash.fromBuffer(latestBlockEntry[1].blockHash).toString());let loadBlockHash=__name(async n=>{if(!blockHashCache.has(n)){let blockStorage=await this.#blocks.getAsync(n);if(!blockStorage)throw new BlockNotFoundError(n);let blockHash=BlockHash.fromBuffer(blockStorage.blockHash).toString();blockHashCache.set(n,blockHash)}return blockHashCache.get(n)},"loadBlockHash"),proposedBlockId=latestBlockEntry===void 0?genesisBlockId:{number:BlockNumber(latestBlockEntry[0]),hash:BlockHash.fromBuffer(latestBlockEntry[1].blockHash).toString()},buildTipFromCheckpoint=__name(async stored=>{if(!stored)return{tip:genesisTip,header:void 0};let blockNumber=BlockNumber(stored.startBlock+stored.blockCount-1),blockHash=await loadBlockHash(blockNumber),header=CheckpointHeader.fromBuffer(stored.header);return{tip:{block:{number:blockNumber,hash:blockHash},checkpoint:{number:CheckpointNumber(stored.checkpointNumber),hash:header.hash().toString()}},header}},"buildTipFromCheckpoint"),{tip:checkpointedTip,header:checkpointedHeader}=await buildTipFromCheckpoint(latestCheckpointEntry?.[1]),{tip:provenTip}=await buildTipFromCheckpoint(provenCheckpoint),{tip:finalizedTip}=await buildTipFromCheckpoint(finalizedCheckpoint),proposedCheckpoint=await this.getLastProposedCheckpoint(),pendingChainValidationStatus=await this.getPendingChainValidationStatus()??{valid:!0},latestBlockHeader=latestBlockEntry?BlockHeader.fromBuffer(latestBlockEntry[1].header):void 0,checkpointedCheckpoint=latestCheckpointEntry&&checkpointedHeader?{header:checkpointedHeader,l1:L1PublishedData.fromBuffer(latestCheckpointEntry[1].l1)}:void 0;if(proposedBlockId.number<checkpointedTip.block.number)throw new Error(`Inconsistent block store: latest block ${proposedBlockId.number} is behind checkpointed block ${checkpointedTip.block.number}`);if(finalizedTip.checkpoint.number>provenTip.checkpoint.number||provenTip.checkpoint.number>checkpointedTip.checkpoint.number)throw new Error(`Inconsistent checkpoint numbers in chain tips: finalized=${finalizedTip.checkpoint.number} proven=${provenTip.checkpoint.number} checkpointed=${checkpointedTip.checkpoint.number}`);if(finalizedTip.block.number>provenTip.block.number||provenTip.block.number>checkpointedTip.block.number||checkpointedTip.block.number>proposedBlockId.number)throw new Error(`Inconsistent block numbers in chain tips: finalized=${finalizedTip.block.number} proven=${provenTip.block.number} checkpointed=${checkpointedTip.block.number} proposed=${proposedBlockId.number}`);return{tips:{proposed:proposedBlockId,checkpointed:checkpointedTip,proven:provenTip,finalized:finalizedTip},proposedCheckpoint,latestBlockHeader,checkpointedCheckpoint,pendingChainValidationStatus}})}getSynchedL1BlockNumber(){return this.#lastSynchedL1Block.getAsync()}setSynchedL1BlockNumber(l1BlockNumber){return this.#lastSynchedL1Block.set(l1BlockNumber)}async addProposedCheckpoint(proposed){return await this.db.transactionAsync(async()=>{let confirmed=await this.getLatestCheckpointNumber(),[latestPendingKey]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1})),latestTip=CheckpointNumber(latestPendingKey!==void 0?Math.max(latestPendingKey,confirmed):confirmed);if(proposed.checkpointNumber!==latestTip+1)throw new ProposedCheckpointNotSequentialError(proposed.checkpointNumber,latestTip);let previousBlock=await this.getPreviousCheckpointBlock(proposed.checkpointNumber),blocks=[];for(let i=0;i<proposed.blockCount;i++){let block=await this.getBlock({number:BlockNumber(proposed.startBlock+i)});if(!block)throw new BlockNotFoundError(proposed.startBlock+i);blocks.push(block)}this.validateCheckpointBlocks(blocks,previousBlock);let archive=blocks[blocks.length-1].archive,checkpointOutHash=Checkpoint.getCheckpointOutHash(blocks);await this.#proposedCheckpoints.set(proposed.checkpointNumber,{header:proposed.header.toBuffer(),archive:archive.toBuffer(),checkpointOutHash:checkpointOutHash.toBuffer(),checkpointNumber:proposed.checkpointNumber,startBlock:proposed.startBlock,blockCount:proposed.blockCount,totalManaUsed:proposed.totalManaUsed.toString(),feeAssetPriceModifier:proposed.feeAssetPriceModifier.toString()})})}async getProvenCheckpointNumber(){return await this.db.transactionAsync(async()=>{let[latestCheckpointNumber,provenCheckpointNumber]=await Promise.all([this.getLatestCheckpointNumber(),this.#lastProvenCheckpoint.getAsync()]);return(provenCheckpointNumber??0)>latestCheckpointNumber?latestCheckpointNumber:CheckpointNumber(provenCheckpointNumber??0)})}async setProvenCheckpointNumber(checkpointNumber){return await this.#lastProvenCheckpoint.set(checkpointNumber)}async getFinalizedCheckpointNumber(){return await this.db.transactionAsync(async()=>{let[provenCheckpointNumber,finalizedCheckpointNumber]=await Promise.all([this.getProvenCheckpointNumber(),this.#lastFinalizedCheckpoint.getAsync()]);return(finalizedCheckpointNumber??0)>provenCheckpointNumber?provenCheckpointNumber:CheckpointNumber(finalizedCheckpointNumber??0)})}setFinalizedCheckpointNumber(checkpointNumber){return this.#lastFinalizedCheckpoint.set(checkpointNumber)}#computeBlockRange(start,limit){if(limit<1)throw new Error(`Invalid limit: ${limit}`);if(start<INITIAL_L2_BLOCK_NUM2)throw new Error(`Invalid start: ${start}`);return{start,limit}}async getPendingChainValidationStatus(){let buffer=await this.#pendingChainValidationStatus.getAsync();if(buffer)return deserializeValidateCheckpointResult(buffer)}async setPendingChainValidationStatus(status){if(status){let buffer=serializeValidateCheckpointResult(status);await this.#pendingChainValidationStatus.set(buffer)}else await this.#pendingChainValidationStatus.delete()}async addRejectedCheckpoint(entry){let archiveRootHex=entry.archiveRoot.toString();await this.#rejectedCheckpoints.set(archiveRootHex,{checkpointNumber:entry.checkpointNumber,archiveRoot:entry.archiveRoot.toBuffer(),parentArchiveRoot:entry.parentArchiveRoot.toBuffer(),slotNumber:entry.slotNumber,l1:entry.l1.toBuffer(),reason:entry.reason}),await this.#rejectedCheckpointsByNumber.set(entry.checkpointNumber,archiveRootHex),await this.advanceSynchedL1BlockNumber(entry.l1.blockNumber)}async getRejectedCheckpointByArchiveRoot(archiveRoot){let stored=await this.#rejectedCheckpoints.getAsync(archiveRoot.toString());return stored?this.rejectedCheckpointFromStorage(stored):void 0}async getRejectedCheckpointByNumber(checkpointNumber){let archiveRootHex=await this.#rejectedCheckpointsByNumber.getAsync(checkpointNumber);if(archiveRootHex===void 0)return;let stored=await this.#rejectedCheckpoints.getAsync(archiveRootHex);return stored?this.rejectedCheckpointFromStorage(stored):void 0}async getLatestRejectedCheckpointNumber(){let[latest]=await toArray(this.#rejectedCheckpointsByNumber.keysAsync({reverse:!0,limit:1}));return CheckpointNumber(latest??INITIAL_CHECKPOINT_NUMBER2-1)}async removeRejectedCheckpointByArchiveRoot(archiveRoot){let archiveRootHex=archiveRoot.toString(),stored=await this.#rejectedCheckpoints.getAsync(archiveRootHex);await this.#rejectedCheckpoints.delete(archiveRootHex),stored&&await this.#rejectedCheckpointsByNumber.getAsync(stored.checkpointNumber)===archiveRootHex&&await this.#rejectedCheckpointsByNumber.delete(stored.checkpointNumber)}async advanceSynchedL1BlockNumber(l1BlockNumber){let current=await this.#lastSynchedL1Block.getAsync();(current===void 0||l1BlockNumber>current)&&await this.#lastSynchedL1Block.set(l1BlockNumber)}rejectedCheckpointFromStorage(stored){return{checkpointNumber:CheckpointNumber(stored.checkpointNumber),archiveRoot:Fr.fromBuffer(stored.archiveRoot),parentArchiveRoot:Fr.fromBuffer(stored.parentArchiveRoot),slotNumber:SlotNumber(stored.slotNumber),l1:L1PublishedData.fromBuffer(stored.l1),reason:stored.reason}}};var ContractClassStore=class{static{__name(this,"ContractClassStore")}db;#contractClasses;#bytecodeCommitments;constructor(db){this.db=db,this.#contractClasses=db.openMap("archiver_contract_classes"),this.#bytecodeCommitments=db.openMap("archiver_bytecode_commitments")}async addContractClasses(data,blockNumber){return(await Promise.all(data.map(c2=>this.addContractClass(c2,c2.publicBytecodeCommitment,blockNumber)))).every(Boolean)}async deleteContractClasses(data,blockNumber){return(await Promise.all(data.map(c2=>this.deleteContractClass(c2,blockNumber)))).every(Boolean)}async addContractClass(contractClass,bytecodeCommitment,blockNumber){await this.db.transactionAsync(async()=>{let key=contractClass.id.toString(),existing=await this.#contractClasses.getAsync(key);if(existing!==void 0){if(isProtocolContractClass(contractClass.id)||deserializeContractClassPublic(existing).l2BlockNumber===blockNumber)return;throw new Error(`Contract class ${key} already exists, cannot add again at block ${blockNumber}`)}await this.#contractClasses.set(key,serializeContractClassPublic({...contractClass,l2BlockNumber:blockNumber})),await this.#bytecodeCommitments.set(key,bytecodeCommitment.toBuffer())})}async deleteContractClass(contractClass,blockNumber){if(isProtocolContractClass(contractClass.id))return;let restoredContractClass=await this.#contractClasses.getAsync(contractClass.id.toString());restoredContractClass&&deserializeContractClassPublic(restoredContractClass).l2BlockNumber>=blockNumber&&await this.db.transactionAsync(async()=>{await this.#contractClasses.delete(contractClass.id.toString()),await this.#bytecodeCommitments.delete(contractClass.id.toString())})}async getContractClass(id){let contractClass=await this.#contractClasses.getAsync(id.toString());return contractClass&&{...deserializeContractClassPublic(contractClass),id}}async getBytecodeCommitment(id){let value=await this.#bytecodeCommitments.getAsync(id.toString());return value===void 0?void 0:Fr.fromBuffer(value)}async getContractClassIds(){return(await toArray(this.#contractClasses.keysAsync())).map(key=>Fr.fromHexString(key))}};function serializeContractClassPublic(contractClass){return serializeToBuffer(contractClass.l2BlockNumber,numToUInt8(contractClass.version),contractClass.artifactHash,contractClass.packedBytecode.length,contractClass.packedBytecode,contractClass.privateFunctionsRoot)}__name(serializeContractClassPublic,"serializeContractClassPublic");function deserializeContractClassPublic(buffer){let reader=BufferReader.asReader(buffer);return{l2BlockNumber:reader.readNumber(),version:reader.readUInt8(),artifactHash:reader.readObject(Fr),packedBytecode:reader.readBuffer(),privateFunctionsRoot:reader.readObject(Fr)}}__name(deserializeContractClassPublic,"deserializeContractClassPublic");var ContractInstanceStore=class{static{__name(this,"ContractInstanceStore")}db;#contractInstances;#contractInstancePublishedAt;#contractInstanceUpdates;constructor(db){this.db=db,this.#contractInstances=db.openMap("archiver_contract_instances"),this.#contractInstancePublishedAt=db.openMap("archiver_contract_instances_publication_block_number"),this.#contractInstanceUpdates=db.openMap("archiver_contract_instance_updates")}async addContractInstances(data,blockNumber){return(await Promise.all(data.map(c2=>this.addContractInstance(c2,blockNumber)))).every(Boolean)}async deleteContractInstances(data){return(await Promise.all(data.map(c2=>this.deleteContractInstance(c2)))).every(Boolean)}async addContractInstanceUpdates(data,timestamp){return(await Promise.all(data.map((update,logIndex)=>this.addContractInstanceUpdate(update,timestamp,logIndex)))).every(Boolean)}async deleteContractInstanceUpdates(data,timestamp){return(await Promise.all(data.map((update,logIndex)=>this.deleteContractInstanceUpdate(update,timestamp,logIndex)))).every(Boolean)}addContractInstance(contractInstance,blockNumber){return this.db.transactionAsync(async()=>{let key=contractInstance.address.toString();if(await this.#contractInstances.hasAsync(key)){if(isProtocolContract(contractInstance.address))return;let existingBlockNumber=await this.#contractInstancePublishedAt.getAsync(key);if(existingBlockNumber===blockNumber)return;throw new Error(`Contract instance at ${key} already exists (deployed at block ${existingBlockNumber}), cannot add again at block ${blockNumber}`)}await this.#contractInstances.set(key,new SerializableContractInstance(contractInstance).toBuffer()),await this.#contractInstancePublishedAt.set(key,blockNumber)})}deleteContractInstance(contractInstance){return isProtocolContract(contractInstance.address)?Promise.resolve():this.db.transactionAsync(async()=>{await this.#contractInstances.delete(contractInstance.address.toString()),await this.#contractInstancePublishedAt.delete(contractInstance.address.toString())})}getUpdateKey(contractAddress,timestamp,logIndex){return logIndex===void 0?[contractAddress.toString(),timestamp.toString()]:[contractAddress.toString(),timestamp.toString(),logIndex]}addContractInstanceUpdate(contractInstanceUpdate,timestamp,logIndex){return this.#contractInstanceUpdates.set(this.getUpdateKey(contractInstanceUpdate.address,timestamp,logIndex),new SerializableContractInstanceUpdate(contractInstanceUpdate).toBuffer())}deleteContractInstanceUpdate(contractInstanceUpdate,timestamp,logIndex){return this.#contractInstanceUpdates.delete(this.getUpdateKey(contractInstanceUpdate.address,timestamp,logIndex))}async getCurrentContractInstanceClassId(address,timestamp,originalClassId){let serializedUpdate=await first(this.#contractInstanceUpdates.valuesAsync({reverse:!0,start:this.getUpdateKey(address,0n),end:this.getUpdateKey(address,timestamp+1n),limit:1}));if(serializedUpdate===void 0)return originalClassId;let update=SerializableContractInstanceUpdate.fromBuffer(serializedUpdate);return timestamp<update.timestampOfChange?update.prevContractClassId.isZero()?originalClassId:update.prevContractClassId:update.newContractClassId}async getContractInstance(address,timestamp){let contractInstance=await this.#contractInstances.getAsync(address.toString());if(!contractInstance)return;let instance=SerializableContractInstance.fromBuffer(contractInstance).withAddress(address);return instance.currentContractClassId=await this.getCurrentContractInstanceClassId(address,timestamp,instance.originalContractClassId),instance}getContractInstanceDeploymentBlockNumber(address){return this.#contractInstancePublishedAt.getAsync(address.toString())}};var MAX_FUNCTION_SIGNATURES=1e3,MAX_FUNCTION_NAME_LEN=256,FunctionNamesCache=class{static{__name(this,"FunctionNamesCache")}log=createLogger("archiver:data-stores");names=new Map;async register(signatures){for(let sig of signatures){if(this.names.size>MAX_FUNCTION_SIGNATURES)return;try{let selector=await FunctionSelector.fromSignature(sig);this.names.set(selector.toString(),sig.slice(0,sig.indexOf("(")).slice(0,MAX_FUNCTION_NAME_LEN))}catch{this.log.warn(`Failed to parse signature: ${sig}. Ignoring`)}}}get(selector){return this.names.get(selector.toString())}};var NUMERIC_HEX_LEN=8,SEP="-",HEX_SENTINEL="g";function fieldHex(value){return value.toString().slice(2)}__name(fieldHex,"fieldHex");function tagHexForLog(fields){return fields.length>0?fieldHex(fields[0]):""}__name(tagHexForLog,"tagHexForLog");function u32Hex(n){return n.toString(16).padStart(NUMERIC_HEX_LEN,"0")}__name(u32Hex,"u32Hex");function encodeKey(prefix,blockNumber,txIndex,logIndex){return`${prefix}${SEP}${u32Hex(blockNumber)}${SEP}${u32Hex(txIndex)}${SEP}${u32Hex(logIndex)}`}__name(encodeKey,"encodeKey");function decodeKeyTail(key){let parts=key.split(SEP),len=parts.length;return{blockNumber:BlockNumber(parseInt(parts[len-3],16)),txIndexWithinBlock:parseInt(parts[len-2],16),logIndexWithinTx:parseInt(parts[len-1],16)}}__name(decodeKeyTail,"decodeKeyTail");function endOfTagRange(prefix,upperBlockExclusive){return upperBlockExclusive===void 0?`${prefix}${SEP}${HEX_SENTINEL}`:encodeKey(prefix,upperBlockExclusive,0,0)}__name(endOfTagRange,"endOfTagRange");function endOfTxRange(prefix,txBlk,txIdx){return`${prefix}${SEP}${u32Hex(txBlk)}${SEP}${u32Hex(txIdx)}${SEP}${HEX_SENTINEL}`}__name(endOfTxRange,"endOfTxRange");function incKey(key){return key+HEX_SENTINEL}__name(incKey,"incKey");function encodeValue(value){let head=Buffer.allocUnsafe(76);value.txHash.toBuffer().copy(head,0),value.blockHash.toBuffer().copy(head,32),head.writeBigUInt64BE(value.blockTimestamp,64),head.writeUInt32BE(value.logData.length,72);let fieldBufs=value.logData.map(f=>f.toBuffer());return Buffer.concat([head,...fieldBufs])}__name(encodeValue,"encodeValue");function decodeValue(buffer){let buf=Buffer.isBuffer(buffer)?buffer:Buffer.from(buffer.buffer,buffer.byteOffset,buffer.byteLength),off=0,txHash=TxHash.fromBuffer(buf.subarray(off,off+32));off+=32;let blockHash=BlockHash.fromBuffer(buf.subarray(off,off+32));off+=32;let blockTimestamp=buf.readBigUInt64BE(off);off+=8;let logDataLen=buf.readUInt32BE(off);off+=4;let logData=new Array(logDataLen);for(let i=0;i<logDataLen;i++)logData[i]=Fr.fromBuffer(buf.subarray(off,off+32)),off+=32;return{txHash,blockHash,blockTimestamp,logData}}__name(decodeValue,"decodeValue");function encodePublicPrefix(contractHex,tagHex){return`${contractHex}${SEP}${tagHex}`}__name(encodePublicPrefix,"encodePublicPrefix");var LogStore=class _LogStore{static{__name(this,"LogStore")}db;blockStore;genesisBlockHash;#privateLogs;#publicLogs;#privateKeysByBlock;#publicKeysByBlock;#log;constructor(db,blockStore,genesisBlockHash){this.db=db,this.blockStore=blockStore,this.genesisBlockHash=genesisBlockHash,this.#log=createLogger("archiver:log_store"),this.#privateLogs=db.openMap("archiver_private_logs"),this.#publicLogs=db.openMap("archiver_public_logs"),this.#privateKeysByBlock=db.openMap("archiver_private_log_keys_by_block"),this.#publicKeysByBlock=db.openMap("archiver_public_log_keys_by_block")}addLogs(blocks){return this.db.transactionAsync(async()=>{for(let block of blocks){let blockHash=await block.hash(),blockNumber=block.number,blockTimestamp=block.timestamp,privateKeys=[],privateValues=[],publicKeys=[],publicValues=[];for(let txIndexWithinBlock=0;txIndexWithinBlock<block.body.txEffects.length;txIndexWithinBlock++){let txEffect=block.body.txEffects[txIndexWithinBlock],txHash=txEffect.txHash,privateLogIndexWithinTx=0,publicLogIndexWithinTx=0;for(let log2 of txEffect.privateLogs){let tagHex=tagHexForLog(log2.fields),key=encodeKey(tagHex,blockNumber,txIndexWithinBlock,privateLogIndexWithinTx),value=encodeValue({txHash,blockHash,blockTimestamp,logData:log2.getEmittedFields()});privateKeys.push(key),privateValues.push(value),privateLogIndexWithinTx++}for(let log2 of txEffect.publicLogs){let contractHex=fieldHex(log2.contractAddress),tagHex=tagHexForLog(log2.fields),key=encodeKey(encodePublicPrefix(contractHex,tagHex),blockNumber,txIndexWithinBlock,publicLogIndexWithinTx),value=encodeValue({txHash,blockHash,blockTimestamp,logData:log2.getEmittedFields()});publicKeys.push(key),publicValues.push(value),publicLogIndexWithinTx++}}for(let i=0;i<privateKeys.length;i++)await this.#privateLogs.set(privateKeys[i],privateValues[i]);for(let i=0;i<publicKeys.length;i++)await this.#publicLogs.set(publicKeys[i],publicValues[i]);await this.#privateKeysByBlock.set(blockNumber,privateKeys),await this.#publicKeysByBlock.set(blockNumber,publicKeys),this.#log.debug(`Indexed logs for block ${blockNumber}`,{blockNumber,privateCount:privateKeys.length,publicCount:publicKeys.length})}return!0})}deleteLogs(blocks){return this.db.transactionAsync(async()=>{for(let block of blocks){let blockNumber=block.number,[privateKeys,publicKeys]=await Promise.all([this.#privateKeysByBlock.getAsync(blockNumber),this.#publicKeysByBlock.getAsync(blockNumber)]);if(privateKeys){for(let key of privateKeys)await this.#privateLogs.delete(key);await this.#privateKeysByBlock.delete(blockNumber)}if(publicKeys){for(let key of publicKeys)await this.#publicLogs.delete(key);await this.#publicKeysByBlock.delete(blockNumber)}}return!0})}getPrivateLogsByTags(query){return _LogStore.#validateQuery(query),this.db.transactionAsync(()=>this.#runQuery(query,void 0))}getPublicLogsByTags(query){return _LogStore.#validateQuery(query),this.db.transactionAsync(()=>this.#runQuery(query,fieldHex(query.contractAddress)))}static#validateQuery(query){if(query.txHash!==void 0&&(query.fromBlock!==void 0||query.toBlock!==void 0))throw new Error("`txHash` is mutually exclusive with `fromBlock`/`toBlock`")}async#runQuery(query,contractHex){let isPublic=contractHex!==void 0,tags=query.tags??[],primaryMap=isPublic?this.#publicLogs:this.#privateLogs,referenceBlockNumber;if(query.referenceBlock)if(query.referenceBlock.equals(this.genesisBlockHash))referenceBlockNumber=INITIAL_L2_BLOCK_NUM2-1;else{let refBlk=await this.blockStore.getBlockData({hash:query.referenceBlock});if(!refBlk)throw new Error(`Reference block ${query.referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);referenceBlockNumber=refBlk.header.globalVariables.blockNumber}let upperExclusive;if(query.toBlock!==void 0&&(upperExclusive=query.toBlock),referenceBlockNumber!==void 0){let refExclusive=referenceBlockNumber+1;upperExclusive=upperExclusive===void 0?refExclusive:Math.min(upperExclusive,refExclusive)}let txLocation;if(query.txHash){let loc=await this.blockStore.getTxLocation(query.txHash);if(!loc)return tags.map(()=>[]);if(txLocation=loc,upperExclusive!==void 0&&txLocation[0]>=upperExclusive)return tags.map(()=>[])}let fromBlock=query.fromBlock??INITIAL_L2_BLOCK_NUM2,includeEffects=query.includeEffects===!0,perTagResults=[];for(let tagEntry of tags){let{tagHex,afterLog}=normalizeTagEntry(tagEntry),prefix=contractHex!==void 0?encodePublicPrefix(contractHex,tagHex):tagHex,end=txLocation?endOfTxRange(prefix,txLocation[0],txLocation[1]):endOfTagRange(prefix,upperExclusive),start;afterLog?start=incKey(encodeKey(prefix,afterLog.blockNumber,afterLog.txIndexWithinBlock,afterLog.logIndexWithinTx)):txLocation?start=encodeKey(prefix,txLocation[0],txLocation[1],0):start=encodeKey(prefix,fromBlock,0,0);let limit=query.limitPerTag??20,out=[];for await(let[rawKey,rawVal]of primaryMap.entriesAsync({start,end,limit})){let tail=decodeKeyTail(rawKey),value=decodeValue(rawVal);out.push({logData:value.logData,blockNumber:tail.blockNumber,blockHash:value.blockHash,blockTimestamp:value.blockTimestamp,txHash:value.txHash,txIndexWithinBlock:tail.txIndexWithinBlock,logIndexWithinTx:tail.logIndexWithinTx})}perTagResults.push(out)}if(includeEffects){let txHashByKey=new Map;for(let arr of perTagResults)for(let log2 of arr)txHashByKey.set(log2.txHash.toString(),log2.txHash);let uniqueTxs=Array.from(txHashByKey.values());if(uniqueTxs.length>0){let effects=await this.blockStore.getNoteHashesAndNullifiers(uniqueTxs),byTxHash=new Map;uniqueTxs.forEach((tx,i)=>byTxHash.set(tx.toString(),effects[i]));for(let i=0;i<perTagResults.length;i++)perTagResults[i]=perTagResults[i].map(log2=>{let[noteHashes,nullifiers]=byTxHash.get(log2.txHash.toString())??[[],[]];return{...log2,noteHashes,nullifiers}})}}return perTagResults}getPrivateLogsForBlock(blockNumber){return this.db.transactionAsync(()=>this.#readBlockLogs(this.#privateKeysByBlock,this.#privateLogs,blockNumber))}getPublicLogsForBlock(blockNumber){return this.db.transactionAsync(()=>this.#readBlockLogs(this.#publicKeysByBlock,this.#publicLogs,blockNumber))}async#readBlockLogs(keysByBlock,primaryMap,blockNumber){let keys=await keysByBlock.getAsync(blockNumber);if(!keys||keys.length===0)return[];let results=[];for(let key of keys){let raw=await primaryMap.getAsync(key);if(!raw)continue;let tail=decodeKeyTail(key),value=decodeValue(raw);results.push({logData:value.logData,blockNumber:tail.blockNumber,blockHash:value.blockHash,blockTimestamp:value.blockTimestamp,txHash:value.txHash,txIndexWithinBlock:tail.txIndexWithinBlock,logIndexWithinTx:tail.logIndexWithinTx})}return results}};function normalizeTagEntry(entry){return typeof entry=="object"&&entry!==null&&"tag"in entry?{tagHex:fieldHex(entry.tag.value),afterLog:entry.afterLog}:{tagHex:fieldHex(entry.value),afterLog:void 0}}__name(normalizeTagEntry,"normalizeTagEntry");function mapRange(range,mapFn){return{start:range.start?mapFn(range.start):void 0,end:range.end?mapFn(range.end):void 0,reverse:range.reverse,limit:range.limit}}__name(mapRange,"mapRange");function updateRollingHash(currentRollingHash,leaf){let input=Buffer.concat([currentRollingHash.toBuffer(),leaf.toBuffer()]);return Buffer16.fromBuffer(keccak256(input))}__name(updateRollingHash,"updateRollingHash");function serializeInboxMessage(message){return serializeToBuffer([bigintToUInt64BE(message.index),message.leaf,message.l1BlockHash,numToUInt32BE(Number(message.l1BlockNumber)),numToUInt32BE(message.checkpointNumber),message.rollingHash])}__name(serializeInboxMessage,"serializeInboxMessage");function deserializeInboxMessage(buffer){let reader=BufferReader.asReader(buffer),index=reader.readUInt64(),leaf=reader.readObject(Fr),l1BlockHash=reader.readObject(Buffer32),l1BlockNumber=BigInt(reader.readNumber()),checkpointNumber=CheckpointNumber(reader.readNumber()),rollingHash=reader.readObject(Buffer16);return{index,leaf,l1BlockHash,l1BlockNumber,checkpointNumber,rollingHash}}__name(deserializeInboxMessage,"deserializeInboxMessage");var MessageStoreError=class extends Error{static{__name(this,"MessageStoreError")}inboxMessage;constructor(message,inboxMessage){super(message),this.inboxMessage=inboxMessage,this.name="MessageStoreError"}},MessageStore=class{static{__name(this,"MessageStore")}db;#l1ToL2Messages;#l1ToL2MessageIndices;#lastSynchedL1Block;#totalMessageCount;#inboxTreeInProgress;#messagesFinalizedL1Block;#log;constructor(db){this.db=db,this.#log=createLogger("archiver:message_store"),this.#l1ToL2Messages=db.openMap("archiver_l1_to_l2_messages"),this.#l1ToL2MessageIndices=db.openMap("archiver_l1_to_l2_message_indices"),this.#lastSynchedL1Block=db.openSingleton("archiver_last_l1_block_id"),this.#totalMessageCount=db.openSingleton("archiver_l1_to_l2_message_count"),this.#inboxTreeInProgress=db.openSingleton("archiver_inbox_tree_in_progress"),this.#messagesFinalizedL1Block=db.openSingleton("archiver_messages_finalized_l1_block")}async getTotalL1ToL2MessageCount(){return await this.#totalMessageCount.getAsync()??0n}async getSynchedL1Block(){let buffer=await this.#lastSynchedL1Block.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}async setSynchedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastSynchedL1Block.set(buffer)}async getMessagesFinalizedL1Block(){let buffer=await this.#messagesFinalizedL1Block.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}async maybeAdvanceFinalizedL1Block(l1Block){let existing=await this.getMessagesFinalizedL1Block();if(existing&&l1Block.l1BlockNumber<=existing.l1BlockNumber)return;let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#messagesFinalizedL1Block.set(buffer)}addL1ToL2Messages(messages){return messages.length===0?Promise.resolve():this.db.transactionAsync(async()=>{let lastMessage=await this.getLastMessage(),messageCount=0;for(let message of messages){if(lastMessage&&message.index<=lastMessage.index){let existing=await this.#l1ToL2Messages.getAsync(this.indexToKey(message.index));if(existing&&deserializeInboxMessage(existing).rollingHash.equals(message.rollingHash)){this.#log.trace(`Reinserting message with index ${message.index} in the store`),await this.#l1ToL2Messages.set(this.indexToKey(message.index),serializeInboxMessage(message));continue}throw new MessageStoreError(`Cannot insert L1 to L2 message with index ${message.index} before last message with index ${lastMessage.index}`,message)}let previousRollingHash=lastMessage?.rollingHash??Buffer16.ZERO,expectedRollingHash=updateRollingHash(previousRollingHash,message.leaf);if(!expectedRollingHash.equals(message.rollingHash))throw new MessageStoreError(`Invalid rolling hash for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index} (expected ${expectedRollingHash.toString()} from previous hash ${previousRollingHash} but got ${message.rollingHash.toString()})`,message);let[expectedStart,expectedEnd]=InboxLeaf.indexRangeForCheckpoint(message.checkpointNumber);if(message.index<expectedStart||message.index>=expectedEnd)throw new MessageStoreError(`Invalid index ${message.index} for incoming L1 to L2 message ${message.leaf.toString()} at checkpoint ${message.checkpointNumber} (expected value in range [${expectedStart}, ${expectedEnd}))`,message);if(lastMessage&&message.checkpointNumber===lastMessage.checkpointNumber&&message.index!==lastMessage.index+1n)throw new MessageStoreError(`Missing prior message for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index}`,message);if((!lastMessage||message.checkpointNumber>lastMessage.checkpointNumber)&&message.index!==expectedStart)throw new MessageStoreError(`Message ${message.leaf.toString()} for checkpoint ${message.checkpointNumber} has wrong index ${message.index} (expected ${expectedStart})`,message);await this.#l1ToL2Messages.set(this.indexToKey(message.index),serializeInboxMessage(message)),await this.#l1ToL2MessageIndices.set(this.leafToIndexKey(message.leaf),message.index),messageCount++,this.#log.trace(`Inserted L1 to L2 message ${message.leaf} with index ${message.index} into the store`),lastMessage=message}await this.increaseTotalMessageCount(messageCount)})}getL1ToL2MessageIndex(l1ToL2Message){return this.#l1ToL2MessageIndices.getAsync(this.leafToIndexKey(l1ToL2Message))}async getLastMessage(){let[msg]=await toArray(this.#l1ToL2Messages.valuesAsync({reverse:!0,limit:1}));return msg?deserializeInboxMessage(msg):void 0}getInboxTreeInProgress(){return this.#inboxTreeInProgress.getAsync()}setMessageSyncState(l1Block,treeInProgress,finalizedL1Block){return this.db.transactionAsync(async()=>{await this.setSynchedL1Block(l1Block),treeInProgress!==void 0?await this.#inboxTreeInProgress.set(treeInProgress):await this.#inboxTreeInProgress.delete(),finalizedL1Block!==void 0&&await this.maybeAdvanceFinalizedL1Block(finalizedL1Block)})}async getL1ToL2Messages(checkpointNumber){let treeInProgress=await this.#inboxTreeInProgress.getAsync();if(treeInProgress!==void 0&&BigInt(checkpointNumber)>=treeInProgress)throw new L1ToL2MessagesNotReadyError(checkpointNumber,treeInProgress);let messages=[],[startIndex,endIndex]=InboxLeaf.indexRangeForCheckpoint(checkpointNumber),lastIndex=startIndex-1n;for await(let msgBuffer of this.#l1ToL2Messages.valuesAsync({start:this.indexToKey(startIndex),end:this.indexToKey(endIndex)})){let msg=deserializeInboxMessage(msgBuffer);if(msg.checkpointNumber!==checkpointNumber)throw new Error(`L1 to L2 message with index ${msg.index} has invalid checkpoint number ${msg.checkpointNumber}`);if(msg.index!==lastIndex+1n)throw new Error(`Expected L1 to L2 message with index ${lastIndex+1n} but got ${msg.index}`);lastIndex=msg.index,messages.push(msg.leaf)}return messages}async*iterateL1ToL2Messages(range={}){let entriesRange=mapRange(range,this.indexToKey);for await(let msgBuffer of this.#l1ToL2Messages.valuesAsync(entriesRange))yield deserializeInboxMessage(msgBuffer)}removeL1ToL2Messages(startIndex){this.#log.debug(`Deleting L1 to L2 messages from index ${startIndex}`);let deleteCount=0;return this.db.transactionAsync(async()=>{for await(let[key,msgBuffer]of this.#l1ToL2Messages.entriesAsync({start:this.indexToKey(startIndex)}))this.#log.trace(`Deleting L1 to L2 message with index ${key-1} from the store`),await this.#l1ToL2Messages.delete(key),await this.#l1ToL2MessageIndices.delete(this.leafToIndexKey(deserializeInboxMessage(msgBuffer).leaf)),deleteCount++;await this.increaseTotalMessageCount(-deleteCount),this.#log.warn(`Deleted ${deleteCount} L1 to L2 messages from index ${startIndex} from the store`)})}rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber){this.#log.debug(`Deleting L1 to L2 messages up to target checkpoint ${targetCheckpointNumber}`);let startIndex=InboxLeaf.smallestIndexForCheckpoint(CheckpointNumber(targetCheckpointNumber+1));return this.removeL1ToL2Messages(startIndex)}indexToKey(index){return Number(index)}leafToIndexKey(leaf){return leaf.toString()}async increaseTotalMessageCount(count2){if(count2!==0)return await this.db.transactionAsync(async()=>{let lastTotalMessageCount=await this.getTotalL1ToL2MessageCount();await this.#totalMessageCount.set(lastTotalMessageCount+BigInt(count2))})}};function createArchiverDataStores(db,genesisBlockHash){let blocks=new BlockStore(db);return{db,blocks,logs:new LogStore(db,blocks,genesisBlockHash),messages:new MessageStore(db),contractClasses:new ContractClassStore(db),contractInstances:new ContractInstanceStore(db),functionNames:new FunctionNamesCache}}__name(createArchiverDataStores,"createArchiverDataStores");var L1ToL2MessagesNotReadyError2=class extends Error{static{__name(this,"L1ToL2MessagesNotReadyError")}constructor(message){super(message),this.name="L1ToL2MessagesNotReadyError"}};var TXEArchiver=class extends ArchiverDataSourceBase{static{__name(this,"TXEArchiver")}updater=new ArchiverDataStoreUpdater(this.stores);constructor(db){super(createArchiverDataStores(db,GENESIS_BLOCK_HEADER_HASH3),void 0,BlockHeader.empty(),GENESIS_BLOCK_HEADER_HASH3,new Fr(GENESIS_ARCHIVE_ROOT))}async addCheckpoints(checkpoints,result){await this.updater.addCheckpoints(checkpoints,result)}getRollupAddress(){throw new Error('TXE Archiver does not implement "getRollupAddress"')}getRegistryAddress(){throw new Error('TXE Archiver does not implement "getRegistryAddress"')}getL1Constants(){return Promise.resolve(EmptyL1RollupConstants)}getGenesisValues(){return Promise.resolve({genesisArchiveRoot:new Fr(GENESIS_ARCHIVE_ROOT)})}getL1Timestamp(){throw new Error('TXE Archiver does not implement "getL1Timestamp"')}async getL2Tips(){return(await this.getL2Frontier()).tips}getL1SyncPoint(){return Promise.resolve(void 0)}async getL2Frontier(){let latestBlockNumber=await this.stores.blocks.getLatestL2BlockNumber();if(latestBlockNumber===0)throw new Error("L2Tips requested from TXE Archiver but no block found");let latestBlockData=await this.stores.blocks.getBlockData({number:latestBlockNumber});if(!latestBlockData)throw new Error("L2Tips requested from TXE Archiver but no block header found");let number4=latestBlockData.header.globalVariables.blockNumber,hash5=latestBlockData.blockHash.toString(),checkpoint=await this.stores.blocks.getRangeOfCheckpoints(CheckpointNumber.fromBlockNumber(number4),1);if(checkpoint.length===0)throw new Error(`L2Tips requested from TXE Archiver but no checkpoint found for block number ${number4}`);let blockId={number:number4,hash:hash5},checkpointId={number:checkpoint[0].checkpointNumber,hash:checkpoint[0].header.hash().toString()},tipId={block:blockId,checkpoint:checkpointId};return{tips:{proposed:blockId,proven:tipId,finalized:tipId,checkpointed:tipId},proposedCheckpoint:void 0,l1SyncPoint:void 0,latestBlockHeader:latestBlockData.header,checkpointedCheckpoint:{header:checkpoint[0].header,l1:checkpoint[0].l1},pendingChainValidationStatus:{valid:!0}}}getSyncedL2SlotNumber(){throw new Error('TXE Archiver does not implement "getSyncedL2SlotNumber"')}getSyncedL2EpochNumber(){throw new Error('TXE Archiver does not implement "getSyncedL2EpochNumber"')}isEpochComplete(_epochNumber){throw new Error('TXE Archiver does not implement "isEpochComplete"')}syncImmediate(){throw new Error('TXE Archiver does not implement "syncImmediate"')}getL2ToL1MembershipWitness(){return Promise.resolve(void 0)}};var import_config15=__toESM(require_empty_stub(),1);import{l1ContractsConfigMappings as l1ContractsConfigMappings2}from"@aztec/ethereum/config";import{l1ReaderConfigMappings}from"@aztec/ethereum/l1-reader";var archiverConfigMappings={...import_config15.blobClientConfigMapping,archiverPollingIntervalMS:{env:"ARCHIVER_POLLING_INTERVAL_MS",description:"The polling interval in ms for retrieving new L2 blocks and encrypted logs.",...numberConfigHelper(500)},archiverBatchSize:{env:"ARCHIVER_BATCH_SIZE",description:"The number of L2 blocks the archiver will attempt to download at a time.",...numberConfigHelper(100)},archiverStoreMapSizeKb:{env:"ARCHIVER_STORE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb."},blockDurationMs:{env:"SEQ_BLOCK_DURATION_MS",description:"Duration per block in milliseconds when building multiple blocks per slot. Used to derive orphan proposed block pruning timing.",...optionalNumberConfigHelper()},checkpointProposalSyncGraceSeconds:{env:"CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS",description:"Consensus grace in seconds for a received checkpoint proposal to materialize into local proposed state.",...optionalNumberConfigHelper()},skipValidateCheckpointAttestations:{description:"Skip validating checkpoint attestations (for testing purposes only)",...booleanConfigHelper(!1)},skipPromoteProposedCheckpointDuringL1Sync:{description:"Skip promoting proposed checkpoints during L1 sync (for testing purposes only)",...booleanConfigHelper(!1)},maxAllowedEthClientDriftSeconds:{env:"MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS",description:"Maximum allowed drift in seconds between the Ethereum client and current time.",...numberConfigHelper(300)},ethereumAllowNoDebugHosts:{env:"ETHEREUM_ALLOW_NO_DEBUG_HOSTS",description:"Whether to allow starting the archiver without debug/trace method support on Ethereum hosts",...booleanConfigHelper(!0)},archiverSkipHistoricalLogsCheck:{env:"ARCHIVER_SKIP_HISTORICAL_LOGS_CHECK",description:"Skip the startup check that probes the L1 RPC for historical Rollup contract logs. Set to true to bypass the check when the connected RPC node is known to prune old logs.",...booleanConfigHelper(!1)},orphanPruneNoProposalTolerance:{env:"ARCHIVER_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE",description:"Local tolerance in seconds before pruning an orphan block when no checkpoint proposal was received.",...numberConfigHelper(1)},skipOrphanProposedBlockPruning:{env:"ARCHIVER_SKIP_ORPHAN_PROPOSED_BLOCK_PRUNING",description:"Skip pruning orphan proposed blocks that have no matching proposed checkpoint.",...booleanConfigHelper(!1)},testPreloadStandardContracts:{env:"TEST_PRELOAD_STANDARD_CONTRACTS",description:"Preload the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the contract store at block 0. For test environments only, and only safe when genesis seeds the matching registration/deployment nullifiers; otherwise a later on-chain publish would collide with the block-0 preload.",...booleanConfigHelper(!1)},...chainConfigMappings,...l1ReaderConfigMappings,viemPollingIntervalMS:{env:"ARCHIVER_VIEM_POLLING_INTERVAL_MS",description:"The polling interval viem uses in ms",...numberConfigHelper(1e3)},...l1ContractsConfigMappings2};import{genesisStateConfigMappings}from"@aztec/ethereum/config";var import_node_keystore=__toESM(require_empty_stub(),1),import_config24=__toESM(require_empty_stub(),1),import_config25=__toESM(require_empty_stub(),1),import_config26=__toESM(require_empty_stub(),1),import_config27=__toESM(require_empty_stub(),1),import_config28=__toESM(require_empty_stub(),1),import_slasher2=__toESM(require_empty_stub(),1);var import_config30=__toESM(require_empty_stub(),1);var worldStateConfigMappings={worldStateBlockCheckIntervalMS:{env:"WS_BLOCK_CHECK_INTERVAL_MS",...numberConfigHelper(100),description:"The frequency in which to check."},worldStateBlockRequestBatchSize:{env:"WS_BLOCK_REQUEST_BATCH_SIZE",...optionalNumberConfigHelper(),description:"Size of the batch for each get-blocks request from the synchronizer to the archiver."},worldStateDbMapSizeKb:{env:"WS_DB_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKb."},archiveTreeMapSizeKb:{env:"ARCHIVE_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb."},nullifierTreeMapSizeKb:{env:"NULLIFIER_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb."},noteHashTreeMapSizeKb:{env:"NOTE_HASH_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb."},messageTreeMapSizeKb:{env:"MESSAGE_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb."},publicDataTreeMapSizeKb:{env:"PUBLIC_DATA_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb."},worldStateDataDirectory:{env:"WS_DATA_DIRECTORY",description:"Optional directory for the world state database"},worldStateCheckpointHistory:{env:"WS_NUM_HISTORIC_CHECKPOINTS",description:"The number of historic checkpoints worth of blocks to maintain. Values less than 1 mean all history is maintained",fallback:["WS_NUM_HISTORIC_BLOCKS"],...numberConfigHelper(64)}};import{privateKeyToAddress}from"viem/accounts";var sentinelConfigMappings={sentinelHistoryLengthInEpochs:{description:"The number of L2 epochs kept of history for each validator for computing their stats.",env:"SENTINEL_HISTORY_LENGTH_IN_EPOCHS",...numberConfigHelper(24)},sentinelHistoricEpochPerformanceLengthInEpochs:{description:"The number of L2 epochs kept of per-epoch performance history for each validator.",env:"SENTINEL_HISTORIC_EPOCH_PERFORMANCE_LENGTH_IN_EPOCHS",...numberConfigHelper(2e3)},sentinelEnabled:{description:"Whether the sentinel is enabled or not.",env:"SENTINEL_ENABLED",...booleanConfigHelper(!1)},sentinelEpochEndBufferSlots:{description:"Number of L2 slots after the end of an epoch before the sentinel evaluates it.",env:"SENTINEL_EPOCH_END_BUFFER_SLOTS",...numberConfigHelper(2)}};var aztecNodeConfigMappings={...dataConfigMappings,...import_node_keystore.keyStoreConfigMappings,...archiverConfigMappings,...import_config28.sequencerClientConfigMappings,...import_config27.proverNodeConfigMappings,...import_config30.validatorClientConfigMappings,...import_config26.proverClientConfigMappings,...worldStateConfigMappings,...import_config25.p2pConfigMappings,...sentinelConfigMappings,...import_config24.sharedNodeConfigMappings,...genesisStateConfigMappings,...nodeRpcConfigMappings,...import_slasher2.slasherConfigMappings,...import_config27.specificProverNodeConfigMappings,disableValidator:{env:"VALIDATOR_DISABLED",description:"Whether the validator is disabled for this node.",...booleanConfigHelper()},skipArchiverInitialSync:{env:"SKIP_ARCHIVER_INITIAL_SYNC",description:"Whether to skip waiting for the archiver to be fully synced before starting other services.",...booleanConfigHelper(!1)},debugForceTxProofVerification:{env:"DEBUG_FORCE_TX_PROOF_VERIFICATION",description:"Whether to skip waiting for the archiver to be fully synced before starting other services.",...booleanConfigHelper(!1)},enableProverNode:{env:"ENABLE_PROVER_NODE",description:"Whether to enable the prover node as a subsystem.",...booleanConfigHelper(!1)},enableOffenseCollection:{env:"OFFENSE_COLLECTION_ENABLED",description:"Whether to run the slashing watchers to collect offenses even if not a validator.",...booleanConfigHelper(!1)},useAutomineSequencer:{env:"USE_AUTOMINE_SEQUENCER",description:"Test-only: use AutomineSequencer instead of the production Sequencer.",...booleanConfigHelper(!1)},automineEnableProveEpoch:{env:"AUTOMINE_ENABLE_PROVE_EPOCH",description:"Test-only: have the AutomineSequencer automatically prove epochs as checkpoints land.",...booleanConfigHelper(!1)}};import{SimulationOverridesBuilder as SimulationOverridesBuilder2}from"@aztec/ethereum/contracts";var import_epoch_cache=__toESM(require_empty_stub(),1);function computeTargetSlot(clockSlot,proposedCheckpointData,checkpointedTipSlot){let slotAfterProposedCheckpoint=proposedCheckpointData?proposedCheckpointData.header.slotNumber+1:void 0,slotAfterCheckpointedTip=checkpointedTipSlot!==void 0?checkpointedTipSlot+1:void 0;return SlotNumber(Math.max(...compactArray([clockSlot,slotAfterProposedCheckpoint,slotAfterCheckpointedTip])))}__name(computeTargetSlot,"computeTargetSlot");function getClockSlot(epochCache){return SlotNumber(epochCache.getEpochAndSlotInNextL1Slot().slot+import_epoch_cache.PROPOSER_PIPELINING_SLOT_OFFSET)}__name(getClockSlot,"getClockSlot");function planNextBlock(frontier,clockSlot){let{tips,proposedCheckpoint:proposedCheckpointData}=frontier,latestBlockNumber=tips.proposed.number,latestBlockHash=tips.proposed.hash;if((proposedCheckpointData?BlockNumber.add(proposedCheckpointData.startBlock,proposedCheckpointData.blockCount-1):tips.checkpointed.block.number)!==latestBlockNumber)return{latestBlockNumber,latestBlockHash};let checkpointedCheckpointNumber=tips.checkpointed.checkpoint.number,parentCheckpointNumber=proposedCheckpointData?.checkpointNumber??checkpointedCheckpointNumber,checkpointedTipSlot=frontier.checkpointedCheckpoint?getCheckpointedTipSlot(frontier):void 0;return{latestBlockNumber,latestBlockHash,newCheckpoint:{targetSlot:computeTargetSlot(clockSlot,proposedCheckpointData,checkpointedTipSlot),targetCheckpoint:CheckpointNumber(parentCheckpointNumber+1),proposedCheckpointData,checkpointedCheckpointNumber}}}__name(planNextBlock,"planNextBlock");function computeBoundaryFeeKey(plan,pendingChainValidationStatus){if(!plan.newCheckpoint)return;let{targetSlot,proposedCheckpointData,checkpointedCheckpointNumber}=plan.newCheckpoint,parent=proposedCheckpointData?{kind:"proposed",headerHash:proposedCheckpointData.header.hash().toString(),archiveRoot:proposedCheckpointData.archive.root.toString(),checkpointOutHash:proposedCheckpointData.checkpointOutHash.toString(),totalManaUsed:proposedCheckpointData.totalManaUsed,feeAssetPriceModifier:proposedCheckpointData.feeAssetPriceModifier}:{kind:"checkpointed",pendingChainValid:pendingChainValidationStatus.valid,firstInvalidCheckpoint:pendingChainValidationStatus.valid?void 0:pendingChainValidationStatus.checkpoint.checkpointNumber};return{targetSlot,checkpointedCheckpointNumber,latestBlockHash:plan.latestBlockHash,parent}}__name(computeBoundaryFeeKey,"computeBoundaryFeeKey");function boundaryFeeKeyEquals(a,b){return a.targetSlot===b.targetSlot&&a.checkpointedCheckpointNumber===b.checkpointedCheckpointNumber&&a.latestBlockHash===b.latestBlockHash&&boundaryFeeParentEquals(a.parent,b.parent)}__name(boundaryFeeKeyEquals,"boundaryFeeKeyEquals");function boundaryFeeParentEquals(a,b){return a.kind==="proposed"?b.kind==="proposed"&&a.headerHash===b.headerHash&&a.archiveRoot===b.archiveRoot&&a.checkpointOutHash===b.checkpointOutHash&&a.totalManaUsed===b.totalManaUsed&&a.feeAssetPriceModifier===b.feeAssetPriceModifier:b.kind==="checkpointed"&&a.pendingChainValid===b.pendingChainValid&&a.firstInvalidCheckpoint===b.firstInvalidCheckpoint}__name(boundaryFeeParentEquals,"boundaryFeeParentEquals");var DEFAULT_REFRESH_INTERVAL_MS=1e3,MAX_AGE_INTERVALS=10,MAX_REFRESH_ATTEMPTS=2,NextBlockFeeCache=class{static{__name(this,"NextBlockFeeCache")}blockSource;globalVariableBuilder;rollupContract;epochCache;signatureContext;dateProvider;log;current;previous;refreshIntervalMs=DEFAULT_REFRESH_INTERVAL_MS;refreshLoop;inFlightRefresh;constructor(deps){this.blockSource=deps.blockSource,this.globalVariableBuilder=deps.globalVariableBuilder,this.rollupContract=deps.rollupContract,this.epochCache=deps.epochCache,this.signatureContext=deps.signatureContext,this.dateProvider=deps.dateProvider,this.log=deps.log??createLogger("node:next-block-fee-cache")}start(pollingIntervalMs=DEFAULT_REFRESH_INTERVAL_MS){this.refreshLoop||(this.refreshIntervalMs=pollingIntervalMs,this.refreshLoop=new RunningPromise(()=>this.refresh(),this.log,pollingIntervalMs).start())}async stop(){let loop=this.refreshLoop;this.refreshLoop=void 0,await loop?.stop(),await this.inFlightRefresh?.catch(()=>{})}async getBoundaryGlobals(key,frontier,opts){let maxWaitMs=opts?.maxWaitMs,attempts=maxWaitMs===void 0?MAX_REFRESH_ATTEMPTS:1;for(let attempt=0;attempt<attempts;attempt++){let hit=this.findRecord(key);if(hit)return hit.globals;let refresh=this.refresh(frontier);await(maxWaitMs===void 0?refresh:this.waitFor(refresh,maxWaitMs))}return this.findRecord(key)?.globals}refresh(frontier){if(this.inFlightRefresh)return this.inFlightRefresh;let refresh=this.runRefresh(frontier).finally(()=>{this.inFlightRefresh=void 0});return refresh.catch(()=>{}),this.inFlightRefresh=refresh,refresh}async runRefresh(frontier){let snapshot=frontier??await this.blockSource.getL2Frontier(),plan=planNextBlock(snapshot,getClockSlot(this.epochCache)),key=computeBoundaryFeeKey(plan,snapshot.pendingChainValidationStatus);if(!key||!plan.newCheckpoint)return;let current=this.current,sameKey=current!==void 0&&boundaryFeeKeyEquals(current.key,key);if(sameKey&&l1SyncPointEquals(current.l1SyncPoint,snapshot.l1SyncPoint)){this.current={...current,refreshedAtMs:this.dateProvider.now()};return}let overrides=await this.buildOverridesPlan(snapshot,plan.newCheckpoint),globals=await this.globalVariableBuilder.buildCheckpointGlobalVariables(EthAddress.ZERO,AztecAddress.ZERO,plan.newCheckpoint.targetSlot,overrides,{blockNumber:snapshot.l1SyncPoint?.blockNumber}),record2={key,l1SyncPoint:snapshot.l1SyncPoint,globals,refreshedAtMs:this.dateProvider.now()};sameKey||(this.previous=current),this.current=record2}findRecord(key){let maxAgeMs=MAX_AGE_INTERVALS*this.refreshIntervalMs,now=this.dateProvider.now();return[this.current,this.previous].find(record2=>record2!==void 0&&boundaryFeeKeyEquals(record2.key,key)&&now-record2.refreshedAtMs<maxAgeMs)}waitFor(promise2,maxWaitMs){return executeTimeout(()=>promise2,maxWaitMs).catch(err=>this.log.debug("Refreshing the next-block boundary fee failed or timed out",err))}buildOverridesPlan(frontier,newCheckpoint){let{targetCheckpoint,proposedCheckpointData,checkpointedCheckpointNumber}=newCheckpoint,rollup=this.rollupContract;if(!rollup)return Promise.resolve(new SimulationOverridesBuilder2().withChainTips({pending:checkpointedCheckpointNumber,proven:checkpointedCheckpointNumber}).build());let validationStatus=frontier.pendingChainValidationStatus,invalidateToPendingCheckpointNumber=!proposedCheckpointData&&!validationStatus.valid?CheckpointNumber(validationStatus.checkpoint.checkpointNumber-1):void 0;return buildCheckpointSimulationOverridesPlan({checkpointNumber:targetCheckpoint,proposedCheckpointData,invalidateToPendingCheckpointNumber,checkpointedCheckpointNumber,rollup,signatureContext:this.signatureContext,log:this.log})}};function l1SyncPointEquals(a,b){return a===void 0||b===void 0?a===b:a.blockHash.equals(b.blockHash)}__name(l1SyncPointEquals,"l1SyncPointEquals");var QUOTE_MAX_WAIT_MS=5e3,NextBlockPredictor=class _NextBlockPredictor{static{__name(this,"NextBlockPredictor")}blockSource;feeCache;epochCache;log;constructor(deps){this.blockSource=deps.blockSource,this.feeCache=deps.feeCache,this.epochCache=deps.epochCache,this.log=deps.log??createLogger("node:next-block-predictor")}static create(deps){let feeCache=new NextBlockFeeCache({...deps,log:deps.log?.createChild("fee-cache")});return new _NextBlockPredictor({blockSource:deps.blockSource,feeCache,epochCache:deps.epochCache,log:deps.log})}start(pollingIntervalMs){this.feeCache.start(pollingIntervalMs)}stop(){return this.feeCache.stop()}async predict(){let{frontier,plan,key}=await this.planFromFrontier(),blockNumber=BlockNumber.add(plan.latestBlockNumber,1);if(!key)return{plan,frontier,globals:this.copyGlobalsFromLatestBlock(frontier,blockNumber)};let checkpointGlobals=await this.feeCache.getBoundaryGlobals(key,frontier);if(!checkpointGlobals)throw new Error(`Could not price the next block at slot ${key.targetSlot}: no boundary fee available`);return{plan,frontier,globals:GlobalVariables.from({blockNumber,...checkpointGlobals})}}async quoteMinFees(){let{frontier,plan,key}=await this.planFromFrontier();if(!key){let fees=frontier.latestBlockHeader?.globalVariables.gasFees;if(!fees){this.log.warn("Cannot quote the next block fee: frontier reports no header for its proposed tip",{blockNumber:plan.latestBlockNumber});return}return{fees,l1SyncPoint:frontier.l1SyncPoint}}let checkpointGlobals=await this.feeCache.getBoundaryGlobals(key,frontier,{maxWaitMs:QUOTE_MAX_WAIT_MS});return checkpointGlobals?{fees:checkpointGlobals.gasFees,l1SyncPoint:frontier.l1SyncPoint}:void 0}async planFromFrontier(){let frontier=await this.blockSource.getL2Frontier(),plan=planNextBlock(frontier,getClockSlot(this.epochCache)),key=computeBoundaryFeeKey(plan,frontier.pendingChainValidationStatus);return{frontier,plan,key}}copyGlobalsFromLatestBlock(frontier,blockNumber){if(!frontier.latestBlockHeader)throw new Error(`Cannot predict the next block: frontier reports proposed tip ${frontier.tips.proposed.number} but carries no header`);return GlobalVariables.from({...frontier.latestBlockHeader.globalVariables,blockNumber})}};var P2PBootstrapApiSchema={getEncodedEnr:external_exports.function({input:external_exports.tuple([]),output:external_exports.string()}),getRoutingTable:external_exports.function({input:external_exports.tuple([]),output:external_exports.array(external_exports.string())})};var ProverAgentStatusSchema=external_exports.discriminatedUnion("status",[external_exports.object({status:external_exports.literal("stopped")}),external_exports.object({status:external_exports.literal("running")}),external_exports.object({status:external_exports.literal("proving"),jobId:external_exports.string(),proofType:external_exports.number(),startedAtISO:external_exports.string()})]),ProverAgentApiSchema={getStatus:external_exports.function({input:external_exports.tuple([]),output:ProverAgentStatusSchema})};var EpochProvingJobState=["initialized","awaiting-checkpoints","awaiting-root","awaiting-predecessor","publishing-proof","completed","superseded","failed","stopped","cancelled","timed-out"];var ProverNodeApiSchema={getJobs:external_exports.function({input:external_exports.tuple([]),output:external_exports.array(external_exports.object({uuid:external_exports.string(),status:external_exports.enum(EpochProvingJobState),epochNumber:external_exports.number()}))}),startProof:external_exports.function({input:external_exports.tuple([schemas2.Integer]),output:external_exports.string()})};function schemaForPublicInputsAndRecursiveProof(inputs,proofSize){return external_exports.object({inputs,proof:RecursiveProof.schemaFor(proofSize),verificationKey:VerificationKeyData.schema})}__name(schemaForPublicInputsAndRecursiveProof,"schemaForPublicInputsAndRecursiveProof");var ProvingJobInputs=external_exports.discriminatedUnion("type",[AvmProvingRequestSchema,external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_BASE),inputs:ParityBasePrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_ROOT),inputs:ParityRootPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_CHONK_VERIFIER),inputs:PublicChonkVerifierPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP),inputs:PrivateTxBaseRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP),inputs:PublicTxBaseRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.TX_MERGE_ROLLUP),inputs:TxMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP),inputs:BlockRootFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP),inputs:BlockRootSingleTxFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP),inputs:BlockRootEmptyTxFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_ROLLUP),inputs:BlockRootRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP),inputs:BlockRootSingleTxRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_MERGE_ROLLUP),inputs:BlockMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP),inputs:CheckpointRootRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP),inputs:CheckpointRootSingleBlockRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP),inputs:CheckpointPaddingRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP),inputs:CheckpointMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.ROOT_ROLLUP),inputs:RootRollupPrivateInputs.schema})]);var ProvingJobResult=external_exports.discriminatedUnion("type",[external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_VM),result:RecursiveProof.schemaFor(15516)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_CHONK_VERIFIER),result:schemaForPublicInputsAndRecursiveProof(PublicChonkVerifierPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.TX_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(RootRollupPublicInputs.schema,410)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_BASE),result:schemaForPublicInputsAndRecursiveProof(ParityPublicInputs.schema,410)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_ROOT),result:schemaForPublicInputsAndRecursiveProof(ParityPublicInputs.schema,410)})]),ProvingJobId=external_exports.string(),ProofUri=external_exports.string().transform(value=>value),ProvingJob=external_exports.object({id:ProvingJobId,type:external_exports.nativeEnum(ProvingRequestType),epochNumber:EpochNumberSchema,inputsUri:ProofUri});var ProvingJobFulfilledResult=external_exports.object({status:external_exports.literal("fulfilled"),value:ProofUri}),ProvingJobRejectedResult=external_exports.object({status:external_exports.literal("rejected"),reason:external_exports.string()}),ProvingJobAbortedResult=external_exports.object({status:external_exports.literal("aborted")}),ProvingJobSettledResult=external_exports.discriminatedUnion("status",[ProvingJobFulfilledResult,ProvingJobRejectedResult,ProvingJobAbortedResult]),ProvingJobStatus=external_exports.discriminatedUnion("status",[external_exports.object({status:external_exports.literal("in-queue")}),external_exports.object({status:external_exports.literal("in-progress")}),external_exports.object({status:external_exports.literal("not-found")}),ProvingJobFulfilledResult,ProvingJobRejectedResult,ProvingJobAbortedResult]);var ProvingJobSourceSchema={getProvingJob:external_exports.function({input:external_exports.tuple([]),output:ProvingJob.optional()}),heartbeat:external_exports.function({input:external_exports.tuple([ProvingJobId]),output:external_exports.void()}),resolveProvingJob:external_exports.function({input:external_exports.tuple([ProvingJobId,ProvingJobResult]),output:external_exports.void()}),rejectProvingJob:external_exports.function({input:external_exports.tuple([ProvingJobId,external_exports.string()]),output:external_exports.void()})};async function tryStop(service,logger3){try{return typeof service=="object"&&service&&"stop"in service&&typeof service.stop=="function"?await service.stop():Promise.resolve()}catch(err){logger3?.error(`Error stopping service ${service.constructor?.name}: ${err}`)}}__name(tryStop,"tryStop");var BBCircuitVerifier=class{static{__name(this,"BBCircuitVerifier")}constructor(..._args){throwStub("BBCircuitVerifier")}},BatchChonkVerifier=class{static{__name(this,"BatchChonkVerifier")}constructor(..._args){throwStub("BatchChonkVerifier")}},QueuedIVCVerifier=class{static{__name(this,"QueuedIVCVerifier")}constructor(..._args){throwStub("QueuedIVCVerifier")}};var TestCircuitVerifier=class{static{__name(this,"TestCircuitVerifier")}verificationDelayMs;constructor(verificationDelayMs){this.verificationDelayMs=verificationDelayMs}verifyProof(_tx){return this.verificationDelayMs!==void 0&&this.verificationDelayMs>0?new Promise(resolve=>{setTimeout(()=>{resolve({valid:!0,durationMs:this.verificationDelayMs,totalDurationMs:this.verificationDelayMs})},this.verificationDelayMs)}):Promise.resolve({valid:!0,durationMs:0,totalDurationMs:0})}stop(){return Promise.resolve()}};import{pickL1ContractAddresses}from"@aztec/ethereum/l1-contract-addresses";var import_node_keystore2=__toESM(require_empty_stub(),1),import_actions=__toESM(require_empty_stub(),1),import_p2p2=__toESM(require_empty_stub(),1);var import_validator_client=__toESM(require_empty_stub(),1);async function blockResponseFromL2Block(block,options,context2){let response={header:block.header,archive:block.archive,hash:await block.hash(),checkpointNumber:block.checkpointNumber,indexWithinCheckpoint:block.indexWithinCheckpoint,number:block.number};return options.includeTransactions&&(response.body=block.body),options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(context2?.l1)),options.includeAttestations&&(response.attestations=context2?.attestations??[]),response}__name(blockResponseFromL2Block,"blockResponseFromL2Block");function blockResponseFromBlockData(data,options,context2){let response={header:data.header,archive:data.archive,hash:data.blockHash,checkpointNumber:data.checkpointNumber,indexWithinCheckpoint:data.indexWithinCheckpoint,number:data.header.getBlockNumber()};return options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(context2?.l1)),options.includeAttestations&&(response.attestations=context2?.attestations??[]),response}__name(blockResponseFromBlockData,"blockResponseFromBlockData");async function checkpointResponseFromPublishedCheckpoint(pc,options){let response={number:pc.checkpoint.number,header:pc.checkpoint.header,archive:pc.checkpoint.archive,checkpointOutHash:pc.checkpoint.getCheckpointOutHash(),startBlock:pc.checkpoint.blocks[0]?.number??BlockNumber.ZERO,blockCount:pc.checkpoint.blocks.length,feeAssetPriceModifier:pc.checkpoint.feeAssetPriceModifier};return options.includeBlocks&&(response.blocks=await Promise.all(pc.checkpoint.blocks.map(block=>blockResponseFromL2Block(block,{includeTransactions:options.includeTransactions,includeL1PublishInfo:!1,includeAttestations:!1})))),options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(pc.l1)),options.includeAttestations&&(response.attestations=pc.attestations),response}__name(checkpointResponseFromPublishedCheckpoint,"checkpointResponseFromPublishedCheckpoint");function checkpointResponseFromCheckpointData(cd,options){let response={number:cd.checkpointNumber,header:cd.header,archive:cd.archive,checkpointOutHash:cd.checkpointOutHash,startBlock:cd.startBlock,blockCount:cd.blockCount,feeAssetPriceModifier:cd.feeAssetPriceModifier};return options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(cd.l1)),options.includeAttestations&&(response.attestations=cd.attestations),response}__name(checkpointResponseFromCheckpointData,"checkpointResponseFromCheckpointData");async function projectProposedToCheckpointResponse(proposed,options,blocks){if(options.includeL1PublishInfo||options.includeAttestations)throw new Error("Proposed checkpoints have no L1 publish info or attestations");let response={number:proposed.checkpointNumber,header:proposed.header,archive:proposed.archive,checkpointOutHash:proposed.checkpointOutHash,startBlock:proposed.startBlock,blockCount:proposed.blockCount,feeAssetPriceModifier:proposed.feeAssetPriceModifier};if(options.includeBlocks){if(!blocks)throw new Error("Blocks must be supplied when includeBlocks is true");response.blocks=await Promise.all(blocks.map(block=>blockResponseFromL2Block(block,{includeTransactions:options.includeTransactions,includeL1PublishInfo:!1,includeAttestations:!1})))}return response}__name(projectProposedToCheckpointResponse,"projectProposedToCheckpointResponse");function isBlockTag(value){return BlockTag.includes(value)}__name(isBlockTag,"isBlockTag");function isCheckpointTag(value){return value==="checkpointed"||value==="proven"||value==="finalized"}__name(isCheckpointTag,"isCheckpointTag");function normalizeBlockParameter(param){if(BlockHash.isBlockHash(param))return{hash:param};if(typeof param=="number")return{number:param};if(typeof param=="string"){if(isBlockTag(param))return{tag:param==="latest"?"proposed":param};throw new BadRequestError(`Invalid BlockParameter tag: ${param}`)}if(typeof param=="object"&¶m!==null){if("number"in param)return{number:param.number};if("hash"in param)return{hash:param.hash};if("archive"in param)return{archive:param.archive};if("tag"in param){if(isBlockTag(param.tag))return{tag:param.tag};throw new BadRequestError(`Invalid BlockParameter tag: ${param.tag}`)}}throw new BadRequestError(`Invalid BlockParameter: ${JSON.stringify(param)}`)}__name(normalizeBlockParameter,"normalizeBlockParameter");async function resolveCheckpointParameter(param,blockSource){if(typeof param=="number")return{number:param};if(isCheckpointTag(param)){let tips=await blockSource.getL2Tips();switch(param){case"checkpointed":return{number:tips.checkpointed.checkpoint.number};case"proven":return{number:tips.proven.checkpoint.number};case"finalized":return{number:tips.finalized.checkpoint.number}}}if(typeof param=="object"&¶m!==null){if("number"in param)return{number:param.number};if("slot"in param)return{slot:param.slot}}throw new BadRequestError(`Invalid CheckpointParameter: ${JSON.stringify(param)}`)}__name(resolveCheckpointParameter,"resolveCheckpointParameter");var NodeBlockProvider=class{static{__name(this,"NodeBlockProvider")}blockSource;holdOff;constructor(blockSource,holdOff){this.blockSource=blockSource,this.holdOff=holdOff}async getBlock(param,options={}){let query=normalizeBlockParameter(param),wantTxs=!!options.includeTransactions,wantContext=!!options.includeL1PublishInfo||!!options.includeAttestations;if(wantTxs){let block=await this.holdOff.getBlock(query);if(!block)return;let ctx2=wantContext?await this.#getCheckpointContext(block.checkpointNumber):void 0;return await blockResponseFromL2Block(block,options,ctx2)}let data=await this.holdOff.getBlockData(query);if(!data)return;let ctx=wantContext?await this.#getCheckpointContext(data.checkpointNumber):void 0;return blockResponseFromBlockData(data,options,ctx)}getBlockData(param){let query=normalizeBlockParameter(param);return this.holdOff.getBlockData(query)}async getBlocks(from,limit,options={}){let wantTxs=!!options.includeTransactions,wantContext=!!options.includeL1PublishInfo||!!options.includeAttestations,onlyCheckpointed=!!options.onlyCheckpointed;if(wantTxs){let blocks=await this.blockSource.getBlocks({from,limit,onlyCheckpointed}),ctxByCheckpoint2=await this.#getCheckpointContextsForBlocks(wantContext?blocks:[]);return await Promise.all(blocks.map(block=>blockResponseFromL2Block(block,options,ctxByCheckpoint2.get(block.checkpointNumber))))}let dataItems=await this.blockSource.getBlocksData({from,limit,onlyCheckpointed}),ctxByCheckpoint=await this.#getCheckpointContextsForBlocks(wantContext?dataItems:[]);return await Promise.all(dataItems.map(data=>blockResponseFromBlockData(data,options,ctxByCheckpoint.get(data.checkpointNumber))))}async getCheckpoint(param,options={}){let query=await resolveCheckpointParameter(param,this.blockSource),confirmed=options.includeBlocks?await this.blockSource.getCheckpoint(query):await this.blockSource.getCheckpointData(query);if(confirmed)return await(options.includeBlocks?checkpointResponseFromPublishedCheckpoint(confirmed,options):checkpointResponseFromCheckpointData(confirmed,options));let proposed=await this.blockSource.getProposedCheckpointData(query);if(proposed){if(options.includeAttestations||options.includeL1PublishInfo)throw new BadRequestError("Options includeL1PublishInfo or includeAttestations cannot be satisfied for a proposed checkpoint");let blocks=options.includeBlocks?await this.blockSource.getBlocks({from:proposed.startBlock,limit:proposed.blockCount}):void 0;return await projectProposedToCheckpointResponse(proposed,options,blocks)}}async getCheckpoints(from,limit,options={}){if(options.includeBlocks){let checkpoints=await this.blockSource.getCheckpoints({from,limit});return await Promise.all(checkpoints.map(cp=>checkpointResponseFromPublishedCheckpoint(cp,options)))}return(await this.blockSource.getCheckpointsData({from,limit})).map(d=>checkpointResponseFromCheckpointData(d,options))}async#getCheckpointContext(checkpointNumber){let checkpoint=await this.blockSource.getCheckpointData({number:checkpointNumber});if(checkpoint)return{l1:checkpoint.l1,attestations:checkpoint.attestations}}async#getCheckpointContextsForBlocks(blocks){let unique2=Array.from(new Set(blocks.map(b=>b.checkpointNumber))),entries=await Promise.all(unique2.map(async n=>[n,await this.#getCheckpointContext(n)]));return new Map(entries)}};var NodeTxReceiptBuilder=class{static{__name(this,"NodeTxReceiptBuilder")}p2pClient;blockSource;debugLogStore;constructor(deps){this.p2pClient=deps.p2pClient,this.blockSource=deps.blockSource,this.debugLogStore=deps.debugLogStore}async getTxReceipt(txHash,options){let txPoolStatus=await this.p2pClient.getTxStatus(txHash),isKnownToPool=txPoolStatus==="pending"||txPoolStatus==="mined",indexed=await this.blockSource.getTxEffect(txHash),receipt;if(indexed)receipt=await this.#assembleMinedReceipt(indexed,options);else if(isKnownToPool){let tx;options?.includePendingTx&&(tx=await this.p2pClient.getTxByHashFromPool(txHash,{includeProof:!!options.includeProof})),receipt=new PendingTxReceipt(txHash,tx)}else receipt=new DroppedTxReceipt(txHash,"Tx dropped by P2P node");return this.debugLogStore.decorateReceiptWithLogs(txHash.toString(),receipt),receipt}async#assembleMinedReceipt(indexed,options){let blockNumber=indexed.l2BlockNumber,[tips,l1Constants]=await Promise.all([this.blockSource.getL2Tips(),this.blockSource.getL1Constants()]),status=this.#deriveMinedStatus(blockNumber,tips),epochNumber=getEpochAtSlot(indexed.slotNumber,l1Constants);return new MinedTxReceipt(indexed.data.txHash,status,MinedTxReceipt.executionResultFromRevertCode(indexed.data.revertCode),indexed.data.transactionFee.toBigInt(),indexed.l2BlockHash,blockNumber,indexed.slotNumber,indexed.txIndexInBlock,epochNumber,options?.includeTxEffect?indexed.data:void 0,void 0)}#deriveMinedStatus(blockNumber,tips){return blockNumber<=tips.finalized.block.number?TxStatus.FINALIZED:blockNumber<=tips.proven.block.number?TxStatus.PROVEN:blockNumber<=tips.checkpointed.block.number?TxStatus.CHECKPOINTED:TxStatus.PROPOSED}};var WorldStateSynchronizerError=class extends Error{static{__name(this,"WorldStateSynchronizerError")}constructor(message,options){super(message,options),this.name="WorldStateSynchronizerError"}};var WORLD_STATE_SYNC_ATTEMPTS=3,WORLD_STATE_SYNC_RETRY_DELAY_MS=100,NodeWorldStateQueries=class{static{__name(this,"NodeWorldStateQueries")}worldStateSynchronizer;blockSource;l1ToL2MessageSource;holdOff;log;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.blockSource=deps.blockSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.holdOff=deps.holdOff,this.log=deps.log??createLogger("node:world-state-queries")}async findLeavesIndexes(referenceBlock,treeId,leafValues){let committedDb=await this.getWorldState(referenceBlock),maybeIndices=await committedDb.findLeafIndices(treeId,leafValues.map(x=>x.toBuffer())),definedIndices=maybeIndices.filter(x=>x!==void 0),blockNumbers=await committedDb.getBlockNumbersForLeafIndices(treeId,definedIndices),indexToBlockNumber=new Map;for(let i=0;i<definedIndices.length;i++){let blockNumber=blockNumbers[i];if(blockNumber===void 0)throw new Error(`Block number is undefined for leaf index ${definedIndices[i]} in tree ${MerkleTreeId[treeId]}`);indexToBlockNumber.set(definedIndices[i],blockNumber)}let uniqueBlockNumbers=[...new Set(indexToBlockNumber.values())],blockHashes=await Promise.all(uniqueBlockNumbers.map(blockNumber=>committedDb.getLeafValue(MerkleTreeId.ARCHIVE,BigInt(blockNumber)))),blockNumberToHash=new Map;for(let i=0;i<uniqueBlockNumbers.length;i++){let blockHash=blockHashes[i];if(blockHash===void 0)throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);blockNumberToHash.set(uniqueBlockNumbers[i],blockHash)}return maybeIndices.map(index=>{if(index===void 0)return;let blockNumber=indexToBlockNumber.get(index);if(blockNumber===void 0)throw new Error(`Block number not found for leaf index ${index} in tree ${MerkleTreeId[treeId]}`);let l2BlockHash=blockNumberToHash.get(blockNumber);if(l2BlockHash===void 0)throw new Error(`Block hash not found for block number ${blockNumber}`);return{l2BlockNumber:blockNumber,l2BlockHash,data:index}})}async getBlockHashMembershipWitness(referenceBlock,blockHash){let{blockNumber:referenceBlockNumber}=await this.#resolveBlockNumberAndHash(normalizeBlockParameter(referenceBlock));if(referenceBlockNumber===BlockNumber.ZERO)return;let committedDb=await this.getWorldState(BlockNumber(referenceBlockNumber-1)),[pathAndIndex]=await committedDb.findSiblingPaths(MerkleTreeId.ARCHIVE,[blockHash]);return pathAndIndex===void 0?void 0:MembershipWitness.fromSiblingPath(pathAndIndex.index,pathAndIndex.path)}async getNoteHashMembershipWitness(referenceBlock,noteHash){let committedDb=await this.getWorldState(referenceBlock),[pathAndIndex]=await committedDb.findSiblingPaths(MerkleTreeId.NOTE_HASH_TREE,[noteHash]);return pathAndIndex===void 0?void 0:MembershipWitness.fromSiblingPath(pathAndIndex.index,pathAndIndex.path)}async getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){let db=await this.getWorldState(referenceBlock),[witness]=await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,[l1ToL2Message]);if(witness)return[witness.index,witness.path]}async getL1ToL2MessageCheckpoint(l1ToL2Message){let messageIndex=await this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message);return messageIndex!==void 0?InboxLeaf.checkpointNumberFromIndex(messageIndex):void 0}async getL2ToL1Messages(epoch){let blocks=await this.blockSource.getBlocks({epoch,onlyCheckpointed:!0});return chunkBy(blocks,block=>block.header.globalVariables.slotNumber).map(slotBlocks=>slotBlocks.map(block=>block.body.txEffects.map(txEffect=>txEffect.l2ToL1Msgs)))}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.blockSource.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}async getNullifierMembershipWitness(referenceBlock,nullifier){let db=await this.getWorldState(referenceBlock),[witness]=await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE,[nullifier.toBuffer()]);if(!witness)return;let{index,path}=witness,leafPreimage=await db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index);if(leafPreimage)return new NullifierMembershipWitness(index,leafPreimage,path)}async getLowNullifierMembershipWitness(referenceBlock,nullifier){let committedDb=await this.getWorldState(referenceBlock),findResult=await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE,nullifier.toBigInt());if(!findResult)return;let{index,alreadyPresent}=findResult;if(alreadyPresent)throw new Error(`Cannot prove nullifier non-inclusion: nullifier ${nullifier.toBigInt()} already exists in the tree`);let preimageData=await committedDb.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index),siblingPath=await committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE,BigInt(index));return new NullifierMembershipWitness(BigInt(index),preimageData,siblingPath)}async getPublicDataWitness(referenceBlock,leafSlot){let committedDb=await this.getWorldState(referenceBlock),lowLeafResult=await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt());if(lowLeafResult){let preimage=await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index),path=await committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);return new PublicDataWitness(lowLeafResult.index,preimage,path)}else return}async getPublicStorageAt(referenceBlock,contract,slot){let committedDb=await this.getWorldState(referenceBlock),leafSlot=await computePublicDataTreeLeafSlot(contract,slot),lowLeafResult=await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt());return!lowLeafResult||!lowLeafResult.alreadyPresent?Fr.ZERO:(await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index)).leaf.value}async getWorldState(block){let query=normalizeBlockParameter(block);if("tag"in query&&query.tag==="proposed")return this.log.debug("Using committed db for latest block"),await this.worldStateSynchronizer.syncImmediate(),this.worldStateSynchronizer.getCommitted();let resolved=await this.#resolveBlockNumberAndHash(query);for(let attempt=1;;attempt++)try{return await this.#resolveWorldState(resolved)}catch(err){if(attempt>=WORLD_STATE_SYNC_ATTEMPTS||!(err instanceof WorldStateSynchronizerError))throw err;this.log.verbose(`Retrying world state query after sync failure: ${err.message}`,{attempt,block:inspectBlockParameter(block)}),await sleep(WORLD_STATE_SYNC_RETRY_DELAY_MS),resolved=await this.#resolveBlockNumberAndHash(query,{holdOff:!1})}}async#resolveWorldState({blockNumber,blockHash}){let blockSyncedTo=await this.worldStateSynchronizer.syncImmediate(blockNumber,blockHash);return this.log.debug(`Using verified snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`),await this.worldStateSynchronizer.getVerifiedSnapshot(blockNumber,blockHash)}async#resolveBlockNumberAndHash(query,opts={}){let blockData=await this.holdOff.getBlockData(query,opts);return blockData===void 0&&this.#throwOnUndefinedBlockData(query),{blockNumber:blockData.header.getBlockNumber(),blockHash:blockData.blockHash}}#throwOnUndefinedBlockData(query){throw"hash"in query?new Error(`Block hash ${query.hash.toString()} not found when resolving query. If the node API has been queried with anchor block hash possibly a reorg has occurred.`):"archive"in query?new Error(`Block with archive ${query.archive.toString()} not found when resolving query.`):new WorldStateSynchronizerError(`Block not found for ${inspectBlockParameter(query)} when resolving query.`)}};var MAX_SLEEP_MS=1e3,MAX_CONCURRENT_HOLDS=100,UnseenBlockHoldOff=class{static{__name(this,"UnseenBlockHoldOff")}blockSource;config;activeHolds;log;wakeup;constructor(blockSource,config2,log2){this.blockSource=blockSource,this.config=config2,this.activeHolds=0,this.log=log2??createLogger("node:unseen-block-hold-off");let emitter=getBlockSourceEmitter(blockSource);if(emitter===void 0)this.log.verbose("Block source reports no updates, queries for unseen blocks will not be held off");else{let wakeup=new InterruptibleSleep;this.wakeup=wakeup,emitter.on(L2BlockSourceEvents.L2BlockSourceUpdated,()=>wakeup.interrupt())}}get holds(){return this.activeHolds}getBlockData(query,opts={}){return this.#readWithHoldOff(query,q=>this.blockSource.getBlockData(q),opts)}getBlock(query,opts={}){return this.#readWithHoldOff(query,q=>this.blockSource.getBlock(q),opts)}async#readWithHoldOff(query,read2,opts){let value=await read2(query);return value!==void 0||opts.holdOff===!1?value:await this.#waitForBlock(query,await this.#resolveWaitBudgetMs(query))?await read2(query):void 0}async#waitForBlock(query,waitMs){let wakeup=this.wakeup;if(wakeup===void 0||!Number.isFinite(waitMs)||waitMs<=0)return!1;let blockParameter=inspectBlockParameter(query);if(this.activeHolds>=MAX_CONCURRENT_HOLDS)return this.log.verbose("Not holding off query for unseen block, too many requests already held",{blockParameter,holds:this.activeHolds}),!1;this.activeHolds++;let timer=new Timer;try{for(this.log.verbose("Holding off query for unseen block",{blockParameter,waitMs,holds:this.activeHolds});timer.ms()<waitMs;){await wakeup.sleep(Math.min(waitMs-timer.ms(),MAX_SLEEP_MS));let data=await this.blockSource.getBlockData(query);if(data!==void 0)return this.log.verbose(`Unseen block arrived after ${timer.ms()}ms`,{blockParameter,blockNumber:data.header.getBlockNumber(),elapsedMs:timer.ms()}),!0}return this.log.verbose(`Gave up waiting for unseen block after ${timer.ms()}ms`,{blockParameter,waitMs,elapsedMs:timer.ms()}),!1}finally{this.activeHolds--}}async#resolveWaitBudgetMs(query){if("tag"in query)return 0;if("number"in query){let tip=await this.blockSource.getBlockNumber();return query.number===tip+1?this.config.byNumberWaitMs:0}return"hash"in query&&this.#isGenesisBlockHash(query.hash)?0:this.config.byHashWaitMs}#isGenesisBlockHash(hash5){return hash5.equals(this.blockSource.getGenesisBlockHash())}};var NodeMetrics=class{static{__name(this,"NodeMetrics")}constructor(_client,_name){}receivedTx(_durationMs,_isAccepted){throwStub("NodeMetrics.receivedTx")}recordSnapshot(_durationMs){throwStub("NodeMetrics.recordSnapshot")}recordSnapshotError(){throwStub("NodeMetrics.recordSnapshotError")}};async function applyPublicDataOverrides(fork,publicStorage){if(!publicStorage?.length)return;let writes=await Promise.all(publicStorage.map(async o=>{let leafSlot=await computePublicDataTreeLeafSlot(o.contract,o.slot);return new PublicDataWrite(leafSlot,o.value)}));await fork.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,writes.map(w=>w.toBuffer()))}__name(applyPublicDataOverrides,"applyPublicDataOverrides");function _ts_add_disposable_resource(env2,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose=value[Symbol.asyncDispose]}if(dispose===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose=value[Symbol.dispose],async&&(inner=dispose)}if(typeof dispose!="function")throw new TypeError("Object not disposable.");inner&&(dispose=__name(function(){try{inner.call(this)}catch(e2){return Promise.reject(e2)}},"dispose")),env2.stack.push({value,dispose,async})}else async&&env2.stack.push({async:!0});return value}__name(_ts_add_disposable_resource,"_ts_add_disposable_resource");function _ts_dispose_resources(env2){var _SuppressedError=typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e2=new Error(message);return e2.name="SuppressedError",e2.error=error2,e2.suppressed=suppressed,e2};return(_ts_dispose_resources=__name(function(env3){function fail(e2){env3.error=env3.hasError?new _SuppressedError(e2,env3.error,"An error was suppressed during disposal."):e2,env3.hasError=!0}__name(fail,"fail");var r2,s2=0;function next(){for(;r2=env3.stack.pop();)try{if(!r2.async&&s2===1)return s2=0,env3.stack.push(r2),Promise.resolve().then(next);if(r2.dispose){var result=r2.dispose.call(r2.value);if(r2.async)return s2|=2,Promise.resolve(result).then(next,function(e2){return fail(e2),next()})}else s2|=1}catch(e2){fail(e2)}if(s2===1)return env3.hasError?Promise.reject(env3.error):Promise.resolve();if(env3.hasError)throw env3.error}return __name(next,"next"),next()},"_ts_dispose_resources"))(env2)}__name(_ts_dispose_resources,"_ts_dispose_resources");var MAX_PREDICTION_ATTEMPTS=2,NodePublicCallsSimulator=class{static{__name(this,"NodePublicCallsSimulator")}worldStateSynchronizer;l1ToL2MessageSource;contractDataSource;predictor;config;telemetry;log;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.contractDataSource=deps.contractDataSource,this.predictor=deps.predictor,this.config=deps.config,this.telemetry=deps.telemetry??getTelemetryClient(),this.log=deps.log??createLogger("node:public-calls-simulator")}async simulate(tx,skipFeeEnforcement=!1,overrides){let env2={stack:[],error:void 0,hasError:!1};try{let gasSettings=tx.data.constants.txContext.gasSettings,txGasLimit=gasSettings.gasLimits.l2Gas,teardownGasLimit=gasSettings.teardownGasLimits.l2Gas;if(txGasLimit+teardownGasLimit>this.config.rpcSimulatePublicMaxGasLimit)throw new BadRequestError(`Transaction total gas limit ${txGasLimit+teardownGasLimit} (${txGasLimit} + ${teardownGasLimit}) exceeds maximum gas limit ${this.config.rpcSimulatePublicMaxGasLimit} for simulation`);let txHash=tx.getTxHash(),{plan,globals,messages}=await this.prepareNextBlock(),publicProcessorFactory=new PublicProcessorFactory(this.contractDataSource,new DateProvider,this.telemetry,this.log.getBindings());this.log.verbose(`Simulating public calls for tx ${txHash}`,{globalVariables:globals.toInspect(),txHash,blockNumber:globals.blockNumber,atCheckpointBoundary:plan.newCheckpoint!==void 0});let merkleTreeFork=_ts_add_disposable_resource(env2,await this.worldStateSynchronizer.fork(plan.latestBlockNumber),!0);messages!==void 0&&(this.log.debug(`Appending ${messages.length} L1-to-L2 messages to the world state tree for the next checkpoint`,{checkpointNumber:plan.newCheckpoint?.targetCheckpoint}),await appendL1ToL2MessagesToTree(merkleTreeFork,messages)),await applyPublicDataOverrides(merkleTreeFork,overrides?.publicStorage);let config2=PublicSimulatorConfig.from({skipFeeEnforcement,collectDebugLogs:!0,collectHints:!1,collectCallMetadata:!0,collectStatistics:!1,collectionLimits:CollectionLimitsConfig.from({maxDebugLogMemoryReads:this.config.rpcSimulatePublicMaxDebugLogMemoryReads})}),contractsDB=new PublicContractsDB(this.contractDataSource,this.log.getBindings());overrides?.contracts&&contractsDB.addContracts(Object.values(overrides.contracts).map(({instance})=>instance));let processor=publicProcessorFactory.create(merkleTreeFork,globals,config2,contractsDB),[processedTxs,failedTxs,_usedTxs,returns,debugLogs]=await processor.process([tx]);if(failedTxs.length)throw this.log.warn(`Simulated tx ${txHash} fails: ${failedTxs[0].error}`,{txHash}),failedTxs[0].error;let[processedTx]=processedTxs;return new PublicSimulationOutput(processedTx.revertReason,processedTx.globalVariables,processedTx.txEffect,returns,processedTx.gasUsed,debugLogs)}catch(e2){env2.error=e2,env2.hasError=!0}finally{let result=_ts_dispose_resources(env2);result&&await result}}async prepareNextBlock(){for(let attempt=0;attempt<MAX_PREDICTION_ATTEMPTS;attempt++){let{plan,globals}=await this.predictor.predict();try{let[,messages]=await Promise.all([this.worldStateSynchronizer.syncImmediate(plan.latestBlockNumber,BlockHash.fromString(plan.latestBlockHash)),this.getNextCheckpointMessages(plan.newCheckpoint?.targetCheckpoint)]);return{plan,globals,messages}}catch(err){if(!isBlockHashMismatch(err))throw err;this.log.warn("World state disagrees with the planned next block, replanning",{blockNumber:plan.latestBlockNumber,blockHash:plan.latestBlockHash,error:err.message})}}throw new Error("Cannot simulate public calls: world state and archiver disagree on the latest block (prune race), retry")}async getNextCheckpointMessages(targetCheckpoint){if(targetCheckpoint!==void 0)try{return await this.l1ToL2MessageSource.getL1ToL2Messages(targetCheckpoint)}catch(err){isErrorClass(err,L1ToL2MessagesNotReadyError2)?this.log.warn(`L1-to-L2 messages for checkpoint ${targetCheckpoint} are not ready yet (simulating without them)`,{checkpointNumber:targetCheckpoint}):this.log.error(`Failed to get L1-to-L2 messages for checkpoint ${targetCheckpoint} (simulating without them)`,err,{checkpointNumber:targetCheckpoint});return}}};function isBlockHashMismatch(err){return isErrorClass(err,WorldStateSynchronizerError)&&typeof err.cause=="object"&&err.cause!==null&&"reason"in err.cause&&err.cause.reason==="block_hash_mismatch"}__name(isBlockHashMismatch,"isBlockHashMismatch");function applyDecs2203RFactory3(){function createAddInitializerMethod(initializers,decoratorFinishedRef){return __name(function(initializer3){assertNotFinished(decoratorFinishedRef,"addInitializer"),assertCallable(initializer3,"An initializer"),initializers.push(initializer3)},"addInitializer")}__name(createAddInitializerMethod,"createAddInitializerMethod");function memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,metadata,value){var kindStr;switch(kind){case 1:kindStr="accessor";break;case 2:kindStr="method";break;case 3:kindStr="getter";break;case 4:kindStr="setter";break;default:kindStr="field"}var ctx={kind:kindStr,name:isPrivate?"#"+name:name,static:isStatic,private:isPrivate,metadata},decoratorFinishedRef={v:!1};ctx.addInitializer=createAddInitializerMethod(initializers,decoratorFinishedRef);var get,set2;kind===0?isPrivate?(get=desc.get,set2=desc.set):(get=__name(function(){return this[name]},"get"),set2=__name(function(v){this[name]=v},"set")):kind===2?get=__name(function(){return desc.value},"get"):((kind===1||kind===3)&&(get=__name(function(){return desc.get.call(this)},"get")),(kind===1||kind===4)&&(set2=__name(function(v){desc.set.call(this,v)},"set"))),ctx.access=get&&set2?{get,set:set2}:get?{get}:{set:set2};try{return dec(value,ctx)}finally{decoratorFinishedRef.v=!0}}__name(memberDec,"memberDec");function assertNotFinished(decoratorFinishedRef,fnName){if(decoratorFinishedRef.v)throw new Error("attempted to call "+fnName+" after decoration was finished")}__name(assertNotFinished,"assertNotFinished");function assertCallable(fn,hint){if(typeof fn!="function")throw new TypeError(hint+" must be a function")}__name(assertCallable,"assertCallable");function assertValidReturnValue(kind,value){var type=typeof value;if(kind===1){if(type!=="object"||value===null)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");value.get!==void 0&&assertCallable(value.get,"accessor.get"),value.set!==void 0&&assertCallable(value.set,"accessor.set"),value.init!==void 0&&assertCallable(value.init,"accessor.init")}else if(type!=="function"){var hint;throw kind===0?hint="field":kind===10?hint="class":hint="method",new TypeError(hint+" decorators must return a function or void 0")}}__name(assertValidReturnValue,"assertValidReturnValue");function applyMemberDec(ret2,base,decInfo,name,kind,isStatic,isPrivate,initializers,metadata){var decs=decInfo[0],desc,init2,value;isPrivate?kind===0||kind===1?desc={get:decInfo[3],set:decInfo[4]}:kind===3?desc={get:decInfo[3]}:kind===4?desc={set:decInfo[3]}:desc={value:decInfo[3]}:kind!==0&&(desc=Object.getOwnPropertyDescriptor(base,name)),kind===1?value={get:desc.get,set:desc.set}:kind===2?value=desc.value:kind===3?value=desc.get:kind===4&&(value=desc.set);var newValue,get,set2;if(typeof decs=="function")newValue=memberDec(decs,name,desc,initializers,kind,isStatic,isPrivate,metadata,value),newValue!==void 0&&(assertValidReturnValue(kind,newValue),kind===0?init2=newValue:kind===1?(init2=newValue.init,get=newValue.get||value.get,set2=newValue.set||value.set,value={get,set:set2}):value=newValue);else for(var i=decs.length-1;i>=0;i--){var dec=decs[i];if(newValue=memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,metadata,value),newValue!==void 0){assertValidReturnValue(kind,newValue);var newInit;kind===0?newInit=newValue:kind===1?(newInit=newValue.init,get=newValue.get||value.get,set2=newValue.set||value.set,value={get,set:set2}):value=newValue,newInit!==void 0&&(init2===void 0?init2=newInit:typeof init2=="function"?init2=[init2,newInit]:init2.push(newInit))}}if(kind===0||kind===1){if(init2===void 0)init2=__name(function(instance,init3){return init3},"init");else if(typeof init2!="function"){var ownInitializers=init2;init2=__name(function(instance,init3){for(var value2=init3,i2=0;i2<ownInitializers.length;i2++)value2=ownInitializers[i2].call(instance,value2);return value2},"init")}else{var originalInitializer=init2;init2=__name(function(instance,init3){return originalInitializer.call(instance,init3)},"init")}ret2.push(init2)}kind!==0&&(kind===1?(desc.get=value.get,desc.set=value.set):kind===2?desc.value=value:kind===3?desc.get=value:kind===4&&(desc.set=value),isPrivate?kind===1?(ret2.push(function(instance,args){return value.get.call(instance,args)}),ret2.push(function(instance,args){return value.set.call(instance,args)})):kind===2?ret2.push(value):ret2.push(function(instance,args){return value.call(instance,args)}):Object.defineProperty(base,name,desc))}__name(applyMemberDec,"applyMemberDec");function applyMemberDecs(Class2,decInfos,metadata){for(var ret2=[],protoInitializers,staticInitializers,existingProtoNonFields=new Map,existingStaticNonFields=new Map,i=0;i<decInfos.length;i++){var decInfo=decInfos[i];if(Array.isArray(decInfo)){var kind=decInfo[1],name=decInfo[2],isPrivate=decInfo.length>3,isStatic=kind>=5,base,initializers;if(isStatic?(base=Class2,kind=kind-5,staticInitializers=staticInitializers||[],initializers=staticInitializers):(base=Class2.prototype,protoInitializers=protoInitializers||[],initializers=protoInitializers),kind!==0&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(existingKind===!0||existingKind===3&&kind!==4||existingKind===4&&kind!==3)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret2,base,decInfo,name,kind,isStatic,isPrivate,initializers,metadata)}}return pushInitializers(ret2,protoInitializers),pushInitializers(ret2,staticInitializers),ret2}__name(applyMemberDecs,"applyMemberDecs");function pushInitializers(ret2,initializers){initializers&&ret2.push(function(instance){for(var i=0;i<initializers.length;i++)initializers[i].call(instance);return instance})}__name(pushInitializers,"pushInitializers");function applyClassDecs(targetClass,classDecs,metadata){if(classDecs.length>0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef),metadata})}finally{decoratorFinishedRef.v=!0}nextNewClass!==void 0&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}return[defineMetadata(newClass,metadata),function(){for(var i2=0;i2<initializers.length;i2++)initializers[i2].call(newClass)}]}}__name(applyClassDecs,"applyClassDecs");function defineMetadata(Class2,metadata){return Object.defineProperty(Class2,Symbol.metadata||Symbol.for("Symbol.metadata"),{configurable:!0,enumerable:!0,value:metadata})}return __name(defineMetadata,"defineMetadata"),__name(function(targetClass,memberDecs,classDecs,parentClass){if(parentClass!==void 0)var parentMetadata=parentClass[Symbol.metadata||Symbol.for("Symbol.metadata")];var metadata=Object.create(parentMetadata===void 0?null:parentMetadata),e2=applyMemberDecs(targetClass,memberDecs,metadata);return classDecs.length||defineMetadata(targetClass,metadata),{e:e2,get c(){return applyClassDecs(targetClass,classDecs,metadata)}}},"applyDecs2203R")}__name(applyDecs2203RFactory3,"applyDecs2203RFactory");function _apply_decs_2203_r3(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r3=applyDecs2203RFactory3())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r3,"_apply_decs_2203_r");var _dec3,_initProto3;_dec3=trackSpan("AztecNodeService.simulatePublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var AztecNodeService=class{static{__name(this,"AztecNodeService")}static{({e:[_initProto3]}=_apply_decs_2203_r3(this,[[_dec3,2,"simulatePublicCalls"]],[]))}metrics;isUploadingSnapshot=(_initProto3(this),!1);sequencerPausedMinTxsPerBlock;nodePublicCallsSimulator;worldStateQueries;blockProvider;unseenBlockHoldOff;txReceiptBuilder;tracer;config;p2pClient;blockSource;logsSource;contractDataSource;l1ToL2MessageSource;worldStateSynchronizer;sequencer;proverNode;slasherClient;validatorsSentinel;stopStartedWatchers;l1ChainId;version;globalVariableBuilder;rollupContract;feeProvider;nextBlockPredictor;epochCache;packageVersion;peerProofVerifier;rpcProofVerifier;telemetry;log;blobClient;validatorClient;keyStoreManager;debugLogStore;automineSequencer;constructor(deps){if(this.config=deps.config,this.p2pClient=deps.p2pClient,this.blockSource=deps.blockSource,this.logsSource=deps.logsSource,this.contractDataSource=deps.contractDataSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.worldStateSynchronizer=deps.worldStateSynchronizer,this.sequencer=deps.sequencer,this.proverNode=deps.proverNode,this.slasherClient=deps.slasherClient,this.validatorsSentinel=deps.validatorsSentinel,this.stopStartedWatchers=deps.stopStartedWatchers,this.l1ChainId=deps.l1ChainId,this.version=deps.version,this.globalVariableBuilder=deps.globalVariableBuilder,this.rollupContract=deps.rollupContract,this.feeProvider=deps.feeProvider,this.nextBlockPredictor=deps.nextBlockPredictor,this.epochCache=deps.epochCache,this.packageVersion=deps.packageVersion,this.peerProofVerifier=deps.peerProofVerifier,this.rpcProofVerifier=deps.rpcProofVerifier,this.telemetry=deps.telemetry??getTelemetryClient(),this.log=deps.log??createLogger("node"),this.blobClient=deps.blobClient,this.validatorClient=deps.validatorClient,this.keyStoreManager=deps.keyStoreManager,this.debugLogStore=deps.debugLogStore??new NullDebugLogStore,this.automineSequencer=deps.automineSequencer,this.metrics=new NodeMetrics(this.telemetry,"AztecNodeService"),this.tracer=this.telemetry.getTracer("AztecNodeService"),this.nodePublicCallsSimulator=new NodePublicCallsSimulator({worldStateSynchronizer:this.worldStateSynchronizer,l1ToL2MessageSource:this.l1ToL2MessageSource,contractDataSource:this.contractDataSource,predictor:this.nextBlockPredictor,config:this.config,telemetry:this.telemetry,log:this.log.createChild("public-calls-simulator")}),this.unseenBlockHoldOff=new UnseenBlockHoldOff(this.blockSource,{byNumberWaitMs:this.config.rpcUnseenBlockByNumberWaitMs??2*this.config.blockDurationMs,byHashWaitMs:this.config.rpcUnseenBlockByHashWaitMs},this.log.createChild("unseen-block-hold-off")),this.worldStateQueries=new NodeWorldStateQueries({worldStateSynchronizer:this.worldStateSynchronizer,blockSource:this.blockSource,l1ToL2MessageSource:this.l1ToL2MessageSource,holdOff:this.unseenBlockHoldOff,log:this.log.createChild("world-state-queries")}),this.blockProvider=new NodeBlockProvider(this.blockSource,this.unseenBlockHoldOff),this.txReceiptBuilder=new NodeTxReceiptBuilder({p2pClient:this.p2pClient,blockSource:this.blockSource,debugLogStore:this.debugLogStore}),this.log.info(`Aztec Node version: ${this.packageVersion}`),this.log.info(`Aztec Node started on chain 0x${this.l1ChainId.toString(16)}`,pickL1ContractAddresses(this.config)),this.debugLogStore.isEnabled&&this.config.realProofs)throw new Error("debugLogStore should never be enabled when realProofs are set")}getProofVerifier(){return this.rpcProofVerifier}async getWorldStateSyncStatus(){return(await this.worldStateSynchronizer.status()).syncSummary}getChainTips(){return this.blockSource.getL2Tips()}getL1Constants(){return this.blockSource.getL1Constants()}getSyncedL2SlotNumber(){return this.blockSource.getSyncedL2SlotNumber()}getSyncedL2EpochNumber(){return this.blockSource.getSyncedL2EpochNumber()}getSyncedL1Timestamp(){return this.blockSource.getL1Timestamp()}getCheckpointsData(query){return this.blockSource.getCheckpointsData(query)}async getBlockNumber(tip){return tip===void 0||tip==="proposed"?this.blockSource.getBlockNumber():await this.blockSource.getBlockNumber({tag:tip})??BlockNumber.ZERO}async getCheckpointNumber(tip){let tips=await this.blockSource.getL2Tips();switch(tip){case void 0:case"checkpointed":return tips.checkpointed.checkpoint.number;case"proven":return tips.proven.checkpoint.number;case"finalized":return tips.finalized.checkpoint.number}}getBlock(param,options={}){return this.blockProvider.getBlock(param,options)}getBlockData(param){return this.blockProvider.getBlockData(param)}getBlocks(from,limit,options={}){return this.blockProvider.getBlocks(from,limit,options)}getCheckpoint(param,options={}){return this.blockProvider.getCheckpoint(param,options)}getCheckpoints(from,limit,options={}){return this.blockProvider.getCheckpoints(from,limit,options)}getSequencer(){return this.sequencer}getAutomineSequencer(){return this.automineSequencer}getProverNode(){return this.proverNode}getBlockSource(){return this.blockSource}getContractDataSource(){return this.contractDataSource}getP2P(){return this.p2pClient}getL1ContractAddresses(){return Promise.resolve(pickL1ContractAddresses(this.config))}getEncodedEnr(){return Promise.resolve(this.p2pClient.getEnr()?.encodeTxt())}async getAllowedPublicSetup(){return[...await(0,import_p2p2.getDefaultAllowedSetupFunctions)(),...this.config.txPublicSetupAllowListExtend??[]]}isReady(){return Promise.resolve(this.p2pClient.isReady()??!1)}async getNodeInfo(){let[nodeVersion,rollupVersion,chainId,enr,contractAddresses,protocolContractAddresses,l1Constants]=await Promise.all([this.getNodeVersion(),this.getVersion(),this.getChainId(),this.getEncodedEnr(),this.getL1ContractAddresses(),this.getProtocolContractAddresses(),this.blockSource.getL1Constants()]),maxTxGas=getNetworkTxGasLimits(this.config,l1Constants);return{nodeVersion,l1ChainId:chainId,rollupVersion,enr,l1ContractAddresses:contractAddresses,protocolContractAddresses,realProofs:!!this.config.realProofs,txsLimits:{gas:{daGas:maxTxGas.daGas,l2Gas:maxTxGas.l2Gas}}}}async getCurrentMinFees(){return await this.feeProvider.getCurrentMinFees()}async getPredictedMinFees(manaUsage){let timer=new Timer,head=await this.nextBlockPredictor.quoteMinFees().catch(err=>{this.log.warn("Failed to compute the next-block min fee for a quote, serving L1 projections only",err)}),asOf=head?.l1SyncPoint&&{blockNumber:head.l1SyncPoint.blockNumber,maxWaitMs:Math.max(0,QUOTE_MAX_WAIT_MS-timer.ms())},projections=await this.feeProvider.getPredictedMinFees(manaUsage,asOf);return head?[head.fees,...projections]:projections}async getMaxPriorityFees(){let tx=await first(this.p2pClient.iteratePendingTxs({includeProof:!1}));return tx?tx.getGasSettings().maxPriorityFeesPerGas:GasFees.from({feePerDaGas:0n,feePerL2Gas:0n})}getNodeVersion(){return Promise.resolve(this.packageVersion)}getVersion(){return Promise.resolve(this.version)}getChainId(){return Promise.resolve(this.l1ChainId)}getContractClass(id){return this.contractDataSource.getContractClass(id)}async getContract(address,referenceBlock="latest"){let blockData=await this.getBlockData(referenceBlock);if(!blockData)throw new Error(`Reference block ${inspectBlockParameter(referenceBlock)} not found when querying contract ${address}. If the node API has been queried with an anchor block hash, possibly a reorg has occurred.`);return this.contractDataSource.getContract(address,blockData.header.globalVariables.timestamp)}async getPrivateLogsByTags(query){return await this.#awaitLogsReferenceBlock(query.referenceBlock),await this.logsSource.getPrivateLogsByTags(query)}async getPublicLogsByTags(query){return await this.#awaitLogsReferenceBlock(query.referenceBlock),await this.logsSource.getPublicLogsByTags(query)}async#awaitLogsReferenceBlock(referenceBlock){referenceBlock!==void 0&&await this.unseenBlockHoldOff.getBlockData({hash:referenceBlock})}async sendTx(tx){await this.#sendTx(tx)}async#sendTx(tx){let timer=new Timer,txHash=tx.getTxHash().toString(),connectivity=await this.p2pClient.getP2PConnectivity();if(connectivity.enabled&&connectivity.connectedPeers===0)throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Rejecting tx ${txHash}: node has no connected peers`,{txHash}),new Error("Cannot accept tx: node has no connected peers to propagate it");let valid=await this.isValidTx(tx);if(valid.result!=="valid"){let reason=valid.reason.join(", ");throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Received invalid tx ${txHash}: ${reason}`,{txHash}),new Error(`Invalid tx: ${reason}`)}try{await this.p2pClient.sendTx(tx)}catch(err){throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Mempool rejected tx ${txHash}: ${err.message}`,{txHash}),err}let duration3=timer.ms();this.metrics.receivedTx(duration3,!0),this.log.info(`Received tx ${txHash} in ${duration3}ms`,{txHash})}getTxReceipt(txHash,options){return this.txReceiptBuilder.getTxReceipt(txHash,options)}getTxEffect(txHash){return this.blockSource.getTxEffect(txHash)}async stop(){this.log.info("Stopping Aztec Node"),await this.stopStartedWatchers(),await tryStop(this.slasherClient),await Promise.all([tryStop(this.peerProofVerifier),tryStop(this.rpcProofVerifier)]),await tryStop(this.sequencer),await tryStop(this.automineSequencer),await tryStop(this.proverNode),await tryStop(this.p2pClient),await tryStop(this.nextBlockPredictor),await tryStop(this.feeProvider),await tryStop(this.worldStateSynchronizer),await tryStop(this.blockSource),await tryStop(this.blobClient),await tryStop(this.telemetry),this.log.info("Stopped Aztec Node")}getBlobClient(){return this.blobClient}getPendingTxs(limit,after,options){return this.p2pClient.getPendingTxs(limit,after,options)}getPendingTxCount(){return this.p2pClient.getPendingTxCount()}getPeers(includePending){return this.p2pClient.getPeers(includePending)}getCheckpointAttestationsForSlot(slot,proposalPayloadHash){return this.p2pClient.getCheckpointAttestationsForSlot(slot,proposalPayloadHash)}getProposalsForSlot(slot){return this.p2pClient.getProposalsForSlot(slot)}getTxByHash(txHash,options){return this.p2pClient.getTxByHashFromPool(txHash,{includeProof:!!options?.includeProof})}async getTxsByHash(txHashes,options){let txs=await this.p2pClient.getTxsByHashFromPool(txHashes,{includeProof:!!options?.includeProof});return compactArray(txs)}findLeavesIndexes(referenceBlock,treeId,leafValues){return this.worldStateQueries.findLeavesIndexes(referenceBlock,treeId,leafValues)}getBlockHashMembershipWitness(referenceBlock,blockHash){return this.worldStateQueries.getBlockHashMembershipWitness(referenceBlock,blockHash)}getNoteHashMembershipWitness(referenceBlock,noteHash){return this.worldStateQueries.getNoteHashMembershipWitness(referenceBlock,noteHash)}getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message)}getL1ToL2MessageCheckpoint(l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageCheckpoint(l1ToL2Message)}getL2ToL1Messages(epoch){return this.worldStateQueries.getL2ToL1Messages(epoch)}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.worldStateQueries.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}getNullifierMembershipWitness(referenceBlock,nullifier){return this.worldStateQueries.getNullifierMembershipWitness(referenceBlock,nullifier)}getLowNullifierMembershipWitness(referenceBlock,nullifier){return this.worldStateQueries.getLowNullifierMembershipWitness(referenceBlock,nullifier)}getPublicDataWitness(referenceBlock,leafSlot){return this.worldStateQueries.getPublicDataWitness(referenceBlock,leafSlot)}getPublicStorageAt(referenceBlock,contract,slot){return this.worldStateQueries.getPublicStorageAt(referenceBlock,contract,slot)}simulatePublicCalls(tx,skipFeeEnforcement=!1,overrides){return this.nodePublicCallsSimulator.simulate(tx,skipFeeEnforcement,overrides)}async isValidTx(tx,{isSimulation,skipFeeEnforcement}={}){let db=this.worldStateSynchronizer.getCommitted(),verifier=isSimulation?void 0:this.rpcProofVerifier,{ts:nextSlotTimestamp}=this.epochCache.getEpochAndSlotInNextL1Slot(),blockNumber=BlockNumber(await this.blockSource.getBlockNumber()+1),l1Constants=await this.blockSource.getL1Constants(),networkTxGasLimits=getNetworkTxGasLimits(this.config,l1Constants);return await(0,import_p2p2.createTxValidatorForAcceptingTxsOverRPC)(db,this.contractDataSource,verifier,{timestamp:nextSlotTimestamp,blockNumber,l1ChainId:this.l1ChainId,rollupVersion:this.version,setupAllowList:[...await(0,import_p2p2.getDefaultAllowedSetupFunctions)(),...this.config.txPublicSetupAllowListExtend??[]],gasFees:await this.getCurrentMinFees(),skipFeeEnforcement,isSimulation,txsPermitted:!this.config.disableTransactions,maxTxL2Gas:networkTxGasLimits.l2Gas,maxTxDAGas:networkTxGasLimits.daGas},this.log.getBindings()).validateTx(tx)}getConfig(){let keys=AztecNodeAdminConfigSchema.keyof().options;return Promise.resolve(pick2(this.config,...keys))}async setConfig(config2){let newConfig={...this.config,...config2},sequencerUpdate={...config2};this.sequencerPausedMinTxsPerBlock!==void 0&&sequencerUpdate.minTxsPerBlock!==void 0&&(this.sequencerPausedMinTxsPerBlock=sequencerUpdate.minTxsPerBlock,delete sequencerUpdate.minTxsPerBlock),this.sequencer?.updateConfig(sequencerUpdate),this.automineSequencer?.updateConfig(sequencerUpdate),this.slasherClient?.updateConfig(config2),this.validatorsSentinel?.updateConfig(config2),await this.p2pClient.updateP2PConfig(config2);let archiver=this.blockSource;if("updateConfig"in archiver&&archiver.updateConfig(config2),newConfig.realProofs!==this.config.realProofs)if(await Promise.all([tryStop(this.peerProofVerifier),tryStop(this.rpcProofVerifier)]),newConfig.realProofs){this.peerProofVerifier=await BatchChonkVerifier.new(newConfig,newConfig.bbChonkVerifyMaxBatch,"peer");let rpcVerifier=await BBCircuitVerifier.new(newConfig);this.rpcProofVerifier=new QueuedIVCVerifier(rpcVerifier,newConfig.numConcurrentIVCVerifiers)}else this.peerProofVerifier=new TestCircuitVerifier,this.rpcProofVerifier=new TestCircuitVerifier;this.config=newConfig}getProtocolContractAddresses(){return Promise.resolve({classRegistry:ProtocolContractAddress.ContractClassRegistry,feeJuice:ProtocolContractAddress.FeeJuice,instanceRegistry:ProtocolContractAddress.ContractInstanceRegistry,multiCallEntrypoint:STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS})}registerContractFunctionSignatures(signatures){return this.contractDataSource.registerContractFunctionSignatures(signatures)}getValidatorsStats(){return this.validatorsSentinel?.computeStats()??Promise.resolve({stats:{},slotWindow:0})}getValidatorStats(validatorAddress,fromSlot,toSlot){return this.validatorsSentinel?.getValidatorStats(validatorAddress,fromSlot,toSlot)??Promise.resolve(void 0)}async startSnapshotUpload(location){let archiver=this.blockSource;if(!("backupTo"in archiver))throw this.metrics.recordSnapshotError(),new Error("Archiver implementation does not support backups. Cannot generate snapshot.");if(!archiver.isInitialSyncComplete())throw this.metrics.recordSnapshotError(),new Error("Archiver initial sync not complete. Cannot start snapshot.");if(!await archiver.getL2Tips().then(tips=>tips.proposed.hash))throw this.metrics.recordSnapshotError(),new Error("Archiver has no latest L2 block hash downloaded. Cannot start snapshot.");if(this.isUploadingSnapshot)throw this.metrics.recordSnapshotError(),new Error("Snapshot upload already in progress. Cannot start another one until complete.");this.isUploadingSnapshot=!0;let timer=new Timer;return(0,import_actions.uploadSnapshot)(location,this.blockSource,this.worldStateSynchronizer,this.config,this.log).then(()=>{this.isUploadingSnapshot=!1,this.metrics.recordSnapshot(timer.ms())}).catch(err=>{this.isUploadingSnapshot=!1,this.metrics.recordSnapshotError(),this.log.error(`Error uploading snapshot: ${err}`)}),Promise.resolve()}async rollbackTo(targetBlock,force,resumeSync=!0){let archiver=this.blockSource;if(!("rollbackTo"in archiver))throw new Error("Archiver implementation does not support rollbacks.");let finalizedBlock=await archiver.getL2Tips().then(tips=>tips.finalized.block.number);if(targetBlock<finalizedBlock)if(force)this.log.warn(`Clearing world state database to allow rolling back behind finalized block ${finalizedBlock}`),await this.worldStateSynchronizer.clear(),await this.p2pClient.clear();else throw new Error(`Cannot rollback to block ${targetBlock} as it is before finalized ${finalizedBlock}`);try{this.log.info("Pausing archiver and world state sync to start rollback"),await archiver.stop(),await this.worldStateSynchronizer.stopSync();let currentBlock=await archiver.getBlockNumber(),blocksToUnwind=currentBlock-targetBlock;this.log.info(`Unwinding ${count(blocksToUnwind,"block")} from L2 block ${currentBlock} to ${targetBlock}`),await archiver.rollbackTo(targetBlock),this.log.info("Unwinding complete.")}catch(err){throw this.log.error("Error during rollback",err),err}finally{resumeSync?(this.log.info("Resuming world state and archiver sync."),this.worldStateSynchronizer.resumeSync(),archiver.resume()):this.log.info("Sync left paused after rollback (resumeSync=false).")}}async pauseSync(){this.log.info("Pausing archiver and world state sync"),await this.blockSource.stop(),await this.worldStateSynchronizer.stopSync()}resumeSync(){return this.log.info("Resuming world state and archiver sync."),this.worldStateSynchronizer.resumeSync(),this.blockSource.resume(),Promise.resolve()}pauseSequencer(){if(this.automineSequencer)return this.automineSequencer.pause(),Promise.resolve();if(this.sequencer)return this.sequencerPausedMinTxsPerBlock===void 0&&(this.sequencerPausedMinTxsPerBlock=this.sequencer.getSequencer().getConfig().minTxsPerBlock??0,this.sequencer.updateConfig({minTxsPerBlock:Number.MAX_SAFE_INTEGER}),this.log.info("Sequencer paused (minTxsPerBlock set to MAX_SAFE_INTEGER)",{previousMinTxsPerBlock:this.sequencerPausedMinTxsPerBlock})),Promise.resolve();throw new BadRequestError("Cannot pause sequencer: no sequencer is running")}resumeSequencer(){if(this.automineSequencer)return this.automineSequencer.resume(),Promise.resolve();if(this.sequencer){if(this.sequencerPausedMinTxsPerBlock!==void 0){let restored=this.sequencerPausedMinTxsPerBlock;this.sequencerPausedMinTxsPerBlock=void 0,this.sequencer.updateConfig({minTxsPerBlock:restored}),this.log.info("Sequencer resumed (minTxsPerBlock restored)",{minTxsPerBlock:restored})}return Promise.resolve()}throw new BadRequestError("Cannot resume sequencer: no sequencer is running")}getSlashOffenses(round){if(!this.slasherClient)throw new Error("Slasher client not enabled");return round==="all"?this.slasherClient.getOffenses():this.slasherClient.gatherOffensesForRound(round==="current"?void 0:BigInt(round))}async reloadKeystore(){if(!this.config.keyStoreDirectory?.length)throw new BadRequestError("Cannot reload keystore: node is not using a file-based keystore. Set KEY_STORE_DIRECTORY to use file-based keystores.");if(!this.validatorClient)throw new BadRequestError("Cannot reload keystore: validator is not enabled.");this.log.info("Reloading keystore from disk");let keyStores=(0,import_node_keystore2.loadKeystores)(this.config.keyStoreDirectory),newManager=new import_node_keystore2.KeystoreManager((0,import_node_keystore2.mergeKeystores)(keyStores));if(await newManager.validateSigners(),import_validator_client.ValidatorClient.validateKeyStoreConfiguration(newManager,this.log),this.keyStoreManager&&this.sequencer){let oldAdapter=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(this.keyStoreManager),availablePublishers=new Set(oldAdapter.getAttesterAddresses().flatMap(a=>oldAdapter.getPublisherAddresses(a).map(p=>p.toString().toLowerCase()))),newAdapter2=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(newManager);for(let attester of newAdapter2.getAttesterAddresses()){let pubs=newAdapter2.getPublisherAddresses(attester);if(pubs.length>0&&!pubs.some(p=>availablePublishers.has(p.toString().toLowerCase())))throw new BadRequestError(`Cannot reload keystore: validator ${attester} has publisher keys [${pubs.map(p=>p.toString()).join(", ")}] but none match the L1 signers initialized at startup [${[...availablePublishers].join(", ")}]. Publishers cannot be hot-reloaded \u2014 use an existing publisher key or restart the node.`)}}let newAdapter=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(newManager),newAddresses=newAdapter.getAttesterAddresses(),oldAddresses=this.keyStoreManager?import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(this.keyStoreManager).getAttesterAddresses():[],oldSet=new Set(oldAddresses.map(a=>a.toString())),newSet=new Set(newAddresses.map(a=>a.toString())),added=newAddresses.filter(a=>!oldSet.has(a.toString())),removed=oldAddresses.filter(a=>!newSet.has(a.toString()));if(added.length>0&&this.log.info(`Keystore reload: adding attester keys: ${added.map(a=>a.toString()).join(", ")}`),removed.length>0&&this.log.info(`Keystore reload: removing attester keys: ${removed.map(a=>a.toString()).join(", ")}`),added.length===0&&removed.length===0&&this.log.info("Keystore reload: attester keys unchanged"),this.validatorClient.reloadKeystore(newManager),this.sequencer&&this.sequencer.updatePublisherNodeKeyStore(newAdapter),this.slasherClient&&!this.config.slashSelfAllowed){let slashValidatorsNever=unique([...this.config.slashValidatorsNever??[],...newAddresses].map(a=>a.toString())).map(EthAddress.fromString);this.slasherClient.updateConfig({slashValidatorsNever})}this.keyStoreManager=newManager,this.log.info("Keystore reloaded: coinbase, feeRecipient, and attester keys updated")}async mineBlock(){if(this.automineSequencer){await this.automineSequencer.buildEmptyBlock();return}if(!this.sequencer)throw new BadRequestError("Cannot mine block: no sequencer is running");let currentBlockNumber=await this.getBlockNumber(),{slotDuration}=await this.blockSource.getL1Constants(),timeoutSeconds=Math.ceil(slotDuration*1.5),originalMinTxsPerBlock=this.sequencer.getSequencer().getConfig().minTxsPerBlock;this.sequencer.updateConfig({minTxsPerBlock:0});try{this.sequencer.trigger(),await retryUntil(async()=>await this.getBlockNumber()>currentBlockNumber?!0:void 0,"mineBlock",timeoutSeconds,.1)}finally{this.sequencer.updateConfig({minTxsPerBlock:originalMinTxsPerBlock})}}async prove(upToCheckpoint){if(!this.automineSequencer)throw new BadRequestError("Cannot prove checkpoint: no automine sequencer is running");return await this.automineSequencer.prove(upToCheckpoint)}async warpL2TimeAtLeastTo(targetTimestamp){if(!this.automineSequencer)throw new BadRequestError("Cannot warp L2 time: no automine sequencer is running");await this.automineSequencer.warpTo(targetTimestamp)}async warpL2TimeAtLeastBy(duration3){if(!this.automineSequencer)throw new BadRequestError("Cannot warp L2 time: no automine sequencer is running");await this.automineSequencer.warpBy(duration3)}getWorldState(block){return this.worldStateQueries.getWorldState(block)}};var import_client22=__toESM(require_empty_stub(),1);var import_epoch_cache2=__toESM(require_empty_stub(),1);import{createEthereumChain}from"@aztec/ethereum/chain";import{getPublicClient,makeL1HttpTransport}from"@aztec/ethereum/client";import{RegistryContract,RollupContract as RollupContract2}from"@aztec/ethereum/contracts";import{pickL1ContractAddresses as pickL1ContractAddresses2}from"@aztec/ethereum/l1-contract-addresses";var import_node_keystore3=__toESM(require_empty_stub(),1),import_actions2=__toESM(require_empty_stub(),1),import_factories3=__toESM(require_empty_stub(),1),import_p2p4=__toESM(require_empty_stub(),1),import_prover_node=__toESM(require_empty_stub(),1),import_config33=__toESM(require_empty_stub(),1),import_sequencer_client=__toESM(require_empty_stub(),1),import_automine=__toESM(require_empty_stub(),1),import_slasher4=__toESM(require_empty_stub(),1);var import_validator_client2=__toESM(require_empty_stub(),1);import{createPublicClient}from"viem";var import_slasher3=__toESM(require_empty_stub(),1);var DummyP2P=class{static{__name(this,"DummyP2P")}validateTxsReceivedInBlockProposal(_txs){return Promise.resolve()}clear(){throw new Error('DummyP2P does not implement "clear".')}getPendingTxs(){throw new Error('DummyP2P does not implement "getPendingTxs"')}getEncodedEnr(){throw new Error('DummyP2P does not implement "getEncodedEnr"')}getPeers(_includePending){throw new Error('DummyP2P does not implement "getPeers"')}getGossipMeshPeerCount(_topicType){return Promise.resolve(0)}getP2PConnectivity(){return Promise.resolve({enabled:!1,connectedPeers:0})}broadcastProposal(_proposal){throw new Error('DummyP2P does not implement "broadcastProposal"')}broadcastCheckpointProposal(_proposal){throw new Error('DummyP2P does not implement "broadcastCheckpointProposal"')}broadcastCheckpointAttestations(_attestations){throw new Error('DummyP2P does not implement "broadcastCheckpointAttestations"')}registerBlockProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerBlockProposalHandler"')}registerValidatorCheckpointProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerValidatorCheckpointProposalHandler"')}registerAllNodesCheckpointProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerAllNodesCheckpointProposalHandler"')}requestTxs(_txHashes){throw new Error('DummyP2P does not implement "requestTxs"')}requestTxByHash(_txHash){throw new Error('DummyP2P does not implement "requestTxByHash"')}sendTx(_tx){throw new Error('DummyP2P does not implement "sendTx"')}handleFailedExecution(_txHashes){throw new Error('DummyP2P does not implement "handleFailedExecution"')}getTxByHashFromPool(_txHash){throw new Error('DummyP2P does not implement "getTxByHashFromPool"')}getTxByHash(_txHash){throw new Error('DummyP2P does not implement "getTxByHash"')}getArchivedTxByHash(_txHash){throw new Error('DummyP2P does not implement "getArchivedTxByHash"')}getTxStatus(_txHash){return Promise.resolve("mined")}iteratePendingTxs(){throw new Error('DummyP2P does not implement "iteratePendingTxs"')}iterateEligiblePendingTxs(){throw new Error('DummyP2P does not implement "iterateEligiblePendingTxs"')}getPendingTxCount(){throw new Error('DummyP2P does not implement "getPendingTxCount"')}hasEligiblePendingTxs(_minCount){throw new Error('DummyP2P does not implement "hasEligiblePendingTxs"')}start(){throw new Error('DummyP2P does not implement "start"')}stop(){throw new Error('DummyP2P does not implement "stop"')}isReady(){throw new Error('DummyP2P does not implement "isReady"')}getStatus(){throw new Error('DummyP2P does not implement "getStatus"')}getEnr(){throw new Error('DummyP2P does not implement "getEnr"')}isP2PClient(){throw new Error('DummyP2P does not implement "isP2PClient"')}getTxProvider(){throw new Error('DummyP2P does not implement "getTxProvider"')}getTxsByHash(_txHashes){throw new Error('DummyP2P does not implement "getTxsByHash"')}getCheckpointAttestationsForSlot(_slot,_proposalPayloadHash){throw new Error('DummyP2P does not implement "getCheckpointAttestationsForSlot"')}addOwnCheckpointAttestations(_attestations){throw new Error('DummyP2P does not implement "addOwnCheckpointAttestations"')}getProposalsForSlot(_slot){return Promise.resolve({blockProposals:[],checkpointProposals:[]})}hasCheckpointProposalForSlot(_slot){return Promise.resolve(!1)}getL2BlockHash(_number2){throw new Error('DummyP2P does not implement "getL2BlockHash"')}updateP2PConfig(_config){throw new Error('DummyP2P does not implement "updateP2PConfig"')}getL2Tips(){throw new Error('DummyP2P does not implement "getL2Tips"')}handleBlockStreamEvent(_event){throw new Error('DummyP2P does not implement "handleBlockStreamEvent"')}sync(){throw new Error('DummyP2P does not implement "sync"')}getTxsByHashFromPool(_txHashes){throw new Error('DummyP2P does not implement "getTxsByHashFromPool"')}hasTxsInPool(_txHashes){throw new Error('DummyP2P does not implement "hasTxsInPool"')}getSyncedLatestBlockNum(){throw new Error('DummyP2P does not implement "getSyncedLatestBlockNum"')}getSyncedProvenBlockNum(){throw new Error('DummyP2P does not implement "getSyncedProvenBlockNum"')}getSyncedLatestSlot(){throw new Error('DummyP2P does not implement "getSyncedLatestSlot"')}protectTxs(_txHashes,_blockHeader){throw new Error('DummyP2P does not implement "protectTxs".')}prepareForSlot(_slotNumber){return Promise.resolve()}addReqRespSubProtocol(_subProtocol,_handler){throw new Error('DummyP2P does not implement "addReqRespSubProtocol".')}handleAuthRequestFromPeer(_authRequest,_peerId){throw new Error('DummyP2P does not implement "handleAuthRequestFromPeer".')}registerThisValidatorAddresses(_address){}registerDuplicateProposalCallback(_callback){throw new Error('DummyP2P does not implement "registerDuplicateProposalCallback"')}registerOversizedProposalCallback(_callback){throw new Error('DummyP2P does not implement "registerOversizedProposalCallback"')}registerDuplicateAttestationCallback(_callback){throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"')}registerCheckpointAttestationCallback(_callback){throw new Error('DummyP2P does not implement "registerCheckpointAttestationCallback"')}hasBlockProposalsForSlot(_slot){throw new Error('DummyP2P does not implement "hasBlockProposalsForSlot"')}};var TXEFeeProvider=class{static{__name(this,"TXEFeeProvider")}getCurrentMinFees(){return Promise.resolve(new GasFees(0,0))}getPredictedMinFees(){return Promise.resolve(times(FEE_ORACLE_LAG,()=>new GasFees(0,0)))}},TXEGlobalVariablesBuilder=class{static{__name(this,"TXEGlobalVariablesBuilder")}buildCheckpointGlobalVariables(_coinbase,_feeRecipient,_slotNumber,_simulationOverridesPlan,_options){let vars=makeGlobalVariables();return Promise.resolve({chainId:vars.chainId,version:vars.version,slotNumber:vars.slotNumber,timestamp:vars.timestamp,coinbase:vars.coinbase,feeRecipient:vars.feeRecipient,gasFees:vars.gasFees})}};var MockEpochCache=class{static{__name(this,"MockEpochCache")}getCommittee(_slot="now"){return Promise.resolve({committee:void 0,seed:0n,epoch:EpochNumber.ZERO,isEscapeHatchOpen:!1})}getSlotNow(){return SlotNumber(0)}getTargetSlot(){return SlotNumber(0)}getEpochNow(){return EpochNumber.ZERO}getTargetEpoch(){return EpochNumber.ZERO}getEpochAndSlotNow(){return{epoch:EpochNumber.ZERO,slot:SlotNumber(0),ts:0n,nowMs:0n}}getEpochAndSlotInNextL1Slot(){return{epoch:EpochNumber.ZERO,slot:SlotNumber(0),ts:0n,nowSeconds:0n}}getTargetEpochAndSlotInNextL1Slot(){return this.getEpochAndSlotInNextL1Slot()}getProposerIndexEncoding(_epoch,_slot,_seed){return"0x00"}computeProposerIndex(_slot,_epoch,_seed,_size2){return 0n}getCurrentAndNextSlot(){return{currentSlot:SlotNumber(0),nextSlot:SlotNumber(0)}}getTargetAndNextSlot(){return{targetSlot:SlotNumber(0),nextSlot:SlotNumber(0)}}getProposerAttesterAddressInSlot(_slot){return Promise.resolve(void 0)}isInCommittee(_slot,_validator){return Promise.resolve(!1)}getRegisteredValidators(){return Promise.resolve([])}filterInCommittee(_slot,_validators){return Promise.resolve([])}isEscapeHatchOpen(_epoch){return Promise.resolve(!1)}isEscapeHatchOpenAtSlot(_slot){return Promise.resolve(!1)}getL1Constants(){return EmptyL1RollupConstants}};var TXESynchronizer=class{constructor(nativeWorldStateService){this.nativeWorldStateService=nativeWorldStateService}static{__name(this,"TXESynchronizer")}blockNumber=BlockNumber.ZERO;static async create(){let nativeWorldStateService=await NativeWorldStateService.ephemeral();return new this(nativeWorldStateService)}async handleL2Block(block,l1ToL2Messages=[]){await this.nativeWorldStateService.handleL2BlockAndMessages(block,padArrayEnd(l1ToL2Messages,Fr.ZERO,1024)),this.blockNumber=block.header.globalVariables.blockNumber}syncImmediate(_minBlockNumber,_blockHash){return Promise.resolve(this.blockNumber)}getCommitted(){return this.nativeWorldStateService.getCommitted()}fork(block){return this.nativeWorldStateService.fork(block?BlockNumber(block):void 0)}getSnapshot(blockNumber){return this.nativeWorldStateService.getSnapshot(BlockNumber(blockNumber))}getVerifiedSnapshot(blockNumber,_blockHash){return Promise.resolve(this.getSnapshot(blockNumber))}backupTo(dstPath,compact2){return this.nativeWorldStateService.backupTo(dstPath,compact2)}start(){throw new Error('TXE Synchronizer does not implement "start"')}status(){throw new Error('TXE Synchronizer does not implement "status"')}stop(){throw new Error('TXE Synchronizer does not implement "stop"')}stopSync(){throw new Error('TXE Synchronizer does not implement "stopSync"')}resumeSync(){throw new Error('TXE Synchronizer does not implement "resumeSync"')}clear(){throw new Error('TXE Synchronizer does not implement "clear"')}};var VERSION7=1,CHAIN_ID=1,PACKAGE_VERSION="txe",TXEStateMachine=class{constructor(node,synchronizer,archiver,anchorBlockStore,contractSyncService,contractClassService,txResolver){this.node=node;this.synchronizer=synchronizer;this.archiver=archiver;this.anchorBlockStore=anchorBlockStore;this.contractSyncService=contractSyncService;this.contractClassService=contractClassService;this.txResolver=txResolver}static{__name(this,"TXEStateMachine")}static async create(archiver,anchorBlockStore,contractStore,noteStore){let synchronizer=await TXESynchronizer.create(),aztecNodeConfig={},log2=createLogger("txe_node"),globalVariableBuilder=new TXEGlobalVariablesBuilder,epochCache=new MockEpochCache,nextBlockPredictor=NextBlockPredictor.create({blockSource:archiver,globalVariableBuilder,epochCache,signatureContext:{chainId:CHAIN_ID,rollupAddress:EthAddress.ZERO},dateProvider:new DateProvider}),node=new AztecNodeService({config:aztecNodeConfig,p2pClient:new DummyP2P,blockSource:archiver,logsSource:archiver,contractDataSource:archiver,l1ToL2MessageSource:archiver,worldStateSynchronizer:synchronizer,sequencer:void 0,proverNode:void 0,slasherClient:void 0,validatorsSentinel:void 0,stopStartedWatchers:__name(async()=>{},"stopStartedWatchers"),l1ChainId:CHAIN_ID,version:VERSION7,globalVariableBuilder,rollupContract:void 0,feeProvider:new TXEFeeProvider,nextBlockPredictor,epochCache,packageVersion:PACKAGE_VERSION,peerProofVerifier:new TestCircuitVerifier,rpcProofVerifier:new TestCircuitVerifier,telemetry:void 0,log:log2}),contractClassService=new ContractClassService(node,contractStore),contractSyncService=new ContractSyncService(node,contractStore,contractClassService,noteStore,createLogger("txe:contract_sync"),{concurrentContractSyncEnabled:!1}),txResolver=new TxResolverService(node);return new this(node,synchronizer,archiver,anchorBlockStore,contractSyncService,contractClassService,txResolver)}get l2TipsProvider(){let node=this.node;return{getL2Tips:__name(()=>node.getChainTips(),"getL2Tips")}}async handleL2Block(block,l1ToL2Messages=[]){let checkpointNumber=CheckpointNumber.fromBlockNumber(block.number),checkpoint=new Checkpoint(block.archive,CheckpointHeader.from({lastArchiveRoot:block.header.lastArchive.root,inHash:Fr.ZERO,blobsHash:Fr.ZERO,blockHeadersHash:Fr.ZERO,epochOutHash:Fr.ZERO,slotNumber:block.header.globalVariables.slotNumber,timestamp:block.header.globalVariables.timestamp,coinbase:block.header.globalVariables.coinbase,feeRecipient:block.header.globalVariables.feeRecipient,gasFees:block.header.globalVariables.gasFees,totalManaUsed:block.header.totalManaUsed,accumulatedFees:block.header.totalFees}),[block],checkpointNumber),publishedCheckpoint=new PublishedCheckpoint(checkpoint,new L1PublishedData(BigInt(block.header.globalVariables.blockNumber),block.header.globalVariables.timestamp,block.header.globalVariables.blockNumber.toString()),[]);this.contractSyncService.wipe(),await Promise.all([this.synchronizer.handleL2Block(block,l1ToL2Messages),this.archiver.addCheckpoints([publishedCheckpoint],void 0),this.anchorBlockStore.setHeader(block.header)])}};async function makeTxEffect(noteCache,txBlockNumber){let txEffect=TxEffect.empty(),nonceGenerator=noteCache.getNonceGenerator();return txEffect.noteHashes=await Promise.all(noteCache.getAllNotes().map(async(pendingNote,i)=>computeUniqueNoteHash(await computeNoteHashNonce(nonceGenerator,i),await siloNoteHash(pendingNote.note.contractAddress,pendingNote.noteHashForConsumption)))),txEffect.nullifiers=noteCache.getAllNullifiers(),txEffect.txHash=new TxHash(new Fr(txBlockNumber)),txEffect}__name(makeTxEffect,"makeTxEffect");var TXEAccountStore=class{static{__name(this,"TXEAccountStore")}#accounts;constructor(store){this.#accounts=store.openMap("accounts")}async getAccount(key){let completeAddress=await this.#accounts.getAsync(key.toString());if(!completeAddress)throw new Error(`Account not found: ${key.toString()}`);return CompleteAddress.fromBuffer(completeAddress)}async setAccount(key,value){await this.#accounts.set(key.toString(),value.toBuffer())}};function emptyLastCallState(){return{offchainEffects:[],queried:!1,txHash:Fr.ZERO,anchorBlockTimestamp:0n}}__name(emptyLastCallState,"emptyLastCallState");var TXESession=class _TXESession{constructor(logger3,sessionStore,stateMachine,oracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,operationContributors,currentChangeSetId,chainId,version2,nextBlockTimestamp,artifactResolver,rootPath,packageName){this.logger=logger3;this.sessionStore=sessionStore;this.stateMachine=stateMachine;this.oracleHandler=oracleHandler;this.contractStore=contractStore;this.noteStore=noteStore;this.keyStore=keyStore;this.addressStore=addressStore;this.accountStore=accountStore;this.senderTaggingStore=senderTaggingStore;this.recipientTaggingStore=recipientTaggingStore;this.taggingSecretSourcesStore=taggingSecretSourcesStore;this.capsuleStore=capsuleStore;this.factStore=factStore;this.privateEventStore=privateEventStore;this.stagedWriteCoordinator=stagedWriteCoordinator;this.operationContributors=operationContributors;this.currentChangeSetId=currentChangeSetId;this.chainId=chainId;this.version=version2;this.nextBlockTimestamp=nextBlockTimestamp;this.artifactResolver=artifactResolver;this.rootPath=rootPath;this.packageName=packageName}static{__name(this,"TXESession")}state={name:"TOP_LEVEL"};authwits=new Map;taggingSecretStrategies=new Map;authorizeAllUtilityCallTargets=!1;lastCallInfo=emptyLastCallState();txeOracleVersion;disposed=!1;async dispose(){if(!this.disposed){this.disposed=!0;try{await this.stateMachine.synchronizer.nativeWorldStateService.close()}catch(err){this.logger.warn("Error closing native world state during session dispose",err)}try{await this.sessionStore.close()}catch(err){this.logger.warn("Error closing session LMDB during dispose",err)}}}static async init(contractStore,artifactResolver,rootPath,packageName){let store=await openEphemeralStore("txe-session",void 0,2),addressStore=new AddressStore(store),privateEventStore=new PrivateEventStore(store),noteStore=new NoteStore(store),senderTaggingStore=new SenderTaggingStore(store),recipientTaggingStore=new RecipientTaggingStore(store),taggingSecretSourcesStore=new TaggingSecretSourcesStore(store),capsuleStore=new CapsuleStore(store),factStore=new FactStore(store),keyStore=new KeyStore(store),accountStore=new TXEAccountStore(store),archiver=new TXEArchiver(store),anchorBlockStore=new AnchorBlockStore(store),stateMachine=await TXEStateMachine.create(archiver,anchorBlockStore,contractStore,noteStore),stagedWriteCoordinator=new StagedWriteCoordinator({kvStore:store,stagedStores:[capsuleStore,factStore,senderTaggingStore,recipientTaggingStore,privateEventStore,noteStore]}),nextBlockTimestamp=BigInt(Math.floor(new Date().getTime()/1e3)),version2=new Fr(await stateMachine.node.getVersion()),chainId=new Fr(await stateMachine.node.getChainId()),logger3=createLogger("txe:session"),initialChangeSetId=stagedWriteCoordinator.begin(),topLevelOracleHandler=new TXEOracleTopLevelContext(stateMachine,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,nextBlockTimestamp,version2,chainId,new Map,new Map,!1,artifactResolver,rootPath,packageName);return await topLevelOracleHandler.mineDeploymentNullifiers([STANDARD_AUTH_REGISTRY_ADDRESS]),new _TXESession(logger3,store,stateMachine,topLevelOracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,[stateMachine.contractSyncService],initialChangeSetId,version2,chainId,nextBlockTimestamp,artifactResolver,rootPath,packageName)}processFunction(functionName,inputs){try{if(Object.hasOwn(LEGACY_ORACLE_REGISTRY,functionName))return callTxeLegacyHandler(functionName,inputs,this.oracleHandler);let translator=new RPCTranslator(this,this.oracleHandler),validatedFunctionName=external_exports.string().refine(fn=>typeof translator[fn]=="function"&&!fn.startsWith("handlerAs")&&fn!=="constructor").parse(functionName);return translator[validatedFunctionName](...inputs)}catch(error2){if(error2 instanceof external_exports.ZodError){let versionHint;throw this.txeOracleVersion?this.txeOracleVersion.minor>0?versionHint=` The test uses Aztec.nr test oracle version ${this.txeOracleVersion.major}.${this.txeOracleVersion.minor}, but this test environment only supports up to ${4}.${0}. Upgrade the Aztec CLI to a compatible version. See https://docs.aztec.network/errors/12`:versionHint=` The test's oracle version (${this.txeOracleVersion.major}.${this.txeOracleVersion.minor}) is compatible with this test environment (${4}.${0}), so this oracle should be available. This is an unexpected error, please report it. See https://docs.aztec.network/errors/13`:versionHint=" The test appears to use an older version of Aztec.nr that does not support test environment oracle versioning. Update Aztec.nr to a compatible version. See https://docs.aztec.network/errors/12",new Error(`Unknown oracle '${functionName}'.${versionHint}`)}else throw error2 instanceof Error?new Error(`Execution error while processing function ${functionName} in state ${this.state.name}: ${error2.message}`):new Error(`Unknown execution error while processing function ${functionName} in state ${this.state.name}`)}}async cycleOperation(){let operationArgs={stagedWriteCoordinator:this.stagedWriteCoordinator,contributors:this.operationContributors,changeSetId:this.currentChangeSetId,log:this.logger};try{await runOperation(operationArgs,()=>Promise.resolve())}finally{this.currentChangeSetId=this.stagedWriteCoordinator.begin()}return this.currentChangeSetId}resetLastCall(){let notQueriedMessageCount=this.lastCallInfo.queried?0:this.lastCallInfo.offchainEffects.filter(payload=>payload[0]?.equals(OFFCHAIN_MESSAGE_IDENTIFIER)).length;notQueriedMessageCount>0&&this.logger.warn(`Dropping ${notQueriedMessageCount} unqueried offchain message(s) from the previous top-level call. To deliver them, call \`env.offchain_messages()\` and forward the result to the recipient contract's \`offchain_receive\` utility before issuing another top-level call. To intentionally discard, assign to \`let _ = env.offchain_messages()\` to silence this warning.`),this.lastCallInfo=emptyLastCallState()}recordOffchainEffect(data){this.lastCallInfo.offchainEffects.push(data)}setLastCallContext(txHash,anchorBlockTimestamp){this.lastCallInfo.txHash=txHash,this.lastCallInfo.anchorBlockTimestamp=anchorBlockTimestamp}async withTopLevelCallTracking(work){this.resetLastCall();let anchorBlockTimestamp=(await this.stateMachine.node.getBlockData("latest")).header.globalVariables.timestamp,{result,txHash}=await work();return this.setLastCallContext(txHash??Fr.ZERO,anchorBlockTimestamp),result}getLastCallOffchainEffects(){this.lastCallInfo.queried=!0;let effects=this.lastCallInfo.offchainEffects;if(effects.length>MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY)throw new Error(`${effects.length} offchain effects exceed max ${MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY}`);if(effects.some(e2=>e2.length>MAX_OFFCHAIN_EFFECT_LEN))throw new Error(`Some offchain effect has length larger than max ${MAX_OFFCHAIN_EFFECT_LEN}`);return{effects}}getLastCallContext(){let{txHash,anchorBlockTimestamp}=this.lastCallInfo;return{txHash,anchorBlockTimestamp}}async executePrivateCall(from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let{returnValues,offchainEffects}=await handler.privateCallNewFlow(from?.value,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,this.currentChangeSetId,authorizedUtilityCallTargets,gasSettings);for(let data of offchainEffects)this.recordOffchainEffect(data);if(await this.cycleOperation(),isStaticCall)return{result:returnValues};let{txHash}=await handler.getLastTxEffects();return{result:returnValues,txHash:txHash.hash}})}async executeUtilityFunction(from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let returnValues=await handler.executeUtilityFunction(from?.value,targetContractAddress,functionSelector,args,this.currentChangeSetId,authorizedUtilityCallTargets);return await this.cycleOperation(),{result:returnValues}})}async executePublicCall(from,targetContractAddress,calldata,isStaticCall,gasSettings){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let returnValues=await handler.publicCallNewFlow(from?.value,targetContractAddress,calldata,isStaticCall,gasSettings);if(await this.cycleOperation(),isStaticCall)return{result:returnValues};let{txHash}=await handler.getLastTxEffects();return{result:returnValues,txHash:txHash.hash}})}async getPrivateEvents(selector,contractAddress,scope){let handler=this.handlerAsTxe();return await handler.syncContractNonOracleMethod(contractAddress,scope,this.currentChangeSetId),await this.cycleOperation(),handler.getPrivateEvents(selector,contractAddress,scope,this.currentChangeSetId)}handlerAsTxe(){if(!("isTxe"in this.oracleHandler))throw new UnavailableOracleError2("Txe");return this.oracleHandler}setTxeOracleVersion(major2,minor){if(major2!==4){let hint=major2>4?"The test was compiled with a newer version of Aztec.nr than your test environment supports. Upgrade your test environment to a compatible version.":"The test was compiled with an older version of Aztec.nr than your test environment supports. Recompile the test with a compatible version of Aztec.nr.";throw new Error(`Incompatible test environment version: ${hint} See https://docs.aztec.network/errors/12 (expected test oracle major version ${4}, got ${major2})`)}this.txeOracleVersion={major:major2,minor},this.logger.debug(`Test compiled with test oracle version ${major2}.${minor}`)}async enterTopLevelState(){switch(this.state.name){case"PRIVATE":{await this.exitPrivateState();break}case"PUBLIC":{await this.exitPublicState();break}case"UTILITY":{this.exitUtilityContext();break}case"TOP_LEVEL":throw new Error("Expected to be in state other than TOP_LEVEL");default:this.state}await this.cycleOperation(),this.oracleHandler=new TXEOracleTopLevelContext(this.stateMachine,this.contractStore,this.noteStore,this.keyStore,this.addressStore,this.accountStore,this.senderTaggingStore,this.recipientTaggingStore,this.taggingSecretSourcesStore,this.capsuleStore,this.factStore,this.privateEventStore,this.nextBlockTimestamp,this.version,this.chainId,this.authwits,this.taggingSecretStrategies,this.authorizeAllUtilityCallTargets,this.artifactResolver,this.rootPath,this.packageName),this.state={name:"TOP_LEVEL"},this.logger.debug(`Entered state ${this.state.name}`)}async enterPrivateState(contractAddressOpt,anchorBlockNumberOpt,gasSettings){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS,anchorBlockNumber=anchorBlockNumberOpt?.value;this.exitTopLevelState(),this.resetLastCall();let anchorBlock=await this.stateMachine.node.getBlock(anchorBlockNumber??"latest").then(b=>b?.header);await new NoteService(this.noteStore,this.stateMachine.node,anchorBlock,this.currentChangeSetId).syncNoteNullifiers(contractAddress,await this.keyStore.getAccounts());let latestBlock=await this.stateMachine.node.getBlock("latest").then(b=>b?.header),nextBlockGlobalVariables=makeGlobalVariables(void 0,{blockNumber:BlockNumber(latestBlock.globalVariables.blockNumber+1),timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId}),txRequestHash=getSingleTxBlockRequestHash(nextBlockGlobalVariables.blockNumber),protocolNullifier=await computeProtocolNullifier(txRequestHash),noteCache=new ExecutionNoteCache(protocolNullifier),taggingIndexCache=new ExecutionTaggingIndexCache,utilityExecutor=this.utilityExecutorForContractSync(anchorBlock),transientArrayService=new TransientArrayService,anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlock);return this.oracleHandler=new TXEPrivateExecutionOracle({argsHash:Fr.ZERO,txContext:new TxContext(this.chainId,this.version,gasSettings),txRequestSalt:Fr.ZERO,callContext:new CallContext(AztecAddress.ZERO,contractAddress,FunctionSelector.empty(),!1),anchorBlockHeader:anchorBlock,utilityExecutor,authWitnesses:[],capsules:[],executionCache:new HashedValuesCache,noteCache,taggingIndexCache,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,await this.keyStore.getAccounts()),factService:new FactService(this.factStore,await this.keyStore.getAccounts()),privateEventStore:this.privateEventStore,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes:await this.keyStore.getAccounts(),txResolver:this.stateMachine.txResolver,simulator:new WASMSimulator,hooks:composeHooks({resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies),authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0}),transientArrayService}),this.state={name:"PRIVATE",nextBlockGlobalVariables,noteCache,taggingIndexCache},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,anchorBlock.globalVariables.timestamp),this.oracleHandler.getPrivateContextInputs()}async enterPublicState(contractAddressOpt){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS;this.exitTopLevelState(),this.resetLastCall();let latestHeader=(await this.stateMachine.node.getBlockData("latest")).header,globalVariables=makeGlobalVariables(void 0,{blockNumber:BlockNumber(latestHeader.globalVariables.blockNumber+1),timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId});this.oracleHandler=new TXEOraclePublicContext(contractAddress,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),getSingleTxBlockRequestHash(globalVariables.blockNumber),globalVariables,this.contractStore),this.state={name:"PUBLIC"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,latestHeader.globalVariables.timestamp)}async enterUtilityState(contractAddressOpt){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS;this.exitTopLevelState(),this.resetLastCall();let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();await new NoteService(this.noteStore,this.stateMachine.node,anchorBlockHeader,this.currentChangeSetId).syncNoteNullifiers(contractAddress,await this.keyStore.getAccounts()),this.oracleHandler=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:AztecAddress.NULL_MSG_SENDER,contractAddress,functionSelector:FunctionSelector.empty(),isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader,anchoredContractData:new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader),noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,await this.keyStore.getAccounts()),factService:new FactService(this.factStore,await this.keyStore.getAccounts()),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes:await this.keyStore.getAccounts(),simulator:new WASMSimulator,utilityExecutor:this.utilityExecutorForContractSync(anchorBlockHeader),hooks:composeHooks({authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0}),transientArrayService:new TransientArrayService}),this.state={name:"UTILITY"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,anchorBlockHeader.globalVariables.timestamp)}exitTopLevelState(){if(this.state.name!="TOP_LEVEL")throw new Error(`Expected to be in state 'TOP_LEVEL', but got '${this.state.name}' instead`);({nextBlockTimestamp:this.nextBlockTimestamp,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets}=this.oracleHandler.close())}async exitPrivateState(){if(this.state.name!="PRIVATE")throw new Error(`Expected to be in state 'PRIVATE', but got '${this.state.name}' instead`);this.logger.debug("Exiting Private state, building block with collected side effects",{blockNumber:this.state.nextBlockGlobalVariables.blockNumber});let txEffect=await makeTxEffect(this.state.noteCache,this.state.nextBlockGlobalVariables.blockNumber),forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork();await insertTxEffectIntoWorldTrees(txEffect,forkedWorldTrees);let block=await makeTXEBlock(forkedWorldTrees,this.state.nextBlockGlobalVariables,[txEffect]);await this.stateMachine.handleL2Block(block),await forkedWorldTrees.close(),this.logger.debug("Exited PublicContext with built block",{blockNumber:block.number,txEffects:block.body.txEffects})}async exitPublicState(){if(this.state.name!="PUBLIC")throw new Error(`Expected to be in state 'PUBLIC', but got '${this.state.name}' instead`);let block=await this.oracleHandler.close();await this.stateMachine.handleL2Block(block)}exitUtilityContext(){if(this.state.name!="UTILITY")throw new Error(`Expected to be in state 'UTILITY', but got '${this.state.name}' instead`)}utilityExecutorForContractSync(anchorBlock){return async(call,scopes)=>{let anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlock),entryPointArtifact=await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to,call.selector);if(!entryPointArtifact)throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered.`);if(entryPointArtifact.functionType!==FunctionType.UTILITY)throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);try{let simulator=new WASMSimulator,oracle=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:AztecAddress.NULL_MSG_SENDER,contractAddress:call.to,functionSelector:call.selector,isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader:anchorBlock,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes,simulator,utilityExecutor:this.utilityExecutorForContractSync(anchorBlock),transientArrayService:new TransientArrayService});await simulator.executeUserCircuit(toACVMWitness(0,call.args),entryPointArtifact,buildACIRCallback(oracle)).catch(err=>{throw err.message=resolveAssertionMessageFromError(err,entryPointArtifact),new ExecutionError(err.message,{contractAddress:call.to,functionSelector:call.selector},extractCallStack(err,entryPointArtifact.debug),{cause:err})})}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error contract data sync"))}}}};var ForeignCallSingleSchema=external_exports.string(),ForeignCallArraySchema=external_exports.array(external_exports.string()),ForeignCallArgsSchema=external_exports.array(external_exports.union([ForeignCallSingleSchema,ForeignCallArraySchema,ContractArtifactSchema,ContractInstanceWithAddressSchema])),ForeignCallResultSchema=external_exports.object({values:external_exports.array(external_exports.union([ForeignCallSingleSchema,ForeignCallArraySchema]))});var ContractClassRegistryContractArtifact={name:"ContractClassRegistry",aztecVersion:"5.1.0",functions:[{functionType:FunctionType.PRIVATE,name:"publish",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"artifact_hash",type:{kind:"field"},visibility:"private"},{name:"private_functions_root",type:{kind:"field"},visibility:"private"},{name:"public_bytecode_commitment",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"10965409165809799877":{error_kind:"string",string:"Given in_len to absorb is larger than the input array len"},"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15669273164684982983":{error_kind:"string",string:"num_permutations is greater than MAX_PERMUTATIONS"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"16450579948625159707":{error_kind:"string",string:"Sponge must be in cache_size=1"},"17655676068928457687":{error_kind:"string",string:"Reader did not read all data"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"922421554006670918":{error_kind:"string",string:"num_items is greater than MAX_ITEMS"},"9475115977882098926":{error_kind:"string",string:"Extra bytes in the last field of the bytecode"}},bytecode:Buffer.from([]),debugSymbols:""},{functionType:FunctionType.PUBLIC,name:"public_dispatch",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"1335198680857977525":{error_kind:"string",string:"No public functions"}},bytecode:Buffer.from([]),debugSymbols:""}],nonDispatchPublicFunctions:[],outputs:{structs:{},globals:{}},storageLayout:{},fileMap:{}};var ContractInstanceRegistryContractArtifact={name:"ContractInstanceRegistry",aztecVersion:"5.1.0",functions:[{functionType:FunctionType.PUBLIC,name:"public_dispatch",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"11194752367584870169":{error_kind:"fmtstring",length:27,item_types:[{kind:"field"}]},"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"12579274401768182412":{error_kind:"string",string:"New contract class is not registered"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"5755400808989454547":{error_kind:"string",string:"Function get_update_delay can only be called statically"},"6804164082532189961":{error_kind:"string",string:"New update delay is too low"}},bytecode:Buffer.from([]),debugSymbols:""},{functionType:FunctionType.PRIVATE,name:"publish_for_public_execution",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"salt",type:{kind:"field"},visibility:"private"},{name:"contract_class_id",type:{kind:"struct",fields:[{name:"inner",type:{kind:"field"}}],path:"aztec::protocol_types::contract_class_id::ContractClassId"},visibility:"private"},{name:"initialization_hash",type:{kind:"field"},visibility:"private"},{name:"immutables_hash",type:{kind:"field"},visibility:"private"},{name:"public_keys",type:{kind:"struct",fields:[{name:"npk_m_hash",type:{kind:"field"}},{name:"ivpk_m",type:{kind:"struct",fields:[{name:"inner",type:{kind:"struct",fields:[{name:"x",type:{kind:"field"}},{name:"y",type:{kind:"field"}}],path:"std::embedded_curve_ops::EmbeddedCurvePoint"}}],path:"aztec::protocol_types::public_keys::IvpkM"}},{name:"ovpk_m_hash",type:{kind:"field"}},{name:"tpk_m_hash",type:{kind:"field"}},{name:"mspk_m_hash",type:{kind:"field"}},{name:"fbpk_m_hash",type:{kind:"field"}}],path:"aztec::protocol_types::public_keys::PublicKeys"},visibility:"private"},{name:"universal_deploy",type:{kind:"boolean"},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"14483585040754951598":{error_kind:"string",string:"IvpkM is the point at infinity"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"718532354304118388":{error_kind:"string",string:"Point not on curve"}},bytecode:Buffer.from([]),debugSymbols:""}],nonDispatchPublicFunctions:[{functionType:FunctionType.PUBLIC,name:"get_update_delay",isOnlySelf:!1,isStatic:!0,isInitializer:!1,parameters:[],returnTypes:[{kind:"integer",sign:"unsigned",width:64}],errorTypes:{"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"5755400808989454547":{error_kind:"string",string:"Function get_update_delay can only be called statically"}}},{functionType:FunctionType.PUBLIC,name:"set_update_delay",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"new_update_delay",type:{kind:"integer",sign:"unsigned",width:64},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"6804164082532189961":{error_kind:"string",string:"New update delay is too low"}}},{functionType:FunctionType.PUBLIC,name:"update",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"new_contract_class_id",type:{kind:"struct",fields:[{name:"inner",type:{kind:"field"}}],path:"aztec::protocol_types::contract_class_id::ContractClassId"},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"12579274401768182412":{error_kind:"string",string:"New contract class is not registered"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"}}}],outputs:{structs:{},globals:{}},storageLayout:{},fileMap:{}};var DefaultWaitOpts={ignoreDroppedReceiptsFor:5,timeout:300,interval:1};var DefaultWaitForProvenOpts={provenTimeout:600,interval:DefaultWaitOpts.interval};import{createHash as createHash2}from"crypto";import{createReadStream}from"fs";import{readFile,readdir}from"fs/promises";import{join as join4,parse as parse3}from"path";var AsyncCache=class{static{__name(this,"AsyncCache")}#cache=new Map;#inFlight=new Map;getOrCompute(key,compute){let cached2=this.#cache.get(key);if(cached2!==void 0)return Promise.resolve(cached2);let pending=this.#inFlight.get(key);return pending||(pending=(async()=>{try{let value=await compute();return this.#cache.set(key,value),value}finally{this.#inFlight.delete(key)}})(),this.#inFlight.set(key,pending)),pending}},TXEArtifactResolver=class{constructor(contractStore,schnorrClassId){this.contractStore=contractStore;this.schnorrClassId=schnorrClassId}static{__name(this,"TXEArtifactResolver")}#deployments=new AsyncCache;#artifacts=new AsyncCache;#logger=createLogger("txe:artifact_resolver");resolveAccountArtifact(secret){return this.#deployments.getOrCompute(`SchnorrAccountContract-${secret}`,()=>this.#computeAccountArtifact(secret))}async resolveDeployArtifact({rootPath,packageName,contractPath,initializer:initializer3,args,secret,salt,deployer}){let publicKeys=secret.equals(Fr.ZERO)?PublicKeys.default():(await deriveKeys(secret)).publicKeys,publicKeysHash=await publicKeys.hash(),artifactPath=await this.#resolveArtifactPath(rootPath,packageName,contractPath),fileHash=await this.#fastHashFile(artifactPath),{dir:contractDirectory,base:contractFilename}=parse3(contractPath),cacheKey=`${contractDirectory??""}-${contractFilename}-${initializer3}-${args.map(arg=>arg.toString()).join("-")}-${publicKeysHash}-${salt}-${deployer}-${fileHash}`;return this.#deployments.getOrCompute(cacheKey,()=>this.#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer))}async#resolveArtifactPath(rootPath,packageName,contractPath){let{dir:contractDirectory,base:contractFilename}=parse3(contractPath);if(contractDirectory)if(contractDirectory.includes("@")){let[workspace,pkg]=contractDirectory.split("@"),targetPath=join4(rootPath,workspace,"/target");return this.#logger.debug(`Looking for compiled artifact in workspace ${targetPath}`),join4(targetPath,`${pkg}-${contractFilename}.json`)}else{let targetPath=join4(rootPath,contractDirectory,"/target");this.#logger.debug(`Looking for compiled artifact in ${targetPath}`);let[artifactPath]=(await readdir(targetPath)).filter(file2=>file2.endsWith(`-${contractFilename}.json`));return artifactPath}else return join4(rootPath,"./target",`${packageName}-${contractFilename}.json`)}async#computeAccountArtifact(secret){let[artifactFromStore,classWithPreimage]=await Promise.all([this.contractStore.getContractArtifact(this.schnorrClassId),this.contractStore.getContractClassWithPreimage(this.schnorrClassId)]);if(!artifactFromStore||!classWithPreimage)throw new Error(`SchnorrAccount not found in shared contract store at class id ${this.schnorrClassId.toString()}`);let artifact={...artifactFromStore,artifactHash:classWithPreimage.artifactHash},keys=await deriveKeys(secret),args=[keys.publicKeys.ivpkM.x,keys.publicKeys.ivpkM.y],instance=await getContractInstanceFromInstantiationParams(artifact,{constructorArgs:args,skipArgsDecoding:!0,salt:Fr.ONE,publicKeys:keys.publicKeys,constructorArtifact:"constructor",deployer:AztecAddress.ZERO});return{artifact,instance}}async#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer){let artifact=await this.#artifacts.getOrCompute(fileHash,async()=>{this.#logger.debug(`Loading compiled artifact ${artifactPath}`);let artifactJSON=JSON.parse(await readFile(artifactPath,"utf-8")),artifactWithoutHash=loadContractArtifact(artifactJSON);return{...artifactWithoutHash,artifactHash:await computeArtifactHash(artifactWithoutHash)}});this.#logger.debug(`Deploy ${artifact.name} with initializer ${initializer3}(${args}) and public keys hash ${publicKeysHash}`);let instance=await getContractInstanceFromInstantiationParams(artifact,{constructorArgs:args,skipArgsDecoding:!0,salt,publicKeys,constructorArtifact:initializer3||void 0,deployer});return{artifact,instance}}#fastHashFile(path){return new Promise(resolve=>{let fd=createReadStream(path),hash5=createHash2("sha1");hash5.setEncoding("hex"),fd.on("end",function(){hash5.end(),resolve(hash5.read())}),fd.pipe(hash5)})}};var TXE_REQUIRED_PROTOCOL_CONTRACTS=["ContractClassRegistry","ContractInstanceRegistry","FeeJuice"],sessions=new Map,TXEForeignCallInputSchema=zodFor()(external_exports.object({session_id:external_exports.number().nonnegative(),function:external_exports.string(),root_path:external_exports.string(),package_name:external_exports.string(),inputs:ForeignCallArgsSchema})),TXEDispatcher=class{constructor(logger3,opts){this.logger=logger3;this.contractStoreSourceDir=opts.contractStoreSourceDir,this.schnorrClassId=Fr.fromString(opts.schnorrClassId)}static{__name(this,"TXEDispatcher")}contractStore;artifactResolver;contractStoreSourceDir;schnorrClassId;async warmUp(){if(this.contractStore)return;let t0=Date.now(),kvStore=await cloneEphemeralStoreFrom(join5(this.contractStoreSourceDir,"data.mdb"),"txe-contracts",void 0,2);this.contractStore=new ContractStore(kvStore),this.artifactResolver=new TXEArtifactResolver(this.contractStore,this.schnorrClassId),this.logger.debug("Cloned shared protocol-contracts store",{totalMs:Date.now()-t0})}async resolve_foreign_call(callData){let{session_id:sessionId,function:functionName,inputs,root_path:rootPath,package_name:packageName}=callData;return this.logger.debug(`Calling ${functionName} on session ${sessionId}`),sessions.has(sessionId)||(this.logger.debug(`Creating new session ${sessionId}`),await this.warmUp(),sessions.set(sessionId,await TXESession.init(this.contractStore,this.artifactResolver,rootPath,packageName))),await sessions.get(sessionId).processFunction(functionName,inputs)}async disposeSession(sessionId){let session=sessions.get(sessionId);session&&(sessions.delete(sessionId),await session.dispose())}};function activeSessionCount(){return sessions.size}__name(activeSessionCount,"activeSessionCount");var TXEDispatcherApiSchema={resolve_foreign_call:external_exports.function({input:external_exports.tuple([TXEForeignCallInputSchema]),output:ForeignCallResultSchema}),disposeSession:external_exports.function({input:external_exports.tuple([external_exports.number().nonnegative()]),output:external_exports.void()})};export{createLogger,ZodError,external_exports,Fr,schemaHasMethod,getSchemaParameters,parseWithOptionals,require_inherits,sha256ToField,promiseWithResolvers,Timer,jsonStringify,loadContractArtifact,getContractClassFromArtifact,openEphemeralStore,LazyProtocolContractsProvider,ContractStore,getStandardAuthRegistry,getStandardHandshakeRegistry,TXE_REQUIRED_PROTOCOL_CONTRACTS,TXEDispatcher,activeSessionCount,TXEDispatcherApiSchema};
|
|
266
|
+
}`}};var FinalBlobBatchingChallenges=class _FinalBlobBatchingChallenges{static{__name(this,"FinalBlobBatchingChallenges")}z;gamma;constructor(z2,gamma){this.z=z2,this.gamma=gamma}equals(other){return this.z.equals(other.z)&&this.gamma.equals(other.gamma)}static empty(){return new _FinalBlobBatchingChallenges(Fr.ZERO,BLS12Fr.ZERO)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _FinalBlobBatchingChallenges(Fr.fromBuffer(reader),reader.readObject(BLS12Fr))}toBuffer(){return serializeToBuffer(this.z,this.gamma)}};var ParityBasePrivateInputs=class _ParityBasePrivateInputs{static{__name(this,"ParityBasePrivateInputs")}msgs;vkTreeRoot;proverId;constructor(msgs,vkTreeRoot,proverId){this.msgs=msgs,this.vkTreeRoot=vkTreeRoot,this.proverId=proverId}static fromSlice(array2,index,vkTreeRoot,proverId){if(array2.length!==1024)throw new Error(`Msgs array length must be NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP=${1024}`);let start=index*256,end=start+256,msgs=array2.slice(start,end);return new _ParityBasePrivateInputs(msgs,vkTreeRoot,proverId)}toBuffer(){return serializeToBuffer(this.msgs,this.vkTreeRoot,this.proverId)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityBasePrivateInputs(reader.readArray(256,Fr),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _ParityBasePrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_ParityBasePrivateInputs)}};var ParityPublicInputs=class _ParityPublicInputs{static{__name(this,"ParityPublicInputs")}shaRoot;convertedRoot;vkTreeRoot;proverId;constructor(shaRoot,convertedRoot,vkTreeRoot,proverId){if(this.shaRoot=shaRoot,this.convertedRoot=convertedRoot,this.vkTreeRoot=vkTreeRoot,this.proverId=proverId,shaRoot.toBuffer()[0]!=0)throw new Error("shaRoot buffer must be 31 bytes. Got 32 bytes")}toBuffer(){return serializeToBuffer(..._ParityPublicInputs.getFields(this))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static from(fields){return new _ParityPublicInputs(..._ParityPublicInputs.getFields(fields))}static getFields(fields){return[fields.shaRoot,fields.convertedRoot,fields.vkTreeRoot,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityPublicInputs(reader.readObject(Fr),reader.readObject(Fr),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _ParityPublicInputs.fromBuffer(hexToBuffer(str))}static get schema(){return bufferSchemaFor(_ParityPublicInputs)}};var ParityRootPrivateInputs=class _ParityRootPrivateInputs{static{__name(this,"ParityRootPrivateInputs")}children;constructor(children){this.children=children}toBuffer(){return serializeToBuffer(this.children)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityRootPrivateInputs(makeTuple(4,()=>ProofData.fromBuffer(reader,ParityPublicInputs)))}static fromString(str){return _ParityRootPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_ParityRootPrivateInputs)}};var BlockConstantData=class _BlockConstantData{static{__name(this,"BlockConstantData")}lastArchive;l1ToL2TreeSnapshot;vkTreeRoot;protocolContractsHash;globalVariables;proverId;constructor(lastArchive,l1ToL2TreeSnapshot,vkTreeRoot,protocolContractsHash2,globalVariables,proverId){this.lastArchive=lastArchive,this.l1ToL2TreeSnapshot=l1ToL2TreeSnapshot,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.globalVariables=globalVariables,this.proverId=proverId}static from(fields){return new _BlockConstantData(..._BlockConstantData.getFields(fields))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockConstantData(reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),Fr.fromBuffer(reader),Fr.fromBuffer(reader),reader.readObject(GlobalVariables),Fr.fromBuffer(reader))}static getFields(fields){return[fields.lastArchive,fields.l1ToL2TreeSnapshot,fields.vkTreeRoot,fields.protocolContractsHash,fields.globalVariables,fields.proverId]}static empty(){return new _BlockConstantData(AppendOnlyTreeSnapshot.empty(),AppendOnlyTreeSnapshot.empty(),Fr.ZERO,Fr.ZERO,GlobalVariables.empty(),Fr.ZERO)}toBuffer(){return serializeToBuffer(..._BlockConstantData.getFields(this))}};var TreeSnapshotDiffHints=class _TreeSnapshotDiffHints{static{__name(this,"TreeSnapshotDiffHints")}noteHashSubtreeRootSiblingPath;nullifierPredecessorPreimages;nullifierPredecessorMembershipWitnesses;sortedNullifiers;sortedNullifierIndexes;nullifierSubtreeRootSiblingPath;feePayerBalanceMembershipWitness;constructor(noteHashSubtreeRootSiblingPath,nullifierPredecessorPreimages,nullifierPredecessorMembershipWitnesses,sortedNullifiers,sortedNullifierIndexes,nullifierSubtreeRootSiblingPath,feePayerBalanceMembershipWitness){this.noteHashSubtreeRootSiblingPath=noteHashSubtreeRootSiblingPath,this.nullifierPredecessorPreimages=nullifierPredecessorPreimages,this.nullifierPredecessorMembershipWitnesses=nullifierPredecessorMembershipWitnesses,this.sortedNullifiers=sortedNullifiers,this.sortedNullifierIndexes=sortedNullifierIndexes,this.nullifierSubtreeRootSiblingPath=nullifierSubtreeRootSiblingPath,this.feePayerBalanceMembershipWitness=feePayerBalanceMembershipWitness}static from(fields){return new _TreeSnapshotDiffHints(..._TreeSnapshotDiffHints.getFields(fields))}static getFields(fields){return[fields.noteHashSubtreeRootSiblingPath,fields.nullifierPredecessorPreimages,fields.nullifierPredecessorMembershipWitnesses,fields.sortedNullifiers,fields.sortedNullifierIndexes,fields.nullifierSubtreeRootSiblingPath,fields.feePayerBalanceMembershipWitness]}toBuffer(){return serializeToBuffer(..._TreeSnapshotDiffHints.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TreeSnapshotDiffHints(reader.readArray(36,Fr),reader.readArray(64,NullifierLeafPreimage),reader.readArray(64,{fromBuffer:__name(buffer2=>MembershipWitness.fromBuffer(buffer2,42),"fromBuffer")}),reader.readArray(64,Fr),reader.readNumbers(64),reader.readArray(36,Fr),MembershipWitness.fromBuffer(reader,40))}static empty(){return new _TreeSnapshotDiffHints(makeTuple(36,Fr.zero),makeTuple(64,NullifierLeafPreimage.empty),makeTuple(64,()=>MembershipWitness.empty(42)),makeTuple(64,Fr.zero),makeTuple(64,()=>0),makeTuple(36,Fr.zero),MembershipWitness.empty(40))}};var PrivateBaseRollupHints=class _PrivateBaseRollupHints{static{__name(this,"PrivateBaseRollupHints")}start;startSpongeBlob;treeSnapshotDiffHints;feePayerBalanceLeafPreimage;anchorBlockArchiveSiblingPath;contractClassLogsFields;constants;constructor(start,startSpongeBlob,treeSnapshotDiffHints,feePayerBalanceLeafPreimage,anchorBlockArchiveSiblingPath,contractClassLogsFields,constants){this.start=start,this.startSpongeBlob=startSpongeBlob,this.treeSnapshotDiffHints=treeSnapshotDiffHints,this.feePayerBalanceLeafPreimage=feePayerBalanceLeafPreimage,this.anchorBlockArchiveSiblingPath=anchorBlockArchiveSiblingPath,this.contractClassLogsFields=contractClassLogsFields,this.constants=constants}static from(fields){return new _PrivateBaseRollupHints(..._PrivateBaseRollupHints.getFields(fields))}static getFields(fields){return[fields.start,fields.startSpongeBlob,fields.treeSnapshotDiffHints,fields.feePayerBalanceLeafPreimage,fields.anchorBlockArchiveSiblingPath,fields.contractClassLogsFields,fields.constants]}toBuffer(){return serializeToBuffer(..._PrivateBaseRollupHints.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PrivateBaseRollupHints(reader.readObject(PartialStateReference),reader.readObject(SpongeBlob),reader.readObject(TreeSnapshotDiffHints),reader.readObject(PublicDataTreeLeafPreimage),reader.readArray(30,Fr),makeTuple(1,()=>reader.readObject(ContractClassLogFields)),reader.readObject(BlockConstantData))}static fromString(str){return _PrivateBaseRollupHints.fromBuffer(hexToBuffer(str))}static empty(){return new _PrivateBaseRollupHints(PartialStateReference.empty(),SpongeBlob.empty(),TreeSnapshotDiffHints.empty(),PublicDataTreeLeafPreimage.empty(),makeTuple(30,Fr.zero),makeTuple(1,ContractClassLogFields.empty),BlockConstantData.empty())}},PublicBaseRollupHints=class _PublicBaseRollupHints{static{__name(this,"PublicBaseRollupHints")}startSpongeBlob;lastArchive;anchorBlockArchiveSiblingPath;contractClassLogsFields;constructor(startSpongeBlob,lastArchive,anchorBlockArchiveSiblingPath,contractClassLogsFields){this.startSpongeBlob=startSpongeBlob,this.lastArchive=lastArchive,this.anchorBlockArchiveSiblingPath=anchorBlockArchiveSiblingPath,this.contractClassLogsFields=contractClassLogsFields}static from(fields){return new _PublicBaseRollupHints(..._PublicBaseRollupHints.getFields(fields))}static getFields(fields){return[fields.startSpongeBlob,fields.lastArchive,fields.anchorBlockArchiveSiblingPath,fields.contractClassLogsFields]}toBuffer(){return serializeToBuffer(..._PublicBaseRollupHints.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicBaseRollupHints(reader.readObject(SpongeBlob),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(30,Fr),makeTuple(1,()=>reader.readObject(ContractClassLogFields)))}static fromString(str){return _PublicBaseRollupHints.fromBuffer(hexToBuffer(str))}static empty(){return new _PublicBaseRollupHints(SpongeBlob.empty(),AppendOnlyTreeSnapshot.empty(),makeTuple(30,Fr.zero),makeTuple(1,ContractClassLogFields.empty))}};import{inspect as inspect45}from"util";var _computedKey47;_computedKey47=inspect45.custom;var CheckpointConstantData=class _CheckpointConstantData{static{__name(this,"CheckpointConstantData")}chainId;version;vkTreeRoot;protocolContractsHash;proverId;slotNumber;coinbase;feeRecipient;gasFees;constructor(chainId,version2,vkTreeRoot,protocolContractsHash2,proverId,slotNumber,coinbase,feeRecipient,gasFees){this.chainId=chainId,this.version=version2,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.proverId=proverId,this.slotNumber=slotNumber,this.coinbase=coinbase,this.feeRecipient=feeRecipient,this.gasFees=gasFees}static from(fields){return new _CheckpointConstantData(..._CheckpointConstantData.getFields(fields))}static getFields(fields){return[fields.chainId,fields.version,fields.vkTreeRoot,fields.protocolContractsHash,fields.proverId,fields.slotNumber,fields.coinbase,fields.feeRecipient,fields.gasFees]}static empty(){return new _CheckpointConstantData(Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,SlotNumber.ZERO,EthAddress.ZERO,AztecAddress.ZERO,GasFees.empty())}toBuffer(){return serializeToBuffer(this.chainId,this.version,this.vkTreeRoot,this.protocolContractsHash,this.proverId,new Fr(this.slotNumber),this.coinbase,this.feeRecipient,this.gasFees)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointConstantData(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),SlotNumber(Fr.fromBuffer(reader).toNumber()),reader.readObject(EthAddress),reader.readObject(AztecAddress),reader.readObject(GasFees))}getSlotNumber(){return this.slotNumber}toInspect(){return{chainId:this.chainId.toNumber(),version:this.version.toNumber(),vkTreeRoot:this.vkTreeRoot.toString(),protocolContractsHash:this.protocolContractsHash.toString(),proverId:this.proverId.toString(),slotNumber:this.slotNumber,coinbase:this.coinbase.toString(),feeRecipient:this.feeRecipient.toString(),gasFees:this.gasFees.toInspect()}}[_computedKey47](){return`CheckpointConstantData ${inspect45(this.toInspect())}`}};var BlockRollupPublicInputs=class _BlockRollupPublicInputs{static{__name(this,"BlockRollupPublicInputs")}constants;previousArchive;newArchive;startState;endState;startSpongeBlob;endSpongeBlob;timestamp;blockHeadersHash;inHash;outHash;accumulatedFees;accumulatedManaUsed;constructor(constants,previousArchive,newArchive,startState,endState,startSpongeBlob,endSpongeBlob,timestamp,blockHeadersHash,inHash,outHash,accumulatedFees,accumulatedManaUsed){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.startState=startState,this.endState=endState,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.timestamp=timestamp,this.blockHeadersHash=blockHeadersHash,this.inHash=inHash,this.outHash=outHash,this.accumulatedFees=accumulatedFees,this.accumulatedManaUsed=accumulatedManaUsed}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRollupPublicInputs(reader.readObject(CheckpointConstantData),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(StateReference),reader.readObject(StateReference),reader.readObject(SpongeBlob),reader.readObject(SpongeBlob),reader.readUInt64(),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.constants,this.previousArchive,this.newArchive,this.startState,this.endState,this.startSpongeBlob,this.endSpongeBlob,bigintToUInt64BE(this.timestamp),this.blockHeadersHash,this.inHash,this.outHash,this.accumulatedFees,this.accumulatedManaUsed)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _BlockRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}toInspect(){return{previousArchiveRoot:this.previousArchive.root.toString(),newArchiveRoot:this.newArchive.root.toString(),blockHeadersHash:this.blockHeadersHash.toString(),inHash:this.inHash.toString(),outHash:this.outHash.toString(),timestamp:this.timestamp.toString(),accumulatedFees:this.accumulatedFees.toString(),accumulatedManaUsed:this.accumulatedManaUsed.toString()}}static get schema(){return bufferSchemaFor(_BlockRollupPublicInputs)}};var BlockMergeRollupPrivateInputs=class _BlockMergeRollupPrivateInputs{static{__name(this,"BlockMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockMergeRollupPrivateInputs([ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,BlockRollupPublicInputs)])}static fromString(str){return _BlockMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockMergeRollupPrivateInputs)}};var TxRollupPublicInputs=class _TxRollupPublicInputs{static{__name(this,"TxRollupPublicInputs")}numTxs;constants;startTreeSnapshots;endTreeSnapshots;startSpongeBlob;endSpongeBlob;outHash;accumulatedFees;accumulatedManaUsed;constructor(numTxs,constants,startTreeSnapshots,endTreeSnapshots,startSpongeBlob,endSpongeBlob,outHash,accumulatedFees,accumulatedManaUsed){this.numTxs=numTxs,this.constants=constants,this.startTreeSnapshots=startTreeSnapshots,this.endTreeSnapshots=endTreeSnapshots,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.outHash=outHash,this.accumulatedFees=accumulatedFees,this.accumulatedManaUsed=accumulatedManaUsed}static empty(){return new _TxRollupPublicInputs(0,BlockConstantData.empty(),PartialStateReference.empty(),PartialStateReference.empty(),SpongeBlob.empty(),SpongeBlob.empty(),Fr.zero(),Fr.zero(),Fr.zero())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TxRollupPublicInputs(reader.readNumber(),reader.readObject(BlockConstantData),reader.readObject(PartialStateReference),reader.readObject(PartialStateReference),reader.readObject(SpongeBlob),reader.readObject(SpongeBlob),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.numTxs,this.constants,this.startTreeSnapshots,this.endTreeSnapshots,this.startSpongeBlob,this.endSpongeBlob,this.outHash,this.accumulatedFees,this.accumulatedManaUsed)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _TxRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_TxRollupPublicInputs)}};var BlockRootFirstRollupPrivateInputs=class _BlockRootFirstRollupPrivateInputs{static{__name(this,"BlockRootFirstRollupPrivateInputs")}l1ToL2Roots;previousRollups;previousL1ToL2;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousRollups,previousL1ToL2,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousRollups=previousRollups,this.previousL1ToL2=previousL1ToL2,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootFirstRollupPrivateInputs(..._BlockRootFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousRollups,fields.previousL1ToL2,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootFirstRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),[ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootFirstRollupPrivateInputs)}},BlockRootSingleTxFirstRollupPrivateInputs=class _BlockRootSingleTxFirstRollupPrivateInputs{static{__name(this,"BlockRootSingleTxFirstRollupPrivateInputs")}l1ToL2Roots;previousRollup;previousL1ToL2;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousRollup,previousL1ToL2,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousRollup=previousRollup,this.previousL1ToL2=previousL1ToL2,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxFirstRollupPrivateInputs(..._BlockRootSingleTxFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousRollup,fields.previousL1ToL2,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootSingleTxFirstRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootSingleTxFirstRollupPrivateInputs)}},BlockRootEmptyTxFirstRollupPrivateInputs=class _BlockRootEmptyTxFirstRollupPrivateInputs{static{__name(this,"BlockRootEmptyTxFirstRollupPrivateInputs")}l1ToL2Roots;previousArchive;previousState;constants;timestamp;newL1ToL2MessageSubtreeRootSiblingPath;newArchiveSiblingPath;constructor(l1ToL2Roots,previousArchive,previousState,constants,timestamp,newL1ToL2MessageSubtreeRootSiblingPath,newArchiveSiblingPath){this.l1ToL2Roots=l1ToL2Roots,this.previousArchive=previousArchive,this.previousState=previousState,this.constants=constants,this.timestamp=timestamp,this.newL1ToL2MessageSubtreeRootSiblingPath=newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootEmptyTxFirstRollupPrivateInputs(..._BlockRootEmptyTxFirstRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.l1ToL2Roots,fields.previousArchive,fields.previousState,fields.constants,fields.timestamp,fields.newL1ToL2MessageSubtreeRootSiblingPath,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer([this.l1ToL2Roots,this.previousArchive,this.previousState,this.constants,bigintToUInt64BE(this.timestamp),this.newL1ToL2MessageSubtreeRootSiblingPath,this.newArchiveSiblingPath])}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootEmptyTxFirstRollupPrivateInputs(ProofData.fromBuffer(reader,ParityPublicInputs),AppendOnlyTreeSnapshot.fromBuffer(reader),StateReference.fromBuffer(reader),CheckpointConstantData.fromBuffer(reader),reader.readUInt64(),reader.readArray(26,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootEmptyTxFirstRollupPrivateInputs)}},BlockRootRollupPrivateInputs=class _BlockRootRollupPrivateInputs{static{__name(this,"BlockRootRollupPrivateInputs")}previousRollups;newArchiveSiblingPath;constructor(previousRollups,newArchiveSiblingPath){this.previousRollups=previousRollups,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootRollupPrivateInputs(..._BlockRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootRollupPrivateInputs)}},BlockRootSingleTxRollupPrivateInputs=class _BlockRootSingleTxRollupPrivateInputs{static{__name(this,"BlockRootSingleTxRollupPrivateInputs")}previousRollup;newArchiveSiblingPath;constructor(previousRollup,newArchiveSiblingPath){this.previousRollup=previousRollup,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxRollupPrivateInputs(..._BlockRootSingleTxRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(..._BlockRootSingleTxRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxRollupPrivateInputs(ProofData.fromBuffer(reader,TxRollupPublicInputs),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootSingleTxRollupPrivateInputs)}};var EpochConstantData=class _EpochConstantData{static{__name(this,"EpochConstantData")}chainId;version;vkTreeRoot;protocolContractsHash;proverId;constructor(chainId,version2,vkTreeRoot,protocolContractsHash2,proverId){this.chainId=chainId,this.version=version2,this.vkTreeRoot=vkTreeRoot,this.protocolContractsHash=protocolContractsHash2,this.proverId=proverId}static from(fields){return new _EpochConstantData(..._EpochConstantData.getFields(fields))}static getFields(fields){return[fields.chainId,fields.version,fields.vkTreeRoot,fields.protocolContractsHash,fields.proverId]}toFields(){return serializeToFields(..._EpochConstantData.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _EpochConstantData(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(..._EpochConstantData.getFields(this))}static empty(){return new _EpochConstantData(Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO,Fr.ZERO)}};var CheckpointRollupPublicInputs=class _CheckpointRollupPublicInputs{static{__name(this,"CheckpointRollupPublicInputs")}constants;previousArchive;newArchive;previousOutHash;newOutHash;checkpointHeaderHashes;fees;startBlobAccumulator;endBlobAccumulator;finalBlobChallenges;constructor(constants,previousArchive,newArchive,previousOutHash,newOutHash,checkpointHeaderHashes,fees,startBlobAccumulator,endBlobAccumulator,finalBlobChallenges){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.previousOutHash=previousOutHash,this.newOutHash=newOutHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.startBlobAccumulator=startBlobAccumulator,this.endBlobAccumulator=endBlobAccumulator,this.finalBlobChallenges=finalBlobChallenges}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRollupPublicInputs(reader.readObject(EpochConstantData),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(32,Fr),reader.readArray(32,FeeRecipient),reader.readObject(BlobAccumulator),reader.readObject(BlobAccumulator),reader.readObject(FinalBlobBatchingChallenges))}toBuffer(){return serializeToBuffer(this.constants,this.previousArchive,this.newArchive,this.previousOutHash,this.newOutHash,this.checkpointHeaderHashes,this.fees,this.startBlobAccumulator,this.endBlobAccumulator,this.finalBlobChallenges)}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}toInspect(){return{checkpointHeaderHash:this.checkpointHeaderHashes[0].toString(),previousArchiveRoot:this.previousArchive.root.toString(),newArchiveRoot:this.newArchive.root.toString(),previousOutHashRoot:this.previousOutHash.root.toString(),newOutHashRoot:this.newOutHash.root.toString()}}static get schema(){return bufferSchemaFor(_CheckpointRollupPublicInputs)}},FeeRecipient=class _FeeRecipient{static{__name(this,"FeeRecipient")}recipient;value;constructor(recipient,value){this.recipient=recipient,this.value=value}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _FeeRecipient(reader.readObject(EthAddress),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.recipient,this.value)}static getFields(fields){return[fields.recipient,fields.value]}toFields(){return serializeToFields(..._FeeRecipient.getFields(this))}static empty(){return new _FeeRecipient(EthAddress.ZERO,Fr.ZERO)}isEmpty(){return this.value.isZero()&&this.recipient.isZero()}toFriendlyJSON(){return this.isEmpty()?{}:{recipient:this.recipient.toString(),value:this.value.toString()}}static random(){return new _FeeRecipient(EthAddress.random(),Fr.random())}};var PrivateTxBaseRollupPrivateInputs=class _PrivateTxBaseRollupPrivateInputs{static{__name(this,"PrivateTxBaseRollupPrivateInputs")}hidingKernelProofData;hints;constructor(hidingKernelProofData,hints){this.hidingKernelProofData=hidingKernelProofData,this.hints=hints}static from(fields){return new _PrivateTxBaseRollupPrivateInputs(..._PrivateTxBaseRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.hidingKernelProofData,fields.hints]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PrivateTxBaseRollupPrivateInputs(ProofData.fromBuffer(reader,PrivateToRollupKernelCircuitPublicInputs),reader.readObject(PrivateBaseRollupHints))}toBuffer(){return serializeToBuffer(..._PrivateTxBaseRollupPrivateInputs.getFields(this))}static fromString(str){return _PrivateTxBaseRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PrivateTxBaseRollupPrivateInputs)}};var PublicChonkVerifierPublicInputs=class _PublicChonkVerifierPublicInputs{static{__name(this,"PublicChonkVerifierPublicInputs")}privateTail;proverId;constructor(privateTail,proverId){this.privateTail=privateTail,this.proverId=proverId}static from(fields){return new _PublicChonkVerifierPublicInputs(..._PublicChonkVerifierPublicInputs.getFields(fields))}static getFields(fields){return[fields.privateTail,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicChonkVerifierPublicInputs(reader.readObject(PrivateToPublicKernelCircuitPublicInputs),reader.readObject(Fr))}toBuffer(){return serializeToBuffer(..._PublicChonkVerifierPublicInputs.getFields(this))}static fromString(str){return _PublicChonkVerifierPublicInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicChonkVerifierPublicInputs)}};var PublicTxBaseRollupPrivateInputs=class _PublicTxBaseRollupPrivateInputs{static{__name(this,"PublicTxBaseRollupPrivateInputs")}publicChonkVerifierProofData;avmProofData;hints;constructor(publicChonkVerifierProofData,avmProofData,hints){this.publicChonkVerifierProofData=publicChonkVerifierProofData,this.avmProofData=avmProofData,this.hints=hints}static from(fields){return new _PublicTxBaseRollupPrivateInputs(..._PublicTxBaseRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.publicChonkVerifierProofData,fields.avmProofData,fields.hints]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicTxBaseRollupPrivateInputs(ProofData.fromBuffer(reader,PublicChonkVerifierPublicInputs),ProofDataForFixedVk.fromBuffer(reader,AvmCircuitPublicInputs),reader.readObject(PublicBaseRollupHints))}toBuffer(){return serializeToBuffer(..._PublicTxBaseRollupPrivateInputs.getFields(this))}static fromString(str){return _PublicTxBaseRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicTxBaseRollupPrivateInputs)}};var RootRollupPublicInputs=class _RootRollupPublicInputs{static{__name(this,"RootRollupPublicInputs")}previousArchiveRoot;endArchiveRoot;outHash;checkpointHeaderHashes;fees;constants;blobPublicInputs;constructor(previousArchiveRoot,endArchiveRoot,outHash,checkpointHeaderHashes,fees,constants,blobPublicInputs){this.previousArchiveRoot=previousArchiveRoot,this.endArchiveRoot=endArchiveRoot,this.outHash=outHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.constants=constants,this.blobPublicInputs=blobPublicInputs}static getFields(fields){return[fields.previousArchiveRoot,fields.endArchiveRoot,fields.outHash,fields.checkpointHeaderHashes,fields.fees,fields.constants,fields.blobPublicInputs]}toBuffer(){return serializeToBuffer(..._RootRollupPublicInputs.getFields(this))}toFields(){return serializeToFields(..._RootRollupPublicInputs.getFields(this))}static from(fields){return new _RootRollupPublicInputs(..._RootRollupPublicInputs.getFields(fields))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _RootRollupPublicInputs(Fr.fromBuffer(reader),Fr.fromBuffer(reader),Fr.fromBuffer(reader),reader.readArray(32,Fr),reader.readArray(32,FeeRecipient),EpochConstantData.fromBuffer(reader),reader.readObject(FinalBlobAccumulator))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _RootRollupPublicInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_RootRollupPublicInputs)}static random(){return new _RootRollupPublicInputs(Fr.random(),Fr.random(),Fr.random(),makeTuple(32,Fr.random),makeTuple(32,FeeRecipient.random),new EpochConstantData(Fr.random(),Fr.random(),Fr.random(),Fr.random(),Fr.random()),FinalBlobAccumulator.random())}};var TxMergeRollupPrivateInputs=class _TxMergeRollupPrivateInputs{static{__name(this,"TxMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _TxMergeRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)])}static fromString(str){return _TxMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_TxMergeRollupPrivateInputs)}};function makeGlobalVariables(seed=1,overrides={}){return GlobalVariables.from({chainId:new Fr(seed),version:new Fr(seed+1),blockNumber:BlockNumber(seed+2),slotNumber:SlotNumber(seed+3),timestamp:BigInt(seed+4),coinbase:EthAddress.fromField(new Fr(seed+5)),feeRecipient:AztecAddress.fromFieldUnsafe(new Fr(seed+6)),gasFees:new GasFees(seed+7,seed+8),...compact(overrides)})}__name(makeGlobalVariables,"makeGlobalVariables");import{hashTypedData as hashTypedData2}from"viem";var TEST_COORDINATION_SIGNATURE_CONTEXT={chainId:31337,rollupAddress:EthAddress.fromNumber(1)};var DEFAULT_ADDRESS=AztecAddress.fromNumberUnsafe(42),MAX_PRIVATE_EVENT_LEN=10,MAX_PRIVATE_EVENTS_PER_TXE_QUERY=5,MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY=64,MAX_OFFCHAIN_EFFECT_LEN=17;function makeResolveTaggingSecretStrategyHook(strategies){if(strategies.size!==0)return({deliveryMode})=>Promise.resolve(strategies.get(deliveryMode)??DEFAULT_TAGGING_SECRET_STRATEGY)}__name(makeResolveTaggingSecretStrategyHook,"makeResolveTaggingSecretStrategyHook");function getSingleTxBlockRequestHash(blockNumber){return new Fr(blockNumber+9999)}__name(getSingleTxBlockRequestHash,"getSingleTxBlockRequestHash");async function insertTxEffectIntoWorldTrees(txEffect,worldTrees,l1ToL2Messages=[]){await worldTrees.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,padArrayEnd(txEffect.noteHashes,Fr.ZERO,64)),await worldTrees.batchInsert(MerkleTreeId.NULLIFIER_TREE,padArrayEnd(txEffect.nullifiers,Fr.ZERO,64).map(nullifier=>nullifier.toBuffer()),6),await worldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,padArrayEnd(l1ToL2Messages,Fr.ZERO,1024))}__name(insertTxEffectIntoWorldTrees,"insertTxEffectIntoWorldTrees");async function makeTXEBlockHeader(worldTrees,globalVariables){let stateReference=await worldTrees.getStateReference(),archiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);return BlockHeader.from({lastArchive:new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root),Number(archiveInfo.size)),spongeBlobHash:Fr.ZERO,state:stateReference,globalVariables,totalFees:Fr.ZERO,totalManaUsed:Fr.ZERO})}__name(makeTXEBlockHeader,"makeTXEBlockHeader");async function makeTXEBlock(worldTrees,globalVariables,txEffects){let header=await makeTXEBlockHeader(worldTrees,globalVariables);await worldTrees.updateArchive(header);let newArchiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE),newArchive=new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root),Number(newArchiveInfo.size)),checkpointNumber=CheckpointNumber.fromBlockNumber(globalVariables.blockNumber),indexWithinCheckpoint=IndexWithinCheckpoint(0);return new L2Block(newArchive,header,new Body(txEffects),checkpointNumber,indexWithinCheckpoint)}__name(makeTXEBlock,"makeTXEBlock");var TXEOraclePublicContext=class{constructor(contractAddress,forkedWorldTrees,txRequestHash,globalVariables,contractStore){this.contractAddress=contractAddress;this.forkedWorldTrees=forkedWorldTrees;this.txRequestHash=txRequestHash;this.globalVariables=globalVariables;this.contractStore=contractStore;this.logger=createLogger("txe:public_context"),this.logger.debug("Entering Public Context",{contractAddress,blockNumber:globalVariables.blockNumber,timestamp:globalVariables.timestamp})}static{__name(this,"TXEOraclePublicContext")}isAvm=!0;logger;transientUniqueNoteHashes=[];transientSiloedNullifiers=[];publicDataWrites=[];address(){return Promise.resolve(this.contractAddress)}sender(){return Promise.resolve(AztecAddress.ZERO)}blockNumber(){return Promise.resolve(this.globalVariables.blockNumber)}timestamp(){return Promise.resolve(this.globalVariables.timestamp)}isStaticCall(){return Promise.resolve(!1)}chainId(){return Promise.resolve(this.globalVariables.chainId)}version(){return Promise.resolve(this.globalVariables.version)}async emitNullifier(nullifier){let siloedNullifier=await siloNullifier(this.contractAddress,nullifier);this.transientSiloedNullifiers.push(siloedNullifier)}async emitNoteHash(noteHash){let siloedNoteHash=await siloNoteHash(this.contractAddress,noteHash);this.transientUniqueNoteHashes.push(siloedNoteHash)}async nullifierExists(siloedNullifier){let treeIndex=(await this.forkedWorldTrees.findLeafIndices(MerkleTreeId.NULLIFIER_TREE,[siloedNullifier.toBuffer()]))[0],transientIndex=this.transientSiloedNullifiers.find(n=>n.equals(siloedNullifier));return treeIndex!==void 0||transientIndex!==void 0}async storageWrite(slot,value){this.logger.debug("AVM storage write",{slot,value});let dataWrite=new PublicDataWrite(await computePublicDataTreeLeafSlot(this.contractAddress,slot),value);this.publicDataWrites.push(dataWrite),await this.forkedWorldTrees.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,[new PublicDataTreeLeaf(dataWrite.leafSlot,dataWrite.value).toBuffer()])}async storageRead(slot,contractAddress){let leafSlot=await computePublicDataTreeLeafSlot(contractAddress,slot),lowLeafResult=await this.forkedWorldTrees.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt()),value=!lowLeafResult||!lowLeafResult.alreadyPresent?Fr.ZERO:(await this.forkedWorldTrees.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index)).leaf.value;return this.logger.debug("AVM storage read",{slot,contractAddress,value}),value}getContractInstanceDeployer(address){return this.getContractInstanceMember(address,i=>i.deployer.toField())}getContractInstanceClassId(address){return this.getContractInstanceMember(address,i=>i.originalContractClassId)}getContractInstanceInitializationHash(address){return this.getContractInstanceMember(address,i=>i.initializationHash)}getContractInstanceImmutablesHash(address){return this.getContractInstanceMember(address,i=>i.immutablesHash)}async getContractInstanceMember(address,accessor){let instance=await this.contractStore.getContractInstance(address);return instance?[{member:accessor(instance),exists:!0}]:[{member:Fr.ZERO,exists:!1}]}returndataSize(){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}returndataCopy(_rdOffset,_copySize){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}call(_l2Gas,_daGas,_address,_argsLength,_args){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}staticCall(_l2Gas,_daGas,_address,_argsLength,_args){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}successCopy(){throw new Error("Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead")}async close(){this.logger.debug("Exiting Public Context, building block with collected side effects",{blockNumber:this.globalVariables.blockNumber});let txEffect=this.makeTxEffect();await insertTxEffectIntoWorldTrees(txEffect,this.forkedWorldTrees);let block=await makeTXEBlock(this.forkedWorldTrees,this.globalVariables,[txEffect]);return await this.forkedWorldTrees.close(),this.logger.debug("Exited PublicContext with built block",{blockNumber:block.number,txEffects:block.body.txEffects}),block}makeTxEffect(){let txEffect=TxEffect.empty();return txEffect.noteHashes=this.transientUniqueNoteHashes,txEffect.nullifiers=[this.txRequestHash,...this.transientSiloedNullifiers],txEffect.publicDataWrites=this.publicDataWrites,txEffect.txHash=new TxHash(new Fr(this.globalVariables.blockNumber)),txEffect}};var GAS_SETTINGS=LEAF({kind:"gas-settings",deserialization:{fn:__name(([reader])=>GasSettings.fromFields(reader.readFieldArray(8)),"fn")},shape:[{len:8}]}),STRATEGY_NON_INTERACTIVE_HANDSHAKE=1,STRATEGY_ARBITRARY_SECRET=2,STRATEGY_ADDRESS_DERIVED=3,STRATEGY_INTERACTIVE_HANDSHAKE=4,TAGGING_SECRET_STRATEGY=LEAF({kind:"tagging-secret-strategy",serialization:{fn:__name(strategy=>{switch(strategy.type){case"non-interactive-handshake":return[new Fr(STRATEGY_NON_INTERACTIVE_HANDSHAKE),Fr.ZERO,Fr.ZERO];case"interactive-handshake":return[new Fr(STRATEGY_INTERACTIVE_HANDSHAKE),Fr.ZERO,Fr.ZERO];case"address-derived":return[new Fr(STRATEGY_ADDRESS_DERIVED),Fr.ZERO,Fr.ZERO];case"arbitrary-secret":return[new Fr(STRATEGY_ARBITRARY_SECRET),strategy.secret.x,strategy.secret.y]}},"fn")},deserialization:{fn:__name(([kindReader,xReader,yReader])=>{let kind=kindReader.readField().toNumber(),[x,y]=[xReader.readField(),yReader.readField()];switch(kind){case STRATEGY_NON_INTERACTIVE_HANDSHAKE:return{type:"non-interactive-handshake"};case STRATEGY_INTERACTIVE_HANDSHAKE:return{type:"interactive-handshake"};case STRATEGY_ADDRESS_DERIVED:return{type:"address-derived"};case STRATEGY_ARBITRARY_SECRET:return{type:"arbitrary-secret",secret:Point.fromFields([x,y])};default:throw new Error(`Unrecognized tagging secret strategy kind: ${kind}`)}},"fn")},shape:["scalar","scalar","scalar"]}),PRIVATE_CONTEXT_INPUTS=LEAF({kind:"private-context-inputs",serialization:{fn:__name(v=>v.toFields(),"fn")},shape:Array(38).fill("scalar")}),COMPLETE_ADDRESS=LEAF({kind:"complete-address",serialization:{fn:__name(v=>[v.address.toField(),...v.publicKeys.toFields()],"fn")},shape:Array(8).fill("scalar")}),TXE_TX_EFFECTS=LEAF({kind:"txe-tx-effects",serialization:{fn:__name(({txHash,noteHashes,nullifiers,privateLogs})=>{let emittedLogs=privateLogs.map(log2=>log2.getEmittedFields()),rawLogStorage=emittedLogs.map(fields=>fields.concat(Array(16-fields.length).fill(Fr.ZERO))).concat(Array(64-emittedLogs.length).fill(Array(16).fill(Fr.ZERO))).flat(),logLengths=emittedLogs.map(fields=>new Fr(fields.length)).concat(Array(64-emittedLogs.length).fill(Fr.ZERO)),paddedNoteHashes=noteHashes.concat(Array(64-noteHashes.length).fill(Fr.ZERO)),paddedNullifiers=nullifiers.concat(Array(64-nullifiers.length).fill(Fr.ZERO));return[txHash.hash,paddedNoteHashes,new Fr(noteHashes.length),paddedNullifiers,new Fr(nullifiers.length),rawLogStorage,logLengths,new Fr(emittedLogs.length)]},"fn")},shape:["scalar",{len:64},"scalar",{len:64},"scalar",{len:1024},{len:64},"scalar"]}),TXE_OFFCHAIN_EFFECTS=LEAF({kind:"txe-offchain-effects",serialization:{fn:__name(({effects})=>{let rawArrayStorage=effects.map(e2=>e2.concat(Array(MAX_OFFCHAIN_EFFECT_LEN-e2.length).fill(Fr.ZERO))).concat(Array(MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY-effects.length).fill(Array(MAX_OFFCHAIN_EFFECT_LEN).fill(Fr.ZERO))).flat(),effectLengths=effects.map(e2=>new Fr(e2.length)).concat(Array(MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY-effects.length).fill(Fr.ZERO));return[rawArrayStorage,effectLengths,new Fr(effects.length)]},"fn")},shape:[{len:MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY*MAX_OFFCHAIN_EFFECT_LEN},{len:MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY},"scalar"]}),TXE_CALL_CONTEXT=LEAF({kind:"txe-call-context",serialization:{fn:__name(({txHash,anchorBlockTimestamp})=>{let isSome=txHash.isZero()?0:1;return[new Fr(isSome),txHash,new Fr(anchorBlockTimestamp)]},"fn")},shape:["scalar","scalar","scalar"]}),CONTRACT_INSTANCE_MEMBER=FIXED_ARRAY(STRUCT([{name:"exists",type:BOOL},{name:"member",type:FIELD}]),1),EVENT_SELECTOR=SCALAR({kind:"event-selector",serialization:{fn:__name(v=>[v.toField()],"fn")},deserialization:{fn:__name(([reader])=>EventSelector.fromField(reader.readField()),"fn")}}),TXE_PRIVATE_EVENTS=LEAF({kind:"txe-private-events",serialization:{fn:__name(events=>{let rawArrayStorage=events.map(e2=>e2.concat(Array(MAX_PRIVATE_EVENT_LEN-e2.length).fill(Fr.ZERO))).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY-events.length).fill(Array(MAX_PRIVATE_EVENT_LEN).fill(Fr.ZERO))).flat(),eventLengths=events.map(e2=>new Fr(e2.length)).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY-events.length).fill(Fr.ZERO));return[rawArrayStorage,eventLengths,new Fr(events.length)]},"fn")},shape:[{len:MAX_PRIVATE_EVENTS_PER_TXE_QUERY*MAX_PRIVATE_EVENT_LEN},{len:MAX_PRIVATE_EVENTS_PER_TXE_QUERY},"scalar"]}),TXE_ORACLE_REGISTRY={...ORACLE_REGISTRY,aztec_txe_assertCompatibleOracleVersion:makeEntry({params:[{name:"major",type:U32},{name:"minor",type:U32}]}),aztec_txe_setTopLevelTXEContext:makeEntry(),aztec_txe_setPrivateTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)},{name:"anchorBlockNumber",type:OPTION(BLOCK_NUMBER)},{name:"gasSettings",type:GAS_SETTINGS}],returnType:PRIVATE_CONTEXT_INPUTS}),aztec_txe_setPublicTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)}]}),aztec_txe_setUtilityTXEContext:makeEntry({params:[{name:"contractAddress",type:OPTION(AZTEC_ADDRESS)}]}),aztec_txe_getDefaultAddress:makeEntry({returnType:AZTEC_ADDRESS}),aztec_txe_getNextBlockNumber:makeEntry({returnType:BLOCK_NUMBER}),aztec_txe_getNextBlockTimestamp:makeEntry({returnType:U64}),aztec_txe_advanceBlocksBy:makeEntry({params:[{name:"blocks",type:U32}]}),aztec_txe_advanceTimestampBy:makeEntry({params:[{name:"duration",type:U64}]}),aztec_txe_deploy:makeEntry({params:[{name:"contractPath",type:STR},{name:"initializer",type:STR},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)},{name:"secret",type:FIELD},{name:"salt",type:FIELD},{name:"deployer",type:AZTEC_ADDRESS}],returnType:ARRAY(FIELD)}),aztec_txe_createAccount:makeEntry({params:[{name:"secret",type:FIELD},{name:"partialAddress",type:FIELD}],returnType:COMPLETE_ADDRESS}),aztec_txe_addAccount:makeEntry({params:[{name:"secret",type:FIELD}],returnType:COMPLETE_ADDRESS}),aztec_txe_addAuthWitness:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS},{name:"messageHash",type:FIELD}]}),aztec_txe_sendL1ToL2Message:makeEntry({params:[{name:"content",type:FIELD},{name:"secretHash",type:FIELD},{name:"sender",type:ETH_ADDRESS},{name:"recipient",type:AZTEC_ADDRESS}],returnType:FIELD}),aztec_txe_setTaggingSecretStrategies:makeEntry({params:[{name:"unconstrainedStrategy",type:OPTION(TAGGING_SECRET_STRATEGY)},{name:"constrainedStrategy",type:OPTION(TAGGING_SECRET_STRATEGY)}]}),aztec_txe_setAuthorizeAllUtilityCallTargets:makeEntry({params:[{name:"authorizeAll",type:BOOL}]}),aztec_txe_getLastBlockTimestamp:makeEntry({returnType:U64}),aztec_txe_getLastTxEffects:makeEntry({returnType:TXE_TX_EFFECTS}),aztec_txe_getLastCallOffchainEffects:makeEntry({returnType:TXE_OFFCHAIN_EFFECTS}),aztec_txe_getLastCallContext:makeEntry({returnType:TXE_CALL_CONTEXT}),aztec_txe_getPrivateEvents:makeEntry({params:[{name:"selector",type:EVENT_SELECTOR},{name:"contractAddress",type:AZTEC_ADDRESS},{name:"scope",type:AZTEC_ADDRESS}],returnType:TXE_PRIVATE_EVENTS}),aztec_txe_privateCallNewFlow:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"targetContractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"args",type:ARRAY(FIELD)},{name:"argsHash",type:FIELD},{name:"isStaticCall",type:BOOL},{name:"additionalScopes",type:ARRAY(AZTEC_ADDRESS)},{name:"authorizedUtilityCallTargets",type:ARRAY(AZTEC_ADDRESS)},{name:"gasSettings",type:GAS_SETTINGS}],returnType:ARRAY(FIELD)}),aztec_txe_executeUtilityFunction:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"targetContractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"args",type:ARRAY(FIELD)},{name:"authorizedUtilityCallTargets",type:ARRAY(AZTEC_ADDRESS)}],returnType:ARRAY(FIELD)}),aztec_txe_publicCallNewFlow:makeEntry({params:[{name:"from",type:OPTION(AZTEC_ADDRESS)},{name:"address",type:AZTEC_ADDRESS},{name:"calldata",type:ARRAY(FIELD)},{name:"isStaticCall",type:BOOL},{name:"gasSettings",type:GAS_SETTINGS}],returnType:ARRAY(FIELD)}),aztec_avm_address:makeEntry({returnType:AZTEC_ADDRESS}),aztec_avm_sender:makeEntry({returnType:AZTEC_ADDRESS}),aztec_avm_blockNumber:makeEntry({returnType:BLOCK_NUMBER}),aztec_avm_timestamp:makeEntry({returnType:U64}),aztec_avm_isStaticCall:makeEntry({returnType:BOOL}),aztec_avm_chainId:makeEntry({returnType:FIELD}),aztec_avm_version:makeEntry({returnType:FIELD}),aztec_avm_emitNullifier:makeEntry({params:[{name:"nullifier",type:FIELD}]}),aztec_avm_emitNoteHash:makeEntry({params:[{name:"noteHash",type:FIELD}]}),aztec_avm_nullifierExists:makeEntry({params:[{name:"siloedNullifier",type:FIELD}],returnType:BOOL}),aztec_avm_storageRead:makeEntry({params:[{name:"slot",type:FIELD},{name:"contractAddress",type:AZTEC_ADDRESS}],returnType:FIELD}),aztec_avm_storageWrite:makeEntry({params:[{name:"slot",type:FIELD},{name:"value",type:FIELD}]}),aztec_avm_emitPublicLog:makeEntry({params:[{name:"message",type:ARRAY(FIELD)}]}),aztec_avm_returndataSize:makeEntry({returnType:U32}),aztec_avm_returndataCopy:makeEntry({params:[{name:"rdOffset",type:U32},{name:"copySize",type:U32}],returnType:ARRAY(FIELD)}),aztec_avm_call:makeEntry({params:[{name:"l2Gas",type:U32},{name:"daGas",type:U32},{name:"address",type:AZTEC_ADDRESS},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)}]}),aztec_avm_staticCall:makeEntry({params:[{name:"l2Gas",type:U32},{name:"daGas",type:U32},{name:"address",type:AZTEC_ADDRESS},{name:"argsLength",type:U32},{name:"args",type:ARRAY(FIELD)}]}),aztec_avm_successCopy:makeEntry({returnType:BOOL}),aztec_avm_getContractInstanceDeployer:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceClassId:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceInitializationHash:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER}),aztec_avm_getContractInstanceImmutablesHash:makeEntry({params:[{name:"address",type:AZTEC_ADDRESS}],returnType:CONTRACT_INSTANCE_MEMBER})};function toInputSlots(inputs){return inputs.map(v=>Array.isArray(v)?v.map(withHexPrefix):[withHexPrefix(v)])}__name(toInputSlots,"toInputSlots");async function callTxeHandler({oracle,inputs,handler}){let entry=TXE_ORACLE_REGISTRY[oracle],positional=entry.deserializeParams(toInputSlots(inputs)).map(p=>p.value),result=await handler(positional);return outputSlotsToForeignCallResult(entry.serializeReturn(result))}__name(callTxeHandler,"callTxeHandler");var legacyCallbacksByHandler=new WeakMap;async function callTxeLegacyHandler(oracle,inputs,oracleHandler){let callback=legacyCallbacksByHandler.get(oracleHandler);callback||(callback=buildACIRCallback(oracleHandler),legacyCallbacksByHandler.set(oracleHandler,callback));let outputSlots=await callback[oracle](...toInputSlots(inputs));return outputSlotsToForeignCallResult(outputSlots)}__name(callTxeLegacyHandler,"callTxeLegacyHandler");function outputSlotsToForeignCallResult(outputSlots){return{values:outputSlots.map(slot=>Array.isArray(slot)?slot.map(withoutHexPrefix):withoutHexPrefix(slot))}}__name(outputSlotsToForeignCallResult,"outputSlotsToForeignCallResult");import{BarretenbergSync as BarretenbergSync8}from"@aztec/bb.js";var SchnorrSignature=class _SchnorrSignature{static{__name(this,"SchnorrSignature")}buffer;static SIZE=64;constructor(buffer){if(this.buffer=buffer,buffer.length!==_SchnorrSignature.SIZE)throw new Error(`Invalid signature buffer of length ${buffer.length}.`)}get s(){return this.buffer.subarray(0,32)}get e(){return this.buffer.subarray(32)}toBuffer(){return this.buffer}toString(){return`0x${this.buffer.toString("hex")}`}toFields(){let sig=this.toBuffer(),buf1=Buffer.alloc(32),buf2=Buffer.alloc(32),buf3=Buffer.alloc(32);return sig.copy(buf1,1,0,31),sig.copy(buf2,1,31,62),sig.copy(buf3,1,62,64),mapTuple([buf1,buf2,buf3],Fr.fromBuffer)}toLimbFields(){let limb=__name(start=>{let buf=Buffer.alloc(32);return this.buffer.copy(buf,16,start,start+16),Fr.fromBuffer(buf)},"limb");return[limb(16),limb(0),limb(48),limb(32)]}};var Schnorr=class{static{__name(this,"Schnorr")}async computePublicKey(privateKey){await BarretenbergSync8.initSingleton();let response=BarretenbergSync8.getSingleton().schnorrComputePublicKey({privateKey:privateKey.toBuffer()});return Point.fromBuffer(Buffer.concat([Buffer.from(response.publicKey.x),Buffer.from(response.publicKey.y)]))}async constructSignature(msg,privateKey){await BarretenbergSync8.initSingleton();let response=BarretenbergSync8.getSingleton().schnorrConstructSignature({messageField:msg.toBuffer(),privateKey:privateKey.toBuffer()});return new SchnorrSignature(Buffer.from([...response.s,...response.e]))}async verifySignature(msg,pubKey,sig){return await BarretenbergSync8.initSingleton(),BarretenbergSync8.getSingleton().schnorrVerifySignature({messageField:msg.toBuffer(),publicKey:{x:pubKey.x.toBuffer(),y:pubKey.y.toBuffer()},s:sig.s,e:sig.e}).verified}};var TXEPublicContractDataSource=class{constructor(blockNumber,contractStore){this.blockNumber=blockNumber;this.contractStore=contractStore}static{__name(this,"TXEPublicContractDataSource")}getBlockNumber(){return Promise.resolve(this.blockNumber)}async getContractClass(id){let contractClass=await this.contractStore.getContractClassWithPreimage(id);if(contractClass)return{id:contractClass.id,artifactHash:contractClass.artifactHash,packedBytecode:contractClass.packedBytecode,privateFunctionsRoot:contractClass.privateFunctionsRoot,version:contractClass.version}}async getBytecodeCommitment(id){return(await this.contractStore.getContractClassWithPreimage(id))?.publicBytecodeCommitment}async getContract(address){let instance=await this.contractStore.getContractInstance(address);return instance&&{...instance,address,currentContractClassId:instance.originalContractClassId}}getContractClassIds(){throw new Error("Method not implemented.")}async getContractArtifact(address){let instance=await this.getContract(address);return instance&&this.contractStore.getContractArtifact(instance.originalContractClassId)}async getDebugFunctionName(address,selector){let instance=await this.getContract(address);return instance&&this.contractStore.getDebugFunctionName(instance.originalContractClassId,selector)}registerContractFunctionSignatures(_signatures){return Promise.resolve()}};var TXEOracleTopLevelContext=class{constructor(stateMachine,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,nextBlockTimestamp,version2,chainId,authwits,taggingSecretStrategies,authorizeAllUtilityCallTargets,artifactResolver,rootPath,packageName){this.stateMachine=stateMachine;this.contractStore=contractStore;this.noteStore=noteStore;this.keyStore=keyStore;this.addressStore=addressStore;this.accountStore=accountStore;this.senderTaggingStore=senderTaggingStore;this.recipientTaggingStore=recipientTaggingStore;this.taggingSecretSourcesStore=taggingSecretSourcesStore;this.capsuleStore=capsuleStore;this.factStore=factStore;this.privateEventStore=privateEventStore;this.nextBlockTimestamp=nextBlockTimestamp;this.version=version2;this.chainId=chainId;this.authwits=authwits;this.taggingSecretStrategies=taggingSecretStrategies;this.authorizeAllUtilityCallTargets=authorizeAllUtilityCallTargets;this.artifactResolver=artifactResolver;this.rootPath=rootPath;this.packageName=packageName;this.logger=createLogger("txe:top_level_context"),this.logger.debug("Entering Top Level Context")}static{__name(this,"TXEOracleTopLevelContext")}isMisc=!0;isTxe=!0;logger;contractOracleVersion;assertCompatibleOracleVersion(major2,minor){if(major2!==30){let hint=major2>30?"The contract was compiled with a newer version of Aztec.nr than this aztec cli version supports. Upgrade your aztec cli version to a compatible version.":"The contract was compiled with an older version of Aztec.nr than this aztec cli version supports. Recompile the contract with a compatible version of Aztec.nr.";throw new Error(`Incompatible aztec cli version: ${hint} See https://docs.aztec.network/errors/8 (expected oracle major version ${30}, got ${major2})`)}this.contractOracleVersion={major:major2,minor}}nonOracleFunctionGetContractOracleVersion(){return this.contractOracleVersion}getRandomField(){return Fr.random()}log(level,message,_fieldsSize,fields){if(!LogLevels[level])throw new Error(`Invalid log level: ${level}`);let levelName=LogLevels[level];return this.logger[levelName](`${applyStringFormatting(message,fields)}`,{module:`${this.logger.module}:debug_log`}),Promise.resolve()}getDefaultAddress(){return DEFAULT_ADDRESS}async getNextBlockNumber(){return BlockNumber(await this.getLastBlockNumber()+1)}getNextBlockTimestamp(){return Promise.resolve(this.nextBlockTimestamp)}async getLastBlockTimestamp(){return(await this.stateMachine.node.getBlockData("latest")).header.globalVariables.timestamp}async getLastTxEffects(){let latestBlockNumber=await this.stateMachine.archiver.getBlockNumber(),block=await this.stateMachine.archiver.getBlock({number:latestBlockNumber});if(block.body.txEffects.length!=1)throw new Error(`Expected a single transaction in the last block, found ${block.body.txEffects.length}`);let txEffects=block.body.txEffects[0],privateLogs=txEffects.privateLogs;if(privateLogs.length>64)throw new Error(`${privateLogs.length} private logs exceed max ${64}`);return{txHash:txEffects.txHash,noteHashes:txEffects.noteHashes,nullifiers:txEffects.nullifiers,privateLogs}}async syncContractNonOracleMethod(contractAddress,scope,changeSetId){if(contractAddress.equals(DEFAULT_ADDRESS)){this.logger.debug("Skipping sync in getPrivateEvents because the events correspond to the default address.");return}let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();await this.stateMachine.contractSyncService.ensureContractSynced({contract:contractAddress,functionToInvokeAfterSync:null,utilityExecutor:__name(async(call,execScopes)=>{await this.executeUtilityCall(call,{scopes:execScopes,changeSetId})},"utilityExecutor"),anchorBlockHeader,changeSetId,scopes:[scope],triggeredBy:void 0})}async getPrivateEvents(selector,contractAddress,scope,changeSetId){let events=(await this.privateEventStore.getPrivateEvents(selector,{contractAddress,scopes:[scope],fromBlock:0,toBlock:await this.getLastBlockNumber()+1},changeSetId)).map(e2=>e2.packedEvent);if(events.length>MAX_PRIVATE_EVENTS_PER_TXE_QUERY)throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);if(events.some(e2=>e2.length>MAX_PRIVATE_EVENT_LEN))throw new Error(`Some private event has length larger than maxLen ${MAX_PRIVATE_EVENT_LEN}`);return events}async advanceBlocksBy(blocks){this.logger.debug(`time traveling ${blocks} blocks`);for(let i=0;i<blocks;i++)await this.mineBlock()}advanceTimestampBy(duration3){this.logger.debug(`time traveling ${duration3} seconds`),this.nextBlockTimestamp+=duration3}deploymentNullifier(address){return siloNullifier(AztecAddress.fromNumberUnsafe(2),address.toField())}async deploy(contractPath,initializer3,args,secret,salt,deployer){let{artifact,instance}=await this.artifactResolver.resolveDeployArtifact({rootPath:this.rootPath,packageName:this.packageName,contractPath,initializer:initializer3,args,secret,salt,deployer});return await this.mineBlock({nullifiers:[await this.deploymentNullifier(instance.address)]}),secret.equals(Fr.ZERO)?(await this.contractStore.addContractInstance(instance),await this.contractStore.addContractArtifact(artifact),this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`)):await this.registerContractAndAddAccount(artifact,instance,secret),CONTRACT_INSTANCE.serialization.fn(instance).flat()}async mineDeploymentNullifiers(addresses){await this.mineBlock({nullifiers:await Promise.all(addresses.map(address=>this.deploymentNullifier(address)))})}async addAccount(secret){let{artifact,instance}=await this.artifactResolver.resolveAccountArtifact(secret);return this.registerContractAndAddAccount(artifact,instance,secret)}async registerContractAndAddAccount(artifact,instance,secret){let partialAddress=await computePartialAddress(instance);this.logger.debug(`Deployed ${artifact.name} at ${instance.address}`),await this.contractStore.addContractInstance(instance),await this.contractStore.addContractArtifact(artifact);let completeAddress=await this.keyStore.addAccount(await deriveKeys(secret),partialAddress);return await this.accountStore.setAccount(completeAddress.address,completeAddress),await this.addressStore.addCompleteAddress(completeAddress),this.logger.debug(`Created account ${completeAddress.address}`),completeAddress}async createAccount(secret,partialAddress){let completeAddress=await this.keyStore.addAccount(await deriveKeys(secret),partialAddress);return await this.accountStore.setAccount(completeAddress.address,completeAddress),await this.addressStore.addCompleteAddress(completeAddress),this.logger.debug(`Created account ${completeAddress.address}`),completeAddress}async addAuthWitness(address,messageHash){let account=await this.accountStore.getAccount(address),ivpkMHash=await hashPublicKey(account.publicKeys.ivpkM),privateKey=await this.keyStore.getMasterSecretKey(ivpkMHash),signature=await new Schnorr().constructSignature(messageHash,privateKey),authWitness=new AuthWitness(messageHash,signature.toLimbFields());this.authwits.set(authWitness.requestHash.toString(),authWitness)}setTaggingSecretStrategies(unconstrainedStrategy,constrainedStrategy){let apply=__name((mode,strategy)=>{strategy.isSome()?this.taggingSecretStrategies.set(mode,strategy.value):this.taggingSecretStrategies.delete(mode)},"apply");apply(AppTaggingSecretKind.UNCONSTRAINED,unconstrainedStrategy),apply(AppTaggingSecretKind.CONSTRAINED,constrainedStrategy)}setAuthorizeAllUtilityCallTargets(authorizeAll){this.authorizeAllUtilityCallTargets=authorizeAll}async sendL1ToL2Message(content,secretHash,sender,recipient){let{size}=await this.stateMachine.synchronizer.getCommitted().getTreeInfo(MerkleTreeId.L1_TO_L2_MESSAGE_TREE),leafIndex=new Fr(size),message=new L1ToL2Message(new L1Actor(sender,this.chainId.toNumber()),new L2Actor(recipient,this.version.toNumber()),content,secretHash,leafIndex);return await this.mineBlock({l1ToL2Messages:[message.hash()]}),leafIndex}async mineBlock(options={}){let blockNumber=await this.getNextBlockNumber(),txEffect=TxEffect.empty();txEffect.nullifiers=[getSingleTxBlockRequestHash(blockNumber),...options.nullifiers??[]],txEffect.txHash=new TxHash(new Fr(blockNumber));let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork();await insertTxEffectIntoWorldTrees(txEffect,forkedWorldTrees,options.l1ToL2Messages??[]);let globals=makeGlobalVariables(void 0,{blockNumber,timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId}),block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await forkedWorldTrees.close(),this.logger.info(`Created block ${blockNumber} with timestamp ${block.header.globalVariables.timestamp}`),await this.stateMachine.handleL2Block(block,options.l1ToL2Messages??[])}async privateCallNewFlow(from,targetContractAddress=AztecAddress.zero(),functionSelector=FunctionSelector.empty(),args,argsHash=Fr.zero(),isStaticCall=!1,additionalScopes=[],changeSetId,authorizedUtilityCallTargets,gasSettings){let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,blockHeader);this.logger.verbose(`Executing external function ${await anchoredContractData.getDebugFunctionName(targetContractAddress,functionSelector)}@${targetContractAddress} isStaticCall=${isStaticCall}`);let artifact=await anchoredContractData.getFunctionArtifact(targetContractAddress,functionSelector);if(!artifact){let message=functionSelector.equals(await FunctionSelector.fromSignature("verify_private_authwit(Field)"))?"Found no account contract artifact for a private authwit check - use `create_contract_account` instead of `create_light_account` for authwit support.":"Function Artifact does not exist";throw new Error(message)}let scopes=from===void 0?additionalScopes:[from,...additionalScopes],utilityExecutor=__name(async(call,execScopes)=>{await this.executeUtilityCall(call,{scopes:execScopes,changeSetId})},"utilityExecutor");await this.stateMachine.contractSyncService.ensureContractSynced({contract:targetContractAddress,functionToInvokeAfterSync:functionSelector,utilityExecutor,anchorBlockHeader:blockHeader,changeSetId,scopes,triggeredBy:void 0});let blockNumber=await this.getNextBlockNumber(),msgSender=from??AztecAddress.NULL_MSG_SENDER,callContext=new CallContext(msgSender,targetContractAddress,functionSelector,isStaticCall),txContext=new TxContext(this.chainId,this.version,gasSettings),protocolNullifier=await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber)),noteCache=new ExecutionNoteCache(protocolNullifier),minRevertibleSideEffectCounter=1;await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);let taggingIndexCache=new ExecutionTaggingIndexCache,simulator=new WASMSimulator,transientArrayService=new TransientArrayService,privateExecutionOracle=new PrivateExecutionOracle({argsHash,txContext,txRequestSalt:Fr.ZERO,callContext,anchorBlockHeader:blockHeader,utilityExecutor,authWitnesses:Array.from(this.authwits.values()),capsules:[],executionCache:HashedValuesCache.create([new HashedValues(args,argsHash)]),noteCache,taggingIndexCache,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,contractSyncService:this.stateMachine.contractSyncService,changeSetId,totalPublicCalldataCount:0,sideEffectCounter:minRevertibleSideEffectCounter,scopes,senderForTags:from,simulator,txResolver:this.stateMachine.txResolver,l2TipsStore:this.stateMachine.l2TipsProvider,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook(isStaticCall?"private view":"private",authorizedUtilityCallTargets),resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies)}),transientArrayService}),result,executionResult;try{executionResult=await executePrivateFunction(simulator,privateExecutionOracle,artifact,targetContractAddress,functionSelector);let publicCallRequests=collectNested([executionResult],r2=>r2.publicInputs.publicCallRequests.getActiveItems().map(r3=>r3.inner).concat(r2.publicInputs.publicTeardownCallRequest.isEmpty()?[]:[r2.publicInputs.publicTeardownCallRequest])),publicFunctionsCalldata=await Promise.all(publicCallRequests.map(async r2=>{let calldata=await privateExecutionOracle.getHashPreimage(r2.calldataHash);return new HashedValues(calldata,r2.calldataHash)})),nonceGenerator=noteCache.getNonceGenerator();result=new PrivateExecutionResult(executionResult,nonceGenerator,publicFunctionsCalldata)}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error during private execution"))}let{publicInputs}=await generateSimulatedProvingResult(result,(addr,sel)=>anchoredContractData.getDebugFunctionName(addr,sel),this.stateMachine.node,minRevertibleSideEffectCounter),globals=makeGlobalVariables();globals.blockNumber=blockNumber,globals.timestamp=this.nextBlockTimestamp,globals.chainId=this.chainId,globals.version=this.version,globals.gasFees=GasFees.empty();let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork(),bindings=this.logger.getBindings(),contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings),guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees),config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0}),processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,new CppPublicTxSimulator(guardedMerkleTrees,contractsDB,globals,config2,bindings),new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings)),tx=await Tx.create({data:publicInputs,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:result.publicFunctionCalldata}),checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]),[processedTx]=results[0],failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);if(!processedTx.revertCode.isOK())if(processedTx.revertReason){try{await enrichPublicSimulationError(processedTx.revertReason,this.contractStore,this.stateMachine.contractClassService,await this.stateMachine.anchorBlockStore.getBlockHeader(),this.logger)}catch{}throw new Error(`Contract execution has reverted: ${processedTx.revertReason.getMessage()}`)}else throw new Error("Contract execution has reverted");let offchainEffects=collectNested([executionResult],r2=>r2.offchainEffects.map(e2=>e2.data));if(isStaticCall)return await checkpoint.revert(),await forkedWorldTrees.close(),{returnValues:executionResult.returnValues??[],offchainEffects};let txEffect=TxEffect.empty();txEffect.noteHashes=processedTx.txEffect.noteHashes,txEffect.nullifiers=processedTx.txEffect.nullifiers,txEffect.privateLogs=processedTx.txEffect.privateLogs,txEffect.publicLogs=processedTx.txEffect.publicLogs,txEffect.publicDataWrites=processedTx.txEffect.publicDataWrites,txEffect.txHash=new TxHash(new Fr(blockNumber));let l1ToL2Messages=Array(1024).fill(0).map(Fr.zero);await forkedWorldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,l1ToL2Messages);let l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);return await this.stateMachine.handleL2Block(l2Block),await forkedWorldTrees.close(),{returnValues:executionResult.returnValues??[],offchainEffects}}async publicCallNewFlow(from,targetContractAddress,calldata,isStaticCall,gasSettings){let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader);this.logger.verbose(`Executing public function ${await anchoredContractData.getDebugFunctionName(targetContractAddress,FunctionSelector.fromField(calldata[0]))}@${targetContractAddress} isStaticCall=${isStaticCall}`);let blockNumber=await this.getNextBlockNumber(),txContext=new TxContext(this.chainId,this.version,gasSettings),calldataHash=await computeCalldataHash(calldata),calldataHashedValues=new HashedValues(calldata,calldataHash),globals=makeGlobalVariables();globals.blockNumber=blockNumber,globals.timestamp=this.nextBlockTimestamp,globals.chainId=this.chainId,globals.version=this.version,globals.gasFees=GasFees.empty();let forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork(),bindings2=this.logger.getBindings(),contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings2),guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees),config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0}),simulator=new CppPublicTxSimulator(guardedMerkleTrees,contractsDB,globals,config2,bindings2),processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,simulator,new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings2)),nonRevertibleAccumulatedData=PrivateToPublicAccumulatedData.empty();nonRevertibleAccumulatedData.nullifiers[0]=getSingleTxBlockRequestHash(blockNumber);let revertibleAccumulatedData=PrivateToPublicAccumulatedData.empty();revertibleAccumulatedData.publicCallRequests[0]=new PublicCallRequest(from??AztecAddress.NULL_MSG_SENDER,targetContractAddress,isStaticCall,calldataHash);let inputsForPublic=new PartialPrivateTailPublicInputsForPublic(nonRevertibleAccumulatedData,revertibleAccumulatedData,PublicCallRequest.empty()),constantData=new TxConstantData(anchorBlockHeader,txContext,Fr.zero(),Fr.zero()),txData=new PrivateKernelTailCircuitPublicInputs(constantData,new Gas(0,0),AztecAddress.zero(),0n,inputsForPublic,void 0),tx=await Tx.create({data:txData,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:[calldataHashedValues]}),checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]),[processedTx]=results[0],failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);if(!processedTx.revertCode.isOK())if(processedTx.revertReason){try{await enrichPublicSimulationError(processedTx.revertReason,this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader,this.logger)}catch{}throw new Error(`Contract execution has reverted: ${processedTx.revertReason.getMessage()}`)}else throw new Error("Contract execution has reverted");let returnValues=results[3][0].values;if(isStaticCall)return await checkpoint.revert(),await forkedWorldTrees.close(),returnValues??[];let txEffect=TxEffect.empty();txEffect.noteHashes=processedTx.txEffect.noteHashes,txEffect.nullifiers=processedTx.txEffect.nullifiers,txEffect.privateLogs=processedTx.txEffect.privateLogs,txEffect.publicLogs=processedTx.txEffect.publicLogs,txEffect.publicDataWrites=processedTx.txEffect.publicDataWrites,txEffect.txHash=new TxHash(new Fr(blockNumber));let l1ToL2Messages=Array(1024).fill(0).map(Fr.zero);await forkedWorldTrees.appendLeaves(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,l1ToL2Messages);let l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);return await this.stateMachine.handleL2Block(l2Block),await forkedWorldTrees.close(),returnValues??[]}async executeUtilityFunction(from,targetContractAddress,functionSelector,args,changeSetId,authorizedUtilityCallTargets){let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),artifact=await new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,blockHeader).getFunctionArtifact(targetContractAddress,functionSelector);if(!artifact)throw new Error(`Cannot call ${functionSelector} as there is no artifact found at ${targetContractAddress}.`);await this.stateMachine.contractSyncService.ensureContractSynced({contract:targetContractAddress,functionToInvokeAfterSync:functionSelector,utilityExecutor:__name(async(call2,execScopes)=>{await this.executeUtilityCall(call2,{scopes:execScopes,changeSetId})},"utilityExecutor"),anchorBlockHeader:blockHeader,changeSetId,scopes:await this.keyStore.getAccounts(),triggeredBy:void 0});let call=FunctionCall.from({name:artifact.name,to:targetContractAddress,selector:functionSelector,type:FunctionType.UTILITY,hideMsgSender:!1,isStatic:!1,args,returnTypes:[]});return this.executeUtilityCall(call,{from,scopes:await this.keyStore.getAccounts(),changeSetId,authorizedUtilityCallTargets})}async executeUtilityCall(call,{from=AztecAddress.NULL_MSG_SENDER,scopes,changeSetId,authorizedUtilityCallTargets=[]}){let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader(),anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader),entryPointArtifact=await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to,call.selector);if(!entryPointArtifact)throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered.`);if(entryPointArtifact.functionType!==FunctionType.UTILITY)throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);this.logger.verbose(`Executing utility function ${entryPointArtifact.name}`,{contract:call.to,selector:call.selector});try{let simulator=new WASMSimulator,utilityExecutor=__name(async(syncCall,execScopes)=>{await this.executeUtilityCall(syncCall,{scopes:execScopes,changeSetId,authorizedUtilityCallTargets})},"utilityExecutor"),oracle=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:from,contractAddress:call.to,functionSelector:call.selector,isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId,scopes,simulator,utilityExecutor,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook("utility",authorizedUtilityCallTargets)}),transientArrayService:new TransientArrayService}),acirExecutionResult=await simulator.executeUserCircuit(toACVMWitness(0,call.args),entryPointArtifact,buildACIRCallback(oracle)).catch(err=>{throw err.message=resolveAssertionMessageFromError(err,entryPointArtifact),new ExecutionError(err.message,{contractAddress:call.to,functionSelector:call.selector},extractCallStack(err,entryPointArtifact.debug),{cause:err})});return this.logger.verbose(`Utility execution for ${call.to}.${call.selector} completed`),witnessMapToFields(acirExecutionResult.returnWitness)}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error during utility execution"))}}close(){return this.logger.debug("Exiting Top Level Context"),{nextBlockTimestamp:this.nextBlockTimestamp,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets}}async getLastBlockNumber(){let block=await this.stateMachine.node.getBlock("latest");return block?block.header.globalVariables.blockNumber:BlockNumber.ZERO}buildAuthorizeUtilityCallHook(callerContext,authorizedTargets){if(this.authorizeAllUtilityCallTargets)return authorizeAllUtilityCallsHook;if(authorizedTargets.length!==0)return req=>Promise.resolve({authorized:req.callerContext===callerContext&&authorizedTargets.some(t=>t.equals(req.target))})}},authorizeAllUtilityCallsHook=__name(()=>Promise.resolve({authorized:!0}),"authorizeAllUtilityCallsHook");var TXEPrivateExecutionOracle=class extends PrivateExecutionOracle{static{__name(this,"TXEPrivateExecutionOracle")}callPrivateFunction(_targetContractAddress,_functionSelector,_argsHash,_sideEffectCounter,_isStaticCall){throw new Error("Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead")}assertValidPublicCalldata(_calldataHash){throw new Error("Enqueueing public calls is not supported in TestEnvironment::private_context")}notifyRevertiblePhaseStart(_minRevertibleSideEffectCounter){throw new Error("Enqueueing public calls is not supported in TestEnvironment::private_context")}};var UnavailableOracleError2=class extends Error{static{__name(this,"UnavailableOracleError")}constructor(oracleName){super(`${oracleName} oracles not available with the current handler`)}},RPCTranslator=class{constructor(stateHandler,oracleHandler){this.stateHandler=stateHandler;this.oracleHandler=oracleHandler}static{__name(this,"RPCTranslator")}handlerAsMisc(){if(!("isMisc"in this.oracleHandler))throw new UnavailableOracleError2("Misc");return this.oracleHandler}handlerAsUtility(){if(!("isUtility"in this.oracleHandler))throw new UnavailableOracleError2("Utility");return this.oracleHandler}handlerAsPrivate(){if(!("isPrivate"in this.oracleHandler))throw new UnavailableOracleError2("Private");return this.oracleHandler}handlerAsAvm(){if(!("isAvm"in this.oracleHandler))throw new UnavailableOracleError2("Avm");return this.oracleHandler}handlerAsTxe(){if(!("isTxe"in this.oracleHandler))throw new UnavailableOracleError2("Txe");return this.oracleHandler}aztec_txe_assertCompatibleOracleVersion(...inputs){return callTxeHandler({oracle:"aztec_txe_assertCompatibleOracleVersion",inputs,handler:__name(([major2,minor])=>{this.stateHandler.setTxeOracleVersion(major2,minor)},"handler")})}aztec_txe_setTopLevelTXEContext(){return callTxeHandler({oracle:"aztec_txe_setTopLevelTXEContext",inputs:[],handler:__name(()=>this.stateHandler.enterTopLevelState(),"handler")})}aztec_txe_setPrivateTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setPrivateTXEContext",inputs,handler:__name(([contractAddress,anchorBlockNumber,gasSettings])=>this.stateHandler.enterPrivateState(contractAddress,anchorBlockNumber,gasSettings),"handler")})}aztec_txe_setPublicTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setPublicTXEContext",inputs,handler:__name(([contractAddress])=>this.stateHandler.enterPublicState(contractAddress),"handler")})}aztec_txe_setUtilityTXEContext(...inputs){return callTxeHandler({oracle:"aztec_txe_setUtilityTXEContext",inputs,handler:__name(([contractAddress])=>this.stateHandler.enterUtilityState(contractAddress),"handler")})}aztec_txe_getDefaultAddress(){return callTxeHandler({oracle:"aztec_txe_getDefaultAddress",inputs:[],handler:__name(()=>this.handlerAsTxe().getDefaultAddress(),"handler")})}aztec_txe_getNextBlockNumber(){return callTxeHandler({oracle:"aztec_txe_getNextBlockNumber",inputs:[],handler:__name(()=>this.handlerAsTxe().getNextBlockNumber(),"handler")})}aztec_txe_getNextBlockTimestamp(){return callTxeHandler({oracle:"aztec_txe_getNextBlockTimestamp",inputs:[],handler:__name(()=>this.handlerAsTxe().getNextBlockTimestamp(),"handler")})}aztec_txe_advanceBlocksBy(...inputs){return callTxeHandler({oracle:"aztec_txe_advanceBlocksBy",inputs,handler:__name(([blocks])=>this.handlerAsTxe().advanceBlocksBy(blocks),"handler")})}aztec_txe_advanceTimestampBy(...inputs){return callTxeHandler({oracle:"aztec_txe_advanceTimestampBy",inputs,handler:__name(([duration3])=>this.handlerAsTxe().advanceTimestampBy(duration3),"handler")})}aztec_txe_deploy(...inputs){return callTxeHandler({oracle:"aztec_txe_deploy",inputs,handler:__name(([contractPath,initializer3,_,args,secret,salt,deployer])=>this.handlerAsTxe().deploy(contractPath,initializer3,args,secret,salt,deployer),"handler")})}aztec_txe_createAccount(...inputs){return callTxeHandler({oracle:"aztec_txe_createAccount",inputs,handler:__name(([secret,partialAddress])=>this.handlerAsTxe().createAccount(secret,partialAddress),"handler")})}aztec_txe_addAccount(...inputs){return callTxeHandler({oracle:"aztec_txe_addAccount",inputs,handler:__name(([secret])=>this.handlerAsTxe().addAccount(secret),"handler")})}aztec_txe_addAuthWitness(...inputs){return callTxeHandler({oracle:"aztec_txe_addAuthWitness",inputs,handler:__name(([address,messageHash])=>this.handlerAsTxe().addAuthWitness(address,messageHash),"handler")})}aztec_txe_sendL1ToL2Message(...inputs){return callTxeHandler({oracle:"aztec_txe_sendL1ToL2Message",inputs,handler:__name(([content,secretHash,sender,recipient])=>this.handlerAsTxe().sendL1ToL2Message(content,secretHash,sender,recipient),"handler")})}aztec_txe_setTaggingSecretStrategies(...inputs){return callTxeHandler({oracle:"aztec_txe_setTaggingSecretStrategies",inputs,handler:__name(([unconstrainedStrategy,constrainedStrategy])=>this.handlerAsTxe().setTaggingSecretStrategies(unconstrainedStrategy,constrainedStrategy),"handler")})}aztec_txe_setAuthorizeAllUtilityCallTargets(...inputs){return callTxeHandler({oracle:"aztec_txe_setAuthorizeAllUtilityCallTargets",inputs,handler:__name(([authorizeAll])=>this.handlerAsTxe().setAuthorizeAllUtilityCallTargets(authorizeAll),"handler")})}aztec_misc_assertCompatibleOracleVersion(...inputs){return callTxeHandler({oracle:"aztec_misc_assertCompatibleOracleVersion",inputs,handler:__name(([major2,minor])=>this.handlerAsMisc().assertCompatibleOracleVersion(major2,minor),"handler")})}aztec_misc_getRandomField(){return callTxeHandler({oracle:"aztec_misc_getRandomField",inputs:[],handler:__name(()=>this.handlerAsMisc().getRandomField(),"handler")})}aztec_txe_getLastBlockTimestamp(){return callTxeHandler({oracle:"aztec_txe_getLastBlockTimestamp",inputs:[],handler:__name(()=>this.handlerAsTxe().getLastBlockTimestamp(),"handler")})}aztec_txe_getLastTxEffects(){return callTxeHandler({oracle:"aztec_txe_getLastTxEffects",inputs:[],handler:__name(()=>this.handlerAsTxe().getLastTxEffects(),"handler")})}aztec_txe_getLastCallOffchainEffects(){return callTxeHandler({oracle:"aztec_txe_getLastCallOffchainEffects",inputs:[],handler:__name(()=>this.stateHandler.getLastCallOffchainEffects(),"handler")})}aztec_txe_getLastCallContext(){return callTxeHandler({oracle:"aztec_txe_getLastCallContext",inputs:[],handler:__name(()=>this.stateHandler.getLastCallContext(),"handler")})}aztec_txe_getPrivateEvents(...inputs){return callTxeHandler({oracle:"aztec_txe_getPrivateEvents",inputs,handler:__name(([selector,contractAddress,scope])=>this.stateHandler.getPrivateEvents(selector,contractAddress,scope),"handler")})}aztec_prv_setHashPreimage(...inputs){return callTxeHandler({oracle:"aztec_prv_setHashPreimage",inputs,handler:__name(([values,hash5])=>this.handlerAsPrivate().setHashPreimage(values,hash5),"handler")})}aztec_prv_getHashPreimage(...inputs){return callTxeHandler({oracle:"aztec_prv_getHashPreimage",inputs,handler:__name(([hash5])=>this.handlerAsPrivate().getHashPreimage(hash5),"handler")})}aztec_misc_log(...inputs){return callTxeHandler({oracle:"aztec_misc_log",inputs,handler:__name(([level,message,fieldsSize,fields])=>this.handlerAsMisc().log(level,message,fieldsSize,fields),"handler")})}aztec_utl_getFromPublicStorage(...inputs){return callTxeHandler({oracle:"aztec_utl_getFromPublicStorage",inputs,handler:__name(([blockHash,contractAddress,startStorageSlot,numberOfElements])=>this.handlerAsUtility().getFromPublicStorage(blockHash,contractAddress,startStorageSlot,numberOfElements),"handler")})}aztec_utl_getPublicDataWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getPublicDataWitness",inputs,handler:__name(([blockHash,leafSlot])=>this.handlerAsUtility().getPublicDataWitness(blockHash,leafSlot),"handler")})}aztec_utl_getNotes(...inputs){return callTxeHandler({oracle:"aztec_utl_getNotes",inputs,handler:__name(([owner,storageSlot,numSelects,selectByIndexes,selectByOffsets,selectByLengths,selectValues,selectComparators,sortByIndexes,sortByOffsets,sortByLengths,sortOrder,limit,offset,status,maxNotes,packedHintedNoteLength])=>this.handlerAsUtility().getNotes(owner,storageSlot,numSelects,selectByIndexes,selectByOffsets,selectByLengths,selectValues,selectComparators,sortByIndexes,sortByOffsets,sortByLengths,sortOrder,limit,offset,status,maxNotes,packedHintedNoteLength),"handler")})}aztec_prv_notifyCreatedNote(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyCreatedNote",inputs,handler:__name(([owner,storageSlot,randomness,noteTypeId,note,noteHash,counter])=>this.handlerAsPrivate().notifyCreatedNote(owner,storageSlot,randomness,noteTypeId,note,noteHash,counter),"handler")})}aztec_prv_notifyNullifiedNote(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyNullifiedNote",inputs,handler:__name(([innerNullifier,noteHash,counter])=>this.handlerAsPrivate().notifyNullifiedNote(innerNullifier,noteHash,counter),"handler")})}aztec_prv_notifyCreatedNullifier(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyCreatedNullifier",inputs,handler:__name(([innerNullifier])=>this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier),"handler")})}aztec_prv_isNullifierPending(...inputs){return callTxeHandler({oracle:"aztec_prv_isNullifierPending",inputs,handler:__name(([innerNullifier,contractAddress])=>this.handlerAsPrivate().isNullifierPending(innerNullifier,contractAddress),"handler")})}aztec_utl_getSettledNoteOrigin(...inputs){return callTxeHandler({oracle:"aztec_utl_getSettledNoteOrigin",inputs,handler:__name(([noteHash,contractAddress,noteNonce])=>this.handlerAsUtility().getSettledNoteOrigin(noteHash,contractAddress,noteNonce),"handler")})}aztec_utl_getNullifierStatuses(...inputs){return callTxeHandler({oracle:"aztec_utl_getNullifierStatuses",inputs,handler:__name(([innerNullifiers])=>this.handlerAsUtility().getNullifierStatuses(innerNullifiers),"handler")})}aztec_utl_getContractInstance(...inputs){return callTxeHandler({oracle:"aztec_utl_getContractInstance",inputs,handler:__name(([address])=>this.handlerAsUtility().getContractInstance(address),"handler")})}aztec_utl_getPublicKeysAndPartialAddress(...inputs){return callTxeHandler({oracle:"aztec_utl_getPublicKeysAndPartialAddress",inputs,handler:__name(([address])=>this.handlerAsUtility().getPublicKeysAndPartialAddress(address),"handler")})}aztec_utl_getKeyValidationRequest(...inputs){return callTxeHandler({oracle:"aztec_utl_getKeyValidationRequest",inputs,handler:__name(([pkMHash,keyIndex])=>this.handlerAsUtility().getKeyValidationRequest(pkMHash,keyIndex),"handler")})}aztec_prv_callPrivateFunction(...inputs){return callTxeHandler({oracle:"aztec_prv_callPrivateFunction",inputs,handler:__name(([contractAddress,functionSelector,argsHash,sideEffectCounter,isStaticCall])=>this.handlerAsPrivate().callPrivateFunction(contractAddress,functionSelector,argsHash,sideEffectCounter,isStaticCall),"handler")})}aztec_utl_getNullifierMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getNullifierMembershipWitness",inputs,handler:__name(([blockHash,nullifier])=>this.handlerAsUtility().getNullifierMembershipWitness(blockHash,nullifier),"handler")})}aztec_utl_getL1ToL2MembershipWitnessV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getL1ToL2MembershipWitnessV2",inputs,handler:__name(([messageHash,nullifier])=>this.handlerAsUtility().getL1ToL2MembershipWitnessV2(messageHash,nullifier),"handler")})}aztec_utl_getAuthWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getAuthWitness",inputs,handler:__name(([messageHash])=>this.handlerAsUtility().getAuthWitness(messageHash),"handler")})}aztec_prv_assertValidPublicCalldata(...inputs){return callTxeHandler({oracle:"aztec_prv_assertValidPublicCalldata",inputs,handler:__name(([calldataHash])=>this.handlerAsPrivate().assertValidPublicCalldata(calldataHash),"handler")})}aztec_prv_notifyRevertiblePhaseStart(...inputs){return callTxeHandler({oracle:"aztec_prv_notifyRevertiblePhaseStart",inputs,handler:__name(([minRevertibleSideEffectCounter])=>this.handlerAsPrivate().notifyRevertiblePhaseStart(minRevertibleSideEffectCounter),"handler")})}aztec_prv_isExecutionInRevertiblePhase(...inputs){return callTxeHandler({oracle:"aztec_prv_isExecutionInRevertiblePhase",inputs,handler:__name(([sideEffectCounter])=>this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter),"handler")})}aztec_utl_getUtilityContext(){return callTxeHandler({oracle:"aztec_utl_getUtilityContext",inputs:[],handler:__name(()=>this.handlerAsUtility().getUtilityContext(),"handler")})}aztec_utl_getBlockHeader(...inputs){return callTxeHandler({oracle:"aztec_utl_getBlockHeader",inputs,handler:__name(([blockNumber])=>this.handlerAsUtility().getBlockHeader(blockNumber),"handler")})}aztec_utl_getNoteHashMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getNoteHashMembershipWitness",inputs,handler:__name(([blockHash,noteHash])=>this.handlerAsUtility().getNoteHashMembershipWitness(blockHash,noteHash),"handler")})}aztec_utl_getBlockHashMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getBlockHashMembershipWitness",inputs,handler:__name(([anchorBlockHash,blockHash])=>this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash,blockHash),"handler")})}aztec_utl_areBlockHashesInArchive(...inputs){return callTxeHandler({oracle:"aztec_utl_areBlockHashesInArchive",inputs,handler:__name(([anchorBlockHash,blockHashes])=>this.handlerAsUtility().areBlockHashesInArchive(anchorBlockHash,blockHashes),"handler")})}aztec_utl_getLowNullifierMembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_getLowNullifierMembershipWitness",inputs,handler:__name(([blockHash,nullifier])=>this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash,nullifier),"handler")})}aztec_utl_getPendingTaggedLogsV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getPendingTaggedLogsV2",inputs,handler:__name(([scope,providedSecrets])=>this.handlerAsUtility().getPendingTaggedLogsV2(scope,providedSecrets),"handler")})}aztec_utl_validateAndStoreEnqueuedNotesAndEvents(...inputs){return callTxeHandler({oracle:"aztec_utl_validateAndStoreEnqueuedNotesAndEvents",inputs,handler:__name(([noteValidationRequests,eventValidationRequests,scope])=>this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(noteValidationRequests,eventValidationRequests,scope),"handler")})}aztec_utl_getLogsByTagV2(...inputs){return callTxeHandler({oracle:"aztec_utl_getLogsByTagV2",inputs,handler:__name(([requestArrayBaseSlot])=>this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot),"handler")})}aztec_utl_getResolvedTxs(...inputs){return callTxeHandler({oracle:"aztec_utl_getResolvedTxs",inputs,handler:__name(([requestArrayBaseSlot])=>this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot),"handler")})}aztec_utl_getTxEffects(...inputs){return callTxeHandler({oracle:"aztec_utl_getTxEffects",inputs,handler:__name(([txHashes])=>this.handlerAsUtility().getTxEffects(txHashes),"handler")})}aztec_utl_setCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_setCapsule",inputs,handler:__name(([contractAddress,slot,capsule,scope])=>this.handlerAsUtility().setCapsule(contractAddress,slot,capsule,scope),"handler")})}aztec_utl_getCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_getCapsule",inputs,handler:__name(([contractAddress,slot,tSize,scope])=>this.handlerAsUtility().getCapsule(contractAddress,slot,tSize,scope),"handler")})}aztec_utl_deleteCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_deleteCapsule",inputs,handler:__name(([contractAddress,slot,scope])=>this.handlerAsUtility().deleteCapsule(contractAddress,slot,scope),"handler")})}aztec_utl_copyCapsule(...inputs){return callTxeHandler({oracle:"aztec_utl_copyCapsule",inputs,handler:__name(([contractAddress,srcSlot,dstSlot,numEntries,scope])=>this.handlerAsUtility().copyCapsule(contractAddress,srcSlot,dstSlot,numEntries,scope),"handler")})}aztec_utl_pushEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_pushEphemeral",inputs,handler:__name(([slot,elements])=>this.handlerAsUtility().pushEphemeral(slot,elements),"handler")})}aztec_utl_popEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_popEphemeral",inputs,handler:__name(([slot])=>this.handlerAsUtility().popEphemeral(slot),"handler")})}aztec_utl_getEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_getEphemeral",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().getEphemeral(slot,index),"handler")})}aztec_utl_setEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_setEphemeral",inputs,handler:__name(([slot,index,elements])=>this.handlerAsUtility().setEphemeral(slot,index,elements),"handler")})}aztec_utl_getEphemeralLen(...inputs){return callTxeHandler({oracle:"aztec_utl_getEphemeralLen",inputs,handler:__name(([slot])=>this.handlerAsUtility().getEphemeralLen(slot),"handler")})}aztec_utl_removeEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_removeEphemeral",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().removeEphemeral(slot,index),"handler")})}aztec_utl_clearEphemeral(...inputs){return callTxeHandler({oracle:"aztec_utl_clearEphemeral",inputs,handler:__name(([slot])=>this.handlerAsUtility().clearEphemeral(slot),"handler")})}aztec_utl_pushTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_pushTransient",inputs,handler:__name(([slot,elements])=>this.handlerAsUtility().pushTransient(slot,elements),"handler")})}aztec_utl_popTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_popTransient",inputs,handler:__name(([slot])=>this.handlerAsUtility().popTransient(slot),"handler")})}aztec_utl_getTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_getTransient",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().getTransient(slot,index),"handler")})}aztec_utl_setTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_setTransient",inputs,handler:__name(([slot,index,elements])=>this.handlerAsUtility().setTransient(slot,index,elements),"handler")})}aztec_utl_getTransientLen(...inputs){return callTxeHandler({oracle:"aztec_utl_getTransientLen",inputs,handler:__name(([slot])=>this.handlerAsUtility().getTransientLen(slot),"handler")})}aztec_utl_removeTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_removeTransient",inputs,handler:__name(([slot,index])=>this.handlerAsUtility().removeTransient(slot,index),"handler")})}aztec_utl_clearTransient(...inputs){return callTxeHandler({oracle:"aztec_utl_clearTransient",inputs,handler:__name(([slot])=>this.handlerAsUtility().clearTransient(slot),"handler")})}aztec_utl_decryptAes128(...inputs){return callTxeHandler({oracle:"aztec_utl_decryptAes128",inputs,handler:__name(([ciphertext,iv,symKey])=>this.handlerAsUtility().decryptAes128(ciphertext,iv,symKey),"handler")})}aztec_utl_getSharedSecrets(...inputs){return callTxeHandler({oracle:"aztec_utl_getSharedSecrets",inputs,handler:__name(([address,ephPksSlot,contractAddress])=>this.handlerAsUtility().getSharedSecrets(address,ephPksSlot,contractAddress),"handler")})}aztec_utl_setContractSyncCacheInvalid(...inputs){return callTxeHandler({oracle:"aztec_utl_setContractSyncCacheInvalid",inputs,handler:__name(([contractAddress,scopes])=>this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress,scopes),"handler")})}aztec_utl_emitOffchainEffect(...inputs){return callTxeHandler({oracle:"aztec_utl_emitOffchainEffect",inputs,handler:__name(([data])=>{this.stateHandler.recordOffchainEffect(data)},"handler")})}aztec_utl_recordFact(...inputs){return callTxeHandler({oracle:"aztec_utl_recordFact",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId,factTypeId,payload,originBlock])=>this.handlerAsUtility().recordFact(contractAddress,scope,factCollectionTypeId,factCollectionId,factTypeId,payload,originBlock),"handler")})}aztec_utl_deleteFactCollection(...inputs){return callTxeHandler({oracle:"aztec_utl_deleteFactCollection",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId])=>this.handlerAsUtility().deleteFactCollection(contractAddress,scope,factCollectionTypeId,factCollectionId),"handler")})}aztec_utl_getFactCollection(...inputs){return callTxeHandler({oracle:"aztec_utl_getFactCollection",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId,factCollectionId])=>this.handlerAsUtility().getFactCollection(contractAddress,scope,factCollectionTypeId,factCollectionId),"handler")})}aztec_utl_getFactCollectionsByType(...inputs){return callTxeHandler({oracle:"aztec_utl_getFactCollectionsByType",inputs,handler:__name(([contractAddress,scope,factCollectionTypeId])=>this.handlerAsUtility().getFactCollectionsByType(contractAddress,scope,factCollectionTypeId),"handler")})}aztec_avm_emitPublicLog(){return callTxeHandler({oracle:"aztec_avm_emitPublicLog",inputs:[],handler:__name(()=>{},"handler")})}aztec_avm_storageRead(...inputs){return callTxeHandler({oracle:"aztec_avm_storageRead",inputs,handler:__name(([slot,contractAddress])=>this.handlerAsAvm().storageRead(slot,contractAddress),"handler")})}aztec_avm_storageWrite(...inputs){return callTxeHandler({oracle:"aztec_avm_storageWrite",inputs,handler:__name(([slot,value])=>this.handlerAsAvm().storageWrite(slot,value),"handler")})}aztec_avm_getContractInstanceDeployer(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceDeployer",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceDeployer(address),"handler")})}aztec_avm_getContractInstanceClassId(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceClassId",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceClassId(address),"handler")})}aztec_avm_getContractInstanceInitializationHash(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceInitializationHash",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceInitializationHash(address),"handler")})}aztec_avm_getContractInstanceImmutablesHash(...inputs){return callTxeHandler({oracle:"aztec_avm_getContractInstanceImmutablesHash",inputs,handler:__name(([address])=>this.handlerAsAvm().getContractInstanceImmutablesHash(address),"handler")})}aztec_avm_sender(){return callTxeHandler({oracle:"aztec_avm_sender",inputs:[],handler:__name(()=>this.handlerAsAvm().sender(),"handler")})}aztec_avm_emitNullifier(...inputs){return callTxeHandler({oracle:"aztec_avm_emitNullifier",inputs,handler:__name(([nullifier])=>this.handlerAsAvm().emitNullifier(nullifier),"handler")})}aztec_avm_emitNoteHash(...inputs){return callTxeHandler({oracle:"aztec_avm_emitNoteHash",inputs,handler:__name(([noteHash])=>this.handlerAsAvm().emitNoteHash(noteHash),"handler")})}aztec_avm_nullifierExists(...inputs){return callTxeHandler({oracle:"aztec_avm_nullifierExists",inputs,handler:__name(([siloedNullifier])=>this.handlerAsAvm().nullifierExists(siloedNullifier),"handler")})}aztec_avm_address(){return callTxeHandler({oracle:"aztec_avm_address",inputs:[],handler:__name(()=>this.handlerAsAvm().address(),"handler")})}aztec_avm_blockNumber(){return callTxeHandler({oracle:"aztec_avm_blockNumber",inputs:[],handler:__name(()=>this.handlerAsAvm().blockNumber(),"handler")})}aztec_avm_timestamp(){return callTxeHandler({oracle:"aztec_avm_timestamp",inputs:[],handler:__name(()=>this.handlerAsAvm().timestamp(),"handler")})}aztec_avm_isStaticCall(){return callTxeHandler({oracle:"aztec_avm_isStaticCall",inputs:[],handler:__name(()=>this.handlerAsAvm().isStaticCall(),"handler")})}aztec_avm_chainId(){return callTxeHandler({oracle:"aztec_avm_chainId",inputs:[],handler:__name(()=>this.handlerAsAvm().chainId(),"handler")})}aztec_avm_version(){return callTxeHandler({oracle:"aztec_avm_version",inputs:[],handler:__name(()=>this.handlerAsAvm().version(),"handler")})}aztec_avm_returndataSize(){return callTxeHandler({oracle:"aztec_avm_returndataSize",inputs:[],handler:__name(()=>this.handlerAsAvm().returndataSize(),"handler")})}aztec_avm_returndataCopy(...inputs){return callTxeHandler({oracle:"aztec_avm_returndataCopy",inputs,handler:__name(([rdOffset,copySize])=>this.handlerAsAvm().returndataCopy(rdOffset,copySize),"handler")})}aztec_avm_call(...inputs){return callTxeHandler({oracle:"aztec_avm_call",inputs,handler:__name(([l2Gas,daGas,address,argsLength,args])=>this.handlerAsAvm().call(l2Gas,daGas,address,argsLength,args),"handler")})}aztec_avm_staticCall(...inputs){return callTxeHandler({oracle:"aztec_avm_staticCall",inputs,handler:__name(([l2Gas,daGas,address,argsLength,args])=>this.handlerAsAvm().staticCall(l2Gas,daGas,address,argsLength,args),"handler")})}aztec_avm_successCopy(){return callTxeHandler({oracle:"aztec_avm_successCopy",inputs:[],handler:__name(()=>this.handlerAsAvm().successCopy(),"handler")})}aztec_txe_privateCallNewFlow(...inputs){return callTxeHandler({oracle:"aztec_txe_privateCallNewFlow",inputs,handler:__name(([from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings])=>this.stateHandler.executePrivateCall(from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings),"handler")})}aztec_txe_executeUtilityFunction(...inputs){return callTxeHandler({oracle:"aztec_txe_executeUtilityFunction",inputs,handler:__name(([from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets])=>this.stateHandler.executeUtilityFunction(from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets),"handler")})}aztec_txe_publicCallNewFlow(...inputs){return callTxeHandler({oracle:"aztec_txe_publicCallNewFlow",inputs,handler:__name(([from,address,calldata,isStaticCall,gasSettings])=>this.stateHandler.executePublicCall(from,address,calldata,isStaticCall,gasSettings),"handler")})}aztec_prv_getSenderForTags(){return callTxeHandler({oracle:"aztec_prv_getSenderForTags",inputs:[],handler:__name(()=>this.handlerAsPrivate().getSenderForTags(),"handler")})}aztec_prv_resolveTaggingStrategy(...inputs){return callTxeHandler({oracle:"aztec_prv_resolveTaggingStrategy",inputs,handler:__name(([sender,recipient,deliveryMode])=>this.handlerAsPrivate().resolveTaggingStrategy(sender,recipient,deliveryMode),"handler")})}aztec_prv_resolveCustomRequest(...inputs){return callTxeHandler({oracle:"aztec_prv_resolveCustomRequest",inputs,handler:__name(([kind,payload])=>this.handlerAsPrivate().resolveCustomRequest(kind,payload),"handler")})}aztec_prv_getAppTaggingSecret(...inputs){return callTxeHandler({oracle:"aztec_prv_getAppTaggingSecret",inputs,handler:__name(([sender,recipient])=>this.handlerAsPrivate().getAppTaggingSecret(sender,recipient),"handler")})}aztec_prv_getNextTaggingIndex(...inputs){return callTxeHandler({oracle:"aztec_prv_getNextTaggingIndex",inputs,handler:__name(([secret,deliveryMode])=>this.handlerAsPrivate().getNextTaggingIndex(secret,deliveryMode),"handler")})}};function computeCheckpointPayloadDigest(args){let consensusPayload=new ConsensusPayload(args.header,args.archiveRoot,args.feeAssetPriceModifier,args.signatureContext);return getHashedSignaturePayloadTypedData(consensusPayload)}__name(computeCheckpointPayloadDigest,"computeCheckpointPayloadDigest");import{RollupContract,SimulationOverridesBuilder}from"@aztec/ethereum/contracts";async function buildCheckpointSimulationOverridesPlan(input){if(input.proposedCheckpointData&&input.invalidateToPendingCheckpointNumber!==void 0)throw new Error("Error in buildCheckpointSimulationOverridesPlan: proposedCheckpointData and invalidateToPendingCheckpointNumber are mutually exclusive");let builder=new SimulationOverridesBuilder,overridenChainTip=derivePendingCheckpointNumber(input)??input.checkpointedCheckpointNumber;if(builder.withChainTips({pending:overridenChainTip,proven:overridenChainTip}),input.proposedCheckpointData){let{header,archive,checkpointOutHash,feeAssetPriceModifier}=input.proposedCheckpointData;builder.withPendingArchive(archive.root),builder.withPendingTempCheckpointLogFields({headerHash:header.hash(),outHash:checkpointOutHash,slotNumber:header.slotNumber,payloadDigest:computeCheckpointPayloadDigest({header,archiveRoot:archive.root,feeAssetPriceModifier,signatureContext:input.signatureContext})});let feeHeader=await computePipelinedParentFeeHeader({checkpointNumber:input.checkpointNumber,proposedCheckpointData:input.proposedCheckpointData,rollup:input.rollup,log:input.log});feeHeader&&builder.withPendingFeeHeader(feeHeader)}return builder.build()}__name(buildCheckpointSimulationOverridesPlan,"buildCheckpointSimulationOverridesPlan");function derivePendingCheckpointNumber(input){if(input.invalidateToPendingCheckpointNumber!==void 0)return input.invalidateToPendingCheckpointNumber;if(!input.proposedCheckpointData)return;if(input.checkpointNumber<1)throw new Error(`Cannot build simulation override for checkpoint ${input.checkpointNumber}: no parent exists`);let expectedParent=CheckpointNumber(input.checkpointNumber-1);if(input.proposedCheckpointData.checkpointNumber!==expectedParent)throw new Error(`Cannot build simulation override for checkpoint ${input.checkpointNumber}: proposedCheckpointData.checkpointNumber (${input.proposedCheckpointData.checkpointNumber}) does not match expected parent ${expectedParent}`);return expectedParent}__name(derivePendingCheckpointNumber,"derivePendingCheckpointNumber");async function computePipelinedParentFeeHeader(input){if(input.checkpointNumber<2)return;let grandparentCheckpointNumber=CheckpointNumber(input.checkpointNumber-2),[grandparentCheckpoint,manaTarget]=await Promise.all([input.rollup.getCheckpoint(grandparentCheckpointNumber),input.rollup.getManaTarget()]);if(!grandparentCheckpoint?.feeHeader)throw new Error(`Grandparent checkpoint or feeHeader missing for checkpoint ${grandparentCheckpointNumber.toString()}`);return RollupContract.computeChildFeeHeader(grandparentCheckpoint.feeHeader,input.proposedCheckpointData.totalManaUsed,input.proposedCheckpointData.feeAssetPriceModifier,manaTarget)}__name(computePipelinedParentFeeHeader,"computePipelinedParentFeeHeader");var CheckpointValidationError=class extends Error{static{__name(this,"CheckpointValidationError")}checkpointNumber;slot;constructor(message,checkpointNumber,slot){super(message),this.checkpointNumber=checkpointNumber,this.slot=slot,this.name="CheckpointValidationError"}};function validateCheckpoint(checkpoint,opts){validateCheckpointStructure(checkpoint,{maxBlocksPerCheckpoint:opts.maxBlocksPerCheckpoint,allowEmptyNonFirstBlocks:opts.allowEmptyNonFirstBlocks}),validateCheckpointLimits(checkpoint,opts),validateCheckpointBlocksLimits(checkpoint,opts)}__name(validateCheckpoint,"validateCheckpoint");function validateCheckpointStructure(checkpoint,opts={}){let{maxBlocksPerCheckpoint=MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT,allowEmptyNonFirstBlocks=!1}=opts,{blocks,number:number4,slot}=checkpoint;if(blocks.length===0)throw new CheckpointValidationError("Checkpoint has no blocks",number4,slot);if(blocks.length>maxBlocksPerCheckpoint)throw new CheckpointValidationError(`Checkpoint has ${blocks.length} blocks, exceeding limit of ${maxBlocksPerCheckpoint}`,number4,slot);let firstBlock=blocks[0];if(!checkpoint.header.lastArchiveRoot.equals(firstBlock.header.lastArchive.root))throw new CheckpointValidationError("Checkpoint lastArchiveRoot does not match first block's lastArchive root",number4,slot);for(let i=0;i<blocks.length;i++){let block=blocks[i];if(block.indexWithinCheckpoint!==i)throw new CheckpointValidationError(`Block at index ${i} has indexWithinCheckpoint ${block.indexWithinCheckpoint}, expected ${i}`,number4,slot);if(block.slot!==slot)throw new CheckpointValidationError(`Block ${block.number} has slot ${block.slot}, expected ${slot} (all blocks must share the same slot)`,number4,slot);if(!checkpoint.header.matchesGlobalVariables(block.header.globalVariables))throw new CheckpointValidationError(`Block ${block.number} global variables (slot, timestamp, coinbase, feeRecipient, gasFees) do not match checkpoint header`,number4,slot);if(i>0){if(!allowEmptyNonFirstBlocks&&block.body.txEffects.length===0)throw new CheckpointValidationError(`Block ${block.number} at index ${i} has no txs; only the first block of a checkpoint may be empty`,number4,slot);let prev=blocks[i-1];if(block.number!==prev.number+1)throw new CheckpointValidationError(`Block numbers are not sequential: block at index ${i-1} has number ${prev.number}, block at index ${i} has number ${block.number}`,number4,slot);if(!block.header.lastArchive.root.equals(prev.archive.root))throw new CheckpointValidationError(`Block ${block.number} lastArchive root does not match archive root of block ${prev.number}`,number4,slot)}}}__name(validateCheckpointStructure,"validateCheckpointStructure");function validateCheckpointBlocksLimits(checkpoint,opts){let{maxL2BlockGas,maxDABlockGas,maxTxsPerBlock}=opts;if(maxL2BlockGas!==void 0)for(let block of checkpoint.blocks){let blockL2Gas=block.header.totalManaUsed.toNumber();if(blockL2Gas>maxL2BlockGas)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has L2 gas used ${blockL2Gas} exceeding limit of ${maxL2BlockGas}`,checkpoint.number,checkpoint.slot)}if(maxDABlockGas!==void 0)for(let block of checkpoint.blocks){let blockDAGas=block.computeDAGasUsed();if(blockDAGas>maxDABlockGas)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has DA gas used ${blockDAGas} exceeding limit of ${maxDABlockGas}`,checkpoint.number,checkpoint.slot)}if(maxTxsPerBlock!==void 0)for(let block of checkpoint.blocks){let blockTxCount=block.body.txEffects.length;if(blockTxCount>maxTxsPerBlock)throw new CheckpointValidationError(`Block ${block.number} in checkpoint has ${blockTxCount} txs exceeding limit of ${maxTxsPerBlock}`,checkpoint.number,checkpoint.slot)}}__name(validateCheckpointBlocksLimits,"validateCheckpointBlocksLimits");function validateCheckpointLimits(checkpoint,opts){let{rollupManaLimit,maxTxsPerCheckpoint}=opts,maxBlobFields=6*4096,maxDAGas=MAX_PROCESSABLE_DA_GAS_PER_CHECKPOINT2;if(rollupManaLimit!==void 0){let checkpointMana=sum(checkpoint.blocks.map(block=>block.header.totalManaUsed.toNumber()));if(checkpointMana>rollupManaLimit)throw new CheckpointValidationError(`Checkpoint mana cost ${checkpointMana} exceeds rollup limit of ${rollupManaLimit}`,checkpoint.number,checkpoint.slot)}let checkpointDAGas=sum(checkpoint.blocks.map(block=>block.computeDAGasUsed()));if(checkpointDAGas>maxDAGas)throw new CheckpointValidationError(`Checkpoint DA gas cost ${checkpointDAGas} exceeds limit of ${maxDAGas}`,checkpoint.number,checkpoint.slot);let checkpointBlobFields=checkpoint.toBlobFields().length;if(checkpointBlobFields>maxBlobFields)throw new CheckpointValidationError(`Checkpoint blob field count ${checkpointBlobFields} exceeds limit of ${maxBlobFields}`,checkpoint.number,checkpoint.slot);if(maxTxsPerCheckpoint!==void 0){let checkpointTxCount=sum(checkpoint.blocks.map(block=>block.body.txEffects.length));if(checkpointTxCount>maxTxsPerCheckpoint)throw new CheckpointValidationError(`Checkpoint tx count ${checkpointTxCount} exceeds limit of ${maxTxsPerCheckpoint}`,checkpoint.number,checkpoint.slot)}}__name(validateCheckpointLimits,"validateCheckpointLimits");var ArchiverDataSourceBase=class{static{__name(this,"ArchiverDataSourceBase")}stores;l1Constants;initialHeader;initialBlockHash;genesisArchiveRoot;genesisBlock;genesisBlockData;constructor(stores,l1Constants,initialHeader,initialBlockHash,genesisArchiveRoot){this.stores=stores,this.l1Constants=l1Constants,this.initialHeader=initialHeader,this.initialBlockHash=initialBlockHash,this.genesisArchiveRoot=genesisArchiveRoot;let genesisArchive=new AppendOnlyTreeSnapshot(genesisArchiveRoot,1);this.genesisBlock=new L2Block(genesisArchive,initialHeader,Body.empty(),CheckpointNumber.ZERO,IndexWithinCheckpoint(0)),this.genesisBlockData={header:initialHeader,archive:genesisArchive,blockHash:initialBlockHash,checkpointNumber:CheckpointNumber.ZERO,indexWithinCheckpoint:IndexWithinCheckpoint(0)}}getGenesisBlockHash(){return this.initialBlockHash}getGenesisBlock(){return this.genesisBlock}getGenesisBlockData(){return this.genesisBlockData}isGenesisBlockQuery(query){return"genesis"in query}async isPruneDueAtSlot(slot){if(!this.l1Constants)throw new Error("isPruneDueAtSlot requires l1Constants");let tips=await this.getL2Tips(),proven=tips.proven.checkpoint.number;if(tips.checkpointed.checkpoint.number===proven)return!1;let oldestUnproven=await this.getCheckpointData({number:CheckpointNumber(Number(proven)+1)});if(!oldestUnproven)return!1;let slotTs=getLastL1SlotTimestampForL2Slot(slot,this.l1Constants),slotEpoch=getEpochNumberAtTimestamp(slotTs,this.l1Constants),oldestUnprovenEpoch=getEpochAtSlot(oldestUnproven.header.slotNumber,this.l1Constants),deadlineEpoch=getProofSubmissionDeadlineEpoch(oldestUnprovenEpoch,this.l1Constants);return slotEpoch>=deadlineEpoch}getCheckpointNumber(){return this.stores.blocks.getLatestCheckpointNumber()}getProvenCheckpointNumber(){return this.stores.blocks.getProvenCheckpointNumber()}async getBlockNumber(query){if(!query)return this.stores.blocks.getLatestL2BlockNumber();let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?BlockNumber.ZERO:this.stores.blocks.getBlockNumber(resolved)}resolveCheckpointQuery(query){if("number"in query)return Promise.resolve(query.number);if("slot"in query)return this.stores.blocks.getCheckpointNumberBySlot(query.slot);switch(query.tag){case"checkpointed":return this.stores.blocks.getLatestCheckpointNumber();case"proven":return this.stores.blocks.getProvenCheckpointNumber();case"finalized":return this.stores.blocks.getFinalizedCheckpointNumber()}}async getCheckpoint(query){let number4=await this.resolveCheckpointQuery(query);if(number4===void 0||number4===0)return;let data=await this.stores.blocks.getCheckpointData(number4);if(data)return this.getPublishedCheckpointFromCheckpointData(data)}async getCheckpoints(query){let checkpoints=await this.getCheckpointsData(query);return Promise.all(checkpoints.map(ch=>this.getPublishedCheckpointFromCheckpointData(ch)))}async getCheckpointData(query){let number4=await this.resolveCheckpointQuery(query);if(!(number4===void 0||number4===0))return this.stores.blocks.getCheckpointData(number4)}async getCheckpointsData(query){if("fromSlot"in query)return this.stores.blocks.getCheckpointsBySlot(query.fromSlot,query.limit,query.reverse??!1);if("from"in query)return this.stores.blocks.getRangeOfCheckpoints(query.from,query.limit);let numbers=await this.getCheckpointNumbersForEpoch(query.epoch);return numbers.length>0?this.stores.blocks.getRangeOfCheckpoints(numbers[0],numbers.length):[]}getProposedCheckpointData(query){return!query||"tag"in query?this.stores.blocks.getLastProposedCheckpoint():"number"in query?this.stores.blocks.getProposedCheckpointByNumber(query.number):this.stores.blocks.getProposedCheckpointBySlot(query.slot)}getTxEffect(txHash){return this.stores.blocks.getTxEffect(txHash)}isPendingChainInvalid(){return this.getPendingChainValidationStatus().then(status=>!status.valid)}async getPendingChainValidationStatus(){return await this.stores.blocks.getPendingChainValidationStatus()??{valid:!0}}getPrivateLogsByTags(query){return this.stores.logs.getPrivateLogsByTags(query)}getPublicLogsByTags(query){return this.stores.logs.getPublicLogsByTags(query)}getContractClass(id){return this.stores.contractClasses.getContractClass(id)}getBytecodeCommitment(id){return this.stores.contractClasses.getBytecodeCommitment(id)}getContract(address,timestamp){return this.stores.contractInstances.getContractInstance(address,timestamp)}getContractClassIds(){return this.stores.contractClasses.getContractClassIds()}getDebugFunctionName(_address,selector){return Promise.resolve(this.stores.functionNames.get(selector))}registerContractFunctionSignatures(signatures){return this.stores.functionNames.register(signatures)}getL1ToL2Messages(checkpointNumber){return this.stores.messages.getL1ToL2Messages(checkpointNumber)}getL1ToL2MessageIndex(l1ToL2Message){return this.stores.messages.getL1ToL2MessageIndex(l1ToL2Message)}async getPublishedCheckpointFromCheckpointData(checkpoint){let blocksForCheckpoint=await this.stores.blocks.getBlocksForCheckpoint(checkpoint.checkpointNumber);if(!blocksForCheckpoint)throw new Error(`Blocks for checkpoint ${checkpoint.checkpointNumber} not found`);let fullCheckpoint=new Checkpoint(checkpoint.archive,checkpoint.header,blocksForCheckpoint,checkpoint.checkpointNumber,checkpoint.feeAssetPriceModifier);return new PublishedCheckpoint(fullCheckpoint,checkpoint.l1,checkpoint.attestations)}getBlocksForSlot(slotNumber){return this.stores.blocks.getBlocksForSlot(slotNumber)}getCheckpointNumbersForEpoch(epochNumber){if(!this.l1Constants)throw new Error("L1 constants not set");let[start,end]=getSlotRangeForEpoch(epochNumber,this.l1Constants);return this.stores.blocks.getCheckpointNumbersForSlotRange(start,end)}async getBlock(query){let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?this.getGenesisBlock():this.stores.blocks.getBlock(resolved)}async getBlocks(query){let resolved=await this.resolveBlocksQuery(query);return resolved?this.stores.blocks.getBlocks(resolved):[]}async getBlockData(query){let resolved=await this.resolveBlockQuery(query);if(resolved!==void 0)return this.isGenesisBlockQuery(resolved)?this.getGenesisBlockData():this.stores.blocks.getBlockData(resolved)}async getBlocksData(query){let resolved=await this.resolveBlocksQuery(query);return resolved?this.stores.blocks.getBlocksData(resolved):[]}async resolveBlockQuery(query){if("number"in query)return query.number===BlockNumber.ZERO?{genesis:!0}:query;if("hash"in query)return query.hash.equals(this.initialBlockHash)?{genesis:!0}:query;if("archive"in query)return query.archive.equals(this.genesisArchiveRoot)?{genesis:!0}:query;let number4=await this.resolveBlockTag(query.tag);return number4===BlockNumber.ZERO?{genesis:!0}:{number:number4}}resolveBlockTag(tag){switch(tag){case"latest":case"proposed":return this.stores.blocks.getLatestL2BlockNumber();case"checkpointed":return this.stores.blocks.getCheckpointedL2BlockNumber();case"proven":return this.stores.blocks.getProvenBlockNumber();case"finalized":return this.stores.blocks.getFinalizedL2BlockNumber()}}async resolveBlocksQuery(query){if(!("epoch"in query)){if(query.from<INITIAL_L2_BLOCK_NUM2)throw new Error(`getBlocks/getBlocksData: 'from' must be >= ${INITIAL_L2_BLOCK_NUM2}, got ${query.from}. Use getBlock({number:0})/getBlockData({number:0}) for genesis-aware single-block lookups.`);return query}let checkpointNumbers=await this.getCheckpointNumbersForEpoch(query.epoch);if(checkpointNumbers.length===0)return;let firstNumber=checkpointNumbers[0],lastNumber=checkpointNumbers[checkpointNumbers.length-1],first2=await this.stores.blocks.getCheckpointData(firstNumber);if(!first2)return;let last=firstNumber===lastNumber?first2:await this.stores.blocks.getCheckpointData(lastNumber);if(!last)return;let from=BlockNumber(first2.startBlock),limit=last.startBlock+last.blockCount-first2.startBlock;return{from,limit,onlyCheckpointed:!0}}};var Operation=(function(Operation2){return Operation2[Operation2.Store=0]="Store",Operation2[Operation2.Delete=1]="Delete",Operation2})(Operation||{}),ArchiverDataStoreUpdater=class{static{__name(this,"ArchiverDataStoreUpdater")}stores;l2FrontierCache;opts;log;constructor(stores,l2FrontierCache,opts={}){this.stores=stores,this.l2FrontierCache=l2FrontierCache,this.opts=opts,this.log=createLogger("archiver:store_updater")}async addProposedBlock(block,pendingChainValidationStatus){let result=await this.stores.db.transactionAsync(async()=>(await this.stores.blocks.addProposedBlock(block),(await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs([block]),this.addContractDataToDb(block)])).every(Boolean)));return await this.l2FrontierCache?.refresh(),result}async addCheckpoints(checkpoints,pendingChainValidationStatus,promoteProposed,evictProposedFrom){let validateOpts={rollupManaLimit:this.opts?.rollupManaLimit,maxBlocksPerCheckpoint:MAX_CAPACITY_BLOCKS_PER_CHECKPOINT,allowEmptyNonFirstBlocks:!0};for(let checkpoint of checkpoints)validateCheckpoint(checkpoint.checkpoint,validateOpts);promoteProposed&&validateCheckpoint(promoteProposed.checkpoint.checkpoint,validateOpts);let result=await this.stores.db.transactionAsync(async()=>{let{prunedBlocks,lastAlreadyInsertedBlockNumber}=await this.pruneMismatchingLocalBlocks(checkpoints),newBlocks=(await this.stores.blocks.addCheckpoints(checkpoints)).flatMap(ch=>ch.checkpoint.blocks).filter(b=>lastAlreadyInsertedBlockNumber===void 0||b.number>lastAlreadyInsertedBlockNumber);return await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs(newBlocks),...newBlocks.map(block=>this.addContractDataToDb(block)),promoteProposed?this.stores.blocks.promoteProposedToCheckpointed(promoteProposed.checkpoint.checkpoint.number,promoteProposed.l1,promoteProposed.attestations,promoteProposed.checkpoint.checkpoint.archive.root):void 0,evictProposedFrom!==void 0?this.stores.blocks.evictProposedCheckpointsFrom(evictProposedFrom):void 0]),{prunedBlocks,lastAlreadyInsertedBlockNumber}});return await this.l2FrontierCache?.refresh(),result}async addProposedCheckpoint(proposedCheckpoint){let result=await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.addProposedCheckpoint(proposedCheckpoint)});return await this.l2FrontierCache?.refresh(),result}async pruneMismatchingLocalBlocks(checkpoints){let[lastCheckpointedBlockNumber,lastBlockNumber]=await Promise.all([this.stores.blocks.getCheckpointedL2BlockNumber(),this.stores.blocks.getLatestL2BlockNumber()]);if(lastBlockNumber===lastCheckpointedBlockNumber)return{prunedBlocks:void 0,lastAlreadyInsertedBlockNumber:void 0};let uncheckpointedLocalBlocks=await this.stores.blocks.getBlocksData({from:BlockNumber.add(lastCheckpointedBlockNumber,1),limit:lastBlockNumber-lastCheckpointedBlockNumber}),lastAlreadyInsertedBlockNumber;for(let publishedCheckpoint of checkpoints){let checkpointBlocks=publishedCheckpoint.checkpoint.blocks,slot=publishedCheckpoint.checkpoint.slot;if(checkpointBlocks.length===0){this.log.warn(`Checkpoint ${publishedCheckpoint.checkpoint.number} for slot ${slot} has no blocks`);continue}for(let checkpointBlock of checkpointBlocks){let blockNumber=checkpointBlock.number,existingBlock=uncheckpointedLocalBlocks.find(b=>b.header.getBlockNumber()===blockNumber),blockInfos={existingBlock:existingBlock?.header.toInspect(),checkpointBlock:checkpointBlock.toBlockInfo()};if(!existingBlock)this.log.verbose(`No local block found for checkpointed block number ${blockNumber}`,blockInfos);else if(existingBlock.archive.root.equals(checkpointBlock.archive.root))this.log.verbose(`Block number ${blockNumber} already inserted and matches checkpoint`,blockInfos),lastAlreadyInsertedBlockNumber=blockNumber;else{this.log.info(`Conflict detected at block ${blockNumber} between checkpointed and local block`,blockInfos);let prunedBlocks=await this.removeBlocksAfter(BlockNumber(blockNumber-1));return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),{prunedBlocks,lastAlreadyInsertedBlockNumber}}}let lastCheckpointBlockNumber=checkpointBlocks.at(-1).number,lastLocalBlockNumber=uncheckpointedLocalBlocks.filter(b=>b.header.getSlot()===slot).at(-1)?.header.getBlockNumber();if(lastLocalBlockNumber!==void 0&&lastLocalBlockNumber>lastCheckpointBlockNumber){this.log.warn(`Local chain for slot ${slot} ends at block ${lastLocalBlockNumber} but checkpoint ends at ${lastCheckpointBlockNumber}. Pruning blocks after block ${lastCheckpointBlockNumber}.`);let prunedBlocks=await this.removeBlocksAfter(lastCheckpointBlockNumber);return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),{prunedBlocks,lastAlreadyInsertedBlockNumber}}}return{prunedBlocks:void 0,lastAlreadyInsertedBlockNumber}}async removeUncheckpointedBlocksAfter(blockNumber){let result=await this.stores.db.transactionAsync(async()=>{let lastCheckpointedBlockNumber=await this.stores.blocks.getCheckpointedL2BlockNumber();if(blockNumber<lastCheckpointedBlockNumber)throw new Error(`Cannot remove blocks after ${blockNumber} because checkpointed blocks exist up to ${lastCheckpointedBlockNumber}`);let prunedBlocks=await this.removeBlocksAfter(blockNumber);return await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks),prunedBlocks});return await this.l2FrontierCache?.refresh(),result}async removeBlocksWithoutProposedCheckpointAfter(blockNumber){let result=await this.stores.db.transactionAsync(async()=>{let lastCheckpointedBlockNumber=await this.stores.blocks.getProposedCheckpointL2BlockNumber();if(blockNumber<lastCheckpointedBlockNumber)throw new Error(`Cannot remove blocks after ${blockNumber} because proposed checkpointed blocks exist up to ${lastCheckpointedBlockNumber}`);return await this.removeBlocksAfter(blockNumber)});return await this.l2FrontierCache?.refresh(),result}async evictProposedCheckpointsForPrunedBlocks(prunedBlocks){if(prunedBlocks.length===0)return;let fromCheckpointNumber=prunedBlocks[0].checkpointNumber;await this.stores.blocks.evictProposedCheckpointsFrom(fromCheckpointNumber)}async removeBlocksAfter(blockNumber){let removedBlocks=await this.stores.blocks.removeBlocksAfter(blockNumber);return await Promise.all([this.stores.logs.deleteLogs(removedBlocks),...removedBlocks.map(block=>this.removeContractDataFromDb(block))]),removedBlocks}async removeCheckpointsAfter(checkpointNumber){let result=await this.stores.db.transactionAsync(async()=>{let{blocksRemoved=[]}=await this.stores.blocks.removeCheckpointsAfter(checkpointNumber);return(await Promise.all([this.stores.blocks.setPendingChainValidationStatus({valid:!0}),...blocksRemoved.map(block=>this.removeContractDataFromDb(block)),this.stores.logs.deleteLogs(blocksRemoved)])).every(Boolean)});return await this.l2FrontierCache?.refresh(),result}async setProvenCheckpointNumber(checkpointNumber){await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.setProvenCheckpointNumber(checkpointNumber)}),await this.l2FrontierCache?.refresh()}async setFinalizedCheckpointNumber(checkpointNumber){await this.stores.db.transactionAsync(async()=>{await this.stores.blocks.setFinalizedCheckpointNumber(checkpointNumber)}),await this.l2FrontierCache?.refresh()}addContractDataToDb(block){return this.updateContractDataOnDb(block,0)}removeContractDataFromDb(block){return this.updateContractDataOnDb(block,1)}async updateContractDataOnDb(block,operation){let contractClassLogs=block.body.txEffects.flatMap(txEffect=>txEffect.contractClassLogs),privateLogs=block.body.txEffects.flatMap(txEffect=>txEffect.privateLogs),publicLogs=block.body.txEffects.flatMap(txEffect=>txEffect.publicLogs);return(await Promise.all([this.updatePublishedContractClasses(contractClassLogs,block.number,operation),this.updateDeployedContractInstances(privateLogs,block.number,operation),this.updateUpdatedContractInstances(publicLogs,block.header.globalVariables.timestamp,operation)])).every(Boolean)}async updatePublishedContractClasses(allLogs,blockNum,operation){let contractClassPublishedEvents=allLogs.filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2));if(operation==1){let contractClasses2=contractClassPublishedEvents.map(e2=>e2.toContractClassPublic());return contractClasses2.length>0?(contractClasses2.forEach(c2=>this.log.verbose(`${Operation[operation]} contract class ${c2.id.toString()}`)),await this.stores.contractClasses.deleteContractClasses(contractClasses2,blockNum)):!0}let contractClasses=[];for(let event of contractClassPublishedEvents){let contractClass=await event.toContractClassPublicWithBytecodeCommitment(),computedClassId=await computeContractClassId({artifactHash:contractClass.artifactHash,privateFunctionsRoot:contractClass.privateFunctionsRoot,publicBytecodeCommitment:contractClass.publicBytecodeCommitment});if(!computedClassId.equals(contractClass.id)){this.log.warn(`Skipping contract class with mismatched id at block ${blockNum}. Claimed ${contractClass.id}, computed ${computedClassId}`,{blockNum,contractClassId:event.contractClassId.toString()});continue}contractClasses.push(contractClass)}return contractClasses.length>0?(contractClasses.forEach(c2=>this.log.verbose(`${Operation[operation]} contract class ${c2.id.toString()}`)),await this.stores.contractClasses.addContractClasses(contractClasses,blockNum)):!0}async updateDeployedContractInstances(allLogs,blockNum,operation){let allInstances=allLogs.filter(log2=>ContractInstancePublishedEvent.isContractInstancePublishedEvent(log2)).map(log2=>ContractInstancePublishedEvent.fromLog(log2)).map(e2=>e2.toContractInstance()),contractInstances=operation===1?allInstances:await filterAsync(allInstances,async instance=>{let computedAddress=await computeContractAddressFromInstance(instance);return computedAddress.equals(instance.address)?!0:(this.log.warn(`Found contract instance with mismatched address at block ${blockNum}. Claimed ${instance.address} but computed ${computedAddress}.`,{instanceAddress:instance.address.toString(),computedAddress:computedAddress.toString(),blockNum}),!1)});if(contractInstances.length>0){if(contractInstances.forEach(c2=>this.log.verbose(`${Operation[operation]} contract instance at ${c2.address.toString()}`)),operation==0)return await this.stores.contractInstances.addContractInstances(contractInstances,blockNum);if(operation==1)return await this.stores.contractInstances.deleteContractInstances(contractInstances)}return!0}async updateUpdatedContractInstances(allLogs,timestamp,operation){let contractUpdates=allLogs.filter(log2=>ContractInstanceUpdatedEvent.isContractInstanceUpdatedEvent(log2)).map(log2=>ContractInstanceUpdatedEvent.fromLog(log2)).map(e2=>e2.toContractInstanceUpdate());if(contractUpdates.length>0){if(contractUpdates.forEach(c2=>this.log.verbose(`${Operation[operation]} contract instance update at ${c2.address.toString()}`)),operation==0)return await this.stores.contractInstances.addContractInstanceUpdates(contractUpdates,timestamp);if(operation==1)return await this.stores.contractInstances.deleteContractInstanceUpdates(contractUpdates,timestamp)}return!0}};var CheckpointMergeRollupPrivateInputs=class _CheckpointMergeRollupPrivateInputs{static{__name(this,"CheckpointMergeRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(this.previousRollups)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointMergeRollupPrivateInputs([ProofData.fromBuffer(reader,CheckpointRollupPublicInputs),ProofData.fromBuffer(reader,CheckpointRollupPublicInputs)])}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointMergeRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointMergeRollupPrivateInputs)}};var CheckpointRootRollupHints=class _CheckpointRootRollupHints{static{__name(this,"CheckpointRootRollupHints")}previousBlockHeader;previousArchiveSiblingPath;previousOutHash;newOutHashSiblingPath;startBlobAccumulator;finalBlobChallenges;blobFields;blobCommitments;blobsHash;constructor(previousBlockHeader,previousArchiveSiblingPath,previousOutHash,newOutHashSiblingPath,startBlobAccumulator,finalBlobChallenges,blobFields,blobCommitments,blobsHash){this.previousBlockHeader=previousBlockHeader,this.previousArchiveSiblingPath=previousArchiveSiblingPath,this.previousOutHash=previousOutHash,this.newOutHashSiblingPath=newOutHashSiblingPath,this.startBlobAccumulator=startBlobAccumulator,this.finalBlobChallenges=finalBlobChallenges,this.blobFields=blobFields,this.blobCommitments=blobCommitments,this.blobsHash=blobsHash}static from(fields){return new _CheckpointRootRollupHints(..._CheckpointRootRollupHints.getFields(fields))}static getFields(fields){return[fields.previousBlockHeader,fields.previousArchiveSiblingPath,fields.previousOutHash,fields.newOutHashSiblingPath,fields.startBlobAccumulator,fields.finalBlobChallenges,fields.blobFields,fields.blobCommitments,fields.blobsHash]}toBuffer(){return serializeToBuffer(..._CheckpointRootRollupHints.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootRollupHints(BlockHeader.fromBuffer(reader),reader.readArray(30,Fr),reader.readObject(AppendOnlyTreeSnapshot),reader.readArray(5,Fr),reader.readObject(BlobAccumulator),reader.readObject(FinalBlobBatchingChallenges),Array.from({length:4096*6},()=>Fr.fromBuffer(reader)),reader.readArray(6,BLS12Point),Fr.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootRollupHints.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootRollupHints)}},CheckpointRootRollupPrivateInputs=class _CheckpointRootRollupPrivateInputs{static{__name(this,"CheckpointRootRollupPrivateInputs")}previousRollups;hints;constructor(previousRollups,hints){this.previousRollups=previousRollups,this.hints=hints}static from(fields){return new _CheckpointRootRollupPrivateInputs(..._CheckpointRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootRollupPrivateInputs([ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,BlockRollupPublicInputs)],CheckpointRootRollupHints.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootRollupPrivateInputs)}},CheckpointRootSingleBlockRollupPrivateInputs=class _CheckpointRootSingleBlockRollupPrivateInputs{static{__name(this,"CheckpointRootSingleBlockRollupPrivateInputs")}previousRollup;hints;constructor(previousRollup,hints){this.previousRollup=previousRollup,this.hints=hints}static from(fields){return new _CheckpointRootSingleBlockRollupPrivateInputs(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootSingleBlockRollupPrivateInputs(ProofData.fromBuffer(reader,BlockRollupPublicInputs),CheckpointRootRollupHints.fromBuffer(reader))}toString(){return bufferToHex(this.toBuffer())}static fromString(str){return _CheckpointRootSingleBlockRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointRootSingleBlockRollupPrivateInputs)}},CheckpointPaddingRollupPrivateInputs=class _CheckpointPaddingRollupPrivateInputs{static{__name(this,"CheckpointPaddingRollupPrivateInputs")}constructor(){}toBuffer(){return Buffer.alloc(0)}static fromBuffer(_buffer){return new _CheckpointPaddingRollupPrivateInputs}toString(){return"0x"}static fromString(_str){return new _CheckpointPaddingRollupPrivateInputs}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_CheckpointPaddingRollupPrivateInputs)}};var PublicChonkVerifierPrivateInputs=class _PublicChonkVerifierPrivateInputs{static{__name(this,"PublicChonkVerifierPrivateInputs")}hidingKernelProofData;proverId;constructor(hidingKernelProofData,proverId){this.hidingKernelProofData=hidingKernelProofData,this.proverId=proverId}static from(fields){return new _PublicChonkVerifierPrivateInputs(..._PublicChonkVerifierPrivateInputs.getFields(fields))}static getFields(fields){return[fields.hidingKernelProofData,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _PublicChonkVerifierPrivateInputs(ProofData.fromBuffer(reader,PrivateToPublicKernelCircuitPublicInputs),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(..._PublicChonkVerifierPrivateInputs.getFields(this))}static fromString(str){return _PublicChonkVerifierPrivateInputs.fromBuffer(hexToBuffer(str))}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_PublicChonkVerifierPrivateInputs)}};var RootRollupPrivateInputs=class _RootRollupPrivateInputs{static{__name(this,"RootRollupPrivateInputs")}previousRollups;constructor(previousRollups){this.previousRollups=previousRollups}toBuffer(){return serializeToBuffer(..._RootRollupPrivateInputs.getFields(this))}toString(){return bufferToHex(this.toBuffer())}static from(fields){return new _RootRollupPrivateInputs(..._RootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _RootRollupPrivateInputs([ProofData.fromBuffer(reader,CheckpointRollupPublicInputs),ProofData.fromBuffer(reader,CheckpointRollupPublicInputs)])}static fromString(str){return _RootRollupPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_RootRollupPrivateInputs)}};var BlockNumberNotSequentialError=class extends Error{static{__name(this,"BlockNumberNotSequentialError")}constructor(newBlockNumber,previous){super(`Cannot insert new block ${newBlockNumber} given previous block number is ${previous??"undefined"}`),this.name="BlockNumberNotSequentialError"}},InitialCheckpointNumberNotSequentialError=class extends Error{static{__name(this,"InitialCheckpointNumberNotSequentialError")}newCheckpointNumber;previousCheckpointNumber;constructor(newCheckpointNumber,previousCheckpointNumber){super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous checkpoint number in store is ${previousCheckpointNumber??"undefined"}`),this.newCheckpointNumber=newCheckpointNumber,this.previousCheckpointNumber=previousCheckpointNumber,this.name="InitialCheckpointNumberNotSequentialError"}},CheckpointNumberNotSequentialError=class extends Error{static{__name(this,"CheckpointNumberNotSequentialError")}newCheckpointNumber;previousCheckpointNumber;constructor(newCheckpointNumber,previousCheckpointNumber,source){let qualifier=source?`${source} `:"";super(`Cannot insert new checkpoint ${newCheckpointNumber} given previous ${qualifier}checkpoint number is ${previousCheckpointNumber??"undefined"}`),this.newCheckpointNumber=newCheckpointNumber,this.previousCheckpointNumber=previousCheckpointNumber,this.name="CheckpointNumberNotSequentialError"}},BlockCheckpointNumberNotSequentialError=class extends Error{static{__name(this,"BlockCheckpointNumberNotSequentialError")}constructor(blockNumber,blockCheckpointNumber,previous){super(`Cannot insert new block ${blockNumber} for checkpoint ${blockCheckpointNumber} given previous checkpoint number is ${previous??"undefined"}`),this.name="BlockCheckpointNumberNotSequentialError"}},BlockIndexNotSequentialError=class extends Error{static{__name(this,"BlockIndexNotSequentialError")}constructor(newBlockIndex,previousBlockIndex){super(`Cannot insert new block at checkpoint index ${newBlockIndex} given previous block index is ${previousBlockIndex??"undefined"}`),this.name="BlockIndexNotSequentialError"}},BlockArchiveNotConsistentError=class extends Error{static{__name(this,"BlockArchiveNotConsistentError")}constructor(newBlockNumber,previousBlockNumber,newBlockArchive,previousBlockArchive){super(`Cannot insert new block number ${newBlockNumber} with archive ${newBlockArchive.toString()} previous block number is ${previousBlockNumber??"undefined"}, previous archive is ${previousBlockArchive?.toString()??"undefined"}`),this.name="BlockArchiveNotConsistentError"}},CheckpointNotFoundError=class extends Error{static{__name(this,"CheckpointNotFoundError")}constructor(checkpointNumber){super(`Failed to find expected checkpoint number ${checkpointNumber}`),this.name="CheckpointNotFoundError"}},BlockNotFoundError=class extends Error{static{__name(this,"BlockNotFoundError")}constructor(blockNumber){super(`Failed to find expected block number ${blockNumber}`),this.name="BlockNotFoundError"}},BlockAlreadyCheckpointedError=class extends Error{static{__name(this,"BlockAlreadyCheckpointedError")}blockNumber;constructor(blockNumber){super(`Block ${blockNumber} has already been checkpointed with the same content`),this.blockNumber=blockNumber,this.name="BlockAlreadyCheckpointedError"}},L1ToL2MessagesNotReadyError=class extends Error{static{__name(this,"L1ToL2MessagesNotReadyError")}checkpointNumber;inboxTreeInProgress;constructor(checkpointNumber,inboxTreeInProgress){super(`Cannot get L1 to L2 messages for checkpoint ${checkpointNumber}: inbox tree in progress is ${inboxTreeInProgress}, messages not yet sealed`),this.checkpointNumber=checkpointNumber,this.inboxTreeInProgress=inboxTreeInProgress,this.name="L1ToL2MessagesNotReadyError"}};var ProposedCheckpointNotSequentialError=class extends Error{static{__name(this,"ProposedCheckpointNotSequentialError")}proposedCheckpointNumber;latestTipNumber;constructor(proposedCheckpointNumber,latestTipNumber){super(`Proposed checkpoint ${proposedCheckpointNumber} is not sequential: expected ${latestTipNumber+1} (latest tip + 1, where tip is highest of confirmed or pending)`),this.proposedCheckpointNumber=proposedCheckpointNumber,this.latestTipNumber=latestTipNumber,this.name="ProposedCheckpointNotSequentialError"}};var NoProposedCheckpointToPromoteError=class extends Error{static{__name(this,"NoProposedCheckpointToPromoteError")}constructor(){super("Cannot promote proposed checkpoint: no proposed checkpoint exists"),this.name="NoProposedCheckpointToPromoteError"}},ProposedCheckpointArchiveRootMismatchError=class extends Error{static{__name(this,"ProposedCheckpointArchiveRootMismatchError")}expectedArchiveRoot;actualArchiveRoot;constructor(expectedArchiveRoot,actualArchiveRoot){super(`Cannot promote proposed checkpoint: archive root mismatch (expected ${expectedArchiveRoot}, got ${actualArchiveRoot})`),this.expectedArchiveRoot=expectedArchiveRoot,this.actualArchiveRoot=actualArchiveRoot,this.name="ProposedCheckpointArchiveRootMismatchError"}},ProposedCheckpointPromotionNotSequentialError=class extends Error{static{__name(this,"ProposedCheckpointPromotionNotSequentialError")}proposedCheckpointNumber;latestCheckpointNumber;constructor(proposedCheckpointNumber,latestCheckpointNumber){super(`Cannot promote proposed checkpoint: not sequential (latest ${latestCheckpointNumber}, proposed ${proposedCheckpointNumber})`),this.proposedCheckpointNumber=proposedCheckpointNumber,this.latestCheckpointNumber=latestCheckpointNumber,this.name="ProposedCheckpointPromotionNotSequentialError"}},CannotOverwriteCheckpointedBlockError=class extends Error{static{__name(this,"CannotOverwriteCheckpointedBlockError")}blockNumber;lastCheckpointedBlock;constructor(blockNumber,lastCheckpointedBlock){super(`Cannot add block ${blockNumber}: would overwrite checkpointed data (checkpointed up to block ${lastCheckpointedBlock})`),this.blockNumber=blockNumber,this.lastCheckpointedBlock=lastCheckpointedBlock,this.name="CannotOverwriteCheckpointedBlockError"}};var BlockStore=class{static{__name(this,"BlockStore")}db;#blocks;#proposedCheckpoints;#checkpoints;#slotToCheckpoint;#blockTxs;#txEffects;#lastSynchedL1Block;#lastProvenCheckpoint;#lastFinalizedCheckpoint;#pendingChainValidationStatus;#contractIndex;#blockHashIndex;#blockArchiveIndex;#rejectedCheckpoints;#rejectedCheckpointsByNumber;#log;constructor(db){this.db=db,this.#log=createLogger("archiver:block_store"),this.#blocks=db.openMap("archiver_blocks"),this.#blockTxs=db.openMap("archiver_block_txs"),this.#txEffects=db.openMap("archiver_tx_effects"),this.#contractIndex=db.openMap("archiver_contract_index"),this.#blockHashIndex=db.openMap("archiver_block_hash_index"),this.#blockArchiveIndex=db.openMap("archiver_block_archive_index"),this.#lastSynchedL1Block=db.openSingleton("archiver_last_synched_l1_block"),this.#lastProvenCheckpoint=db.openSingleton("archiver_last_proven_l2_checkpoint"),this.#lastFinalizedCheckpoint=db.openSingleton("archiver_last_finalized_l2_checkpoint"),this.#pendingChainValidationStatus=db.openSingleton("archiver_pending_chain_validation_status"),this.#checkpoints=db.openMap("archiver_checkpoints"),this.#slotToCheckpoint=db.openMap("archiver_slot_to_checkpoint"),this.#proposedCheckpoints=db.openMap("archiver_proposed_checkpoints"),this.#rejectedCheckpoints=db.openMap("archiver_rejected_checkpoints"),this.#rejectedCheckpointsByNumber=db.openMap("archiver_rejected_checkpoints_by_number")}async getFinalizedL2BlockNumber(){let finalizedCheckpointNumber=await this.getFinalizedCheckpointNumber();if(finalizedCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return BlockNumber(INITIAL_L2_BLOCK_NUM2-1);let checkpointStorage=await this.#checkpoints.getAsync(finalizedCheckpointNumber);if(!checkpointStorage)throw new CheckpointNotFoundError(finalizedCheckpointNumber);return BlockNumber(checkpointStorage.startBlock+checkpointStorage.blockCount-1)}async addProposedBlock(block,opts={}){return await this.db.transactionAsync(async()=>{let blockNumber=block.number,blockCheckpointNumber=block.checkpointNumber,blockIndex=block.indexWithinCheckpoint,blockLastArchive=block.header.lastArchive.root,previousBlockNumber=await this.getLatestL2BlockNumber(),latestCheckpointNumber=await this.getLatestCheckpointNumber(),lastCheckpointedBlockNumber=await this.getCheckpointedL2BlockNumber();if(!opts.force&&blockNumber<=lastCheckpointedBlockNumber){let existingBlock=await this.getBlockData({number:BlockNumber(blockNumber)});throw existingBlock&&existingBlock.archive.root.equals(block.archive.root)?new BlockAlreadyCheckpointedError(blockNumber):new CannotOverwriteCheckpointedBlockError(blockNumber,lastCheckpointedBlockNumber)}if(!opts.force&&previousBlockNumber!==blockNumber-1)throw new BlockNumberNotSequentialError(blockNumber,previousBlockNumber);let expectedCheckpointNumber=blockCheckpointNumber-1,hasPendingAtExpected=await this.#proposedCheckpoints.hasAsync(expectedCheckpointNumber);if(!opts.force&&latestCheckpointNumber!==expectedCheckpointNumber&&!hasPendingAtExpected){let[latestPendingKey]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1})),previous=CheckpointNumber(Math.max(latestCheckpointNumber,latestPendingKey??0));throw new BlockCheckpointNumberNotSequentialError(BlockNumber(blockNumber),blockCheckpointNumber,previous)}let previousBlockResult=await this.getBlockData({number:previousBlockNumber}),expectedBlockIndex=0,previousBlockIndex;if(previousBlockResult!==void 0&&(previousBlockResult.checkpointNumber===blockCheckpointNumber&&(previousBlockIndex=previousBlockResult.indexWithinCheckpoint,expectedBlockIndex=previousBlockIndex+1),!previousBlockResult.archive.root.equals(blockLastArchive)))throw new BlockArchiveNotConsistentError(blockNumber,previousBlockResult.header.globalVariables.blockNumber,blockLastArchive,previousBlockResult.archive.root);if(!opts.force&&expectedBlockIndex!==blockIndex)throw new BlockIndexNotSequentialError(blockIndex,previousBlockIndex);return await this.addBlockToDatabase(block,block.checkpointNumber,block.indexWithinCheckpoint),!0})}async addCheckpoints(checkpoints,opts={}){return checkpoints.length===0?[]:await this.db.transactionAsync(async()=>{let firstCheckpointNumber=checkpoints[0].checkpoint.number,previousCheckpointNumber=await this.getLatestCheckpointNumber();if(!opts.force&&firstCheckpointNumber<=previousCheckpointNumber){if(checkpoints=await this.skipOrUpdateAlreadyStoredCheckpoints(checkpoints,previousCheckpointNumber),checkpoints.length===0)return[];let newFirstNumber=checkpoints[0].checkpoint.number;if(previousCheckpointNumber!==newFirstNumber-1)throw new InitialCheckpointNumberNotSequentialError(newFirstNumber,previousCheckpointNumber)}else if(previousCheckpointNumber!==firstCheckpointNumber-1&&!opts.force)throw new InitialCheckpointNumberNotSequentialError(firstCheckpointNumber,previousCheckpointNumber);let previousBlock=await this.getPreviousCheckpointBlock(checkpoints[0].checkpoint.number),previousCheckpoint;for(let checkpoint of checkpoints){if(!opts.force&&previousCheckpoint&&previousCheckpoint.checkpoint.number+1!==checkpoint.checkpoint.number)throw new CheckpointNumberNotSequentialError(checkpoint.checkpoint.number,previousCheckpoint.checkpoint.number);previousCheckpoint=checkpoint,this.validateCheckpointBlocks(checkpoint.checkpoint.blocks,previousBlock);for(let i=0;i<checkpoint.checkpoint.blocks.length;i++)await this.addBlockToDatabase(checkpoint.checkpoint.blocks[i],checkpoint.checkpoint.number,i);previousBlock=checkpoint.checkpoint.blocks.at(-1),await this.#checkpoints.set(checkpoint.checkpoint.number,{header:checkpoint.checkpoint.header.toBuffer(),archive:checkpoint.checkpoint.archive.toBuffer(),checkpointOutHash:checkpoint.checkpoint.getCheckpointOutHash().toBuffer(),l1:checkpoint.l1.toBuffer(),attestations:checkpoint.attestations.map(attestation=>attestation.toBuffer()),checkpointNumber:checkpoint.checkpoint.number,startBlock:checkpoint.checkpoint.blocks[0].number,blockCount:checkpoint.checkpoint.blocks.length,feeAssetPriceModifier:checkpoint.checkpoint.feeAssetPriceModifier.toString()}),await this.#slotToCheckpoint.set(checkpoint.checkpoint.header.slotNumber,checkpoint.checkpoint.number),await this.#proposedCheckpoints.delete(checkpoint.checkpoint.number),await this.removeRejectedCheckpointByArchiveRoot(checkpoint.checkpoint.archive.root)}return await this.advanceSynchedL1BlockNumber(checkpoints[checkpoints.length-1].l1.blockNumber),checkpoints})}async skipOrUpdateAlreadyStoredCheckpoints(checkpoints,latestStored){let i=0;for(;i<checkpoints.length&&checkpoints[i].checkpoint.number<=latestStored;i++){let incoming=checkpoints[i],stored=await this.getCheckpointData(incoming.checkpoint.number);if(!stored)break;if(!stored.archive.root.equals(incoming.checkpoint.archive.root))throw new Error(`Checkpoint ${incoming.checkpoint.number} already exists in store but with a different archive root. Stored: ${stored.archive.root}, incoming: ${incoming.checkpoint.archive.root}`);this.#log.warn(`Checkpoint ${incoming.checkpoint.number} already stored, updating L1 info (L1 block ${stored.l1.blockNumber} -> ${incoming.l1.blockNumber})`),await this.#checkpoints.set(incoming.checkpoint.number,{header:incoming.checkpoint.header.toBuffer(),archive:incoming.checkpoint.archive.toBuffer(),checkpointOutHash:incoming.checkpoint.getCheckpointOutHash().toBuffer(),l1:incoming.l1.toBuffer(),attestations:incoming.attestations.map(a=>a.toBuffer()),checkpointNumber:incoming.checkpoint.number,startBlock:incoming.checkpoint.blocks[0].number,blockCount:incoming.checkpoint.blocks.length,feeAssetPriceModifier:incoming.checkpoint.feeAssetPriceModifier.toString()}),await this.advanceSynchedL1BlockNumber(incoming.l1.blockNumber)}return checkpoints.slice(i)}async getPreviousCheckpointBlock(checkpointNumber){let previousCheckpointNumber=CheckpointNumber(checkpointNumber-1);if(previousCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return;let predecessor=await this.getProposedCheckpointByNumber(previousCheckpointNumber)??await this.getCheckpointData(previousCheckpointNumber);if(!predecessor)throw new CheckpointNotFoundError(previousCheckpointNumber);let previousBlockNumber=BlockNumber(predecessor.startBlock+predecessor.blockCount-1),previousBlock=await this.getBlock({number:previousBlockNumber});if(previousBlock===void 0)throw new BlockNotFoundError(previousBlockNumber);return previousBlock}validateCheckpointBlocks(blocks,previousBlock){for(let block of blocks){if(previousBlock){if(previousBlock.number!==block.number-1)throw new BlockNumberNotSequentialError(block.number,previousBlock.number);if(previousBlock.checkpointNumber===block.checkpointNumber){if(previousBlock.indexWithinCheckpoint!==block.indexWithinCheckpoint-1)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,previousBlock.indexWithinCheckpoint)}else if(block.indexWithinCheckpoint!==0)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,previousBlock.indexWithinCheckpoint);if(!previousBlock.archive.root.equals(block.header.lastArchive.root))throw new BlockArchiveNotConsistentError(block.number,previousBlock.number,block.header.lastArchive.root,previousBlock.archive.root)}else{if(block.indexWithinCheckpoint!==0)throw new BlockIndexNotSequentialError(block.indexWithinCheckpoint,void 0);if(block.number!==INITIAL_L2_BLOCK_NUM2)throw new BlockNumberNotSequentialError(block.number,void 0)}previousBlock=block}}async addBlockToDatabase(block,checkpointNumber,indexWithinCheckpoint){let blockHash=await block.hash();await this.#blocks.set(block.number,{header:block.header.toBuffer(),blockHash:blockHash.toBuffer(),archive:block.archive.toBuffer(),checkpointNumber,indexWithinCheckpoint});for(let i=0;i<block.body.txEffects.length;i++){let txEffect={data:block.body.txEffects[i],l2BlockNumber:block.number,l2BlockHash:blockHash,txIndexInBlock:i,slotNumber:block.header.globalVariables.slotNumber};await this.#txEffects.set(txEffect.data.txHash.toString(),serializeIndexedTxEffect(txEffect))}await this.#blockTxs.set(blockHash.toString(),Buffer.concat(block.body.txEffects.map(tx=>tx.txHash.toBuffer()))),await this.#blockHashIndex.set(blockHash.toString(),block.number),await this.#blockArchiveIndex.set(block.archive.root.toString(),block.number)}async deleteBlock(blockNumber,blockStorage){await this.#blocks.delete(blockNumber);let blockHash=bufferToHex(blockStorage.blockHash),blockTxsBuffer=await this.#blockTxs.getAsync(blockHash);if(blockTxsBuffer!==void 0){let reader=BufferReader.asReader(blockTxsBuffer),txHashes=[];for(;!reader.isEmpty();)txHashes.push(reader.readObject(TxHash).toString());await Promise.all(txHashes.map(txHash=>this.deleteTxEffect(txHash,blockStorage.blockHash)))}await this.#blockTxs.delete(blockHash),await this.#blockHashIndex.delete(blockHash),await this.#blockArchiveIndex.delete(AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive).root.toString())}async deleteTxEffect(txHash,blockHash){let stored=await this.#txEffects.getAsync(txHash);if(stored===void 0){this.#log.warn(`Missing tx effect for tx ${txHash} while removing its block`,{txHash,blockHash:bufferToHex(blockHash)});return}if(!Buffer.from(stored.buffer,stored.byteOffset,32).equals(blockHash)){this.#log.warn(`Tx effect for tx ${txHash} is owned by a block other than the one being removed`,{txHash,removedBlockHash:bufferToHex(blockHash),owningBlockHash:bufferToHex(Buffer.from(stored.buffer,stored.byteOffset,32))});return}await this.#txEffects.delete(txHash)}async removeCheckpointsAfter(checkpointNumber){return await this.db.transactionAsync(async()=>{let latestCheckpointNumber=await this.getLatestCheckpointNumber();if(checkpointNumber>=latestCheckpointNumber)return this.#log.warn(`No checkpoints to remove after ${checkpointNumber} (latest is ${latestCheckpointNumber})`),{blocksRemoved:void 0};let proven=await this.getProvenCheckpointNumber();proven>checkpointNumber&&(this.#log.warn(`Updating proven checkpoint ${proven} to last valid checkpoint ${checkpointNumber}`),await this.setProvenCheckpointNumber(checkpointNumber));let lastBlockToKeep;if(checkpointNumber<=0)lastBlockToKeep=BlockNumber(INITIAL_L2_BLOCK_NUM2-1);else{let targetCheckpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!targetCheckpoint)throw new Error(`Target checkpoint ${checkpointNumber} not found in store`);lastBlockToKeep=BlockNumber(targetCheckpoint.startBlock+targetCheckpoint.blockCount-1)}let blocksRemoved=await this.removeBlocksAfter(lastBlockToKeep);for(let c2=latestCheckpointNumber;c2>checkpointNumber;c2=CheckpointNumber(c2-1)){let checkpointStorage=await this.#checkpoints.getAsync(c2);if(checkpointStorage){let slotNumber=CheckpointHeader.fromBuffer(checkpointStorage.header).slotNumber;await this.#slotToCheckpoint.delete(slotNumber)}await this.#checkpoints.delete(c2),this.#log.debug(`Removed checkpoint ${c2}`)}return await this.evictProposedCheckpointsFrom(CheckpointNumber(checkpointNumber+1)),{blocksRemoved}})}async getCheckpointData(checkpointNumber){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);if(checkpointStorage)return this.checkpointDataFromCheckpointStorage(checkpointStorage)}async getRangeOfCheckpoints(from,limit){let checkpoints=[];for(let checkpointNumber=from;checkpointNumber<from+limit;checkpointNumber++){let checkpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!checkpoint)break;checkpoints.push(this.checkpointDataFromCheckpointStorage(checkpoint))}return checkpoints}async getCheckpointsBySlot(fromSlot,limit,reverse){let range=reverse?{end:fromSlot,reverse:!0,limit}:{start:fromSlot,limit},result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync(range)){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);checkpointStorage&&result.push(this.checkpointDataFromCheckpointStorage(checkpointStorage))}return result}async getCheckpointDataForSlotRange(startSlot,endSlot){let result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync({start:startSlot,end:endSlot+1})){let checkpointStorage=await this.#checkpoints.getAsync(checkpointNumber);checkpointStorage&&result.push(this.checkpointDataFromCheckpointStorage(checkpointStorage))}return result}async getCheckpointNumbersForSlotRange(startSlot,endSlot){let result=[];for await(let[,checkpointNumber]of this.#slotToCheckpoint.entriesAsync({start:startSlot,end:endSlot+1}))result.push(CheckpointNumber(checkpointNumber));return result}checkpointDataFromCheckpointStorage(checkpointStorage){return{header:CheckpointHeader.fromBuffer(checkpointStorage.header),archive:AppendOnlyTreeSnapshot.fromBuffer(checkpointStorage.archive),checkpointOutHash:Fr.fromBuffer(checkpointStorage.checkpointOutHash),checkpointNumber:CheckpointNumber(checkpointStorage.checkpointNumber),startBlock:BlockNumber(checkpointStorage.startBlock),blockCount:checkpointStorage.blockCount,feeAssetPriceModifier:BigInt(checkpointStorage.feeAssetPriceModifier),l1:L1PublishedData.fromBuffer(checkpointStorage.l1),attestations:checkpointStorage.attestations.map(buf=>CommitteeAttestation.fromBuffer(buf))}}async getBlocksForCheckpoint(checkpointNumber){let checkpoint=await this.#checkpoints.getAsync(checkpointNumber);if(!checkpoint)return;let blocksForCheckpoint=await toArray(this.#blocks.entriesAsync({start:checkpoint.startBlock,end:checkpoint.startBlock+checkpoint.blockCount}));return(await Promise.all(blocksForCheckpoint.map(x=>this.getBlockFromBlockStorage(x[0],x[1])))).filter(isDefined)}async getBlocksForSlot(slotNumber){let blocks=[];for await(let[blockNumber,blockStorage]of this.#blocks.entriesAsync({reverse:!0})){let block=await this.getBlockFromBlockStorage(blockNumber,blockStorage),blockSlot=block?.header.globalVariables.slotNumber;if(block&&blockSlot===slotNumber)blocks.push(block);else if(blockSlot&&blockSlot<slotNumber)break}return blocks.reverse()}async removeBlocksAfter(blockNumber){return await this.db.transactionAsync(async()=>{let removedBlocks=[],latestBlockNumber=await this.getLatestL2BlockNumber();for(let bn=blockNumber+1;bn<=latestBlockNumber;bn++){let blockStorage=await this.#blocks.getAsync(bn);if(blockStorage===void 0){this.#log.warn(`Cannot remove block ${bn} from the store since we don't have it`);continue}let block=await this.getBlockFromBlockStorage(bn,blockStorage);block!==void 0?removedBlocks.push(block):this.#log.warn(`Removing block ${bn} whose body could not be fully loaded`),await this.deleteBlock(bn,blockStorage),this.#log.debug(`Removed block ${bn} ${bufferToHex(blockStorage.blockHash)}`)}return removedBlocks})}async getProvenBlockNumber(){let provenCheckpointNumber=await this.getProvenCheckpointNumber();if(provenCheckpointNumber===INITIAL_CHECKPOINT_NUMBER2-1)return BlockNumber(INITIAL_L2_BLOCK_NUM2-1);let checkpointStorage=await this.#checkpoints.getAsync(provenCheckpointNumber);if(checkpointStorage)return BlockNumber(checkpointStorage.startBlock+checkpointStorage.blockCount-1);throw new CheckpointNotFoundError(provenCheckpointNumber)}async getLatestCheckpointNumber(){let[latestCheckpointNumber]=await toArray(this.#checkpoints.keysAsync({reverse:!0,limit:1}));return latestCheckpointNumber===void 0?CheckpointNumber(INITIAL_CHECKPOINT_NUMBER2-1):CheckpointNumber(latestCheckpointNumber)}async hasProposedCheckpoint(){let[key]=await toArray(this.#proposedCheckpoints.keysAsync({limit:1}));return key!==void 0}async deleteProposedCheckpoints(){for await(let key of this.#proposedCheckpoints.keysAsync())await this.#proposedCheckpoints.delete(key)}async promoteProposedToCheckpointed(checkpointNumber,l1,attestations,expectedArchiveRoot){return await this.db.transactionAsync(async()=>{let proposed=await this.getProposedCheckpointByNumber(checkpointNumber);if(!proposed)throw new NoProposedCheckpointToPromoteError;if(!proposed.archive.root.equals(expectedArchiveRoot))throw new ProposedCheckpointArchiveRootMismatchError(expectedArchiveRoot,proposed.archive.root);let latestCheckpointNumber=await this.getLatestCheckpointNumber();if(latestCheckpointNumber!==proposed.checkpointNumber-1)throw new ProposedCheckpointPromotionNotSequentialError(proposed.checkpointNumber,latestCheckpointNumber);await this.#checkpoints.set(proposed.checkpointNumber,{header:proposed.header.toBuffer(),archive:proposed.archive.toBuffer(),checkpointOutHash:proposed.checkpointOutHash.toBuffer(),l1:l1.toBuffer(),attestations:attestations.map(attestation=>attestation.toBuffer()),checkpointNumber:proposed.checkpointNumber,startBlock:proposed.startBlock,blockCount:proposed.blockCount,feeAssetPriceModifier:proposed.feeAssetPriceModifier.toString()}),await this.#slotToCheckpoint.set(proposed.header.slotNumber,proposed.checkpointNumber),await this.#proposedCheckpoints.delete(proposed.checkpointNumber),await this.removeRejectedCheckpointByArchiveRoot(proposed.archive.root),await this.advanceSynchedL1BlockNumber(l1.blockNumber)})}async getLastProposedCheckpoint(){let[key]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1}));if(key===void 0)return;let stored=await this.#proposedCheckpoints.getAsync(key);return stored?this.convertToProposedCheckpointData(stored):void 0}async getProposedCheckpointByNumber(n){let stored=await this.#proposedCheckpoints.getAsync(n);return stored?this.convertToProposedCheckpointData(stored):void 0}async getProposedCheckpointBySlot(slot){for await(let[,stored]of this.#proposedCheckpoints.entriesAsync())if(CheckpointHeader.fromBuffer(stored.header).slotNumber===slot)return this.convertToProposedCheckpointData(stored)}async evictProposedCheckpointsFrom(fromNumber){let keysToDelete=[];for await(let key of this.#proposedCheckpoints.keysAsync())key>=fromNumber&&keysToDelete.push(key);for(let key of keysToDelete)await this.#proposedCheckpoints.delete(key)}async getLastCheckpoint(){let latest=await this.getLastProposedCheckpoint();return latest||this.getCheckpointData(await this.getLatestCheckpointNumber())}convertToProposedCheckpointData(stored){return{checkpointNumber:CheckpointNumber(stored.checkpointNumber),header:CheckpointHeader.fromBuffer(stored.header),archive:AppendOnlyTreeSnapshot.fromBuffer(stored.archive),checkpointOutHash:Fr.fromBuffer(stored.checkpointOutHash),startBlock:BlockNumber(stored.startBlock),blockCount:stored.blockCount,totalManaUsed:BigInt(stored.totalManaUsed),feeAssetPriceModifier:BigInt(stored.feeAssetPriceModifier)}}async getProposedCheckpointNumber(){let proposed=await this.getLastCheckpoint();return proposed?CheckpointNumber(proposed.checkpointNumber):await this.getLatestCheckpointNumber()}async getProposedCheckpointL2BlockNumber(){let proposed=await this.getLastCheckpoint();return proposed?BlockNumber(proposed.startBlock+proposed.blockCount-1):await this.getCheckpointedL2BlockNumber()}async getCheckpointNumberBySlot(slot){let checkpointNumber=await this.#slotToCheckpoint.getAsync(slot);return checkpointNumber===void 0?void 0:CheckpointNumber(checkpointNumber)}async getBlock(query){let blockNumber=await this.getBlockNumber(query);if(blockNumber===void 0)return;let blockStorage=await this.#blocks.getAsync(blockNumber);if(blockStorage)return this.getBlockFromBlockStorage(blockNumber,blockStorage)}getBlocks(query){return toArray(this.iterateBlocks(query))}async getBlockData(query){let blockNumber=await this.getBlockNumber(query);if(blockNumber===void 0)return;let blockStorage=await this.#blocks.getAsync(blockNumber);if(!(!blockStorage||!blockStorage.header))return this.getBlockDataFromBlockStorage(blockStorage)}getBlocksData(query){return toArray(this.iterateBlocksData(query))}async*iterateBlocks(query){let cap=query.onlyCheckpointed?await this.getCheckpointedL2BlockNumber():void 0;for await(let[blockNumber,blockStorage]of this.getBlockStorages(query.from,query.limit)){if(cap!==void 0&&blockNumber>cap)break;let block=await this.getBlockFromBlockStorage(blockNumber,blockStorage);block&&(yield block)}}async*iterateBlocksData(query){let cap=query.onlyCheckpointed?await this.getCheckpointedL2BlockNumber():void 0;for await(let[blockNumber,blockStorage]of this.getBlockStorages(query.from,query.limit)){if(cap!==void 0&&blockNumber>cap)break;yield this.getBlockDataFromBlockStorage(blockStorage)}}async*getBlockStorages(start,limit){let expectedBlockNumber=start;for await(let[blockNumber,blockStorage]of this.#blocks.entriesAsync(this.#computeBlockRange(start,limit))){if(blockNumber!==expectedBlockNumber)throw new Error(`Block number mismatch when iterating blocks from archive (expected ${expectedBlockNumber} but got ${blockNumber})`);expectedBlockNumber++,yield[blockNumber,blockStorage]}}async getBlockNumber(query){let blockNumber;if("number"in query)blockNumber=query.number;else if("hash"in query){let n=await this.#blockHashIndex.getAsync(query.hash.toString());blockNumber=n!==void 0?BlockNumber(n):void 0}else{let n=await this.#blockArchiveIndex.getAsync(query.archive.toString());blockNumber=n!==void 0?BlockNumber(n):void 0}if(blockNumber!==void 0)return blockNumber}getBlockDataFromBlockStorage(blockStorage){return{header:BlockHeader.fromBuffer(blockStorage.header),archive:AppendOnlyTreeSnapshot.fromBuffer(blockStorage.archive),blockHash:BlockHash.fromBuffer(blockStorage.blockHash),checkpointNumber:CheckpointNumber(blockStorage.checkpointNumber),indexWithinCheckpoint:IndexWithinCheckpoint(blockStorage.indexWithinCheckpoint)}}async getBlockFromBlockStorage(blockNumber,blockStorage){let{header,archive,blockHash,checkpointNumber,indexWithinCheckpoint}=this.getBlockDataFromBlockStorage(blockStorage);header.setHash(blockHash);let blockHashString=bufferToHex(blockStorage.blockHash),blockTxsBuffer=await this.#blockTxs.getAsync(blockHashString);if(blockTxsBuffer===void 0){this.#log.warn(`Could not find body for block ${header.globalVariables.blockNumber} ${blockHash}`);return}let txEffects=[],reader=BufferReader.asReader(blockTxsBuffer);for(;!reader.isEmpty();){let txHash=reader.readObject(TxHash),txEffect=await this.#txEffects.getAsync(txHash.toString());if(txEffect===void 0){this.#log.warn(`Could not find tx effect for tx ${txHash} in block ${blockNumber}`);return}txEffects.push(deserializeIndexedTxEffect(txEffect).data)}let body=new Body(txEffects),block=new L2Block(archive,header,body,checkpointNumber,indexWithinCheckpoint);if(block.number!==blockNumber)throw new Error(`Block number mismatch when retrieving block from archive (expected ${blockNumber} but got ${block.number} with hash ${blockHashString})`);return block}async getTxEffect(txHash){let buffer=await this.#txEffects.getAsync(txHash.toString());if(buffer)return deserializeIndexedTxEffect(buffer)}async getTxLocation(txHash){let txEffect=await this.#txEffects.getAsync(txHash.toString());if(!txEffect)return;let view=Buffer.from(txEffect.buffer,txEffect.byteOffset,txEffect.byteLength),l2BlockNumber=view.readUInt32BE(32),txIndexInBlock=view.readUInt32BE(36);return[l2BlockNumber,txIndexInBlock]}getNoteHashesAndNullifiers(txHashes){return Promise.all(txHashes.map(async txHash=>{let buffer=await this.#txEffects.getAsync(txHash.toString());if(!buffer)return[[],[]];let reader=BufferReader.asReader(buffer);reader.readBytes(109);let noteHashes=reader.readVectorUint8Prefix(Fr),nullifiers=reader.readVectorUint8Prefix(Fr);return[noteHashes,nullifiers]}))}getContractLocation(contractAddress){return this.#contractIndex.getAsync(contractAddress.toString())}async getCheckpointedL2BlockNumber(){let latestCheckpointNumber=await this.getLatestCheckpointNumber(),checkpoint=await this.getCheckpointData(latestCheckpointNumber);return checkpoint?BlockNumber(checkpoint.startBlock+checkpoint.blockCount-1):BlockNumber(INITIAL_L2_BLOCK_NUM2-1)}async getLatestL2BlockNumber(){let[lastBlockNumber]=await toArray(this.#blocks.keysAsync({reverse:!0,limit:1}));return typeof lastBlockNumber=="number"?BlockNumber(lastBlockNumber):BlockNumber(INITIAL_L2_BLOCK_NUM2-1)}async getL2Frontier(genesisBlockHash){return await this.db.transactionAsync(async()=>{let genesisBlockNumber=BlockNumber(INITIAL_L2_BLOCK_NUM2-1),genesisCheckpointNumber=CheckpointNumber(INITIAL_CHECKPOINT_NUMBER2-1),genesisBlockId={number:genesisBlockNumber,hash:genesisBlockHash.toString()},genesisCheckpointId={number:genesisCheckpointNumber,hash:GENESIS_CHECKPOINT_HEADER_HASH.toString()},genesisTip={block:genesisBlockId,checkpoint:genesisCheckpointId},[latestBlockEntry]=await toArray(this.#blocks.entriesAsync({reverse:!0,limit:1})),[latestCheckpointEntry]=await toArray(this.#checkpoints.entriesAsync({reverse:!0,limit:1})),latestCheckpointNumber=latestCheckpointEntry?CheckpointNumber(latestCheckpointEntry[0]):genesisCheckpointNumber,[provenRaw,finalizedRaw]=await Promise.all([this.#lastProvenCheckpoint.getAsync(),this.#lastFinalizedCheckpoint.getAsync()]),provenCheckpointNumber=CheckpointNumber(Math.min(provenRaw??0,latestCheckpointNumber)),finalizedCheckpointNumber=CheckpointNumber(Math.min(finalizedRaw??0,provenCheckpointNumber)),checkpointStorageCache=new Map;latestCheckpointEntry&&checkpointStorageCache.set(CheckpointNumber(latestCheckpointEntry[0]),latestCheckpointEntry[1]);let loadCheckpointStorage=__name(async n=>{if(n!==0){if(!checkpointStorageCache.has(n)){let checkpointStorage=await this.#checkpoints.getAsync(n);if(!checkpointStorage)throw new CheckpointNotFoundError(n);checkpointStorageCache.set(n,checkpointStorage)}return checkpointStorageCache.get(n)}},"loadCheckpointStorage"),provenCheckpoint=await loadCheckpointStorage(provenCheckpointNumber),finalizedCheckpoint=await loadCheckpointStorage(finalizedCheckpointNumber),blockHashCache=new Map;blockHashCache.set(genesisBlockNumber,genesisBlockHash.toString()),latestBlockEntry&&blockHashCache.set(latestBlockEntry[0],BlockHash.fromBuffer(latestBlockEntry[1].blockHash).toString());let loadBlockHash=__name(async n=>{if(!blockHashCache.has(n)){let blockStorage=await this.#blocks.getAsync(n);if(!blockStorage)throw new BlockNotFoundError(n);let blockHash=BlockHash.fromBuffer(blockStorage.blockHash).toString();blockHashCache.set(n,blockHash)}return blockHashCache.get(n)},"loadBlockHash"),proposedBlockId=latestBlockEntry===void 0?genesisBlockId:{number:BlockNumber(latestBlockEntry[0]),hash:BlockHash.fromBuffer(latestBlockEntry[1].blockHash).toString()},buildTipFromCheckpoint=__name(async stored=>{if(!stored)return{tip:genesisTip,header:void 0};let blockNumber=BlockNumber(stored.startBlock+stored.blockCount-1),blockHash=await loadBlockHash(blockNumber),header=CheckpointHeader.fromBuffer(stored.header);return{tip:{block:{number:blockNumber,hash:blockHash},checkpoint:{number:CheckpointNumber(stored.checkpointNumber),hash:header.hash().toString()}},header}},"buildTipFromCheckpoint"),{tip:checkpointedTip,header:checkpointedHeader}=await buildTipFromCheckpoint(latestCheckpointEntry?.[1]),{tip:provenTip}=await buildTipFromCheckpoint(provenCheckpoint),{tip:finalizedTip}=await buildTipFromCheckpoint(finalizedCheckpoint),proposedCheckpoint=await this.getLastProposedCheckpoint(),pendingChainValidationStatus=await this.getPendingChainValidationStatus()??{valid:!0},latestBlockHeader=latestBlockEntry?BlockHeader.fromBuffer(latestBlockEntry[1].header):void 0,checkpointedCheckpoint=latestCheckpointEntry&&checkpointedHeader?{header:checkpointedHeader,l1:L1PublishedData.fromBuffer(latestCheckpointEntry[1].l1)}:void 0;if(proposedBlockId.number<checkpointedTip.block.number)throw new Error(`Inconsistent block store: latest block ${proposedBlockId.number} is behind checkpointed block ${checkpointedTip.block.number}`);if(finalizedTip.checkpoint.number>provenTip.checkpoint.number||provenTip.checkpoint.number>checkpointedTip.checkpoint.number)throw new Error(`Inconsistent checkpoint numbers in chain tips: finalized=${finalizedTip.checkpoint.number} proven=${provenTip.checkpoint.number} checkpointed=${checkpointedTip.checkpoint.number}`);if(finalizedTip.block.number>provenTip.block.number||provenTip.block.number>checkpointedTip.block.number||checkpointedTip.block.number>proposedBlockId.number)throw new Error(`Inconsistent block numbers in chain tips: finalized=${finalizedTip.block.number} proven=${provenTip.block.number} checkpointed=${checkpointedTip.block.number} proposed=${proposedBlockId.number}`);return{tips:{proposed:proposedBlockId,checkpointed:checkpointedTip,proven:provenTip,finalized:finalizedTip},proposedCheckpoint,latestBlockHeader,checkpointedCheckpoint,pendingChainValidationStatus}})}getSynchedL1BlockNumber(){return this.#lastSynchedL1Block.getAsync()}setSynchedL1BlockNumber(l1BlockNumber){return this.#lastSynchedL1Block.set(l1BlockNumber)}async addProposedCheckpoint(proposed){return await this.db.transactionAsync(async()=>{let confirmed=await this.getLatestCheckpointNumber(),[latestPendingKey]=await toArray(this.#proposedCheckpoints.keysAsync({reverse:!0,limit:1})),latestTip=CheckpointNumber(latestPendingKey!==void 0?Math.max(latestPendingKey,confirmed):confirmed);if(proposed.checkpointNumber!==latestTip+1)throw new ProposedCheckpointNotSequentialError(proposed.checkpointNumber,latestTip);let previousBlock=await this.getPreviousCheckpointBlock(proposed.checkpointNumber),blocks=[];for(let i=0;i<proposed.blockCount;i++){let block=await this.getBlock({number:BlockNumber(proposed.startBlock+i)});if(!block)throw new BlockNotFoundError(proposed.startBlock+i);blocks.push(block)}this.validateCheckpointBlocks(blocks,previousBlock);let archive=blocks[blocks.length-1].archive,checkpointOutHash=Checkpoint.getCheckpointOutHash(blocks);await this.#proposedCheckpoints.set(proposed.checkpointNumber,{header:proposed.header.toBuffer(),archive:archive.toBuffer(),checkpointOutHash:checkpointOutHash.toBuffer(),checkpointNumber:proposed.checkpointNumber,startBlock:proposed.startBlock,blockCount:proposed.blockCount,totalManaUsed:proposed.totalManaUsed.toString(),feeAssetPriceModifier:proposed.feeAssetPriceModifier.toString()})})}async getProvenCheckpointNumber(){return await this.db.transactionAsync(async()=>{let[latestCheckpointNumber,provenCheckpointNumber]=await Promise.all([this.getLatestCheckpointNumber(),this.#lastProvenCheckpoint.getAsync()]);return(provenCheckpointNumber??0)>latestCheckpointNumber?latestCheckpointNumber:CheckpointNumber(provenCheckpointNumber??0)})}async setProvenCheckpointNumber(checkpointNumber){return await this.#lastProvenCheckpoint.set(checkpointNumber)}async getFinalizedCheckpointNumber(){return await this.db.transactionAsync(async()=>{let[provenCheckpointNumber,finalizedCheckpointNumber]=await Promise.all([this.getProvenCheckpointNumber(),this.#lastFinalizedCheckpoint.getAsync()]);return(finalizedCheckpointNumber??0)>provenCheckpointNumber?provenCheckpointNumber:CheckpointNumber(finalizedCheckpointNumber??0)})}setFinalizedCheckpointNumber(checkpointNumber){return this.#lastFinalizedCheckpoint.set(checkpointNumber)}#computeBlockRange(start,limit){if(limit<1)throw new Error(`Invalid limit: ${limit}`);if(start<INITIAL_L2_BLOCK_NUM2)throw new Error(`Invalid start: ${start}`);return{start,limit}}async getPendingChainValidationStatus(){let buffer=await this.#pendingChainValidationStatus.getAsync();if(buffer)return deserializeValidateCheckpointResult(buffer)}async setPendingChainValidationStatus(status){if(status){let buffer=serializeValidateCheckpointResult(status);await this.#pendingChainValidationStatus.set(buffer)}else await this.#pendingChainValidationStatus.delete()}async addRejectedCheckpoint(entry){let archiveRootHex=entry.archiveRoot.toString();await this.#rejectedCheckpoints.set(archiveRootHex,{checkpointNumber:entry.checkpointNumber,archiveRoot:entry.archiveRoot.toBuffer(),parentArchiveRoot:entry.parentArchiveRoot.toBuffer(),slotNumber:entry.slotNumber,l1:entry.l1.toBuffer(),reason:entry.reason}),await this.#rejectedCheckpointsByNumber.set(entry.checkpointNumber,archiveRootHex),await this.advanceSynchedL1BlockNumber(entry.l1.blockNumber)}async getRejectedCheckpointByArchiveRoot(archiveRoot){let stored=await this.#rejectedCheckpoints.getAsync(archiveRoot.toString());return stored?this.rejectedCheckpointFromStorage(stored):void 0}async getRejectedCheckpointByNumber(checkpointNumber){let archiveRootHex=await this.#rejectedCheckpointsByNumber.getAsync(checkpointNumber);if(archiveRootHex===void 0)return;let stored=await this.#rejectedCheckpoints.getAsync(archiveRootHex);return stored?this.rejectedCheckpointFromStorage(stored):void 0}async getLatestRejectedCheckpointNumber(){let[latest]=await toArray(this.#rejectedCheckpointsByNumber.keysAsync({reverse:!0,limit:1}));return CheckpointNumber(latest??INITIAL_CHECKPOINT_NUMBER2-1)}async removeRejectedCheckpointByArchiveRoot(archiveRoot){let archiveRootHex=archiveRoot.toString(),stored=await this.#rejectedCheckpoints.getAsync(archiveRootHex);await this.#rejectedCheckpoints.delete(archiveRootHex),stored&&await this.#rejectedCheckpointsByNumber.getAsync(stored.checkpointNumber)===archiveRootHex&&await this.#rejectedCheckpointsByNumber.delete(stored.checkpointNumber)}async advanceSynchedL1BlockNumber(l1BlockNumber){let current=await this.#lastSynchedL1Block.getAsync();(current===void 0||l1BlockNumber>current)&&await this.#lastSynchedL1Block.set(l1BlockNumber)}rejectedCheckpointFromStorage(stored){return{checkpointNumber:CheckpointNumber(stored.checkpointNumber),archiveRoot:Fr.fromBuffer(stored.archiveRoot),parentArchiveRoot:Fr.fromBuffer(stored.parentArchiveRoot),slotNumber:SlotNumber(stored.slotNumber),l1:L1PublishedData.fromBuffer(stored.l1),reason:stored.reason}}};var ContractClassStore=class{static{__name(this,"ContractClassStore")}db;#contractClasses;#bytecodeCommitments;constructor(db){this.db=db,this.#contractClasses=db.openMap("archiver_contract_classes"),this.#bytecodeCommitments=db.openMap("archiver_bytecode_commitments")}async addContractClasses(data,blockNumber){return(await Promise.all(data.map(c2=>this.addContractClass(c2,c2.publicBytecodeCommitment,blockNumber)))).every(Boolean)}async deleteContractClasses(data,blockNumber){return(await Promise.all(data.map(c2=>this.deleteContractClass(c2,blockNumber)))).every(Boolean)}async addContractClass(contractClass,bytecodeCommitment,blockNumber){await this.db.transactionAsync(async()=>{let key=contractClass.id.toString(),existing=await this.#contractClasses.getAsync(key);if(existing!==void 0){if(isProtocolContractClass(contractClass.id)||deserializeContractClassPublic(existing).l2BlockNumber===blockNumber)return;throw new Error(`Contract class ${key} already exists, cannot add again at block ${blockNumber}`)}await this.#contractClasses.set(key,serializeContractClassPublic({...contractClass,l2BlockNumber:blockNumber})),await this.#bytecodeCommitments.set(key,bytecodeCommitment.toBuffer())})}async deleteContractClass(contractClass,blockNumber){if(isProtocolContractClass(contractClass.id))return;let restoredContractClass=await this.#contractClasses.getAsync(contractClass.id.toString());restoredContractClass&&deserializeContractClassPublic(restoredContractClass).l2BlockNumber>=blockNumber&&await this.db.transactionAsync(async()=>{await this.#contractClasses.delete(contractClass.id.toString()),await this.#bytecodeCommitments.delete(contractClass.id.toString())})}async getContractClass(id){let contractClass=await this.#contractClasses.getAsync(id.toString());return contractClass&&{...deserializeContractClassPublic(contractClass),id}}async getBytecodeCommitment(id){let value=await this.#bytecodeCommitments.getAsync(id.toString());return value===void 0?void 0:Fr.fromBuffer(value)}async getContractClassIds(){return(await toArray(this.#contractClasses.keysAsync())).map(key=>Fr.fromHexString(key))}};function serializeContractClassPublic(contractClass){return serializeToBuffer(contractClass.l2BlockNumber,numToUInt8(contractClass.version),contractClass.artifactHash,contractClass.packedBytecode.length,contractClass.packedBytecode,contractClass.privateFunctionsRoot)}__name(serializeContractClassPublic,"serializeContractClassPublic");function deserializeContractClassPublic(buffer){let reader=BufferReader.asReader(buffer);return{l2BlockNumber:reader.readNumber(),version:reader.readUInt8(),artifactHash:reader.readObject(Fr),packedBytecode:reader.readBuffer(),privateFunctionsRoot:reader.readObject(Fr)}}__name(deserializeContractClassPublic,"deserializeContractClassPublic");var ContractInstanceStore=class{static{__name(this,"ContractInstanceStore")}db;#contractInstances;#contractInstancePublishedAt;#contractInstanceUpdates;constructor(db){this.db=db,this.#contractInstances=db.openMap("archiver_contract_instances"),this.#contractInstancePublishedAt=db.openMap("archiver_contract_instances_publication_block_number"),this.#contractInstanceUpdates=db.openMap("archiver_contract_instance_updates")}async addContractInstances(data,blockNumber){return(await Promise.all(data.map(c2=>this.addContractInstance(c2,blockNumber)))).every(Boolean)}async deleteContractInstances(data){return(await Promise.all(data.map(c2=>this.deleteContractInstance(c2)))).every(Boolean)}async addContractInstanceUpdates(data,timestamp){return(await Promise.all(data.map((update,logIndex)=>this.addContractInstanceUpdate(update,timestamp,logIndex)))).every(Boolean)}async deleteContractInstanceUpdates(data,timestamp){return(await Promise.all(data.map((update,logIndex)=>this.deleteContractInstanceUpdate(update,timestamp,logIndex)))).every(Boolean)}addContractInstance(contractInstance,blockNumber){return this.db.transactionAsync(async()=>{let key=contractInstance.address.toString();if(await this.#contractInstances.hasAsync(key)){if(isProtocolContract(contractInstance.address))return;let existingBlockNumber=await this.#contractInstancePublishedAt.getAsync(key);if(existingBlockNumber===blockNumber)return;throw new Error(`Contract instance at ${key} already exists (deployed at block ${existingBlockNumber}), cannot add again at block ${blockNumber}`)}await this.#contractInstances.set(key,new SerializableContractInstance(contractInstance).toBuffer()),await this.#contractInstancePublishedAt.set(key,blockNumber)})}deleteContractInstance(contractInstance){return isProtocolContract(contractInstance.address)?Promise.resolve():this.db.transactionAsync(async()=>{await this.#contractInstances.delete(contractInstance.address.toString()),await this.#contractInstancePublishedAt.delete(contractInstance.address.toString())})}getUpdateKey(contractAddress,timestamp,logIndex){return logIndex===void 0?[contractAddress.toString(),timestamp.toString()]:[contractAddress.toString(),timestamp.toString(),logIndex]}addContractInstanceUpdate(contractInstanceUpdate,timestamp,logIndex){return this.#contractInstanceUpdates.set(this.getUpdateKey(contractInstanceUpdate.address,timestamp,logIndex),new SerializableContractInstanceUpdate(contractInstanceUpdate).toBuffer())}deleteContractInstanceUpdate(contractInstanceUpdate,timestamp,logIndex){return this.#contractInstanceUpdates.delete(this.getUpdateKey(contractInstanceUpdate.address,timestamp,logIndex))}async getCurrentContractInstanceClassId(address,timestamp,originalClassId){let serializedUpdate=await first(this.#contractInstanceUpdates.valuesAsync({reverse:!0,start:this.getUpdateKey(address,0n),end:this.getUpdateKey(address,timestamp+1n),limit:1}));if(serializedUpdate===void 0)return originalClassId;let update=SerializableContractInstanceUpdate.fromBuffer(serializedUpdate);return timestamp<update.timestampOfChange?update.prevContractClassId.isZero()?originalClassId:update.prevContractClassId:update.newContractClassId}async getContractInstance(address,timestamp){let contractInstance=await this.#contractInstances.getAsync(address.toString());if(!contractInstance)return;let instance=SerializableContractInstance.fromBuffer(contractInstance).withAddress(address);return instance.currentContractClassId=await this.getCurrentContractInstanceClassId(address,timestamp,instance.originalContractClassId),instance}getContractInstanceDeploymentBlockNumber(address){return this.#contractInstancePublishedAt.getAsync(address.toString())}};var MAX_FUNCTION_SIGNATURES=1e3,MAX_FUNCTION_NAME_LEN=256,FunctionNamesCache=class{static{__name(this,"FunctionNamesCache")}log=createLogger("archiver:data-stores");names=new Map;async register(signatures){for(let sig of signatures){if(this.names.size>MAX_FUNCTION_SIGNATURES)return;try{let selector=await FunctionSelector.fromSignature(sig);this.names.set(selector.toString(),sig.slice(0,sig.indexOf("(")).slice(0,MAX_FUNCTION_NAME_LEN))}catch{this.log.warn(`Failed to parse signature: ${sig}. Ignoring`)}}}get(selector){return this.names.get(selector.toString())}};var NUMERIC_HEX_LEN=8,SEP="-",HEX_SENTINEL="g";function fieldHex(value){return value.toString().slice(2)}__name(fieldHex,"fieldHex");function tagHexForLog(fields){return fields.length>0?fieldHex(fields[0]):""}__name(tagHexForLog,"tagHexForLog");function u32Hex(n){return n.toString(16).padStart(NUMERIC_HEX_LEN,"0")}__name(u32Hex,"u32Hex");function encodeKey(prefix,blockNumber,txIndex,logIndex){return`${prefix}${SEP}${u32Hex(blockNumber)}${SEP}${u32Hex(txIndex)}${SEP}${u32Hex(logIndex)}`}__name(encodeKey,"encodeKey");function decodeKeyTail(key){let parts=key.split(SEP),len=parts.length;return{blockNumber:BlockNumber(parseInt(parts[len-3],16)),txIndexWithinBlock:parseInt(parts[len-2],16),logIndexWithinTx:parseInt(parts[len-1],16)}}__name(decodeKeyTail,"decodeKeyTail");function endOfTagRange(prefix,upperBlockExclusive){return upperBlockExclusive===void 0?`${prefix}${SEP}${HEX_SENTINEL}`:encodeKey(prefix,upperBlockExclusive,0,0)}__name(endOfTagRange,"endOfTagRange");function endOfTxRange(prefix,txBlk,txIdx){return`${prefix}${SEP}${u32Hex(txBlk)}${SEP}${u32Hex(txIdx)}${SEP}${HEX_SENTINEL}`}__name(endOfTxRange,"endOfTxRange");function incKey(key){return key+HEX_SENTINEL}__name(incKey,"incKey");function encodeValue(value){let head=Buffer.allocUnsafe(76);value.txHash.toBuffer().copy(head,0),value.blockHash.toBuffer().copy(head,32),head.writeBigUInt64BE(value.blockTimestamp,64),head.writeUInt32BE(value.logData.length,72);let fieldBufs=value.logData.map(f=>f.toBuffer());return Buffer.concat([head,...fieldBufs])}__name(encodeValue,"encodeValue");function decodeValue(buffer){let buf=Buffer.isBuffer(buffer)?buffer:Buffer.from(buffer.buffer,buffer.byteOffset,buffer.byteLength),off=0,txHash=TxHash.fromBuffer(buf.subarray(off,off+32));off+=32;let blockHash=BlockHash.fromBuffer(buf.subarray(off,off+32));off+=32;let blockTimestamp=buf.readBigUInt64BE(off);off+=8;let logDataLen=buf.readUInt32BE(off);off+=4;let logData=new Array(logDataLen);for(let i=0;i<logDataLen;i++)logData[i]=Fr.fromBuffer(buf.subarray(off,off+32)),off+=32;return{txHash,blockHash,blockTimestamp,logData}}__name(decodeValue,"decodeValue");function encodePublicPrefix(contractHex,tagHex){return`${contractHex}${SEP}${tagHex}`}__name(encodePublicPrefix,"encodePublicPrefix");var LogStore=class _LogStore{static{__name(this,"LogStore")}db;blockStore;genesisBlockHash;#privateLogs;#publicLogs;#privateKeysByBlock;#publicKeysByBlock;#log;constructor(db,blockStore,genesisBlockHash){this.db=db,this.blockStore=blockStore,this.genesisBlockHash=genesisBlockHash,this.#log=createLogger("archiver:log_store"),this.#privateLogs=db.openMap("archiver_private_logs"),this.#publicLogs=db.openMap("archiver_public_logs"),this.#privateKeysByBlock=db.openMap("archiver_private_log_keys_by_block"),this.#publicKeysByBlock=db.openMap("archiver_public_log_keys_by_block")}addLogs(blocks){return this.db.transactionAsync(async()=>{for(let block of blocks){let blockHash=await block.hash(),blockNumber=block.number,blockTimestamp=block.timestamp,privateKeys=[],privateValues=[],publicKeys=[],publicValues=[];for(let txIndexWithinBlock=0;txIndexWithinBlock<block.body.txEffects.length;txIndexWithinBlock++){let txEffect=block.body.txEffects[txIndexWithinBlock],txHash=txEffect.txHash,privateLogIndexWithinTx=0,publicLogIndexWithinTx=0;for(let log2 of txEffect.privateLogs){let tagHex=tagHexForLog(log2.fields),key=encodeKey(tagHex,blockNumber,txIndexWithinBlock,privateLogIndexWithinTx),value=encodeValue({txHash,blockHash,blockTimestamp,logData:log2.getEmittedFields()});privateKeys.push(key),privateValues.push(value),privateLogIndexWithinTx++}for(let log2 of txEffect.publicLogs){let contractHex=fieldHex(log2.contractAddress),tagHex=tagHexForLog(log2.fields),key=encodeKey(encodePublicPrefix(contractHex,tagHex),blockNumber,txIndexWithinBlock,publicLogIndexWithinTx),value=encodeValue({txHash,blockHash,blockTimestamp,logData:log2.getEmittedFields()});publicKeys.push(key),publicValues.push(value),publicLogIndexWithinTx++}}for(let i=0;i<privateKeys.length;i++)await this.#privateLogs.set(privateKeys[i],privateValues[i]);for(let i=0;i<publicKeys.length;i++)await this.#publicLogs.set(publicKeys[i],publicValues[i]);await this.#privateKeysByBlock.set(blockNumber,privateKeys),await this.#publicKeysByBlock.set(blockNumber,publicKeys),this.#log.debug(`Indexed logs for block ${blockNumber}`,{blockNumber,privateCount:privateKeys.length,publicCount:publicKeys.length})}return!0})}deleteLogs(blocks){return this.db.transactionAsync(async()=>{for(let block of blocks){let blockNumber=block.number,[privateKeys,publicKeys]=await Promise.all([this.#privateKeysByBlock.getAsync(blockNumber),this.#publicKeysByBlock.getAsync(blockNumber)]);if(privateKeys){for(let key of privateKeys)await this.#privateLogs.delete(key);await this.#privateKeysByBlock.delete(blockNumber)}if(publicKeys){for(let key of publicKeys)await this.#publicLogs.delete(key);await this.#publicKeysByBlock.delete(blockNumber)}}return!0})}getPrivateLogsByTags(query){return _LogStore.#validateQuery(query),this.db.transactionAsync(()=>this.#runQuery(query,void 0))}getPublicLogsByTags(query){return _LogStore.#validateQuery(query),this.db.transactionAsync(()=>this.#runQuery(query,fieldHex(query.contractAddress)))}static#validateQuery(query){if(query.txHash!==void 0&&(query.fromBlock!==void 0||query.toBlock!==void 0))throw new Error("`txHash` is mutually exclusive with `fromBlock`/`toBlock`")}async#runQuery(query,contractHex){let isPublic=contractHex!==void 0,tags=query.tags??[],primaryMap=isPublic?this.#publicLogs:this.#privateLogs,referenceBlockNumber;if(query.referenceBlock)if(query.referenceBlock.equals(this.genesisBlockHash))referenceBlockNumber=INITIAL_L2_BLOCK_NUM2-1;else{let refBlk=await this.blockStore.getBlockData({hash:query.referenceBlock});if(!refBlk)throw new Error(`Reference block ${query.referenceBlock.toString()} not found in the node. This might indicate a reorg has occurred.`);referenceBlockNumber=refBlk.header.globalVariables.blockNumber}let upperExclusive;if(query.toBlock!==void 0&&(upperExclusive=query.toBlock),referenceBlockNumber!==void 0){let refExclusive=referenceBlockNumber+1;upperExclusive=upperExclusive===void 0?refExclusive:Math.min(upperExclusive,refExclusive)}let txLocation;if(query.txHash){let loc=await this.blockStore.getTxLocation(query.txHash);if(!loc)return tags.map(()=>[]);if(txLocation=loc,upperExclusive!==void 0&&txLocation[0]>=upperExclusive)return tags.map(()=>[])}let fromBlock=query.fromBlock??INITIAL_L2_BLOCK_NUM2,includeEffects=query.includeEffects===!0,perTagResults=[];for(let tagEntry of tags){let{tagHex,afterLog}=normalizeTagEntry(tagEntry),prefix=contractHex!==void 0?encodePublicPrefix(contractHex,tagHex):tagHex,end=txLocation?endOfTxRange(prefix,txLocation[0],txLocation[1]):endOfTagRange(prefix,upperExclusive),start;afterLog?start=incKey(encodeKey(prefix,afterLog.blockNumber,afterLog.txIndexWithinBlock,afterLog.logIndexWithinTx)):txLocation?start=encodeKey(prefix,txLocation[0],txLocation[1],0):start=encodeKey(prefix,fromBlock,0,0);let limit=query.limitPerTag??20,out=[];for await(let[rawKey,rawVal]of primaryMap.entriesAsync({start,end,limit})){let tail=decodeKeyTail(rawKey),value=decodeValue(rawVal);out.push({logData:value.logData,blockNumber:tail.blockNumber,blockHash:value.blockHash,blockTimestamp:value.blockTimestamp,txHash:value.txHash,txIndexWithinBlock:tail.txIndexWithinBlock,logIndexWithinTx:tail.logIndexWithinTx})}perTagResults.push(out)}if(includeEffects){let txHashByKey=new Map;for(let arr of perTagResults)for(let log2 of arr)txHashByKey.set(log2.txHash.toString(),log2.txHash);let uniqueTxs=Array.from(txHashByKey.values());if(uniqueTxs.length>0){let effects=await this.blockStore.getNoteHashesAndNullifiers(uniqueTxs),byTxHash=new Map;uniqueTxs.forEach((tx,i)=>byTxHash.set(tx.toString(),effects[i]));for(let i=0;i<perTagResults.length;i++)perTagResults[i]=perTagResults[i].map(log2=>{let[noteHashes,nullifiers]=byTxHash.get(log2.txHash.toString())??[[],[]];return{...log2,noteHashes,nullifiers}})}}return perTagResults}getPrivateLogsForBlock(blockNumber){return this.db.transactionAsync(()=>this.#readBlockLogs(this.#privateKeysByBlock,this.#privateLogs,blockNumber))}getPublicLogsForBlock(blockNumber){return this.db.transactionAsync(()=>this.#readBlockLogs(this.#publicKeysByBlock,this.#publicLogs,blockNumber))}async#readBlockLogs(keysByBlock,primaryMap,blockNumber){let keys=await keysByBlock.getAsync(blockNumber);if(!keys||keys.length===0)return[];let results=[];for(let key of keys){let raw=await primaryMap.getAsync(key);if(!raw)continue;let tail=decodeKeyTail(key),value=decodeValue(raw);results.push({logData:value.logData,blockNumber:tail.blockNumber,blockHash:value.blockHash,blockTimestamp:value.blockTimestamp,txHash:value.txHash,txIndexWithinBlock:tail.txIndexWithinBlock,logIndexWithinTx:tail.logIndexWithinTx})}return results}};function normalizeTagEntry(entry){return typeof entry=="object"&&entry!==null&&"tag"in entry?{tagHex:fieldHex(entry.tag.value),afterLog:entry.afterLog}:{tagHex:fieldHex(entry.value),afterLog:void 0}}__name(normalizeTagEntry,"normalizeTagEntry");function mapRange(range,mapFn){return{start:range.start?mapFn(range.start):void 0,end:range.end?mapFn(range.end):void 0,reverse:range.reverse,limit:range.limit}}__name(mapRange,"mapRange");function updateRollingHash(currentRollingHash,leaf){let input=Buffer.concat([currentRollingHash.toBuffer(),leaf.toBuffer()]);return Buffer16.fromBuffer(keccak256(input))}__name(updateRollingHash,"updateRollingHash");function serializeInboxMessage(message){return serializeToBuffer([bigintToUInt64BE(message.index),message.leaf,message.l1BlockHash,numToUInt32BE(Number(message.l1BlockNumber)),numToUInt32BE(message.checkpointNumber),message.rollingHash])}__name(serializeInboxMessage,"serializeInboxMessage");function deserializeInboxMessage(buffer){let reader=BufferReader.asReader(buffer),index=reader.readUInt64(),leaf=reader.readObject(Fr),l1BlockHash=reader.readObject(Buffer32),l1BlockNumber=BigInt(reader.readNumber()),checkpointNumber=CheckpointNumber(reader.readNumber()),rollingHash=reader.readObject(Buffer16);return{index,leaf,l1BlockHash,l1BlockNumber,checkpointNumber,rollingHash}}__name(deserializeInboxMessage,"deserializeInboxMessage");var MessageStoreError=class extends Error{static{__name(this,"MessageStoreError")}inboxMessage;constructor(message,inboxMessage){super(message),this.inboxMessage=inboxMessage,this.name="MessageStoreError"}},MessageStore=class{static{__name(this,"MessageStore")}db;#l1ToL2Messages;#l1ToL2MessageIndices;#lastSynchedL1Block;#totalMessageCount;#inboxTreeInProgress;#messagesFinalizedL1Block;#log;constructor(db){this.db=db,this.#log=createLogger("archiver:message_store"),this.#l1ToL2Messages=db.openMap("archiver_l1_to_l2_messages"),this.#l1ToL2MessageIndices=db.openMap("archiver_l1_to_l2_message_indices"),this.#lastSynchedL1Block=db.openSingleton("archiver_last_l1_block_id"),this.#totalMessageCount=db.openSingleton("archiver_l1_to_l2_message_count"),this.#inboxTreeInProgress=db.openSingleton("archiver_inbox_tree_in_progress"),this.#messagesFinalizedL1Block=db.openSingleton("archiver_messages_finalized_l1_block")}async getTotalL1ToL2MessageCount(){return await this.#totalMessageCount.getAsync()??0n}async getSynchedL1Block(){let buffer=await this.#lastSynchedL1Block.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}async setSynchedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastSynchedL1Block.set(buffer)}async getMessagesFinalizedL1Block(){let buffer=await this.#messagesFinalizedL1Block.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}async maybeAdvanceFinalizedL1Block(l1Block){let existing=await this.getMessagesFinalizedL1Block();if(existing&&l1Block.l1BlockNumber<=existing.l1BlockNumber)return;let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#messagesFinalizedL1Block.set(buffer)}addL1ToL2Messages(messages){return messages.length===0?Promise.resolve():this.db.transactionAsync(async()=>{let lastMessage=await this.getLastMessage(),messageCount=0;for(let message of messages){if(lastMessage&&message.index<=lastMessage.index){let existing=await this.#l1ToL2Messages.getAsync(this.indexToKey(message.index));if(existing&&deserializeInboxMessage(existing).rollingHash.equals(message.rollingHash)){this.#log.trace(`Reinserting message with index ${message.index} in the store`),await this.#l1ToL2Messages.set(this.indexToKey(message.index),serializeInboxMessage(message));continue}throw new MessageStoreError(`Cannot insert L1 to L2 message with index ${message.index} before last message with index ${lastMessage.index}`,message)}let previousRollingHash=lastMessage?.rollingHash??Buffer16.ZERO,expectedRollingHash=updateRollingHash(previousRollingHash,message.leaf);if(!expectedRollingHash.equals(message.rollingHash))throw new MessageStoreError(`Invalid rolling hash for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index} (expected ${expectedRollingHash.toString()} from previous hash ${previousRollingHash} but got ${message.rollingHash.toString()})`,message);let[expectedStart,expectedEnd]=InboxLeaf.indexRangeForCheckpoint(message.checkpointNumber);if(message.index<expectedStart||message.index>=expectedEnd)throw new MessageStoreError(`Invalid index ${message.index} for incoming L1 to L2 message ${message.leaf.toString()} at checkpoint ${message.checkpointNumber} (expected value in range [${expectedStart}, ${expectedEnd}))`,message);if(lastMessage&&message.checkpointNumber===lastMessage.checkpointNumber&&message.index!==lastMessage.index+1n)throw new MessageStoreError(`Missing prior message for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index}`,message);if((!lastMessage||message.checkpointNumber>lastMessage.checkpointNumber)&&message.index!==expectedStart)throw new MessageStoreError(`Message ${message.leaf.toString()} for checkpoint ${message.checkpointNumber} has wrong index ${message.index} (expected ${expectedStart})`,message);await this.#l1ToL2Messages.set(this.indexToKey(message.index),serializeInboxMessage(message)),await this.#l1ToL2MessageIndices.set(this.leafToIndexKey(message.leaf),message.index),messageCount++,this.#log.trace(`Inserted L1 to L2 message ${message.leaf} with index ${message.index} into the store`),lastMessage=message}await this.increaseTotalMessageCount(messageCount)})}getL1ToL2MessageIndex(l1ToL2Message){return this.#l1ToL2MessageIndices.getAsync(this.leafToIndexKey(l1ToL2Message))}async getLastMessage(){let[msg]=await toArray(this.#l1ToL2Messages.valuesAsync({reverse:!0,limit:1}));return msg?deserializeInboxMessage(msg):void 0}getInboxTreeInProgress(){return this.#inboxTreeInProgress.getAsync()}setMessageSyncState(l1Block,treeInProgress,finalizedL1Block){return this.db.transactionAsync(async()=>{await this.setSynchedL1Block(l1Block),treeInProgress!==void 0?await this.#inboxTreeInProgress.set(treeInProgress):await this.#inboxTreeInProgress.delete(),finalizedL1Block!==void 0&&await this.maybeAdvanceFinalizedL1Block(finalizedL1Block)})}async getL1ToL2Messages(checkpointNumber){let treeInProgress=await this.#inboxTreeInProgress.getAsync();if(treeInProgress!==void 0&&BigInt(checkpointNumber)>=treeInProgress)throw new L1ToL2MessagesNotReadyError(checkpointNumber,treeInProgress);let messages=[],[startIndex,endIndex]=InboxLeaf.indexRangeForCheckpoint(checkpointNumber),lastIndex=startIndex-1n;for await(let msgBuffer of this.#l1ToL2Messages.valuesAsync({start:this.indexToKey(startIndex),end:this.indexToKey(endIndex)})){let msg=deserializeInboxMessage(msgBuffer);if(msg.checkpointNumber!==checkpointNumber)throw new Error(`L1 to L2 message with index ${msg.index} has invalid checkpoint number ${msg.checkpointNumber}`);if(msg.index!==lastIndex+1n)throw new Error(`Expected L1 to L2 message with index ${lastIndex+1n} but got ${msg.index}`);lastIndex=msg.index,messages.push(msg.leaf)}return messages}async*iterateL1ToL2Messages(range={}){let entriesRange=mapRange(range,this.indexToKey);for await(let msgBuffer of this.#l1ToL2Messages.valuesAsync(entriesRange))yield deserializeInboxMessage(msgBuffer)}removeL1ToL2Messages(startIndex){this.#log.debug(`Deleting L1 to L2 messages from index ${startIndex}`);let deleteCount=0;return this.db.transactionAsync(async()=>{for await(let[key,msgBuffer]of this.#l1ToL2Messages.entriesAsync({start:this.indexToKey(startIndex)}))this.#log.trace(`Deleting L1 to L2 message with index ${key-1} from the store`),await this.#l1ToL2Messages.delete(key),await this.#l1ToL2MessageIndices.delete(this.leafToIndexKey(deserializeInboxMessage(msgBuffer).leaf)),deleteCount++;await this.increaseTotalMessageCount(-deleteCount),this.#log.warn(`Deleted ${deleteCount} L1 to L2 messages from index ${startIndex} from the store`)})}rollbackL1ToL2MessagesToCheckpoint(targetCheckpointNumber){this.#log.debug(`Deleting L1 to L2 messages up to target checkpoint ${targetCheckpointNumber}`);let startIndex=InboxLeaf.smallestIndexForCheckpoint(CheckpointNumber(targetCheckpointNumber+1));return this.removeL1ToL2Messages(startIndex)}indexToKey(index){return Number(index)}leafToIndexKey(leaf){return leaf.toString()}async increaseTotalMessageCount(count2){if(count2!==0)return await this.db.transactionAsync(async()=>{let lastTotalMessageCount=await this.getTotalL1ToL2MessageCount();await this.#totalMessageCount.set(lastTotalMessageCount+BigInt(count2))})}};function createArchiverDataStores(db,genesisBlockHash){let blocks=new BlockStore(db);return{db,blocks,logs:new LogStore(db,blocks,genesisBlockHash),messages:new MessageStore(db),contractClasses:new ContractClassStore(db),contractInstances:new ContractInstanceStore(db),functionNames:new FunctionNamesCache}}__name(createArchiverDataStores,"createArchiverDataStores");var L1ToL2MessagesNotReadyError2=class extends Error{static{__name(this,"L1ToL2MessagesNotReadyError")}constructor(message){super(message),this.name="L1ToL2MessagesNotReadyError"}};var TXEArchiver=class extends ArchiverDataSourceBase{static{__name(this,"TXEArchiver")}updater=new ArchiverDataStoreUpdater(this.stores);constructor(db){super(createArchiverDataStores(db,GENESIS_BLOCK_HEADER_HASH3),void 0,BlockHeader.empty(),GENESIS_BLOCK_HEADER_HASH3,new Fr(GENESIS_ARCHIVE_ROOT))}async addCheckpoints(checkpoints,result){await this.updater.addCheckpoints(checkpoints,result)}getRollupAddress(){throw new Error('TXE Archiver does not implement "getRollupAddress"')}getRegistryAddress(){throw new Error('TXE Archiver does not implement "getRegistryAddress"')}getL1Constants(){return Promise.resolve(EmptyL1RollupConstants)}getGenesisValues(){return Promise.resolve({genesisArchiveRoot:new Fr(GENESIS_ARCHIVE_ROOT)})}getL1Timestamp(){throw new Error('TXE Archiver does not implement "getL1Timestamp"')}async getL2Tips(){return(await this.getL2Frontier()).tips}getL1SyncPoint(){return Promise.resolve(void 0)}async getL2Frontier(){let latestBlockNumber=await this.stores.blocks.getLatestL2BlockNumber();if(latestBlockNumber===0)throw new Error("L2Tips requested from TXE Archiver but no block found");let latestBlockData=await this.stores.blocks.getBlockData({number:latestBlockNumber});if(!latestBlockData)throw new Error("L2Tips requested from TXE Archiver but no block header found");let number4=latestBlockData.header.globalVariables.blockNumber,hash5=latestBlockData.blockHash.toString(),checkpoint=await this.stores.blocks.getRangeOfCheckpoints(CheckpointNumber.fromBlockNumber(number4),1);if(checkpoint.length===0)throw new Error(`L2Tips requested from TXE Archiver but no checkpoint found for block number ${number4}`);let blockId={number:number4,hash:hash5},checkpointId={number:checkpoint[0].checkpointNumber,hash:checkpoint[0].header.hash().toString()},tipId={block:blockId,checkpoint:checkpointId};return{tips:{proposed:blockId,proven:tipId,finalized:tipId,checkpointed:tipId},proposedCheckpoint:void 0,l1SyncPoint:void 0,latestBlockHeader:latestBlockData.header,checkpointedCheckpoint:{header:checkpoint[0].header,l1:checkpoint[0].l1},pendingChainValidationStatus:{valid:!0}}}getSyncedL2SlotNumber(){throw new Error('TXE Archiver does not implement "getSyncedL2SlotNumber"')}getSyncedL2EpochNumber(){throw new Error('TXE Archiver does not implement "getSyncedL2EpochNumber"')}isEpochComplete(_epochNumber){throw new Error('TXE Archiver does not implement "isEpochComplete"')}syncImmediate(){throw new Error('TXE Archiver does not implement "syncImmediate"')}getL2ToL1MembershipWitness(){return Promise.resolve(void 0)}};var import_config15=__toESM(require_empty_stub(),1);import{l1ContractsConfigMappings as l1ContractsConfigMappings2}from"@aztec/ethereum/config";import{l1ReaderConfigMappings}from"@aztec/ethereum/l1-reader";var archiverConfigMappings={...import_config15.blobClientConfigMapping,archiverPollingIntervalMS:{env:"ARCHIVER_POLLING_INTERVAL_MS",description:"The polling interval in ms for retrieving new L2 blocks and encrypted logs.",...numberConfigHelper(500)},archiverBatchSize:{env:"ARCHIVER_BATCH_SIZE",description:"The number of L2 blocks the archiver will attempt to download at a time.",...numberConfigHelper(100)},archiverStoreMapSizeKb:{env:"ARCHIVER_STORE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the archiver DB in KB. Overwrites the general dataStoreMapSizeKb."},blockDurationMs:{env:"SEQ_BLOCK_DURATION_MS",description:"Duration per block in milliseconds when building multiple blocks per slot. Used to derive orphan proposed block pruning timing.",...optionalNumberConfigHelper()},checkpointProposalSyncGraceSeconds:{env:"CHECKPOINT_PROPOSAL_SYNC_GRACE_SECONDS",description:"Consensus grace in seconds for a received checkpoint proposal to materialize into local proposed state.",...optionalNumberConfigHelper()},skipValidateCheckpointAttestations:{description:"Skip validating checkpoint attestations (for testing purposes only)",...booleanConfigHelper(!1)},skipPromoteProposedCheckpointDuringL1Sync:{description:"Skip promoting proposed checkpoints during L1 sync (for testing purposes only)",...booleanConfigHelper(!1)},maxAllowedEthClientDriftSeconds:{env:"MAX_ALLOWED_ETH_CLIENT_DRIFT_SECONDS",description:"Maximum allowed drift in seconds between the Ethereum client and current time.",...numberConfigHelper(300)},ethereumAllowNoDebugHosts:{env:"ETHEREUM_ALLOW_NO_DEBUG_HOSTS",description:"Whether to allow starting the archiver without debug/trace method support on Ethereum hosts",...booleanConfigHelper(!0)},archiverSkipHistoricalLogsCheck:{env:"ARCHIVER_SKIP_HISTORICAL_LOGS_CHECK",description:"Skip the startup check that probes the L1 RPC for historical Rollup contract logs. Set to true to bypass the check when the connected RPC node is known to prune old logs.",...booleanConfigHelper(!1)},orphanPruneNoProposalTolerance:{env:"ARCHIVER_ORPHAN_PRUNE_NO_PROPOSAL_TOLERANCE",description:"Local tolerance in seconds before pruning an orphan block when no checkpoint proposal was received.",...numberConfigHelper(1)},skipOrphanProposedBlockPruning:{env:"ARCHIVER_SKIP_ORPHAN_PROPOSED_BLOCK_PRUNING",description:"Skip pruning orphan proposed blocks that have no matching proposed checkpoint.",...booleanConfigHelper(!1)},testPreloadStandardContracts:{env:"TEST_PRELOAD_STANDARD_CONTRACTS",description:"Preload the standard contracts (AuthRegistry, PublicChecks, HandshakeRegistry) into the contract store at block 0. For test environments only, and only safe when genesis seeds the matching registration/deployment nullifiers; otherwise a later on-chain publish would collide with the block-0 preload.",...booleanConfigHelper(!1)},...chainConfigMappings,...l1ReaderConfigMappings,viemPollingIntervalMS:{env:"ARCHIVER_VIEM_POLLING_INTERVAL_MS",description:"The polling interval viem uses in ms",...numberConfigHelper(1e3)},...l1ContractsConfigMappings2};import{genesisStateConfigMappings}from"@aztec/ethereum/config";var import_node_keystore=__toESM(require_empty_stub(),1),import_config24=__toESM(require_empty_stub(),1),import_config25=__toESM(require_empty_stub(),1),import_config26=__toESM(require_empty_stub(),1),import_config27=__toESM(require_empty_stub(),1),import_config28=__toESM(require_empty_stub(),1),import_slasher2=__toESM(require_empty_stub(),1);var import_config30=__toESM(require_empty_stub(),1);var worldStateConfigMappings={worldStateBlockCheckIntervalMS:{env:"WS_BLOCK_CHECK_INTERVAL_MS",...numberConfigHelper(100),description:"The frequency in which to check."},worldStateBlockRequestBatchSize:{env:"WS_BLOCK_REQUEST_BATCH_SIZE",...optionalNumberConfigHelper(),description:"Size of the batch for each get-blocks request from the synchronizer to the archiver."},worldStateDbMapSizeKb:{env:"WS_DB_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state DB in KB. Overwrites the general dataStoreMapSizeKb."},archiveTreeMapSizeKb:{env:"ARCHIVE_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state archive tree in KB. Overwrites the general worldStateDbMapSizeKb."},nullifierTreeMapSizeKb:{env:"NULLIFIER_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state nullifier tree in KB. Overwrites the general worldStateDbMapSizeKb."},noteHashTreeMapSizeKb:{env:"NOTE_HASH_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state note hash tree in KB. Overwrites the general worldStateDbMapSizeKb."},messageTreeMapSizeKb:{env:"MESSAGE_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state message tree in KB. Overwrites the general worldStateDbMapSizeKb."},publicDataTreeMapSizeKb:{env:"PUBLIC_DATA_TREE_MAP_SIZE_KB",...optionalNumberConfigHelper(),description:"The maximum possible size of the world state public data tree in KB. Overwrites the general worldStateDbMapSizeKb."},worldStateDataDirectory:{env:"WS_DATA_DIRECTORY",description:"Optional directory for the world state database"},worldStateCheckpointHistory:{env:"WS_NUM_HISTORIC_CHECKPOINTS",description:"The number of historic checkpoints worth of blocks to maintain. Values less than 1 mean all history is maintained",fallback:["WS_NUM_HISTORIC_BLOCKS"],...numberConfigHelper(64)}};import{privateKeyToAddress}from"viem/accounts";var sentinelConfigMappings={sentinelHistoryLengthInEpochs:{description:"The number of L2 epochs kept of history for each validator for computing their stats.",env:"SENTINEL_HISTORY_LENGTH_IN_EPOCHS",...numberConfigHelper(24)},sentinelHistoricEpochPerformanceLengthInEpochs:{description:"The number of L2 epochs kept of per-epoch performance history for each validator.",env:"SENTINEL_HISTORIC_EPOCH_PERFORMANCE_LENGTH_IN_EPOCHS",...numberConfigHelper(2e3)},sentinelEnabled:{description:"Whether the sentinel is enabled or not.",env:"SENTINEL_ENABLED",...booleanConfigHelper(!1)},sentinelEpochEndBufferSlots:{description:"Number of L2 slots after the end of an epoch before the sentinel evaluates it.",env:"SENTINEL_EPOCH_END_BUFFER_SLOTS",...numberConfigHelper(2)}};var aztecNodeConfigMappings={...dataConfigMappings,...import_node_keystore.keyStoreConfigMappings,...archiverConfigMappings,...import_config28.sequencerClientConfigMappings,...import_config27.proverNodeConfigMappings,...import_config30.validatorClientConfigMappings,...import_config26.proverClientConfigMappings,...worldStateConfigMappings,...import_config25.p2pConfigMappings,...sentinelConfigMappings,...import_config24.sharedNodeConfigMappings,...genesisStateConfigMappings,...nodeRpcConfigMappings,...import_slasher2.slasherConfigMappings,...import_config27.specificProverNodeConfigMappings,disableValidator:{env:"VALIDATOR_DISABLED",description:"Whether the validator is disabled for this node.",...booleanConfigHelper()},skipArchiverInitialSync:{env:"SKIP_ARCHIVER_INITIAL_SYNC",description:"Whether to skip waiting for the archiver to be fully synced before starting other services.",...booleanConfigHelper(!1)},debugForceTxProofVerification:{env:"DEBUG_FORCE_TX_PROOF_VERIFICATION",description:"Whether to skip waiting for the archiver to be fully synced before starting other services.",...booleanConfigHelper(!1)},enableProverNode:{env:"ENABLE_PROVER_NODE",description:"Whether to enable the prover node as a subsystem.",...booleanConfigHelper(!1)},enableOffenseCollection:{env:"OFFENSE_COLLECTION_ENABLED",description:"Whether to run the slashing watchers to collect offenses even if not a validator.",...booleanConfigHelper(!1)},useAutomineSequencer:{env:"USE_AUTOMINE_SEQUENCER",description:"Test-only: use AutomineSequencer instead of the production Sequencer.",...booleanConfigHelper(!1)},automineEnableProveEpoch:{env:"AUTOMINE_ENABLE_PROVE_EPOCH",description:"Test-only: have the AutomineSequencer automatically prove epochs as checkpoints land.",...booleanConfigHelper(!1)}};import{SimulationOverridesBuilder as SimulationOverridesBuilder2}from"@aztec/ethereum/contracts";var import_epoch_cache=__toESM(require_empty_stub(),1);function computeTargetSlot(clockSlot,proposedCheckpointData,checkpointedTipSlot){let slotAfterProposedCheckpoint=proposedCheckpointData?proposedCheckpointData.header.slotNumber+1:void 0,slotAfterCheckpointedTip=checkpointedTipSlot!==void 0?checkpointedTipSlot+1:void 0;return SlotNumber(Math.max(...compactArray([clockSlot,slotAfterProposedCheckpoint,slotAfterCheckpointedTip])))}__name(computeTargetSlot,"computeTargetSlot");function getClockSlot(epochCache){return SlotNumber(epochCache.getEpochAndSlotInNextL1Slot().slot+import_epoch_cache.PROPOSER_PIPELINING_SLOT_OFFSET)}__name(getClockSlot,"getClockSlot");function planNextBlock(frontier,clockSlot){let{tips,proposedCheckpoint:proposedCheckpointData}=frontier,latestBlockNumber=tips.proposed.number,latestBlockHash=tips.proposed.hash;if((proposedCheckpointData?BlockNumber.add(proposedCheckpointData.startBlock,proposedCheckpointData.blockCount-1):tips.checkpointed.block.number)!==latestBlockNumber)return{latestBlockNumber,latestBlockHash};let checkpointedCheckpointNumber=tips.checkpointed.checkpoint.number,parentCheckpointNumber=proposedCheckpointData?.checkpointNumber??checkpointedCheckpointNumber,checkpointedTipSlot=frontier.checkpointedCheckpoint?getCheckpointedTipSlot(frontier):void 0;return{latestBlockNumber,latestBlockHash,newCheckpoint:{targetSlot:computeTargetSlot(clockSlot,proposedCheckpointData,checkpointedTipSlot),targetCheckpoint:CheckpointNumber(parentCheckpointNumber+1),proposedCheckpointData,checkpointedCheckpointNumber}}}__name(planNextBlock,"planNextBlock");function computeBoundaryFeeKey(plan,pendingChainValidationStatus){if(!plan.newCheckpoint)return;let{targetSlot,proposedCheckpointData,checkpointedCheckpointNumber}=plan.newCheckpoint,parent=proposedCheckpointData?{kind:"proposed",headerHash:proposedCheckpointData.header.hash().toString(),archiveRoot:proposedCheckpointData.archive.root.toString(),checkpointOutHash:proposedCheckpointData.checkpointOutHash.toString(),totalManaUsed:proposedCheckpointData.totalManaUsed,feeAssetPriceModifier:proposedCheckpointData.feeAssetPriceModifier}:{kind:"checkpointed",pendingChainValid:pendingChainValidationStatus.valid,firstInvalidCheckpoint:pendingChainValidationStatus.valid?void 0:pendingChainValidationStatus.checkpoint.checkpointNumber};return{targetSlot,checkpointedCheckpointNumber,latestBlockHash:plan.latestBlockHash,parent}}__name(computeBoundaryFeeKey,"computeBoundaryFeeKey");function boundaryFeeKeyEquals(a,b){return a.targetSlot===b.targetSlot&&a.checkpointedCheckpointNumber===b.checkpointedCheckpointNumber&&a.latestBlockHash===b.latestBlockHash&&boundaryFeeParentEquals(a.parent,b.parent)}__name(boundaryFeeKeyEquals,"boundaryFeeKeyEquals");function boundaryFeeParentEquals(a,b){return a.kind==="proposed"?b.kind==="proposed"&&a.headerHash===b.headerHash&&a.archiveRoot===b.archiveRoot&&a.checkpointOutHash===b.checkpointOutHash&&a.totalManaUsed===b.totalManaUsed&&a.feeAssetPriceModifier===b.feeAssetPriceModifier:b.kind==="checkpointed"&&a.pendingChainValid===b.pendingChainValid&&a.firstInvalidCheckpoint===b.firstInvalidCheckpoint}__name(boundaryFeeParentEquals,"boundaryFeeParentEquals");var DEFAULT_REFRESH_INTERVAL_MS=1e3,MAX_AGE_INTERVALS=10,MAX_REFRESH_ATTEMPTS=2,NextBlockFeeCache=class{static{__name(this,"NextBlockFeeCache")}blockSource;globalVariableBuilder;rollupContract;epochCache;signatureContext;dateProvider;log;current;previous;refreshIntervalMs=DEFAULT_REFRESH_INTERVAL_MS;refreshLoop;inFlightRefresh;constructor(deps){this.blockSource=deps.blockSource,this.globalVariableBuilder=deps.globalVariableBuilder,this.rollupContract=deps.rollupContract,this.epochCache=deps.epochCache,this.signatureContext=deps.signatureContext,this.dateProvider=deps.dateProvider,this.log=deps.log??createLogger("node:next-block-fee-cache")}start(pollingIntervalMs=DEFAULT_REFRESH_INTERVAL_MS){this.refreshLoop||(this.refreshIntervalMs=pollingIntervalMs,this.refreshLoop=new RunningPromise(()=>this.refresh(),this.log,pollingIntervalMs).start())}async stop(){let loop=this.refreshLoop;this.refreshLoop=void 0,await loop?.stop(),await this.inFlightRefresh?.catch(()=>{})}async getBoundaryGlobals(key,frontier,opts){let maxWaitMs=opts?.maxWaitMs,attempts=maxWaitMs===void 0?MAX_REFRESH_ATTEMPTS:1;for(let attempt=0;attempt<attempts;attempt++){let hit=this.findRecord(key);if(hit)return hit.globals;let refresh=this.refresh(frontier);await(maxWaitMs===void 0?refresh:this.waitFor(refresh,maxWaitMs))}return this.findRecord(key)?.globals}refresh(frontier){if(this.inFlightRefresh)return this.inFlightRefresh;let refresh=this.runRefresh(frontier).finally(()=>{this.inFlightRefresh=void 0});return refresh.catch(()=>{}),this.inFlightRefresh=refresh,refresh}async runRefresh(frontier){let snapshot=frontier??await this.blockSource.getL2Frontier(),plan=planNextBlock(snapshot,getClockSlot(this.epochCache)),key=computeBoundaryFeeKey(plan,snapshot.pendingChainValidationStatus);if(!key||!plan.newCheckpoint)return;let current=this.current,sameKey=current!==void 0&&boundaryFeeKeyEquals(current.key,key);if(sameKey&&l1SyncPointEquals(current.l1SyncPoint,snapshot.l1SyncPoint)){this.current={...current,refreshedAtMs:this.dateProvider.now()};return}let overrides=await this.buildOverridesPlan(snapshot,plan.newCheckpoint),globals=await this.globalVariableBuilder.buildCheckpointGlobalVariables(EthAddress.ZERO,AztecAddress.ZERO,plan.newCheckpoint.targetSlot,overrides,{blockNumber:snapshot.l1SyncPoint?.blockNumber}),record2={key,l1SyncPoint:snapshot.l1SyncPoint,globals,refreshedAtMs:this.dateProvider.now()};sameKey||(this.previous=current),this.current=record2}findRecord(key){let maxAgeMs=MAX_AGE_INTERVALS*this.refreshIntervalMs,now=this.dateProvider.now();return[this.current,this.previous].find(record2=>record2!==void 0&&boundaryFeeKeyEquals(record2.key,key)&&now-record2.refreshedAtMs<maxAgeMs)}waitFor(promise2,maxWaitMs){return executeTimeout(()=>promise2,maxWaitMs).catch(err=>this.log.debug("Refreshing the next-block boundary fee failed or timed out",err))}buildOverridesPlan(frontier,newCheckpoint){let{targetCheckpoint,proposedCheckpointData,checkpointedCheckpointNumber}=newCheckpoint,rollup=this.rollupContract;if(!rollup)return Promise.resolve(new SimulationOverridesBuilder2().withChainTips({pending:checkpointedCheckpointNumber,proven:checkpointedCheckpointNumber}).build());let validationStatus=frontier.pendingChainValidationStatus,invalidateToPendingCheckpointNumber=!proposedCheckpointData&&!validationStatus.valid?CheckpointNumber(validationStatus.checkpoint.checkpointNumber-1):void 0;return buildCheckpointSimulationOverridesPlan({checkpointNumber:targetCheckpoint,proposedCheckpointData,invalidateToPendingCheckpointNumber,checkpointedCheckpointNumber,rollup,signatureContext:this.signatureContext,log:this.log})}};function l1SyncPointEquals(a,b){return a===void 0||b===void 0?a===b:a.blockHash.equals(b.blockHash)}__name(l1SyncPointEquals,"l1SyncPointEquals");var QUOTE_MAX_WAIT_MS=5e3,NextBlockPredictor=class _NextBlockPredictor{static{__name(this,"NextBlockPredictor")}blockSource;feeCache;epochCache;log;constructor(deps){this.blockSource=deps.blockSource,this.feeCache=deps.feeCache,this.epochCache=deps.epochCache,this.log=deps.log??createLogger("node:next-block-predictor")}static create(deps){let feeCache=new NextBlockFeeCache({...deps,log:deps.log?.createChild("fee-cache")});return new _NextBlockPredictor({blockSource:deps.blockSource,feeCache,epochCache:deps.epochCache,log:deps.log})}start(pollingIntervalMs){this.feeCache.start(pollingIntervalMs)}stop(){return this.feeCache.stop()}async predict(){let{frontier,plan,key}=await this.planFromFrontier(),blockNumber=BlockNumber.add(plan.latestBlockNumber,1);if(!key)return{plan,frontier,globals:this.copyGlobalsFromLatestBlock(frontier,blockNumber)};let checkpointGlobals=await this.feeCache.getBoundaryGlobals(key,frontier);if(!checkpointGlobals)throw new Error(`Could not price the next block at slot ${key.targetSlot}: no boundary fee available`);return{plan,frontier,globals:GlobalVariables.from({blockNumber,...checkpointGlobals})}}async quoteMinFees(){let{frontier,plan,key}=await this.planFromFrontier();if(!key){let fees=frontier.latestBlockHeader?.globalVariables.gasFees;if(!fees){this.log.warn("Cannot quote the next block fee: frontier reports no header for its proposed tip",{blockNumber:plan.latestBlockNumber});return}return{fees,l1SyncPoint:frontier.l1SyncPoint}}let checkpointGlobals=await this.feeCache.getBoundaryGlobals(key,frontier,{maxWaitMs:QUOTE_MAX_WAIT_MS});return checkpointGlobals?{fees:checkpointGlobals.gasFees,l1SyncPoint:frontier.l1SyncPoint}:void 0}async planFromFrontier(){let frontier=await this.blockSource.getL2Frontier(),plan=planNextBlock(frontier,getClockSlot(this.epochCache)),key=computeBoundaryFeeKey(plan,frontier.pendingChainValidationStatus);return{frontier,plan,key}}copyGlobalsFromLatestBlock(frontier,blockNumber){if(!frontier.latestBlockHeader)throw new Error(`Cannot predict the next block: frontier reports proposed tip ${frontier.tips.proposed.number} but carries no header`);return GlobalVariables.from({...frontier.latestBlockHeader.globalVariables,blockNumber})}};var P2PBootstrapApiSchema={getEncodedEnr:external_exports.function({input:external_exports.tuple([]),output:external_exports.string()}),getRoutingTable:external_exports.function({input:external_exports.tuple([]),output:external_exports.array(external_exports.string())})};var ProverAgentStatusSchema=external_exports.discriminatedUnion("status",[external_exports.object({status:external_exports.literal("stopped")}),external_exports.object({status:external_exports.literal("running")}),external_exports.object({status:external_exports.literal("proving"),jobId:external_exports.string(),proofType:external_exports.number(),startedAtISO:external_exports.string()})]),ProverAgentApiSchema={getStatus:external_exports.function({input:external_exports.tuple([]),output:ProverAgentStatusSchema})};var EpochProvingJobState=["initialized","awaiting-checkpoints","awaiting-root","awaiting-predecessor","publishing-proof","completed","superseded","failed","stopped","cancelled","timed-out"];var ProverNodeApiSchema={getJobs:external_exports.function({input:external_exports.tuple([]),output:external_exports.array(external_exports.object({uuid:external_exports.string(),status:external_exports.enum(EpochProvingJobState),epochNumber:external_exports.number()}))}),startProof:external_exports.function({input:external_exports.tuple([schemas2.Integer]),output:external_exports.string()})};function schemaForPublicInputsAndRecursiveProof(inputs,proofSize){return external_exports.object({inputs,proof:RecursiveProof.schemaFor(proofSize),verificationKey:VerificationKeyData.schema})}__name(schemaForPublicInputsAndRecursiveProof,"schemaForPublicInputsAndRecursiveProof");var ProvingJobInputs=external_exports.discriminatedUnion("type",[AvmProvingRequestSchema,external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_BASE),inputs:ParityBasePrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_ROOT),inputs:ParityRootPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_CHONK_VERIFIER),inputs:PublicChonkVerifierPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP),inputs:PrivateTxBaseRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP),inputs:PublicTxBaseRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.TX_MERGE_ROLLUP),inputs:TxMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP),inputs:BlockRootFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP),inputs:BlockRootSingleTxFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP),inputs:BlockRootEmptyTxFirstRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_ROLLUP),inputs:BlockRootRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP),inputs:BlockRootSingleTxRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_MERGE_ROLLUP),inputs:BlockMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP),inputs:CheckpointRootRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP),inputs:CheckpointRootSingleBlockRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP),inputs:CheckpointPaddingRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP),inputs:CheckpointMergeRollupPrivateInputs.schema}),external_exports.object({type:external_exports.literal(ProvingRequestType.ROOT_ROLLUP),inputs:RootRollupPrivateInputs.schema})]);var ProvingJobResult=external_exports.discriminatedUnion("type",[external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_VM),result:RecursiveProof.schemaFor(15516)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_CHONK_VERIFIER),result:schemaForPublicInputsAndRecursiveProof(PublicChonkVerifierPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PRIVATE_TX_BASE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_TX_BASE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.TX_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(TxRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_EMPTY_TX_FIRST_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_ROOT_SINGLE_TX_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.BLOCK_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(BlockRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_ROOT_SINGLE_BLOCK_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_PADDING_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.CHECKPOINT_MERGE_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(CheckpointRollupPublicInputs.schema,480)}),external_exports.object({type:external_exports.literal(ProvingRequestType.ROOT_ROLLUP),result:schemaForPublicInputsAndRecursiveProof(RootRollupPublicInputs.schema,410)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_BASE),result:schemaForPublicInputsAndRecursiveProof(ParityPublicInputs.schema,410)}),external_exports.object({type:external_exports.literal(ProvingRequestType.PARITY_ROOT),result:schemaForPublicInputsAndRecursiveProof(ParityPublicInputs.schema,410)})]),ProvingJobId=external_exports.string(),ProofUri=external_exports.string().transform(value=>value),ProvingJob=external_exports.object({id:ProvingJobId,type:external_exports.nativeEnum(ProvingRequestType),epochNumber:EpochNumberSchema,inputsUri:ProofUri});var ProvingJobFulfilledResult=external_exports.object({status:external_exports.literal("fulfilled"),value:ProofUri}),ProvingJobRejectedResult=external_exports.object({status:external_exports.literal("rejected"),reason:external_exports.string()}),ProvingJobAbortedResult=external_exports.object({status:external_exports.literal("aborted")}),ProvingJobSettledResult=external_exports.discriminatedUnion("status",[ProvingJobFulfilledResult,ProvingJobRejectedResult,ProvingJobAbortedResult]),ProvingJobStatus=external_exports.discriminatedUnion("status",[external_exports.object({status:external_exports.literal("in-queue")}),external_exports.object({status:external_exports.literal("in-progress")}),external_exports.object({status:external_exports.literal("not-found")}),ProvingJobFulfilledResult,ProvingJobRejectedResult,ProvingJobAbortedResult]);var ProvingJobSourceSchema={getProvingJob:external_exports.function({input:external_exports.tuple([]),output:ProvingJob.optional()}),heartbeat:external_exports.function({input:external_exports.tuple([ProvingJobId]),output:external_exports.void()}),resolveProvingJob:external_exports.function({input:external_exports.tuple([ProvingJobId,ProvingJobResult]),output:external_exports.void()}),rejectProvingJob:external_exports.function({input:external_exports.tuple([ProvingJobId,external_exports.string()]),output:external_exports.void()})};async function tryStop(service,logger3){try{return typeof service=="object"&&service&&"stop"in service&&typeof service.stop=="function"?await service.stop():Promise.resolve()}catch(err){logger3?.error(`Error stopping service ${service.constructor?.name}: ${err}`)}}__name(tryStop,"tryStop");var BBCircuitVerifier=class{static{__name(this,"BBCircuitVerifier")}constructor(..._args){throwStub("BBCircuitVerifier")}},BatchChonkVerifier=class{static{__name(this,"BatchChonkVerifier")}constructor(..._args){throwStub("BatchChonkVerifier")}},QueuedIVCVerifier=class{static{__name(this,"QueuedIVCVerifier")}constructor(..._args){throwStub("QueuedIVCVerifier")}};var TestCircuitVerifier=class{static{__name(this,"TestCircuitVerifier")}verificationDelayMs;constructor(verificationDelayMs){this.verificationDelayMs=verificationDelayMs}verifyProof(_tx){return this.verificationDelayMs!==void 0&&this.verificationDelayMs>0?new Promise(resolve=>{setTimeout(()=>{resolve({valid:!0,durationMs:this.verificationDelayMs,totalDurationMs:this.verificationDelayMs})},this.verificationDelayMs)}):Promise.resolve({valid:!0,durationMs:0,totalDurationMs:0})}stop(){return Promise.resolve()}};import{pickL1ContractAddresses}from"@aztec/ethereum/l1-contract-addresses";var import_node_keystore2=__toESM(require_empty_stub(),1),import_actions=__toESM(require_empty_stub(),1),import_p2p2=__toESM(require_empty_stub(),1);var import_validator_client=__toESM(require_empty_stub(),1);async function blockResponseFromL2Block(block,options,context2){let response={header:block.header,archive:block.archive,hash:await block.hash(),checkpointNumber:block.checkpointNumber,indexWithinCheckpoint:block.indexWithinCheckpoint,number:block.number};return options.includeTransactions&&(response.body=block.body),options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(context2?.l1)),options.includeAttestations&&(response.attestations=context2?.attestations??[]),response}__name(blockResponseFromL2Block,"blockResponseFromL2Block");function blockResponseFromBlockData(data,options,context2){let response={header:data.header,archive:data.archive,hash:data.blockHash,checkpointNumber:data.checkpointNumber,indexWithinCheckpoint:data.indexWithinCheckpoint,number:data.header.getBlockNumber()};return options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(context2?.l1)),options.includeAttestations&&(response.attestations=context2?.attestations??[]),response}__name(blockResponseFromBlockData,"blockResponseFromBlockData");async function checkpointResponseFromPublishedCheckpoint(pc,options){let response={number:pc.checkpoint.number,header:pc.checkpoint.header,archive:pc.checkpoint.archive,checkpointOutHash:pc.checkpoint.getCheckpointOutHash(),startBlock:pc.checkpoint.blocks[0]?.number??BlockNumber.ZERO,blockCount:pc.checkpoint.blocks.length,feeAssetPriceModifier:pc.checkpoint.feeAssetPriceModifier};return options.includeBlocks&&(response.blocks=await Promise.all(pc.checkpoint.blocks.map(block=>blockResponseFromL2Block(block,{includeTransactions:options.includeTransactions,includeL1PublishInfo:!1,includeAttestations:!1})))),options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(pc.l1)),options.includeAttestations&&(response.attestations=pc.attestations),response}__name(checkpointResponseFromPublishedCheckpoint,"checkpointResponseFromPublishedCheckpoint");function checkpointResponseFromCheckpointData(cd,options){let response={number:cd.checkpointNumber,header:cd.header,archive:cd.archive,checkpointOutHash:cd.checkpointOutHash,startBlock:cd.startBlock,blockCount:cd.blockCount,feeAssetPriceModifier:cd.feeAssetPriceModifier};return options.includeL1PublishInfo&&(response.l1=l1PublishInfoFromL1PublishedData(cd.l1)),options.includeAttestations&&(response.attestations=cd.attestations),response}__name(checkpointResponseFromCheckpointData,"checkpointResponseFromCheckpointData");async function projectProposedToCheckpointResponse(proposed,options,blocks){if(options.includeL1PublishInfo||options.includeAttestations)throw new Error("Proposed checkpoints have no L1 publish info or attestations");let response={number:proposed.checkpointNumber,header:proposed.header,archive:proposed.archive,checkpointOutHash:proposed.checkpointOutHash,startBlock:proposed.startBlock,blockCount:proposed.blockCount,feeAssetPriceModifier:proposed.feeAssetPriceModifier};if(options.includeBlocks){if(!blocks)throw new Error("Blocks must be supplied when includeBlocks is true");response.blocks=await Promise.all(blocks.map(block=>blockResponseFromL2Block(block,{includeTransactions:options.includeTransactions,includeL1PublishInfo:!1,includeAttestations:!1})))}return response}__name(projectProposedToCheckpointResponse,"projectProposedToCheckpointResponse");function isBlockTag(value){return BlockTag.includes(value)}__name(isBlockTag,"isBlockTag");function isCheckpointTag(value){return value==="checkpointed"||value==="proven"||value==="finalized"}__name(isCheckpointTag,"isCheckpointTag");function normalizeBlockParameter(param){if(BlockHash.isBlockHash(param))return{hash:param};if(typeof param=="number")return{number:param};if(typeof param=="string"){if(isBlockTag(param))return{tag:param==="latest"?"proposed":param};throw new BadRequestError(`Invalid BlockParameter tag: ${param}`)}if(typeof param=="object"&¶m!==null){if("number"in param)return{number:param.number};if("hash"in param)return{hash:param.hash};if("archive"in param)return{archive:param.archive};if("tag"in param){if(isBlockTag(param.tag))return{tag:param.tag};throw new BadRequestError(`Invalid BlockParameter tag: ${param.tag}`)}}throw new BadRequestError(`Invalid BlockParameter: ${JSON.stringify(param)}`)}__name(normalizeBlockParameter,"normalizeBlockParameter");async function resolveCheckpointParameter(param,blockSource){if(typeof param=="number")return{number:param};if(isCheckpointTag(param)){let tips=await blockSource.getL2Tips();switch(param){case"checkpointed":return{number:tips.checkpointed.checkpoint.number};case"proven":return{number:tips.proven.checkpoint.number};case"finalized":return{number:tips.finalized.checkpoint.number}}}if(typeof param=="object"&¶m!==null){if("number"in param)return{number:param.number};if("slot"in param)return{slot:param.slot}}throw new BadRequestError(`Invalid CheckpointParameter: ${JSON.stringify(param)}`)}__name(resolveCheckpointParameter,"resolveCheckpointParameter");var NodeBlockProvider=class{static{__name(this,"NodeBlockProvider")}blockSource;holdOff;constructor(blockSource,holdOff){this.blockSource=blockSource,this.holdOff=holdOff}async getBlock(param,options={}){let query=normalizeBlockParameter(param),wantTxs=!!options.includeTransactions,wantContext=!!options.includeL1PublishInfo||!!options.includeAttestations;if(wantTxs){let block=await this.holdOff.getBlock(query);if(!block)return;let ctx2=wantContext?await this.#getCheckpointContext(block.checkpointNumber):void 0;return await blockResponseFromL2Block(block,options,ctx2)}let data=await this.holdOff.getBlockData(query);if(!data)return;let ctx=wantContext?await this.#getCheckpointContext(data.checkpointNumber):void 0;return blockResponseFromBlockData(data,options,ctx)}getBlockData(param){let query=normalizeBlockParameter(param);return this.holdOff.getBlockData(query)}async getBlocks(from,limit,options={}){let wantTxs=!!options.includeTransactions,wantContext=!!options.includeL1PublishInfo||!!options.includeAttestations,onlyCheckpointed=!!options.onlyCheckpointed;if(wantTxs){let blocks=await this.blockSource.getBlocks({from,limit,onlyCheckpointed}),ctxByCheckpoint2=await this.#getCheckpointContextsForBlocks(wantContext?blocks:[]);return await Promise.all(blocks.map(block=>blockResponseFromL2Block(block,options,ctxByCheckpoint2.get(block.checkpointNumber))))}let dataItems=await this.blockSource.getBlocksData({from,limit,onlyCheckpointed}),ctxByCheckpoint=await this.#getCheckpointContextsForBlocks(wantContext?dataItems:[]);return await Promise.all(dataItems.map(data=>blockResponseFromBlockData(data,options,ctxByCheckpoint.get(data.checkpointNumber))))}async getCheckpoint(param,options={}){let query=await resolveCheckpointParameter(param,this.blockSource),confirmed=options.includeBlocks?await this.blockSource.getCheckpoint(query):await this.blockSource.getCheckpointData(query);if(confirmed)return await(options.includeBlocks?checkpointResponseFromPublishedCheckpoint(confirmed,options):checkpointResponseFromCheckpointData(confirmed,options));let proposed=await this.blockSource.getProposedCheckpointData(query);if(proposed){if(options.includeAttestations||options.includeL1PublishInfo)throw new BadRequestError("Options includeL1PublishInfo or includeAttestations cannot be satisfied for a proposed checkpoint");let blocks=options.includeBlocks?await this.blockSource.getBlocks({from:proposed.startBlock,limit:proposed.blockCount}):void 0;return await projectProposedToCheckpointResponse(proposed,options,blocks)}}async getCheckpoints(from,limit,options={}){if(options.includeBlocks){let checkpoints=await this.blockSource.getCheckpoints({from,limit});return await Promise.all(checkpoints.map(cp=>checkpointResponseFromPublishedCheckpoint(cp,options)))}return(await this.blockSource.getCheckpointsData({from,limit})).map(d=>checkpointResponseFromCheckpointData(d,options))}async#getCheckpointContext(checkpointNumber){let checkpoint=await this.blockSource.getCheckpointData({number:checkpointNumber});if(checkpoint)return{l1:checkpoint.l1,attestations:checkpoint.attestations}}async#getCheckpointContextsForBlocks(blocks){let unique2=Array.from(new Set(blocks.map(b=>b.checkpointNumber))),entries=await Promise.all(unique2.map(async n=>[n,await this.#getCheckpointContext(n)]));return new Map(entries)}};var NodeTxReceiptBuilder=class{static{__name(this,"NodeTxReceiptBuilder")}p2pClient;blockSource;debugLogStore;constructor(deps){this.p2pClient=deps.p2pClient,this.blockSource=deps.blockSource,this.debugLogStore=deps.debugLogStore}async getTxReceipt(txHash,options){let txPoolStatus=await this.p2pClient.getTxStatus(txHash),isKnownToPool=txPoolStatus==="pending"||txPoolStatus==="mined",indexed=await this.blockSource.getTxEffect(txHash),receipt;if(indexed)receipt=await this.#assembleMinedReceipt(indexed,options);else if(isKnownToPool){let tx;options?.includePendingTx&&(tx=await this.p2pClient.getTxByHashFromPool(txHash,{includeProof:!!options.includeProof})),receipt=new PendingTxReceipt(txHash,tx)}else receipt=new DroppedTxReceipt(txHash,"Tx dropped by P2P node");return this.debugLogStore.decorateReceiptWithLogs(txHash.toString(),receipt),receipt}async#assembleMinedReceipt(indexed,options){let blockNumber=indexed.l2BlockNumber,[tips,l1Constants]=await Promise.all([this.blockSource.getL2Tips(),this.blockSource.getL1Constants()]),status=this.#deriveMinedStatus(blockNumber,tips),epochNumber=getEpochAtSlot(indexed.slotNumber,l1Constants);return new MinedTxReceipt(indexed.data.txHash,status,MinedTxReceipt.executionResultFromRevertCode(indexed.data.revertCode),indexed.data.transactionFee.toBigInt(),indexed.l2BlockHash,blockNumber,indexed.slotNumber,indexed.txIndexInBlock,epochNumber,options?.includeTxEffect?indexed.data:void 0,void 0)}#deriveMinedStatus(blockNumber,tips){return blockNumber<=tips.finalized.block.number?TxStatus.FINALIZED:blockNumber<=tips.proven.block.number?TxStatus.PROVEN:blockNumber<=tips.checkpointed.block.number?TxStatus.CHECKPOINTED:TxStatus.PROPOSED}};var WorldStateSynchronizerError=class extends Error{static{__name(this,"WorldStateSynchronizerError")}constructor(message,options){super(message,options),this.name="WorldStateSynchronizerError"}};var WORLD_STATE_SYNC_ATTEMPTS=3,WORLD_STATE_SYNC_RETRY_DELAY_MS=100,NodeWorldStateQueries=class{static{__name(this,"NodeWorldStateQueries")}worldStateSynchronizer;blockSource;l1ToL2MessageSource;holdOff;log;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.blockSource=deps.blockSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.holdOff=deps.holdOff,this.log=deps.log??createLogger("node:world-state-queries")}async findLeavesIndexes(referenceBlock,treeId,leafValues){let committedDb=await this.getWorldState(referenceBlock),maybeIndices=await committedDb.findLeafIndices(treeId,leafValues.map(x=>x.toBuffer())),definedIndices=maybeIndices.filter(x=>x!==void 0),blockNumbers=await committedDb.getBlockNumbersForLeafIndices(treeId,definedIndices),indexToBlockNumber=new Map;for(let i=0;i<definedIndices.length;i++){let blockNumber=blockNumbers[i];if(blockNumber===void 0)throw new Error(`Block number is undefined for leaf index ${definedIndices[i]} in tree ${MerkleTreeId[treeId]}`);indexToBlockNumber.set(definedIndices[i],blockNumber)}let uniqueBlockNumbers=[...new Set(indexToBlockNumber.values())],blockHashes=await Promise.all(uniqueBlockNumbers.map(blockNumber=>committedDb.getLeafValue(MerkleTreeId.ARCHIVE,BigInt(blockNumber)))),blockNumberToHash=new Map;for(let i=0;i<uniqueBlockNumbers.length;i++){let blockHash=blockHashes[i];if(blockHash===void 0)throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);blockNumberToHash.set(uniqueBlockNumbers[i],blockHash)}return maybeIndices.map(index=>{if(index===void 0)return;let blockNumber=indexToBlockNumber.get(index);if(blockNumber===void 0)throw new Error(`Block number not found for leaf index ${index} in tree ${MerkleTreeId[treeId]}`);let l2BlockHash=blockNumberToHash.get(blockNumber);if(l2BlockHash===void 0)throw new Error(`Block hash not found for block number ${blockNumber}`);return{l2BlockNumber:blockNumber,l2BlockHash,data:index}})}async getBlockHashMembershipWitness(referenceBlock,blockHash){let query=normalizeBlockParameter(referenceBlock),referenceBlockNumber="number"in query?query.number:(await this.#resolveBlockNumberAndHash(query)).blockNumber;if(referenceBlockNumber===BlockNumber.ZERO)return;let committedDb=await this.getWorldState(BlockNumber(referenceBlockNumber-1)),[pathAndIndex]=await committedDb.findSiblingPaths(MerkleTreeId.ARCHIVE,[blockHash]);return pathAndIndex===void 0?void 0:MembershipWitness.fromSiblingPath(pathAndIndex.index,pathAndIndex.path)}async getNoteHashMembershipWitness(referenceBlock,noteHash){let committedDb=await this.getWorldState(referenceBlock),[pathAndIndex]=await committedDb.findSiblingPaths(MerkleTreeId.NOTE_HASH_TREE,[noteHash]);return pathAndIndex===void 0?void 0:MembershipWitness.fromSiblingPath(pathAndIndex.index,pathAndIndex.path)}async getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){let db=await this.getWorldState(referenceBlock),[witness]=await db.findSiblingPaths(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,[l1ToL2Message]);if(witness)return[witness.index,witness.path]}async getL1ToL2MessageCheckpoint(l1ToL2Message){let messageIndex=await this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message);return messageIndex!==void 0?InboxLeaf.checkpointNumberFromIndex(messageIndex):void 0}async getL2ToL1Messages(epoch){let blocks=await this.blockSource.getBlocks({epoch,onlyCheckpointed:!0});return chunkBy(blocks,block=>block.header.globalVariables.slotNumber).map(slotBlocks=>slotBlocks.map(block=>block.body.txEffects.map(txEffect=>txEffect.l2ToL1Msgs)))}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.blockSource.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}async getNullifierMembershipWitness(referenceBlock,nullifier){let db=await this.getWorldState(referenceBlock),[witness]=await db.findSiblingPaths(MerkleTreeId.NULLIFIER_TREE,[nullifier.toBuffer()]);if(!witness)return;let{index,path}=witness,leafPreimage=await db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index);if(leafPreimage)return new NullifierMembershipWitness(index,leafPreimage,path)}async getLowNullifierMembershipWitness(referenceBlock,nullifier){let committedDb=await this.getWorldState(referenceBlock),findResult=await committedDb.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE,nullifier.toBigInt());if(!findResult)return;let{index,alreadyPresent}=findResult;if(alreadyPresent)throw new Error(`Cannot prove nullifier non-inclusion: nullifier ${nullifier.toBigInt()} already exists in the tree`);let preimageData=await committedDb.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index),siblingPath=await committedDb.getSiblingPath(MerkleTreeId.NULLIFIER_TREE,BigInt(index));return new NullifierMembershipWitness(BigInt(index),preimageData,siblingPath)}async getPublicDataWitness(referenceBlock,leafSlot){let committedDb=await this.getWorldState(referenceBlock),lowLeafResult=await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt());if(lowLeafResult){let preimage=await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index),path=await committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);return new PublicDataWitness(lowLeafResult.index,preimage,path)}else return}async getPublicStorageAt(referenceBlock,contract,slot){let committedDb=await this.getWorldState(referenceBlock),leafSlot=await computePublicDataTreeLeafSlot(contract,slot),lowLeafResult=await committedDb.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot.toBigInt());return!lowLeafResult||!lowLeafResult.alreadyPresent?Fr.ZERO:(await committedDb.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index)).leaf.value}async getWorldState(block){let query=normalizeBlockParameter(block);if("tag"in query&&query.tag==="proposed")return this.log.debug("Using committed db for latest block"),await this.worldStateSynchronizer.syncImmediate(),this.worldStateSynchronizer.getCommitted();let resolved=await this.#resolveBlockNumberAndHash(query);for(let attempt=1;;attempt++)try{return await this.#resolveWorldState(resolved)}catch(err){if(attempt>=WORLD_STATE_SYNC_ATTEMPTS||!(err instanceof WorldStateSynchronizerError))throw err;this.log.verbose(`Retrying world state query after sync failure: ${err.message}`,{attempt,block:inspectBlockParameter(block)}),await sleep(WORLD_STATE_SYNC_RETRY_DELAY_MS),resolved=await this.#resolveBlockNumberAndHash(query,{holdOff:!1})}}async#resolveWorldState({blockNumber,blockHash}){let blockSyncedTo=await this.worldStateSynchronizer.syncImmediate(blockNumber,blockHash);return this.log.debug(`Using verified snapshot for block ${blockNumber}, world state synced upto ${blockSyncedTo}`),await this.worldStateSynchronizer.getVerifiedSnapshot(blockNumber,blockHash)}async#resolveBlockNumberAndHash(query,opts={}){let blockData=await this.holdOff.getBlockData(query,opts);return blockData===void 0&&this.#throwOnUndefinedBlockData(query),{blockNumber:blockData.header.getBlockNumber(),blockHash:blockData.blockHash}}#throwOnUndefinedBlockData(query){throw"hash"in query?new Error(`Block hash ${query.hash.toString()} not found when resolving query. If the node API has been queried with anchor block hash possibly a reorg has occurred.`):"archive"in query?new Error(`Block with archive ${query.archive.toString()} not found when resolving query.`):new WorldStateSynchronizerError(`Block not found for ${inspectBlockParameter(query)} when resolving query.`)}};var MAX_SLEEP_MS=1e3,MAX_CONCURRENT_HOLDS=100,UnseenBlockHoldOff=class{static{__name(this,"UnseenBlockHoldOff")}blockSource;config;activeHolds;log;wakeup;constructor(blockSource,config2,log2){this.blockSource=blockSource,this.config=config2,this.activeHolds=0,this.log=log2??createLogger("node:unseen-block-hold-off");let emitter=getBlockSourceEmitter(blockSource);if(emitter===void 0)this.log.verbose("Block source reports no updates, queries for unseen blocks will not be held off");else{let wakeup=new InterruptibleSleep;this.wakeup=wakeup,emitter.on(L2BlockSourceEvents.L2BlockSourceUpdated,()=>wakeup.interrupt())}}get holds(){return this.activeHolds}getBlockData(query,opts={}){return this.#readWithHoldOff(query,q=>this.blockSource.getBlockData(q),opts)}getBlock(query,opts={}){return this.#readWithHoldOff(query,q=>this.blockSource.getBlock(q),opts)}async#readWithHoldOff(query,read2,opts){let value=await read2(query);return value!==void 0||opts.holdOff===!1?value:await this.#waitForBlock(query,await this.#resolveWaitBudgetMs(query))?await read2(query):void 0}async#waitForBlock(query,waitMs){let wakeup=this.wakeup;if(wakeup===void 0||!Number.isFinite(waitMs)||waitMs<=0)return!1;let blockParameter=inspectBlockParameter(query);if(this.activeHolds>=MAX_CONCURRENT_HOLDS)return this.log.verbose("Not holding off query for unseen block, too many requests already held",{blockParameter,holds:this.activeHolds}),!1;this.activeHolds++;let timer=new Timer;try{for(this.log.verbose("Holding off query for unseen block",{blockParameter,waitMs,holds:this.activeHolds});timer.ms()<waitMs;){await wakeup.sleep(Math.min(waitMs-timer.ms(),MAX_SLEEP_MS));let data=await this.blockSource.getBlockData(query);if(data!==void 0)return this.log.verbose(`Unseen block arrived after ${timer.ms()}ms`,{blockParameter,blockNumber:data.header.getBlockNumber(),elapsedMs:timer.ms()}),!0}return this.log.verbose(`Gave up waiting for unseen block after ${timer.ms()}ms`,{blockParameter,waitMs,elapsedMs:timer.ms()}),!1}finally{this.activeHolds--}}async#resolveWaitBudgetMs(query){if("tag"in query)return 0;if("number"in query){let tip=await this.blockSource.getBlockNumber();return query.number===tip+1?this.config.byNumberWaitMs:0}return"hash"in query&&this.#isGenesisBlockHash(query.hash)?0:this.config.byHashWaitMs}#isGenesisBlockHash(hash5){return hash5.equals(this.blockSource.getGenesisBlockHash())}};var NodeMetrics=class{static{__name(this,"NodeMetrics")}constructor(_client,_name){}receivedTx(_durationMs,_isAccepted){throwStub("NodeMetrics.receivedTx")}recordSnapshot(_durationMs){throwStub("NodeMetrics.recordSnapshot")}recordSnapshotError(){throwStub("NodeMetrics.recordSnapshotError")}};async function applyPublicDataOverrides(fork,publicStorage){if(!publicStorage?.length)return;let writes=await Promise.all(publicStorage.map(async o=>{let leafSlot=await computePublicDataTreeLeafSlot(o.contract,o.slot);return new PublicDataWrite(leafSlot,o.value)}));await fork.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,writes.map(w=>w.toBuffer()))}__name(applyPublicDataOverrides,"applyPublicDataOverrides");function _ts_add_disposable_resource(env2,value,async){if(value!=null){if(typeof value!="object"&&typeof value!="function")throw new TypeError("Object expected.");var dispose,inner;if(async){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");dispose=value[Symbol.asyncDispose]}if(dispose===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");dispose=value[Symbol.dispose],async&&(inner=dispose)}if(typeof dispose!="function")throw new TypeError("Object not disposable.");inner&&(dispose=__name(function(){try{inner.call(this)}catch(e2){return Promise.reject(e2)}},"dispose")),env2.stack.push({value,dispose,async})}else async&&env2.stack.push({async:!0});return value}__name(_ts_add_disposable_resource,"_ts_add_disposable_resource");function _ts_dispose_resources(env2){var _SuppressedError=typeof SuppressedError=="function"?SuppressedError:function(error2,suppressed,message){var e2=new Error(message);return e2.name="SuppressedError",e2.error=error2,e2.suppressed=suppressed,e2};return(_ts_dispose_resources=__name(function(env3){function fail(e2){env3.error=env3.hasError?new _SuppressedError(e2,env3.error,"An error was suppressed during disposal."):e2,env3.hasError=!0}__name(fail,"fail");var r2,s2=0;function next(){for(;r2=env3.stack.pop();)try{if(!r2.async&&s2===1)return s2=0,env3.stack.push(r2),Promise.resolve().then(next);if(r2.dispose){var result=r2.dispose.call(r2.value);if(r2.async)return s2|=2,Promise.resolve(result).then(next,function(e2){return fail(e2),next()})}else s2|=1}catch(e2){fail(e2)}if(s2===1)return env3.hasError?Promise.reject(env3.error):Promise.resolve();if(env3.hasError)throw env3.error}return __name(next,"next"),next()},"_ts_dispose_resources"))(env2)}__name(_ts_dispose_resources,"_ts_dispose_resources");var MAX_PREDICTION_ATTEMPTS=2,NodePublicCallsSimulator=class{static{__name(this,"NodePublicCallsSimulator")}worldStateSynchronizer;l1ToL2MessageSource;contractDataSource;predictor;config;telemetry;log;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.contractDataSource=deps.contractDataSource,this.predictor=deps.predictor,this.config=deps.config,this.telemetry=deps.telemetry??getTelemetryClient(),this.log=deps.log??createLogger("node:public-calls-simulator")}async simulate(tx,skipFeeEnforcement=!1,overrides){let env2={stack:[],error:void 0,hasError:!1};try{let gasSettings=tx.data.constants.txContext.gasSettings,txGasLimit=gasSettings.gasLimits.l2Gas,teardownGasLimit=gasSettings.teardownGasLimits.l2Gas;if(txGasLimit+teardownGasLimit>this.config.rpcSimulatePublicMaxGasLimit)throw new BadRequestError(`Transaction total gas limit ${txGasLimit+teardownGasLimit} (${txGasLimit} + ${teardownGasLimit}) exceeds maximum gas limit ${this.config.rpcSimulatePublicMaxGasLimit} for simulation`);let txHash=tx.getTxHash(),{plan,globals,messages}=await this.prepareNextBlock(),publicProcessorFactory=new PublicProcessorFactory(this.contractDataSource,new DateProvider,this.telemetry,this.log.getBindings());this.log.verbose(`Simulating public calls for tx ${txHash}`,{globalVariables:globals.toInspect(),txHash,blockNumber:globals.blockNumber,atCheckpointBoundary:plan.newCheckpoint!==void 0});let merkleTreeFork=_ts_add_disposable_resource(env2,await this.worldStateSynchronizer.fork(plan.latestBlockNumber),!0);messages!==void 0&&(this.log.debug(`Appending ${messages.length} L1-to-L2 messages to the world state tree for the next checkpoint`,{checkpointNumber:plan.newCheckpoint?.targetCheckpoint}),await appendL1ToL2MessagesToTree(merkleTreeFork,messages)),await applyPublicDataOverrides(merkleTreeFork,overrides?.publicStorage);let config2=PublicSimulatorConfig.from({skipFeeEnforcement,collectDebugLogs:!0,collectHints:!1,collectCallMetadata:!0,collectStatistics:!1,collectionLimits:CollectionLimitsConfig.from({maxDebugLogMemoryReads:this.config.rpcSimulatePublicMaxDebugLogMemoryReads})}),contractsDB=new PublicContractsDB(this.contractDataSource,this.log.getBindings());overrides?.contracts&&contractsDB.addContracts(Object.values(overrides.contracts).map(({instance})=>instance));let processor=publicProcessorFactory.create(merkleTreeFork,globals,config2,contractsDB),[processedTxs,failedTxs,_usedTxs,returns,debugLogs]=await processor.process([tx]);if(failedTxs.length)throw this.log.warn(`Simulated tx ${txHash} fails: ${failedTxs[0].error}`,{txHash}),failedTxs[0].error;let[processedTx]=processedTxs;return new PublicSimulationOutput(processedTx.revertReason,processedTx.globalVariables,processedTx.txEffect,returns,processedTx.gasUsed,debugLogs)}catch(e2){env2.error=e2,env2.hasError=!0}finally{let result=_ts_dispose_resources(env2);result&&await result}}async prepareNextBlock(){for(let attempt=0;attempt<MAX_PREDICTION_ATTEMPTS;attempt++){let{plan,globals}=await this.predictor.predict();try{let[,messages]=await Promise.all([this.worldStateSynchronizer.syncImmediate(plan.latestBlockNumber,BlockHash.fromString(plan.latestBlockHash)),this.getNextCheckpointMessages(plan.newCheckpoint?.targetCheckpoint)]);return{plan,globals,messages}}catch(err){if(!isBlockHashMismatch(err))throw err;this.log.warn("World state disagrees with the planned next block, replanning",{blockNumber:plan.latestBlockNumber,blockHash:plan.latestBlockHash,error:err.message})}}throw new Error("Cannot simulate public calls: world state and archiver disagree on the latest block (prune race), retry")}async getNextCheckpointMessages(targetCheckpoint){if(targetCheckpoint!==void 0)try{return await this.l1ToL2MessageSource.getL1ToL2Messages(targetCheckpoint)}catch(err){isErrorClass(err,L1ToL2MessagesNotReadyError2)?this.log.warn(`L1-to-L2 messages for checkpoint ${targetCheckpoint} are not ready yet (simulating without them)`,{checkpointNumber:targetCheckpoint}):this.log.error(`Failed to get L1-to-L2 messages for checkpoint ${targetCheckpoint} (simulating without them)`,err,{checkpointNumber:targetCheckpoint});return}}};function isBlockHashMismatch(err){return isErrorClass(err,WorldStateSynchronizerError)&&typeof err.cause=="object"&&err.cause!==null&&"reason"in err.cause&&err.cause.reason==="block_hash_mismatch"}__name(isBlockHashMismatch,"isBlockHashMismatch");function applyDecs2203RFactory3(){function createAddInitializerMethod(initializers,decoratorFinishedRef){return __name(function(initializer3){assertNotFinished(decoratorFinishedRef,"addInitializer"),assertCallable(initializer3,"An initializer"),initializers.push(initializer3)},"addInitializer")}__name(createAddInitializerMethod,"createAddInitializerMethod");function memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,metadata,value){var kindStr;switch(kind){case 1:kindStr="accessor";break;case 2:kindStr="method";break;case 3:kindStr="getter";break;case 4:kindStr="setter";break;default:kindStr="field"}var ctx={kind:kindStr,name:isPrivate?"#"+name:name,static:isStatic,private:isPrivate,metadata},decoratorFinishedRef={v:!1};ctx.addInitializer=createAddInitializerMethod(initializers,decoratorFinishedRef);var get,set2;kind===0?isPrivate?(get=desc.get,set2=desc.set):(get=__name(function(){return this[name]},"get"),set2=__name(function(v){this[name]=v},"set")):kind===2?get=__name(function(){return desc.value},"get"):((kind===1||kind===3)&&(get=__name(function(){return desc.get.call(this)},"get")),(kind===1||kind===4)&&(set2=__name(function(v){desc.set.call(this,v)},"set"))),ctx.access=get&&set2?{get,set:set2}:get?{get}:{set:set2};try{return dec(value,ctx)}finally{decoratorFinishedRef.v=!0}}__name(memberDec,"memberDec");function assertNotFinished(decoratorFinishedRef,fnName){if(decoratorFinishedRef.v)throw new Error("attempted to call "+fnName+" after decoration was finished")}__name(assertNotFinished,"assertNotFinished");function assertCallable(fn,hint){if(typeof fn!="function")throw new TypeError(hint+" must be a function")}__name(assertCallable,"assertCallable");function assertValidReturnValue(kind,value){var type=typeof value;if(kind===1){if(type!=="object"||value===null)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");value.get!==void 0&&assertCallable(value.get,"accessor.get"),value.set!==void 0&&assertCallable(value.set,"accessor.set"),value.init!==void 0&&assertCallable(value.init,"accessor.init")}else if(type!=="function"){var hint;throw kind===0?hint="field":kind===10?hint="class":hint="method",new TypeError(hint+" decorators must return a function or void 0")}}__name(assertValidReturnValue,"assertValidReturnValue");function applyMemberDec(ret2,base,decInfo,name,kind,isStatic,isPrivate,initializers,metadata){var decs=decInfo[0],desc,init2,value;isPrivate?kind===0||kind===1?desc={get:decInfo[3],set:decInfo[4]}:kind===3?desc={get:decInfo[3]}:kind===4?desc={set:decInfo[3]}:desc={value:decInfo[3]}:kind!==0&&(desc=Object.getOwnPropertyDescriptor(base,name)),kind===1?value={get:desc.get,set:desc.set}:kind===2?value=desc.value:kind===3?value=desc.get:kind===4&&(value=desc.set);var newValue,get,set2;if(typeof decs=="function")newValue=memberDec(decs,name,desc,initializers,kind,isStatic,isPrivate,metadata,value),newValue!==void 0&&(assertValidReturnValue(kind,newValue),kind===0?init2=newValue:kind===1?(init2=newValue.init,get=newValue.get||value.get,set2=newValue.set||value.set,value={get,set:set2}):value=newValue);else for(var i=decs.length-1;i>=0;i--){var dec=decs[i];if(newValue=memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,metadata,value),newValue!==void 0){assertValidReturnValue(kind,newValue);var newInit;kind===0?newInit=newValue:kind===1?(newInit=newValue.init,get=newValue.get||value.get,set2=newValue.set||value.set,value={get,set:set2}):value=newValue,newInit!==void 0&&(init2===void 0?init2=newInit:typeof init2=="function"?init2=[init2,newInit]:init2.push(newInit))}}if(kind===0||kind===1){if(init2===void 0)init2=__name(function(instance,init3){return init3},"init");else if(typeof init2!="function"){var ownInitializers=init2;init2=__name(function(instance,init3){for(var value2=init3,i2=0;i2<ownInitializers.length;i2++)value2=ownInitializers[i2].call(instance,value2);return value2},"init")}else{var originalInitializer=init2;init2=__name(function(instance,init3){return originalInitializer.call(instance,init3)},"init")}ret2.push(init2)}kind!==0&&(kind===1?(desc.get=value.get,desc.set=value.set):kind===2?desc.value=value:kind===3?desc.get=value:kind===4&&(desc.set=value),isPrivate?kind===1?(ret2.push(function(instance,args){return value.get.call(instance,args)}),ret2.push(function(instance,args){return value.set.call(instance,args)})):kind===2?ret2.push(value):ret2.push(function(instance,args){return value.call(instance,args)}):Object.defineProperty(base,name,desc))}__name(applyMemberDec,"applyMemberDec");function applyMemberDecs(Class2,decInfos,metadata){for(var ret2=[],protoInitializers,staticInitializers,existingProtoNonFields=new Map,existingStaticNonFields=new Map,i=0;i<decInfos.length;i++){var decInfo=decInfos[i];if(Array.isArray(decInfo)){var kind=decInfo[1],name=decInfo[2],isPrivate=decInfo.length>3,isStatic=kind>=5,base,initializers;if(isStatic?(base=Class2,kind=kind-5,staticInitializers=staticInitializers||[],initializers=staticInitializers):(base=Class2.prototype,protoInitializers=protoInitializers||[],initializers=protoInitializers),kind!==0&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(existingKind===!0||existingKind===3&&kind!==4||existingKind===4&&kind!==3)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret2,base,decInfo,name,kind,isStatic,isPrivate,initializers,metadata)}}return pushInitializers(ret2,protoInitializers),pushInitializers(ret2,staticInitializers),ret2}__name(applyMemberDecs,"applyMemberDecs");function pushInitializers(ret2,initializers){initializers&&ret2.push(function(instance){for(var i=0;i<initializers.length;i++)initializers[i].call(instance);return instance})}__name(pushInitializers,"pushInitializers");function applyClassDecs(targetClass,classDecs,metadata){if(classDecs.length>0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef),metadata})}finally{decoratorFinishedRef.v=!0}nextNewClass!==void 0&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}return[defineMetadata(newClass,metadata),function(){for(var i2=0;i2<initializers.length;i2++)initializers[i2].call(newClass)}]}}__name(applyClassDecs,"applyClassDecs");function defineMetadata(Class2,metadata){return Object.defineProperty(Class2,Symbol.metadata||Symbol.for("Symbol.metadata"),{configurable:!0,enumerable:!0,value:metadata})}return __name(defineMetadata,"defineMetadata"),__name(function(targetClass,memberDecs,classDecs,parentClass){if(parentClass!==void 0)var parentMetadata=parentClass[Symbol.metadata||Symbol.for("Symbol.metadata")];var metadata=Object.create(parentMetadata===void 0?null:parentMetadata),e2=applyMemberDecs(targetClass,memberDecs,metadata);return classDecs.length||defineMetadata(targetClass,metadata),{e:e2,get c(){return applyClassDecs(targetClass,classDecs,metadata)}}},"applyDecs2203R")}__name(applyDecs2203RFactory3,"applyDecs2203RFactory");function _apply_decs_2203_r3(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r3=applyDecs2203RFactory3())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r3,"_apply_decs_2203_r");var _dec3,_initProto3;_dec3=trackSpan("AztecNodeService.simulatePublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var AztecNodeService=class{static{__name(this,"AztecNodeService")}static{({e:[_initProto3]}=_apply_decs_2203_r3(this,[[_dec3,2,"simulatePublicCalls"]],[]))}metrics;isUploadingSnapshot=(_initProto3(this),!1);sequencerPausedMinTxsPerBlock;nodePublicCallsSimulator;worldStateQueries;blockProvider;unseenBlockHoldOff;txReceiptBuilder;tracer;config;p2pClient;blockSource;logsSource;contractDataSource;l1ToL2MessageSource;worldStateSynchronizer;sequencer;proverNode;slasherClient;validatorsSentinel;stopStartedWatchers;l1ChainId;version;globalVariableBuilder;rollupContract;feeProvider;nextBlockPredictor;epochCache;packageVersion;peerProofVerifier;rpcProofVerifier;telemetry;log;blobClient;validatorClient;keyStoreManager;debugLogStore;automineSequencer;constructor(deps){if(this.config=deps.config,this.p2pClient=deps.p2pClient,this.blockSource=deps.blockSource,this.logsSource=deps.logsSource,this.contractDataSource=deps.contractDataSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.worldStateSynchronizer=deps.worldStateSynchronizer,this.sequencer=deps.sequencer,this.proverNode=deps.proverNode,this.slasherClient=deps.slasherClient,this.validatorsSentinel=deps.validatorsSentinel,this.stopStartedWatchers=deps.stopStartedWatchers,this.l1ChainId=deps.l1ChainId,this.version=deps.version,this.globalVariableBuilder=deps.globalVariableBuilder,this.rollupContract=deps.rollupContract,this.feeProvider=deps.feeProvider,this.nextBlockPredictor=deps.nextBlockPredictor,this.epochCache=deps.epochCache,this.packageVersion=deps.packageVersion,this.peerProofVerifier=deps.peerProofVerifier,this.rpcProofVerifier=deps.rpcProofVerifier,this.telemetry=deps.telemetry??getTelemetryClient(),this.log=deps.log??createLogger("node"),this.blobClient=deps.blobClient,this.validatorClient=deps.validatorClient,this.keyStoreManager=deps.keyStoreManager,this.debugLogStore=deps.debugLogStore??new NullDebugLogStore,this.automineSequencer=deps.automineSequencer,this.metrics=new NodeMetrics(this.telemetry,"AztecNodeService"),this.tracer=this.telemetry.getTracer("AztecNodeService"),this.nodePublicCallsSimulator=new NodePublicCallsSimulator({worldStateSynchronizer:this.worldStateSynchronizer,l1ToL2MessageSource:this.l1ToL2MessageSource,contractDataSource:this.contractDataSource,predictor:this.nextBlockPredictor,config:this.config,telemetry:this.telemetry,log:this.log.createChild("public-calls-simulator")}),this.unseenBlockHoldOff=new UnseenBlockHoldOff(this.blockSource,{byNumberWaitMs:this.config.rpcUnseenBlockByNumberWaitMs??2*this.config.blockDurationMs,byHashWaitMs:this.config.rpcUnseenBlockByHashWaitMs},this.log.createChild("unseen-block-hold-off")),this.worldStateQueries=new NodeWorldStateQueries({worldStateSynchronizer:this.worldStateSynchronizer,blockSource:this.blockSource,l1ToL2MessageSource:this.l1ToL2MessageSource,holdOff:this.unseenBlockHoldOff,log:this.log.createChild("world-state-queries")}),this.blockProvider=new NodeBlockProvider(this.blockSource,this.unseenBlockHoldOff),this.txReceiptBuilder=new NodeTxReceiptBuilder({p2pClient:this.p2pClient,blockSource:this.blockSource,debugLogStore:this.debugLogStore}),this.log.info(`Aztec Node version: ${this.packageVersion}`),this.log.info(`Aztec Node started on chain 0x${this.l1ChainId.toString(16)}`,pickL1ContractAddresses(this.config)),this.debugLogStore.isEnabled&&this.config.realProofs)throw new Error("debugLogStore should never be enabled when realProofs are set")}getProofVerifier(){return this.rpcProofVerifier}async getWorldStateSyncStatus(){return(await this.worldStateSynchronizer.status()).syncSummary}getChainTips(){return this.blockSource.getL2Tips()}getL1Constants(){return this.blockSource.getL1Constants()}getSyncedL2SlotNumber(){return this.blockSource.getSyncedL2SlotNumber()}getSyncedL2EpochNumber(){return this.blockSource.getSyncedL2EpochNumber()}getSyncedL1Timestamp(){return this.blockSource.getL1Timestamp()}getCheckpointsData(query){return this.blockSource.getCheckpointsData(query)}async getBlockNumber(tip){return tip===void 0||tip==="proposed"?this.blockSource.getBlockNumber():await this.blockSource.getBlockNumber({tag:tip})??BlockNumber.ZERO}async getCheckpointNumber(tip){let tips=await this.blockSource.getL2Tips();switch(tip){case void 0:case"checkpointed":return tips.checkpointed.checkpoint.number;case"proven":return tips.proven.checkpoint.number;case"finalized":return tips.finalized.checkpoint.number}}getBlock(param,options={}){return this.blockProvider.getBlock(param,options)}getBlockData(param){return this.blockProvider.getBlockData(param)}getBlocks(from,limit,options={}){return this.blockProvider.getBlocks(from,limit,options)}getCheckpoint(param,options={}){return this.blockProvider.getCheckpoint(param,options)}getCheckpoints(from,limit,options={}){return this.blockProvider.getCheckpoints(from,limit,options)}getSequencer(){return this.sequencer}getAutomineSequencer(){return this.automineSequencer}getProverNode(){return this.proverNode}getBlockSource(){return this.blockSource}getContractDataSource(){return this.contractDataSource}getP2P(){return this.p2pClient}getL1ContractAddresses(){return Promise.resolve(pickL1ContractAddresses(this.config))}getEncodedEnr(){return Promise.resolve(this.p2pClient.getEnr()?.encodeTxt())}async getAllowedPublicSetup(){return[...await(0,import_p2p2.getDefaultAllowedSetupFunctions)(),...this.config.txPublicSetupAllowListExtend??[]]}isReady(){return Promise.resolve(this.p2pClient.isReady()??!1)}async getNodeInfo(){let[nodeVersion,rollupVersion,chainId,enr,contractAddresses,protocolContractAddresses,l1Constants]=await Promise.all([this.getNodeVersion(),this.getVersion(),this.getChainId(),this.getEncodedEnr(),this.getL1ContractAddresses(),this.getProtocolContractAddresses(),this.blockSource.getL1Constants()]),maxTxGas=getNetworkTxGasLimits(this.config,l1Constants);return{nodeVersion,l1ChainId:chainId,rollupVersion,enr,l1ContractAddresses:contractAddresses,protocolContractAddresses,realProofs:!!this.config.realProofs,txsLimits:{gas:{daGas:maxTxGas.daGas,l2Gas:maxTxGas.l2Gas}}}}async getCurrentMinFees(){return await this.feeProvider.getCurrentMinFees()}async getPredictedMinFees(manaUsage){let timer=new Timer,head=await this.nextBlockPredictor.quoteMinFees().catch(err=>{this.log.warn("Failed to compute the next-block min fee for a quote, serving L1 projections only",err)}),asOf=head?.l1SyncPoint&&{blockNumber:head.l1SyncPoint.blockNumber,maxWaitMs:Math.max(0,QUOTE_MAX_WAIT_MS-timer.ms())},projections=await this.feeProvider.getPredictedMinFees(manaUsage,asOf);return head?[head.fees,...projections]:projections}async getMaxPriorityFees(){let tx=await first(this.p2pClient.iteratePendingTxs({includeProof:!1}));return tx?tx.getGasSettings().maxPriorityFeesPerGas:GasFees.from({feePerDaGas:0n,feePerL2Gas:0n})}getNodeVersion(){return Promise.resolve(this.packageVersion)}getVersion(){return Promise.resolve(this.version)}getChainId(){return Promise.resolve(this.l1ChainId)}getContractClass(id){return this.contractDataSource.getContractClass(id)}async getContract(address,referenceBlock="latest"){let blockData=await this.getBlockData(referenceBlock);if(!blockData)throw new Error(`Reference block ${inspectBlockParameter(referenceBlock)} not found when querying contract ${address}. If the node API has been queried with an anchor block hash, possibly a reorg has occurred.`);return this.contractDataSource.getContract(address,blockData.header.globalVariables.timestamp)}async getPrivateLogsByTags(query){return await this.#awaitLogsReferenceBlock(query.referenceBlock),await this.logsSource.getPrivateLogsByTags(query)}async getPublicLogsByTags(query){return await this.#awaitLogsReferenceBlock(query.referenceBlock),await this.logsSource.getPublicLogsByTags(query)}async#awaitLogsReferenceBlock(referenceBlock){referenceBlock!==void 0&&await this.unseenBlockHoldOff.getBlockData({hash:referenceBlock})}async sendTx(tx){await this.#sendTx(tx)}async#sendTx(tx){let timer=new Timer,txHash=tx.getTxHash().toString(),connectivity=await this.p2pClient.getP2PConnectivity();if(connectivity.enabled&&connectivity.connectedPeers===0)throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Rejecting tx ${txHash}: node has no connected peers`,{txHash}),new Error("Cannot accept tx: node has no connected peers to propagate it");let valid=await this.isValidTx(tx);if(valid.result!=="valid"){let reason=valid.reason.join(", ");throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Received invalid tx ${txHash}: ${reason}`,{txHash}),new Error(`Invalid tx: ${reason}`)}try{await this.p2pClient.sendTx(tx)}catch(err){throw this.metrics.receivedTx(timer.ms(),!1),this.log.warn(`Mempool rejected tx ${txHash}: ${err.message}`,{txHash}),err}let duration3=timer.ms();this.metrics.receivedTx(duration3,!0),this.log.info(`Received tx ${txHash} in ${duration3}ms`,{txHash})}getTxReceipt(txHash,options){return this.txReceiptBuilder.getTxReceipt(txHash,options)}getTxEffect(txHash){return this.blockSource.getTxEffect(txHash)}async stop(){this.log.info("Stopping Aztec Node"),await this.stopStartedWatchers(),await tryStop(this.slasherClient),await Promise.all([tryStop(this.peerProofVerifier),tryStop(this.rpcProofVerifier)]),await tryStop(this.sequencer),await tryStop(this.automineSequencer),await tryStop(this.proverNode),await tryStop(this.p2pClient),await tryStop(this.nextBlockPredictor),await tryStop(this.feeProvider),await tryStop(this.worldStateSynchronizer),await tryStop(this.blockSource),await tryStop(this.blobClient),await tryStop(this.telemetry),this.log.info("Stopped Aztec Node")}getBlobClient(){return this.blobClient}getPendingTxs(limit,after,options){return this.p2pClient.getPendingTxs(limit,after,options)}getPendingTxCount(){return this.p2pClient.getPendingTxCount()}getPeers(includePending){return this.p2pClient.getPeers(includePending)}getCheckpointAttestationsForSlot(slot,proposalPayloadHash){return this.p2pClient.getCheckpointAttestationsForSlot(slot,proposalPayloadHash)}getProposalsForSlot(slot){return this.p2pClient.getProposalsForSlot(slot)}getTxByHash(txHash,options){return this.p2pClient.getTxByHashFromPool(txHash,{includeProof:!!options?.includeProof})}async getTxsByHash(txHashes,options){let txs=await this.p2pClient.getTxsByHashFromPool(txHashes,{includeProof:!!options?.includeProof});return compactArray(txs)}findLeavesIndexes(referenceBlock,treeId,leafValues){return this.worldStateQueries.findLeavesIndexes(referenceBlock,treeId,leafValues)}getBlockHashMembershipWitness(referenceBlock,blockHash){return this.worldStateQueries.getBlockHashMembershipWitness(referenceBlock,blockHash)}getNoteHashMembershipWitness(referenceBlock,noteHash){return this.worldStateQueries.getNoteHashMembershipWitness(referenceBlock,noteHash)}getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message)}getL1ToL2MessageCheckpoint(l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageCheckpoint(l1ToL2Message)}getL2ToL1Messages(epoch){return this.worldStateQueries.getL2ToL1Messages(epoch)}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.worldStateQueries.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}getNullifierMembershipWitness(referenceBlock,nullifier){return this.worldStateQueries.getNullifierMembershipWitness(referenceBlock,nullifier)}getLowNullifierMembershipWitness(referenceBlock,nullifier){return this.worldStateQueries.getLowNullifierMembershipWitness(referenceBlock,nullifier)}getPublicDataWitness(referenceBlock,leafSlot){return this.worldStateQueries.getPublicDataWitness(referenceBlock,leafSlot)}getPublicStorageAt(referenceBlock,contract,slot){return this.worldStateQueries.getPublicStorageAt(referenceBlock,contract,slot)}simulatePublicCalls(tx,skipFeeEnforcement=!1,overrides){return this.nodePublicCallsSimulator.simulate(tx,skipFeeEnforcement,overrides)}async isValidTx(tx,{isSimulation,skipFeeEnforcement}={}){let db=this.worldStateSynchronizer.getCommitted(),verifier=isSimulation?void 0:this.rpcProofVerifier,{ts:nextSlotTimestamp}=this.epochCache.getEpochAndSlotInNextL1Slot(),blockNumber=BlockNumber(await this.blockSource.getBlockNumber()+1),l1Constants=await this.blockSource.getL1Constants(),networkTxGasLimits=getNetworkTxGasLimits(this.config,l1Constants);return await(0,import_p2p2.createTxValidatorForAcceptingTxsOverRPC)(db,this.contractDataSource,verifier,{timestamp:nextSlotTimestamp,blockNumber,l1ChainId:this.l1ChainId,rollupVersion:this.version,setupAllowList:[...await(0,import_p2p2.getDefaultAllowedSetupFunctions)(),...this.config.txPublicSetupAllowListExtend??[]],gasFees:await this.getCurrentMinFees(),skipFeeEnforcement,isSimulation,txsPermitted:!this.config.disableTransactions,maxTxL2Gas:networkTxGasLimits.l2Gas,maxTxDAGas:networkTxGasLimits.daGas},this.log.getBindings()).validateTx(tx)}getConfig(){let keys=AztecNodeAdminConfigSchema.keyof().options;return Promise.resolve(pick2(this.config,...keys))}async setConfig(config2){let newConfig={...this.config,...config2},sequencerUpdate={...config2};this.sequencerPausedMinTxsPerBlock!==void 0&&sequencerUpdate.minTxsPerBlock!==void 0&&(this.sequencerPausedMinTxsPerBlock=sequencerUpdate.minTxsPerBlock,delete sequencerUpdate.minTxsPerBlock),this.sequencer?.updateConfig(sequencerUpdate),this.automineSequencer?.updateConfig(sequencerUpdate),this.slasherClient?.updateConfig(config2),this.validatorsSentinel?.updateConfig(config2),await this.p2pClient.updateP2PConfig(config2);let archiver=this.blockSource;if("updateConfig"in archiver&&archiver.updateConfig(config2),newConfig.realProofs!==this.config.realProofs)if(await Promise.all([tryStop(this.peerProofVerifier),tryStop(this.rpcProofVerifier)]),newConfig.realProofs){this.peerProofVerifier=await BatchChonkVerifier.new(newConfig,newConfig.bbChonkVerifyMaxBatch,"peer");let rpcVerifier=await BBCircuitVerifier.new(newConfig);this.rpcProofVerifier=new QueuedIVCVerifier(rpcVerifier,newConfig.numConcurrentIVCVerifiers)}else this.peerProofVerifier=new TestCircuitVerifier,this.rpcProofVerifier=new TestCircuitVerifier;this.config=newConfig}getProtocolContractAddresses(){return Promise.resolve({classRegistry:ProtocolContractAddress.ContractClassRegistry,feeJuice:ProtocolContractAddress.FeeJuice,instanceRegistry:ProtocolContractAddress.ContractInstanceRegistry,multiCallEntrypoint:STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS})}registerContractFunctionSignatures(signatures){return this.contractDataSource.registerContractFunctionSignatures(signatures)}getValidatorsStats(){return this.validatorsSentinel?.computeStats()??Promise.resolve({stats:{},slotWindow:0})}getValidatorStats(validatorAddress,fromSlot,toSlot){return this.validatorsSentinel?.getValidatorStats(validatorAddress,fromSlot,toSlot)??Promise.resolve(void 0)}async startSnapshotUpload(location){let archiver=this.blockSource;if(!("backupTo"in archiver))throw this.metrics.recordSnapshotError(),new Error("Archiver implementation does not support backups. Cannot generate snapshot.");if(!archiver.isInitialSyncComplete())throw this.metrics.recordSnapshotError(),new Error("Archiver initial sync not complete. Cannot start snapshot.");if(!await archiver.getL2Tips().then(tips=>tips.proposed.hash))throw this.metrics.recordSnapshotError(),new Error("Archiver has no latest L2 block hash downloaded. Cannot start snapshot.");if(this.isUploadingSnapshot)throw this.metrics.recordSnapshotError(),new Error("Snapshot upload already in progress. Cannot start another one until complete.");this.isUploadingSnapshot=!0;let timer=new Timer;return(0,import_actions.uploadSnapshot)(location,this.blockSource,this.worldStateSynchronizer,this.config,this.log).then(()=>{this.isUploadingSnapshot=!1,this.metrics.recordSnapshot(timer.ms())}).catch(err=>{this.isUploadingSnapshot=!1,this.metrics.recordSnapshotError(),this.log.error(`Error uploading snapshot: ${err}`)}),Promise.resolve()}async rollbackTo(targetBlock,force,resumeSync=!0){let archiver=this.blockSource;if(!("rollbackTo"in archiver))throw new Error("Archiver implementation does not support rollbacks.");let finalizedBlock=await archiver.getL2Tips().then(tips=>tips.finalized.block.number);if(targetBlock<finalizedBlock)if(force)this.log.warn(`Clearing world state database to allow rolling back behind finalized block ${finalizedBlock}`),await this.worldStateSynchronizer.clear(),await this.p2pClient.clear();else throw new Error(`Cannot rollback to block ${targetBlock} as it is before finalized ${finalizedBlock}`);try{this.log.info("Pausing archiver and world state sync to start rollback"),await archiver.stop(),await this.worldStateSynchronizer.stopSync();let currentBlock=await archiver.getBlockNumber(),blocksToUnwind=currentBlock-targetBlock;this.log.info(`Unwinding ${count(blocksToUnwind,"block")} from L2 block ${currentBlock} to ${targetBlock}`),await archiver.rollbackTo(targetBlock),this.log.info("Unwinding complete.")}catch(err){throw this.log.error("Error during rollback",err),err}finally{resumeSync?(this.log.info("Resuming world state and archiver sync."),this.worldStateSynchronizer.resumeSync(),archiver.resume()):this.log.info("Sync left paused after rollback (resumeSync=false).")}}async pauseSync(){this.log.info("Pausing archiver and world state sync"),await this.blockSource.stop(),await this.worldStateSynchronizer.stopSync()}resumeSync(){return this.log.info("Resuming world state and archiver sync."),this.worldStateSynchronizer.resumeSync(),this.blockSource.resume(),Promise.resolve()}pauseSequencer(){if(this.automineSequencer)return this.automineSequencer.pause(),Promise.resolve();if(this.sequencer)return this.sequencerPausedMinTxsPerBlock===void 0&&(this.sequencerPausedMinTxsPerBlock=this.sequencer.getSequencer().getConfig().minTxsPerBlock??0,this.sequencer.updateConfig({minTxsPerBlock:Number.MAX_SAFE_INTEGER}),this.log.info("Sequencer paused (minTxsPerBlock set to MAX_SAFE_INTEGER)",{previousMinTxsPerBlock:this.sequencerPausedMinTxsPerBlock})),Promise.resolve();throw new BadRequestError("Cannot pause sequencer: no sequencer is running")}resumeSequencer(){if(this.automineSequencer)return this.automineSequencer.resume(),Promise.resolve();if(this.sequencer){if(this.sequencerPausedMinTxsPerBlock!==void 0){let restored=this.sequencerPausedMinTxsPerBlock;this.sequencerPausedMinTxsPerBlock=void 0,this.sequencer.updateConfig({minTxsPerBlock:restored}),this.log.info("Sequencer resumed (minTxsPerBlock restored)",{minTxsPerBlock:restored})}return Promise.resolve()}throw new BadRequestError("Cannot resume sequencer: no sequencer is running")}getSlashOffenses(round){if(!this.slasherClient)throw new Error("Slasher client not enabled");return round==="all"?this.slasherClient.getOffenses():this.slasherClient.gatherOffensesForRound(round==="current"?void 0:BigInt(round))}async reloadKeystore(){if(!this.config.keyStoreDirectory?.length)throw new BadRequestError("Cannot reload keystore: node is not using a file-based keystore. Set KEY_STORE_DIRECTORY to use file-based keystores.");if(!this.validatorClient)throw new BadRequestError("Cannot reload keystore: validator is not enabled.");this.log.info("Reloading keystore from disk");let keyStores=(0,import_node_keystore2.loadKeystores)(this.config.keyStoreDirectory),newManager=new import_node_keystore2.KeystoreManager((0,import_node_keystore2.mergeKeystores)(keyStores));if(await newManager.validateSigners(),import_validator_client.ValidatorClient.validateKeyStoreConfiguration(newManager,this.log),this.keyStoreManager&&this.sequencer){let oldAdapter=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(this.keyStoreManager),availablePublishers=new Set(oldAdapter.getAttesterAddresses().flatMap(a=>oldAdapter.getPublisherAddresses(a).map(p=>p.toString().toLowerCase()))),newAdapter2=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(newManager);for(let attester of newAdapter2.getAttesterAddresses()){let pubs=newAdapter2.getPublisherAddresses(attester);if(pubs.length>0&&!pubs.some(p=>availablePublishers.has(p.toString().toLowerCase())))throw new BadRequestError(`Cannot reload keystore: validator ${attester} has publisher keys [${pubs.map(p=>p.toString()).join(", ")}] but none match the L1 signers initialized at startup [${[...availablePublishers].join(", ")}]. Publishers cannot be hot-reloaded \u2014 use an existing publisher key or restart the node.`)}}let newAdapter=import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(newManager),newAddresses=newAdapter.getAttesterAddresses(),oldAddresses=this.keyStoreManager?import_validator_client.NodeKeystoreAdapter.fromKeyStoreManager(this.keyStoreManager).getAttesterAddresses():[],oldSet=new Set(oldAddresses.map(a=>a.toString())),newSet=new Set(newAddresses.map(a=>a.toString())),added=newAddresses.filter(a=>!oldSet.has(a.toString())),removed=oldAddresses.filter(a=>!newSet.has(a.toString()));if(added.length>0&&this.log.info(`Keystore reload: adding attester keys: ${added.map(a=>a.toString()).join(", ")}`),removed.length>0&&this.log.info(`Keystore reload: removing attester keys: ${removed.map(a=>a.toString()).join(", ")}`),added.length===0&&removed.length===0&&this.log.info("Keystore reload: attester keys unchanged"),this.validatorClient.reloadKeystore(newManager),this.sequencer&&this.sequencer.updatePublisherNodeKeyStore(newAdapter),this.slasherClient&&!this.config.slashSelfAllowed){let slashValidatorsNever=unique([...this.config.slashValidatorsNever??[],...newAddresses].map(a=>a.toString())).map(EthAddress.fromString);this.slasherClient.updateConfig({slashValidatorsNever})}this.keyStoreManager=newManager,this.log.info("Keystore reloaded: coinbase, feeRecipient, and attester keys updated")}async mineBlock(){if(this.automineSequencer){await this.automineSequencer.buildEmptyBlock();return}if(!this.sequencer)throw new BadRequestError("Cannot mine block: no sequencer is running");let currentBlockNumber=await this.getBlockNumber(),{slotDuration}=await this.blockSource.getL1Constants(),timeoutSeconds=Math.ceil(slotDuration*1.5),originalMinTxsPerBlock=this.sequencer.getSequencer().getConfig().minTxsPerBlock;this.sequencer.updateConfig({minTxsPerBlock:0});try{this.sequencer.trigger(),await retryUntil(async()=>await this.getBlockNumber()>currentBlockNumber?!0:void 0,"mineBlock",timeoutSeconds,.1)}finally{this.sequencer.updateConfig({minTxsPerBlock:originalMinTxsPerBlock})}}async prove(upToCheckpoint){if(!this.automineSequencer)throw new BadRequestError("Cannot prove checkpoint: no automine sequencer is running");return await this.automineSequencer.prove(upToCheckpoint)}async warpL2TimeAtLeastTo(targetTimestamp){if(!this.automineSequencer)throw new BadRequestError("Cannot warp L2 time: no automine sequencer is running");await this.automineSequencer.warpTo(targetTimestamp)}async warpL2TimeAtLeastBy(duration3){if(!this.automineSequencer)throw new BadRequestError("Cannot warp L2 time: no automine sequencer is running");await this.automineSequencer.warpBy(duration3)}getWorldState(block){return this.worldStateQueries.getWorldState(block)}};var import_client22=__toESM(require_empty_stub(),1);var import_epoch_cache2=__toESM(require_empty_stub(),1);import{createEthereumChain}from"@aztec/ethereum/chain";import{getPublicClient,makeL1HttpTransport}from"@aztec/ethereum/client";import{RegistryContract,RollupContract as RollupContract2}from"@aztec/ethereum/contracts";import{pickL1ContractAddresses as pickL1ContractAddresses2}from"@aztec/ethereum/l1-contract-addresses";var import_node_keystore3=__toESM(require_empty_stub(),1),import_actions2=__toESM(require_empty_stub(),1),import_factories3=__toESM(require_empty_stub(),1),import_p2p4=__toESM(require_empty_stub(),1),import_prover_node=__toESM(require_empty_stub(),1),import_config33=__toESM(require_empty_stub(),1),import_sequencer_client=__toESM(require_empty_stub(),1),import_automine=__toESM(require_empty_stub(),1),import_slasher4=__toESM(require_empty_stub(),1);var import_validator_client2=__toESM(require_empty_stub(),1);import{createPublicClient}from"viem";var import_slasher3=__toESM(require_empty_stub(),1);var DummyP2P=class{static{__name(this,"DummyP2P")}validateTxsReceivedInBlockProposal(_txs){return Promise.resolve()}clear(){throw new Error('DummyP2P does not implement "clear".')}getPendingTxs(){throw new Error('DummyP2P does not implement "getPendingTxs"')}getEncodedEnr(){throw new Error('DummyP2P does not implement "getEncodedEnr"')}getPeers(_includePending){throw new Error('DummyP2P does not implement "getPeers"')}getGossipMeshPeerCount(_topicType){return Promise.resolve(0)}getP2PConnectivity(){return Promise.resolve({enabled:!1,connectedPeers:0})}broadcastProposal(_proposal){throw new Error('DummyP2P does not implement "broadcastProposal"')}broadcastCheckpointProposal(_proposal){throw new Error('DummyP2P does not implement "broadcastCheckpointProposal"')}broadcastCheckpointAttestations(_attestations){throw new Error('DummyP2P does not implement "broadcastCheckpointAttestations"')}registerBlockProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerBlockProposalHandler"')}registerValidatorCheckpointProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerValidatorCheckpointProposalHandler"')}registerAllNodesCheckpointProposalHandler(_handler){throw new Error('DummyP2P does not implement "registerAllNodesCheckpointProposalHandler"')}requestTxs(_txHashes){throw new Error('DummyP2P does not implement "requestTxs"')}requestTxByHash(_txHash){throw new Error('DummyP2P does not implement "requestTxByHash"')}sendTx(_tx){throw new Error('DummyP2P does not implement "sendTx"')}handleFailedExecution(_txHashes){throw new Error('DummyP2P does not implement "handleFailedExecution"')}getTxByHashFromPool(_txHash){throw new Error('DummyP2P does not implement "getTxByHashFromPool"')}getTxByHash(_txHash){throw new Error('DummyP2P does not implement "getTxByHash"')}getArchivedTxByHash(_txHash){throw new Error('DummyP2P does not implement "getArchivedTxByHash"')}getTxStatus(_txHash){return Promise.resolve("mined")}iteratePendingTxs(){throw new Error('DummyP2P does not implement "iteratePendingTxs"')}iterateEligiblePendingTxs(){throw new Error('DummyP2P does not implement "iterateEligiblePendingTxs"')}getPendingTxCount(){throw new Error('DummyP2P does not implement "getPendingTxCount"')}hasEligiblePendingTxs(_minCount){throw new Error('DummyP2P does not implement "hasEligiblePendingTxs"')}start(){throw new Error('DummyP2P does not implement "start"')}stop(){throw new Error('DummyP2P does not implement "stop"')}isReady(){throw new Error('DummyP2P does not implement "isReady"')}getStatus(){throw new Error('DummyP2P does not implement "getStatus"')}getEnr(){throw new Error('DummyP2P does not implement "getEnr"')}isP2PClient(){throw new Error('DummyP2P does not implement "isP2PClient"')}getTxProvider(){throw new Error('DummyP2P does not implement "getTxProvider"')}getTxsByHash(_txHashes){throw new Error('DummyP2P does not implement "getTxsByHash"')}getCheckpointAttestationsForSlot(_slot,_proposalPayloadHash){throw new Error('DummyP2P does not implement "getCheckpointAttestationsForSlot"')}addOwnCheckpointAttestations(_attestations){throw new Error('DummyP2P does not implement "addOwnCheckpointAttestations"')}getProposalsForSlot(_slot){return Promise.resolve({blockProposals:[],checkpointProposals:[]})}hasCheckpointProposalForSlot(_slot){return Promise.resolve(!1)}getL2BlockHash(_number2){throw new Error('DummyP2P does not implement "getL2BlockHash"')}updateP2PConfig(_config){throw new Error('DummyP2P does not implement "updateP2PConfig"')}getL2Tips(){throw new Error('DummyP2P does not implement "getL2Tips"')}handleBlockStreamEvent(_event){throw new Error('DummyP2P does not implement "handleBlockStreamEvent"')}sync(){throw new Error('DummyP2P does not implement "sync"')}getTxsByHashFromPool(_txHashes){throw new Error('DummyP2P does not implement "getTxsByHashFromPool"')}hasTxsInPool(_txHashes){throw new Error('DummyP2P does not implement "hasTxsInPool"')}getSyncedLatestBlockNum(){throw new Error('DummyP2P does not implement "getSyncedLatestBlockNum"')}getSyncedProvenBlockNum(){throw new Error('DummyP2P does not implement "getSyncedProvenBlockNum"')}getSyncedLatestSlot(){throw new Error('DummyP2P does not implement "getSyncedLatestSlot"')}protectTxs(_txHashes,_blockHeader){throw new Error('DummyP2P does not implement "protectTxs".')}prepareForSlot(_slotNumber){return Promise.resolve()}addReqRespSubProtocol(_subProtocol,_handler){throw new Error('DummyP2P does not implement "addReqRespSubProtocol".')}handleAuthRequestFromPeer(_authRequest,_peerId){throw new Error('DummyP2P does not implement "handleAuthRequestFromPeer".')}registerThisValidatorAddresses(_address){}registerDuplicateProposalCallback(_callback){throw new Error('DummyP2P does not implement "registerDuplicateProposalCallback"')}registerOversizedProposalCallback(_callback){throw new Error('DummyP2P does not implement "registerOversizedProposalCallback"')}registerDuplicateAttestationCallback(_callback){throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"')}registerCheckpointAttestationCallback(_callback){throw new Error('DummyP2P does not implement "registerCheckpointAttestationCallback"')}hasBlockProposalsForSlot(_slot){throw new Error('DummyP2P does not implement "hasBlockProposalsForSlot"')}};var TXEFeeProvider=class{static{__name(this,"TXEFeeProvider")}getCurrentMinFees(){return Promise.resolve(new GasFees(0,0))}getPredictedMinFees(){return Promise.resolve(times(FEE_ORACLE_LAG,()=>new GasFees(0,0)))}},TXEGlobalVariablesBuilder=class{static{__name(this,"TXEGlobalVariablesBuilder")}buildCheckpointGlobalVariables(_coinbase,_feeRecipient,_slotNumber,_simulationOverridesPlan,_options){let vars=makeGlobalVariables();return Promise.resolve({chainId:vars.chainId,version:vars.version,slotNumber:vars.slotNumber,timestamp:vars.timestamp,coinbase:vars.coinbase,feeRecipient:vars.feeRecipient,gasFees:vars.gasFees})}};var MockEpochCache=class{static{__name(this,"MockEpochCache")}getCommittee(_slot="now"){return Promise.resolve({committee:void 0,seed:0n,epoch:EpochNumber.ZERO,isEscapeHatchOpen:!1})}getSlotNow(){return SlotNumber(0)}getTargetSlot(){return SlotNumber(0)}getEpochNow(){return EpochNumber.ZERO}getTargetEpoch(){return EpochNumber.ZERO}getEpochAndSlotNow(){return{epoch:EpochNumber.ZERO,slot:SlotNumber(0),ts:0n,nowMs:0n}}getEpochAndSlotInNextL1Slot(){return{epoch:EpochNumber.ZERO,slot:SlotNumber(0),ts:0n,nowSeconds:0n}}getTargetEpochAndSlotInNextL1Slot(){return this.getEpochAndSlotInNextL1Slot()}getProposerIndexEncoding(_epoch,_slot,_seed){return"0x00"}computeProposerIndex(_slot,_epoch,_seed,_size2){return 0n}getCurrentAndNextSlot(){return{currentSlot:SlotNumber(0),nextSlot:SlotNumber(0)}}getTargetAndNextSlot(){return{targetSlot:SlotNumber(0),nextSlot:SlotNumber(0)}}getProposerAttesterAddressInSlot(_slot){return Promise.resolve(void 0)}isInCommittee(_slot,_validator){return Promise.resolve(!1)}getRegisteredValidators(){return Promise.resolve([])}filterInCommittee(_slot,_validators){return Promise.resolve([])}isEscapeHatchOpen(_epoch){return Promise.resolve(!1)}isEscapeHatchOpenAtSlot(_slot){return Promise.resolve(!1)}getL1Constants(){return EmptyL1RollupConstants}};var TXESynchronizer=class{constructor(nativeWorldStateService){this.nativeWorldStateService=nativeWorldStateService}static{__name(this,"TXESynchronizer")}blockNumber=BlockNumber.ZERO;static async create(){let nativeWorldStateService=await NativeWorldStateService.ephemeral();return new this(nativeWorldStateService)}async handleL2Block(block,l1ToL2Messages=[]){await this.nativeWorldStateService.handleL2BlockAndMessages(block,padArrayEnd(l1ToL2Messages,Fr.ZERO,1024)),this.blockNumber=block.header.globalVariables.blockNumber}syncImmediate(_minBlockNumber,_blockHash){return Promise.resolve(this.blockNumber)}getCommitted(){return this.nativeWorldStateService.getCommitted()}fork(block){return this.nativeWorldStateService.fork(block?BlockNumber(block):void 0)}getSnapshot(blockNumber){return this.nativeWorldStateService.getSnapshot(BlockNumber(blockNumber))}getVerifiedSnapshot(blockNumber,_blockHash){return Promise.resolve(this.getSnapshot(blockNumber))}backupTo(dstPath,compact2){return this.nativeWorldStateService.backupTo(dstPath,compact2)}start(){throw new Error('TXE Synchronizer does not implement "start"')}status(){throw new Error('TXE Synchronizer does not implement "status"')}stop(){throw new Error('TXE Synchronizer does not implement "stop"')}stopSync(){throw new Error('TXE Synchronizer does not implement "stopSync"')}resumeSync(){throw new Error('TXE Synchronizer does not implement "resumeSync"')}clear(){throw new Error('TXE Synchronizer does not implement "clear"')}};var VERSION7=1,CHAIN_ID=1,PACKAGE_VERSION="txe",TXEStateMachine=class{constructor(node,synchronizer,archiver,anchorBlockStore,contractSyncService,contractClassService,txResolver){this.node=node;this.synchronizer=synchronizer;this.archiver=archiver;this.anchorBlockStore=anchorBlockStore;this.contractSyncService=contractSyncService;this.contractClassService=contractClassService;this.txResolver=txResolver}static{__name(this,"TXEStateMachine")}static async create(archiver,anchorBlockStore,contractStore,noteStore){let synchronizer=await TXESynchronizer.create(),aztecNodeConfig={},log2=createLogger("txe_node"),globalVariableBuilder=new TXEGlobalVariablesBuilder,epochCache=new MockEpochCache,nextBlockPredictor=NextBlockPredictor.create({blockSource:archiver,globalVariableBuilder,epochCache,signatureContext:{chainId:CHAIN_ID,rollupAddress:EthAddress.ZERO},dateProvider:new DateProvider}),node=new AztecNodeService({config:aztecNodeConfig,p2pClient:new DummyP2P,blockSource:archiver,logsSource:archiver,contractDataSource:archiver,l1ToL2MessageSource:archiver,worldStateSynchronizer:synchronizer,sequencer:void 0,proverNode:void 0,slasherClient:void 0,validatorsSentinel:void 0,stopStartedWatchers:__name(async()=>{},"stopStartedWatchers"),l1ChainId:CHAIN_ID,version:VERSION7,globalVariableBuilder,rollupContract:void 0,feeProvider:new TXEFeeProvider,nextBlockPredictor,epochCache,packageVersion:PACKAGE_VERSION,peerProofVerifier:new TestCircuitVerifier,rpcProofVerifier:new TestCircuitVerifier,telemetry:void 0,log:log2}),contractClassService=new ContractClassService(node,contractStore),contractSyncService=new ContractSyncService(node,contractStore,contractClassService,noteStore,createLogger("txe:contract_sync"),{concurrentContractSyncEnabled:!1}),txResolver=new TxResolverService(node);return new this(node,synchronizer,archiver,anchorBlockStore,contractSyncService,contractClassService,txResolver)}get l2TipsProvider(){let node=this.node;return{getL2Tips:__name(()=>node.getChainTips(),"getL2Tips")}}async handleL2Block(block,l1ToL2Messages=[]){let checkpointNumber=CheckpointNumber.fromBlockNumber(block.number),checkpoint=new Checkpoint(block.archive,CheckpointHeader.from({lastArchiveRoot:block.header.lastArchive.root,inHash:Fr.ZERO,blobsHash:Fr.ZERO,blockHeadersHash:Fr.ZERO,epochOutHash:Fr.ZERO,slotNumber:block.header.globalVariables.slotNumber,timestamp:block.header.globalVariables.timestamp,coinbase:block.header.globalVariables.coinbase,feeRecipient:block.header.globalVariables.feeRecipient,gasFees:block.header.globalVariables.gasFees,totalManaUsed:block.header.totalManaUsed,accumulatedFees:block.header.totalFees}),[block],checkpointNumber),publishedCheckpoint=new PublishedCheckpoint(checkpoint,new L1PublishedData(BigInt(block.header.globalVariables.blockNumber),block.header.globalVariables.timestamp,block.header.globalVariables.blockNumber.toString()),[]);this.contractSyncService.wipe(),await Promise.all([this.synchronizer.handleL2Block(block,l1ToL2Messages),this.archiver.addCheckpoints([publishedCheckpoint],void 0),this.anchorBlockStore.setHeader(block.header)])}};async function makeTxEffect(noteCache,txBlockNumber){let txEffect=TxEffect.empty(),nonceGenerator=noteCache.getNonceGenerator();return txEffect.noteHashes=await Promise.all(noteCache.getAllNotes().map(async(pendingNote,i)=>computeUniqueNoteHash(await computeNoteHashNonce(nonceGenerator,i),await siloNoteHash(pendingNote.note.contractAddress,pendingNote.noteHashForConsumption)))),txEffect.nullifiers=noteCache.getAllNullifiers(),txEffect.txHash=new TxHash(new Fr(txBlockNumber)),txEffect}__name(makeTxEffect,"makeTxEffect");var TXEAccountStore=class{static{__name(this,"TXEAccountStore")}#accounts;constructor(store){this.#accounts=store.openMap("accounts")}async getAccount(key){let completeAddress=await this.#accounts.getAsync(key.toString());if(!completeAddress)throw new Error(`Account not found: ${key.toString()}`);return CompleteAddress.fromBuffer(completeAddress)}async setAccount(key,value){await this.#accounts.set(key.toString(),value.toBuffer())}};function emptyLastCallState(){return{offchainEffects:[],queried:!1,txHash:Fr.ZERO,anchorBlockTimestamp:0n}}__name(emptyLastCallState,"emptyLastCallState");var TXESession=class _TXESession{constructor(logger3,sessionStore,stateMachine,oracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,operationContributors,currentChangeSetId,chainId,version2,nextBlockTimestamp,artifactResolver,rootPath,packageName){this.logger=logger3;this.sessionStore=sessionStore;this.stateMachine=stateMachine;this.oracleHandler=oracleHandler;this.contractStore=contractStore;this.noteStore=noteStore;this.keyStore=keyStore;this.addressStore=addressStore;this.accountStore=accountStore;this.senderTaggingStore=senderTaggingStore;this.recipientTaggingStore=recipientTaggingStore;this.taggingSecretSourcesStore=taggingSecretSourcesStore;this.capsuleStore=capsuleStore;this.factStore=factStore;this.privateEventStore=privateEventStore;this.stagedWriteCoordinator=stagedWriteCoordinator;this.operationContributors=operationContributors;this.currentChangeSetId=currentChangeSetId;this.chainId=chainId;this.version=version2;this.nextBlockTimestamp=nextBlockTimestamp;this.artifactResolver=artifactResolver;this.rootPath=rootPath;this.packageName=packageName}static{__name(this,"TXESession")}state={name:"TOP_LEVEL"};authwits=new Map;taggingSecretStrategies=new Map;authorizeAllUtilityCallTargets=!1;lastCallInfo=emptyLastCallState();txeOracleVersion;disposed=!1;async dispose(){if(!this.disposed){this.disposed=!0;try{await this.stateMachine.synchronizer.nativeWorldStateService.close()}catch(err){this.logger.warn("Error closing native world state during session dispose",err)}try{await this.sessionStore.close()}catch(err){this.logger.warn("Error closing session LMDB during dispose",err)}}}static async init(contractStore,artifactResolver,rootPath,packageName){let store=await openEphemeralStore("txe-session",void 0,2),addressStore=new AddressStore(store),privateEventStore=new PrivateEventStore(store),noteStore=new NoteStore(store),senderTaggingStore=new SenderTaggingStore(store),recipientTaggingStore=new RecipientTaggingStore(store),taggingSecretSourcesStore=new TaggingSecretSourcesStore(store),capsuleStore=new CapsuleStore(store),factStore=new FactStore(store),keyStore=new KeyStore(store),accountStore=new TXEAccountStore(store),archiver=new TXEArchiver(store),anchorBlockStore=new AnchorBlockStore(store),stateMachine=await TXEStateMachine.create(archiver,anchorBlockStore,contractStore,noteStore),stagedWriteCoordinator=new StagedWriteCoordinator({kvStore:store,stagedStores:[capsuleStore,factStore,senderTaggingStore,recipientTaggingStore,privateEventStore,noteStore]}),nextBlockTimestamp=BigInt(Math.floor(new Date().getTime()/1e3)),version2=new Fr(await stateMachine.node.getVersion()),chainId=new Fr(await stateMachine.node.getChainId()),logger3=createLogger("txe:session"),initialChangeSetId=stagedWriteCoordinator.begin(),topLevelOracleHandler=new TXEOracleTopLevelContext(stateMachine,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,nextBlockTimestamp,version2,chainId,new Map,new Map,!1,artifactResolver,rootPath,packageName);return await topLevelOracleHandler.mineDeploymentNullifiers([STANDARD_AUTH_REGISTRY_ADDRESS]),new _TXESession(logger3,store,stateMachine,topLevelOracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,[stateMachine.contractSyncService],initialChangeSetId,version2,chainId,nextBlockTimestamp,artifactResolver,rootPath,packageName)}processFunction(functionName,inputs){try{if(Object.hasOwn(LEGACY_ORACLE_REGISTRY,functionName))return callTxeLegacyHandler(functionName,inputs,this.oracleHandler);let translator=new RPCTranslator(this,this.oracleHandler),validatedFunctionName=external_exports.string().refine(fn=>typeof translator[fn]=="function"&&!fn.startsWith("handlerAs")&&fn!=="constructor").parse(functionName);return translator[validatedFunctionName](...inputs)}catch(error2){if(error2 instanceof external_exports.ZodError){let versionHint;throw this.txeOracleVersion?this.txeOracleVersion.minor>0?versionHint=` The test uses Aztec.nr test oracle version ${this.txeOracleVersion.major}.${this.txeOracleVersion.minor}, but this test environment only supports up to ${4}.${0}. Upgrade the Aztec CLI to a compatible version. See https://docs.aztec.network/errors/12`:versionHint=` The test's oracle version (${this.txeOracleVersion.major}.${this.txeOracleVersion.minor}) is compatible with this test environment (${4}.${0}), so this oracle should be available. This is an unexpected error, please report it. See https://docs.aztec.network/errors/13`:versionHint=" The test appears to use an older version of Aztec.nr that does not support test environment oracle versioning. Update Aztec.nr to a compatible version. See https://docs.aztec.network/errors/12",new Error(`Unknown oracle '${functionName}'.${versionHint}`)}else throw error2 instanceof Error?new Error(`Execution error while processing function ${functionName} in state ${this.state.name}: ${error2.message}`):new Error(`Unknown execution error while processing function ${functionName} in state ${this.state.name}`)}}async cycleOperation(){let operationArgs={stagedWriteCoordinator:this.stagedWriteCoordinator,contributors:this.operationContributors,changeSetId:this.currentChangeSetId,log:this.logger};try{await runOperation(operationArgs,()=>Promise.resolve())}finally{this.currentChangeSetId=this.stagedWriteCoordinator.begin()}return this.currentChangeSetId}resetLastCall(){let notQueriedMessageCount=this.lastCallInfo.queried?0:this.lastCallInfo.offchainEffects.filter(payload=>payload[0]?.equals(OFFCHAIN_MESSAGE_IDENTIFIER)).length;notQueriedMessageCount>0&&this.logger.warn(`Dropping ${notQueriedMessageCount} unqueried offchain message(s) from the previous top-level call. To deliver them, call \`env.offchain_messages()\` and forward the result to the recipient contract's \`offchain_receive\` utility before issuing another top-level call. To intentionally discard, assign to \`let _ = env.offchain_messages()\` to silence this warning.`),this.lastCallInfo=emptyLastCallState()}recordOffchainEffect(data){this.lastCallInfo.offchainEffects.push(data)}setLastCallContext(txHash,anchorBlockTimestamp){this.lastCallInfo.txHash=txHash,this.lastCallInfo.anchorBlockTimestamp=anchorBlockTimestamp}async withTopLevelCallTracking(work){this.resetLastCall();let anchorBlockTimestamp=(await this.stateMachine.node.getBlockData("latest")).header.globalVariables.timestamp,{result,txHash}=await work();return this.setLastCallContext(txHash??Fr.ZERO,anchorBlockTimestamp),result}getLastCallOffchainEffects(){this.lastCallInfo.queried=!0;let effects=this.lastCallInfo.offchainEffects;if(effects.length>MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY)throw new Error(`${effects.length} offchain effects exceed max ${MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY}`);if(effects.some(e2=>e2.length>MAX_OFFCHAIN_EFFECT_LEN))throw new Error(`Some offchain effect has length larger than max ${MAX_OFFCHAIN_EFFECT_LEN}`);return{effects}}getLastCallContext(){let{txHash,anchorBlockTimestamp}=this.lastCallInfo;return{txHash,anchorBlockTimestamp}}async executePrivateCall(from,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,authorizedUtilityCallTargets,gasSettings){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let{returnValues,offchainEffects}=await handler.privateCallNewFlow(from?.value,targetContractAddress,functionSelector,args,argsHash,isStaticCall,additionalScopes,this.currentChangeSetId,authorizedUtilityCallTargets,gasSettings);for(let data of offchainEffects)this.recordOffchainEffect(data);if(await this.cycleOperation(),isStaticCall)return{result:returnValues};let{txHash}=await handler.getLastTxEffects();return{result:returnValues,txHash:txHash.hash}})}async executeUtilityFunction(from,targetContractAddress,functionSelector,args,authorizedUtilityCallTargets){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let returnValues=await handler.executeUtilityFunction(from?.value,targetContractAddress,functionSelector,args,this.currentChangeSetId,authorizedUtilityCallTargets);return await this.cycleOperation(),{result:returnValues}})}async executePublicCall(from,targetContractAddress,calldata,isStaticCall,gasSettings){let handler=this.handlerAsTxe();return await this.withTopLevelCallTracking(async()=>{let returnValues=await handler.publicCallNewFlow(from?.value,targetContractAddress,calldata,isStaticCall,gasSettings);if(await this.cycleOperation(),isStaticCall)return{result:returnValues};let{txHash}=await handler.getLastTxEffects();return{result:returnValues,txHash:txHash.hash}})}async getPrivateEvents(selector,contractAddress,scope){let handler=this.handlerAsTxe();return await handler.syncContractNonOracleMethod(contractAddress,scope,this.currentChangeSetId),await this.cycleOperation(),handler.getPrivateEvents(selector,contractAddress,scope,this.currentChangeSetId)}handlerAsTxe(){if(!("isTxe"in this.oracleHandler))throw new UnavailableOracleError2("Txe");return this.oracleHandler}setTxeOracleVersion(major2,minor){if(major2!==4){let hint=major2>4?"The test was compiled with a newer version of Aztec.nr than your test environment supports. Upgrade your test environment to a compatible version.":"The test was compiled with an older version of Aztec.nr than your test environment supports. Recompile the test with a compatible version of Aztec.nr.";throw new Error(`Incompatible test environment version: ${hint} See https://docs.aztec.network/errors/12 (expected test oracle major version ${4}, got ${major2})`)}this.txeOracleVersion={major:major2,minor},this.logger.debug(`Test compiled with test oracle version ${major2}.${minor}`)}async enterTopLevelState(){switch(this.state.name){case"PRIVATE":{await this.exitPrivateState();break}case"PUBLIC":{await this.exitPublicState();break}case"UTILITY":{this.exitUtilityContext();break}case"TOP_LEVEL":throw new Error("Expected to be in state other than TOP_LEVEL");default:this.state}await this.cycleOperation(),this.oracleHandler=new TXEOracleTopLevelContext(this.stateMachine,this.contractStore,this.noteStore,this.keyStore,this.addressStore,this.accountStore,this.senderTaggingStore,this.recipientTaggingStore,this.taggingSecretSourcesStore,this.capsuleStore,this.factStore,this.privateEventStore,this.nextBlockTimestamp,this.version,this.chainId,this.authwits,this.taggingSecretStrategies,this.authorizeAllUtilityCallTargets,this.artifactResolver,this.rootPath,this.packageName),this.state={name:"TOP_LEVEL"},this.logger.debug(`Entered state ${this.state.name}`)}async enterPrivateState(contractAddressOpt,anchorBlockNumberOpt,gasSettings){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS,anchorBlockNumber=anchorBlockNumberOpt?.value;this.exitTopLevelState(),this.resetLastCall();let anchorBlock=await this.stateMachine.node.getBlock(anchorBlockNumber??"latest").then(b=>b?.header);await new NoteService(this.noteStore,this.stateMachine.node,anchorBlock,this.currentChangeSetId).syncNoteNullifiers(contractAddress,await this.keyStore.getAccounts());let latestBlock=await this.stateMachine.node.getBlock("latest").then(b=>b?.header),nextBlockGlobalVariables=makeGlobalVariables(void 0,{blockNumber:BlockNumber(latestBlock.globalVariables.blockNumber+1),timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId}),txRequestHash=getSingleTxBlockRequestHash(nextBlockGlobalVariables.blockNumber),protocolNullifier=await computeProtocolNullifier(txRequestHash),noteCache=new ExecutionNoteCache(protocolNullifier),taggingIndexCache=new ExecutionTaggingIndexCache,utilityExecutor=this.utilityExecutorForContractSync(anchorBlock),transientArrayService=new TransientArrayService,anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlock);return this.oracleHandler=new TXEPrivateExecutionOracle({argsHash:Fr.ZERO,txContext:new TxContext(this.chainId,this.version,gasSettings),txRequestSalt:Fr.ZERO,callContext:new CallContext(AztecAddress.ZERO,contractAddress,FunctionSelector.empty(),!1),anchorBlockHeader:anchorBlock,utilityExecutor,authWitnesses:[],capsules:[],executionCache:new HashedValuesCache,noteCache,taggingIndexCache,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,await this.keyStore.getAccounts()),factService:new FactService(this.factStore,await this.keyStore.getAccounts()),privateEventStore:this.privateEventStore,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes:await this.keyStore.getAccounts(),txResolver:this.stateMachine.txResolver,simulator:new WASMSimulator,hooks:composeHooks({resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies),authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0}),transientArrayService}),this.state={name:"PRIVATE",nextBlockGlobalVariables,noteCache,taggingIndexCache},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,anchorBlock.globalVariables.timestamp),this.oracleHandler.getPrivateContextInputs()}async enterPublicState(contractAddressOpt){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS;this.exitTopLevelState(),this.resetLastCall();let latestHeader=(await this.stateMachine.node.getBlockData("latest")).header,globalVariables=makeGlobalVariables(void 0,{blockNumber:BlockNumber(latestHeader.globalVariables.blockNumber+1),timestamp:this.nextBlockTimestamp,version:this.version,chainId:this.chainId});this.oracleHandler=new TXEOraclePublicContext(contractAddress,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),getSingleTxBlockRequestHash(globalVariables.blockNumber),globalVariables,this.contractStore),this.state={name:"PUBLIC"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,latestHeader.globalVariables.timestamp)}async enterUtilityState(contractAddressOpt){let contractAddress=contractAddressOpt?.value??DEFAULT_ADDRESS;this.exitTopLevelState(),this.resetLastCall();let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();await new NoteService(this.noteStore,this.stateMachine.node,anchorBlockHeader,this.currentChangeSetId).syncNoteNullifiers(contractAddress,await this.keyStore.getAccounts()),this.oracleHandler=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:AztecAddress.NULL_MSG_SENDER,contractAddress,functionSelector:FunctionSelector.empty(),isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader,anchoredContractData:new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlockHeader),noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,await this.keyStore.getAccounts()),factService:new FactService(this.factStore,await this.keyStore.getAccounts()),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes:await this.keyStore.getAccounts(),simulator:new WASMSimulator,utilityExecutor:this.utilityExecutorForContractSync(anchorBlockHeader),hooks:composeHooks({authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0}),transientArrayService:new TransientArrayService}),this.state={name:"UTILITY"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Fr.ZERO,anchorBlockHeader.globalVariables.timestamp)}exitTopLevelState(){if(this.state.name!="TOP_LEVEL")throw new Error(`Expected to be in state 'TOP_LEVEL', but got '${this.state.name}' instead`);({nextBlockTimestamp:this.nextBlockTimestamp,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets}=this.oracleHandler.close())}async exitPrivateState(){if(this.state.name!="PRIVATE")throw new Error(`Expected to be in state 'PRIVATE', but got '${this.state.name}' instead`);this.logger.debug("Exiting Private state, building block with collected side effects",{blockNumber:this.state.nextBlockGlobalVariables.blockNumber});let txEffect=await makeTxEffect(this.state.noteCache,this.state.nextBlockGlobalVariables.blockNumber),forkedWorldTrees=await this.stateMachine.synchronizer.nativeWorldStateService.fork();await insertTxEffectIntoWorldTrees(txEffect,forkedWorldTrees);let block=await makeTXEBlock(forkedWorldTrees,this.state.nextBlockGlobalVariables,[txEffect]);await this.stateMachine.handleL2Block(block),await forkedWorldTrees.close(),this.logger.debug("Exited PublicContext with built block",{blockNumber:block.number,txEffects:block.body.txEffects})}async exitPublicState(){if(this.state.name!="PUBLIC")throw new Error(`Expected to be in state 'PUBLIC', but got '${this.state.name}' instead`);let block=await this.oracleHandler.close();await this.stateMachine.handleL2Block(block)}exitUtilityContext(){if(this.state.name!="UTILITY")throw new Error(`Expected to be in state 'UTILITY', but got '${this.state.name}' instead`)}utilityExecutorForContractSync(anchorBlock){return async(call,scopes)=>{let anchoredContractData=new AnchoredContractData(this.contractStore,this.stateMachine.contractClassService,anchorBlock),entryPointArtifact=await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to,call.selector);if(!entryPointArtifact)throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered.`);if(entryPointArtifact.functionType!==FunctionType.UTILITY)throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);try{let simulator=new WASMSimulator,oracle=new UtilityExecutionOracle({callContext:CallContext.from({msgSender:AztecAddress.NULL_MSG_SENDER,contractAddress:call.to,functionSelector:call.selector,isStaticCall:!0}),authWitnesses:[],capsules:[],anchorBlockHeader:anchorBlock,anchoredContractData,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,aztecNode:this.stateMachine.node,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleService:new CapsuleService(this.capsuleStore,scopes),factService:new FactService(this.factStore,scopes),privateEventStore:this.privateEventStore,txResolver:this.stateMachine.txResolver,contractSyncService:this.stateMachine.contractSyncService,l2TipsStore:this.stateMachine.l2TipsProvider,changeSetId:this.currentChangeSetId,scopes,simulator,utilityExecutor:this.utilityExecutorForContractSync(anchorBlock),transientArrayService:new TransientArrayService});await simulator.executeUserCircuit(toACVMWitness(0,call.args),entryPointArtifact,buildACIRCallback(oracle)).catch(err=>{throw err.message=resolveAssertionMessageFromError(err,entryPointArtifact),new ExecutionError(err.message,{contractAddress:call.to,functionSelector:call.selector},extractCallStack(err,entryPointArtifact.debug),{cause:err})})}catch(err){throw createSimulationError(err instanceof Error?err:new Error("Unknown error contract data sync"))}}}};var ForeignCallSingleSchema=external_exports.string(),ForeignCallArraySchema=external_exports.array(external_exports.string()),ForeignCallArgsSchema=external_exports.array(external_exports.union([ForeignCallSingleSchema,ForeignCallArraySchema,ContractArtifactSchema,ContractInstanceWithAddressSchema])),ForeignCallResultSchema=external_exports.object({values:external_exports.array(external_exports.union([ForeignCallSingleSchema,ForeignCallArraySchema]))});var ContractClassRegistryContractArtifact={name:"ContractClassRegistry",aztecVersion:"5.1.0",functions:[{functionType:FunctionType.PRIVATE,name:"publish",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"artifact_hash",type:{kind:"field"},visibility:"private"},{name:"private_functions_root",type:{kind:"field"},visibility:"private"},{name:"public_bytecode_commitment",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"10965409165809799877":{error_kind:"string",string:"Given in_len to absorb is larger than the input array len"},"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15669273164684982983":{error_kind:"string",string:"num_permutations is greater than MAX_PERMUTATIONS"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"16450579948625159707":{error_kind:"string",string:"Sponge must be in cache_size=1"},"17655676068928457687":{error_kind:"string",string:"Reader did not read all data"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"922421554006670918":{error_kind:"string",string:"num_items is greater than MAX_ITEMS"},"9475115977882098926":{error_kind:"string",string:"Extra bytes in the last field of the bytecode"}},bytecode:Buffer.from([]),debugSymbols:""},{functionType:FunctionType.PUBLIC,name:"public_dispatch",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"1335198680857977525":{error_kind:"string",string:"No public functions"}},bytecode:Buffer.from([]),debugSymbols:""}],nonDispatchPublicFunctions:[],outputs:{structs:{},globals:{}},storageLayout:{},fileMap:{}};var ContractInstanceRegistryContractArtifact={name:"ContractInstanceRegistry",aztecVersion:"5.1.0",functions:[{functionType:FunctionType.PUBLIC,name:"public_dispatch",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],returnTypes:[],errorTypes:{"11194752367584870169":{error_kind:"fmtstring",length:27,item_types:[{kind:"field"}]},"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"12579274401768182412":{error_kind:"string",string:"New contract class is not registered"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"5755400808989454547":{error_kind:"string",string:"Function get_update_delay can only be called statically"},"6804164082532189961":{error_kind:"string",string:"New update delay is too low"}},bytecode:Buffer.from([]),debugSymbols:""},{functionType:FunctionType.PRIVATE,name:"publish_for_public_execution",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"salt",type:{kind:"field"},visibility:"private"},{name:"contract_class_id",type:{kind:"struct",fields:[{name:"inner",type:{kind:"field"}}],path:"aztec::protocol_types::contract_class_id::ContractClassId"},visibility:"private"},{name:"initialization_hash",type:{kind:"field"},visibility:"private"},{name:"immutables_hash",type:{kind:"field"},visibility:"private"},{name:"public_keys",type:{kind:"struct",fields:[{name:"npk_m_hash",type:{kind:"field"}},{name:"ivpk_m",type:{kind:"struct",fields:[{name:"inner",type:{kind:"struct",fields:[{name:"x",type:{kind:"field"}},{name:"y",type:{kind:"field"}}],path:"std::embedded_curve_ops::EmbeddedCurvePoint"}}],path:"aztec::protocol_types::public_keys::IvpkM"}},{name:"ovpk_m_hash",type:{kind:"field"}},{name:"tpk_m_hash",type:{kind:"field"}},{name:"mspk_m_hash",type:{kind:"field"}},{name:"fbpk_m_hash",type:{kind:"field"}}],path:"aztec::protocol_types::public_keys::PublicKeys"},visibility:"private"},{name:"universal_deploy",type:{kind:"boolean"},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"14483585040754951598":{error_kind:"string",string:"IvpkM is the point at infinity"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"718532354304118388":{error_kind:"string",string:"Point not on curve"}},bytecode:Buffer.from([]),debugSymbols:""}],nonDispatchPublicFunctions:[{functionType:FunctionType.PUBLIC,name:"get_update_delay",isOnlySelf:!1,isStatic:!0,isInitializer:!1,parameters:[],returnTypes:[{kind:"integer",sign:"unsigned",width:64}],errorTypes:{"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"5755400808989454547":{error_kind:"string",string:"Function get_update_delay can only be called statically"}}},{functionType:FunctionType.PUBLIC,name:"set_update_delay",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"new_update_delay",type:{kind:"integer",sign:"unsigned",width:64},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"6804164082532189961":{error_kind:"string",string:"New update delay is too low"}}},{functionType:FunctionType.PUBLIC,name:"update",isOnlySelf:!1,isStatic:!1,isInitializer:!1,parameters:[{name:"new_contract_class_id",type:{kind:"struct",fields:[{name:"inner",type:{kind:"field"}}],path:"aztec::protocol_types::contract_class_id::ContractClassId"},visibility:"private"}],returnTypes:[],errorTypes:{"12469291177396340830":{error_kind:"string",string:"call to assert_max_bit_size"},"12579274401768182412":{error_kind:"string",string:"New contract class is not registered"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15353471697975175405":{error_kind:"string",string:"msg.sender is not deployed"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"}}}],outputs:{structs:{},globals:{}},storageLayout:{},fileMap:{}};var DefaultWaitOpts={ignoreDroppedReceiptsFor:5,timeout:300,interval:1};var DefaultWaitForProvenOpts={provenTimeout:600,interval:DefaultWaitOpts.interval};import{createHash as createHash2}from"crypto";import{createReadStream}from"fs";import{readFile,readdir}from"fs/promises";import{join as join4,parse as parse3}from"path";var AsyncCache=class{static{__name(this,"AsyncCache")}#cache=new Map;#inFlight=new Map;getOrCompute(key,compute){let cached2=this.#cache.get(key);if(cached2!==void 0)return Promise.resolve(cached2);let pending=this.#inFlight.get(key);return pending||(pending=(async()=>{try{let value=await compute();return this.#cache.set(key,value),value}finally{this.#inFlight.delete(key)}})(),this.#inFlight.set(key,pending)),pending}},TXEArtifactResolver=class{constructor(contractStore,schnorrClassId){this.contractStore=contractStore;this.schnorrClassId=schnorrClassId}static{__name(this,"TXEArtifactResolver")}#deployments=new AsyncCache;#artifacts=new AsyncCache;#logger=createLogger("txe:artifact_resolver");resolveAccountArtifact(secret){return this.#deployments.getOrCompute(`SchnorrAccountContract-${secret}`,()=>this.#computeAccountArtifact(secret))}async resolveDeployArtifact({rootPath,packageName,contractPath,initializer:initializer3,args,secret,salt,deployer}){let publicKeys=secret.equals(Fr.ZERO)?PublicKeys.default():(await deriveKeys(secret)).publicKeys,publicKeysHash=await publicKeys.hash(),artifactPath=await this.#resolveArtifactPath(rootPath,packageName,contractPath),fileHash=await this.#fastHashFile(artifactPath),{dir:contractDirectory,base:contractFilename}=parse3(contractPath),cacheKey=`${contractDirectory??""}-${contractFilename}-${initializer3}-${args.map(arg=>arg.toString()).join("-")}-${publicKeysHash}-${salt}-${deployer}-${fileHash}`;return this.#deployments.getOrCompute(cacheKey,()=>this.#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer))}async#resolveArtifactPath(rootPath,packageName,contractPath){let{dir:contractDirectory,base:contractFilename}=parse3(contractPath);if(contractDirectory)if(contractDirectory.includes("@")){let[workspace,pkg]=contractDirectory.split("@"),targetPath=join4(rootPath,workspace,"/target");return this.#logger.debug(`Looking for compiled artifact in workspace ${targetPath}`),join4(targetPath,`${pkg}-${contractFilename}.json`)}else{let targetPath=join4(rootPath,contractDirectory,"/target");this.#logger.debug(`Looking for compiled artifact in ${targetPath}`);let[artifactPath]=(await readdir(targetPath)).filter(file2=>file2.endsWith(`-${contractFilename}.json`));return artifactPath}else return join4(rootPath,"./target",`${packageName}-${contractFilename}.json`)}async#computeAccountArtifact(secret){let[artifactFromStore,classWithPreimage]=await Promise.all([this.contractStore.getContractArtifact(this.schnorrClassId),this.contractStore.getContractClassWithPreimage(this.schnorrClassId)]);if(!artifactFromStore||!classWithPreimage)throw new Error(`SchnorrAccount not found in shared contract store at class id ${this.schnorrClassId.toString()}`);let artifact={...artifactFromStore,artifactHash:classWithPreimage.artifactHash},keys=await deriveKeys(secret),args=[keys.publicKeys.ivpkM.x,keys.publicKeys.ivpkM.y],instance=await getContractInstanceFromInstantiationParams(artifact,{constructorArgs:args,skipArgsDecoding:!0,salt:Fr.ONE,publicKeys:keys.publicKeys,constructorArtifact:"constructor",deployer:AztecAddress.ZERO});return{artifact,instance}}async#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer){let artifact=await this.#artifacts.getOrCompute(fileHash,async()=>{this.#logger.debug(`Loading compiled artifact ${artifactPath}`);let artifactJSON=JSON.parse(await readFile(artifactPath,"utf-8")),artifactWithoutHash=loadContractArtifact(artifactJSON);return{...artifactWithoutHash,artifactHash:await computeArtifactHash(artifactWithoutHash)}});this.#logger.debug(`Deploy ${artifact.name} with initializer ${initializer3}(${args}) and public keys hash ${publicKeysHash}`);let instance=await getContractInstanceFromInstantiationParams(artifact,{constructorArgs:args,skipArgsDecoding:!0,salt,publicKeys,constructorArtifact:initializer3||void 0,deployer});return{artifact,instance}}#fastHashFile(path){return new Promise(resolve=>{let fd=createReadStream(path),hash5=createHash2("sha1");hash5.setEncoding("hex"),fd.on("end",function(){hash5.end(),resolve(hash5.read())}),fd.pipe(hash5)})}};var TXE_REQUIRED_PROTOCOL_CONTRACTS=["ContractClassRegistry","ContractInstanceRegistry","FeeJuice"],sessions=new Map,TXEForeignCallInputSchema=zodFor()(external_exports.object({session_id:external_exports.number().nonnegative(),function:external_exports.string(),root_path:external_exports.string(),package_name:external_exports.string(),inputs:ForeignCallArgsSchema})),TXEDispatcher=class{constructor(logger3,opts){this.logger=logger3;this.contractStoreSourceDir=opts.contractStoreSourceDir,this.schnorrClassId=Fr.fromString(opts.schnorrClassId)}static{__name(this,"TXEDispatcher")}contractStore;artifactResolver;contractStoreSourceDir;schnorrClassId;async warmUp(){if(this.contractStore)return;let t0=Date.now(),kvStore=await cloneEphemeralStoreFrom(join5(this.contractStoreSourceDir,"data.mdb"),"txe-contracts",void 0,2);this.contractStore=new ContractStore(kvStore),this.artifactResolver=new TXEArtifactResolver(this.contractStore,this.schnorrClassId),this.logger.debug("Cloned shared protocol-contracts store",{totalMs:Date.now()-t0})}async resolve_foreign_call(callData){let{session_id:sessionId,function:functionName,inputs,root_path:rootPath,package_name:packageName}=callData;return this.logger.debug(`Calling ${functionName} on session ${sessionId}`),sessions.has(sessionId)||(this.logger.debug(`Creating new session ${sessionId}`),await this.warmUp(),sessions.set(sessionId,await TXESession.init(this.contractStore,this.artifactResolver,rootPath,packageName))),await sessions.get(sessionId).processFunction(functionName,inputs)}async disposeSession(sessionId){let session=sessions.get(sessionId);session&&(sessions.delete(sessionId),await session.dispose())}};function activeSessionCount(){return sessions.size}__name(activeSessionCount,"activeSessionCount");var TXEDispatcherApiSchema={resolve_foreign_call:external_exports.function({input:external_exports.tuple([TXEForeignCallInputSchema]),output:ForeignCallResultSchema}),disposeSession:external_exports.function({input:external_exports.tuple([external_exports.number().nonnegative()]),output:external_exports.void()})};export{createLogger,ZodError,external_exports,Fr,schemaHasMethod,getSchemaParameters,parseWithOptionals,require_inherits,sha256ToField,promiseWithResolvers,Timer,jsonStringify,loadContractArtifact,getContractClassFromArtifact,openEphemeralStore,LazyProtocolContractsProvider,ContractStore,getStandardAuthRegistry,getStandardHandshakeRegistry,TXE_REQUIRED_PROTOCOL_CONTRACTS,TXEDispatcher,activeSessionCount,TXEDispatcherApiSchema};
|