@aztec-labs/txe 6.0.0-rc.4 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -254,6 +254,6 @@ See docs for context: https://docs.aztec.network/errors/14`);let functionDao=art
254
254
  accumulatedData: ${inspect(this.accumulatedData)},
255
255
  transactionFee: ${inspect(this.transactionFee)},
256
256
  reverted: ${this.reverted},
257
- }`}};var AvmContractClassHint=class _AvmContractClassHint{static{__name(this,"AvmContractClassHint")}hintKey;classId;artifactHash;privateFunctionsRoot;packedBytecode;constructor(hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode){this.hintKey=hintKey,this.classId=classId,this.artifactHash=artifactHash,this.privateFunctionsRoot=privateFunctionsRoot,this.packedBytecode=packedBytecode}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),classId:schemas2.Fr,artifactHash:schemas2.Fr,privateFunctionsRoot:schemas2.Fr,packedBytecode:schemas2.Buffer}).transform(({hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode})=>new _AvmContractClassHint(hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode))}static fromPlainObject(obj){return obj instanceof _AvmContractClassHint?obj:new _AvmContractClassHint(obj.hintKey,Fr.fromPlainObject(obj.classId),Fr.fromPlainObject(obj.artifactHash),Fr.fromPlainObject(obj.privateFunctionsRoot),obj.packedBytecode instanceof Buffer73?obj.packedBytecode:Buffer73.from(obj.packedBytecode))}},AvmBytecodeCommitmentHint=class _AvmBytecodeCommitmentHint{static{__name(this,"AvmBytecodeCommitmentHint")}hintKey;classId;commitment;constructor(hintKey,classId,commitment){this.hintKey=hintKey,this.classId=classId,this.commitment=commitment}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),classId:schemas2.Fr,commitment:schemas2.Fr}).transform(({hintKey,classId,commitment})=>new _AvmBytecodeCommitmentHint(hintKey,classId,commitment))}static fromPlainObject(obj){return obj instanceof _AvmBytecodeCommitmentHint?obj:new _AvmBytecodeCommitmentHint(obj.hintKey,Fr.fromPlainObject(obj.classId),Fr.fromPlainObject(obj.commitment))}},AvmContractInstanceHint=class _AvmContractInstanceHint{static{__name(this,"AvmContractInstanceHint")}hintKey;address;salt;deployer;currentContractClassId;originalContractClassId;initializationHash;immutablesHash;publicKeys;constructor(hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys){this.hintKey=hintKey,this.address=address,this.salt=salt,this.deployer=deployer,this.currentContractClassId=currentContractClassId,this.originalContractClassId=originalContractClassId,this.initializationHash=initializationHash,this.immutablesHash=immutablesHash,this.publicKeys=publicKeys}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),address:AztecAddress.schema,salt:schemas2.Fr,deployer:AztecAddress.schema,currentContractClassId:schemas2.Fr,originalContractClassId:schemas2.Fr,initializationHash:schemas2.Fr,immutablesHash:schemas2.Fr,publicKeys:PublicKeys.schema}).transform(({hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys})=>new _AvmContractInstanceHint(hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys))}static fromPlainObject(obj){return obj instanceof _AvmContractInstanceHint?obj:new _AvmContractInstanceHint(obj.hintKey,AztecAddress.fromPlainObject(obj.address),Fr.fromPlainObject(obj.salt),AztecAddress.fromPlainObject(obj.deployer),Fr.fromPlainObject(obj.currentContractClassId),Fr.fromPlainObject(obj.originalContractClassId),Fr.fromPlainObject(obj.initializationHash),Fr.fromPlainObject(obj.immutablesHash),PublicKeys.fromPlainObject(obj.publicKeys))}},AvmDebugFunctionNameHint=class _AvmDebugFunctionNameHint{static{__name(this,"AvmDebugFunctionNameHint")}address;selector;name;constructor(address,selector,name){this.address=address,this.selector=selector,this.name=name}static get schema(){return external_exports.object({address:AztecAddress.schema,selector:schemas2.Fr,name:external_exports.string()}).transform(({address,selector,name})=>new _AvmDebugFunctionNameHint(address,selector,name))}static fromPlainObject(obj){return obj instanceof _AvmDebugFunctionNameHint?obj:new _AvmDebugFunctionNameHint(AztecAddress.fromPlainObject(obj.address),Fr.fromPlainObject(obj.selector),obj.name)}},AvmGetSiblingPathHint=class _AvmGetSiblingPathHint{static{__name(this,"AvmGetSiblingPathHint")}hintKey;treeId;index;path;constructor(hintKey,treeId,index,path5){this.hintKey=hintKey,this.treeId=treeId,this.index=index,this.path=path5}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),index:schemas2.BigInt,path:schemas2.Fr.array()}).transform(({hintKey,treeId,index,path:path5})=>new _AvmGetSiblingPathHint(hintKey,treeId,index,path5))}static fromPlainObject(obj){return obj instanceof _AvmGetSiblingPathHint?obj:new _AvmGetSiblingPathHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,typeof obj.index=="bigint"?obj.index:BigInt(obj.index),obj.path.map(p=>Fr.fromPlainObject(p)))}},AvmGetPreviousValueIndexHint=class _AvmGetPreviousValueIndexHint{static{__name(this,"AvmGetPreviousValueIndexHint")}hintKey;treeId;value;index;alreadyPresent;constructor(hintKey,treeId,value,index,alreadyPresent){this.hintKey=hintKey,this.treeId=treeId,this.value=value,this.index=index,this.alreadyPresent=alreadyPresent}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),value:schemas2.Fr,index:schemas2.BigInt,alreadyPresent:external_exports.boolean()}).transform(({hintKey,treeId,value,index,alreadyPresent})=>new _AvmGetPreviousValueIndexHint(hintKey,treeId,value,index,alreadyPresent))}static fromPlainObject(obj){return obj instanceof _AvmGetPreviousValueIndexHint?obj:new _AvmGetPreviousValueIndexHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,Fr.fromPlainObject(obj.value),typeof obj.index=="bigint"?obj.index:BigInt(obj.index),obj.alreadyPresent)}};function AvmGetLeafPreimageHintFactory(klass){return class{hintKey;index;leafPreimage;constructor(hintKey,index,leafPreimage){this.hintKey=hintKey,this.index=index,this.leafPreimage=leafPreimage}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,index:schemas2.BigInt,leafPreimage:klass.schema}).transform(({hintKey,index,leafPreimage})=>new this(hintKey,index,leafPreimage))}static fromPlainObject(obj){return obj instanceof this?obj:new this(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),typeof obj.index=="bigint"?obj.index:BigInt(obj.index),klass.fromPlainObject(obj.leafPreimage))}}}__name(AvmGetLeafPreimageHintFactory,"AvmGetLeafPreimageHintFactory");var AvmGetLeafPreimageHintPublicDataTree=class extends AvmGetLeafPreimageHintFactory(PublicDataTreeLeafPreimage){static{__name(this,"AvmGetLeafPreimageHintPublicDataTree")}},AvmGetLeafPreimageHintNullifierTree=class extends AvmGetLeafPreimageHintFactory(NullifierLeafPreimage){static{__name(this,"AvmGetLeafPreimageHintNullifierTree")}},AvmGetLeafValueHint=class _AvmGetLeafValueHint{static{__name(this,"AvmGetLeafValueHint")}hintKey;treeId;index;value;constructor(hintKey,treeId,index,value){this.hintKey=hintKey,this.treeId=treeId,this.index=index,this.value=value}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),index:schemas2.BigInt,value:schemas2.Fr}).transform(({hintKey,treeId,index,value})=>new _AvmGetLeafValueHint(hintKey,treeId,index,value))}static fromPlainObject(obj){return obj instanceof _AvmGetLeafValueHint?obj:new _AvmGetLeafValueHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,typeof obj.index=="bigint"?obj.index:BigInt(obj.index),Fr.fromPlainObject(obj.value))}};function AvmSequentialInsertHintFactory(klass){return class{hintKey;stateAfter;treeId;leaf;lowLeavesWitnessData;insertionWitnessData;constructor(hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData){this.hintKey=hintKey,this.stateAfter=stateAfter,this.treeId=treeId,this.leaf=leaf,this.lowLeavesWitnessData=lowLeavesWitnessData,this.insertionWitnessData=insertionWitnessData}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,stateAfter:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),leaf:klass.leafSchema,lowLeavesWitnessData:external_exports.object({leaf:klass.schema,index:schemas2.BigInt,path:schemas2.Fr.array()}),insertionWitnessData:external_exports.object({leaf:klass.schema,index:schemas2.BigInt,path:schemas2.Fr.array()})}).transform(({hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData})=>new this(hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData))}static fromPlainObject(obj){if(obj instanceof this)return obj;let LeafClass=klass===PublicDataTreeLeafPreimage?PublicDataTreeLeaf:NullifierLeaf;return new this(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),AppendOnlyTreeSnapshot.fromPlainObject(obj.stateAfter),obj.treeId,LeafClass.fromPlainObject(obj.leaf),{leaf:klass.fromPlainObject(obj.lowLeavesWitnessData.leaf),index:typeof obj.lowLeavesWitnessData.index=="bigint"?obj.lowLeavesWitnessData.index:BigInt(obj.lowLeavesWitnessData.index),path:obj.lowLeavesWitnessData.path.map(p=>Fr.fromPlainObject(p))},{leaf:klass.fromPlainObject(obj.insertionWitnessData.leaf),index:typeof obj.insertionWitnessData.index=="bigint"?obj.insertionWitnessData.index:BigInt(obj.insertionWitnessData.index),path:obj.insertionWitnessData.path.map(p=>Fr.fromPlainObject(p))})}}}__name(AvmSequentialInsertHintFactory,"AvmSequentialInsertHintFactory");var AvmSequentialInsertHintPublicDataTree=class extends AvmSequentialInsertHintFactory(PublicDataTreeLeafPreimage){static{__name(this,"AvmSequentialInsertHintPublicDataTree")}},AvmSequentialInsertHintNullifierTree=class extends AvmSequentialInsertHintFactory(NullifierLeafPreimage){static{__name(this,"AvmSequentialInsertHintNullifierTree")}},AvmAppendLeavesHint=class _AvmAppendLeavesHint{static{__name(this,"AvmAppendLeavesHint")}hintKey;stateAfter;treeId;leaves;constructor(hintKey,stateAfter,treeId,leaves){this.hintKey=hintKey,this.stateAfter=stateAfter,this.treeId=treeId,this.leaves=leaves}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,stateAfter:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),leaves:schemas2.Fr.array()}).transform(({hintKey,stateAfter,treeId,leaves})=>new _AvmAppendLeavesHint(hintKey,stateAfter,treeId,leaves))}static fromPlainObject(obj){return obj instanceof _AvmAppendLeavesHint?obj:new _AvmAppendLeavesHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),AppendOnlyTreeSnapshot.fromPlainObject(obj.stateAfter),obj.treeId,obj.leaves.map(l=>Fr.fromPlainObject(l)))}},AvmCheckpointActionNoStateChangeHint=class{static{__name(this,"AvmCheckpointActionNoStateChangeHint")}actionCounter;oldCheckpointId;newCheckpointId;constructor(actionCounter,oldCheckpointId,newCheckpointId){this.actionCounter=actionCounter,this.oldCheckpointId=oldCheckpointId,this.newCheckpointId=newCheckpointId}static get schema(){return external_exports.object({actionCounter:external_exports.number().int().nonnegative(),oldCheckpointId:external_exports.number().int().nonnegative(),newCheckpointId:external_exports.number().int().nonnegative()}).transform(({actionCounter,oldCheckpointId,newCheckpointId})=>new this(actionCounter,oldCheckpointId,newCheckpointId))}static fromPlainObject(obj){return obj instanceof this?obj:new this(obj.actionCounter,obj.oldCheckpointId,obj.newCheckpointId)}},AvmCreateCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmCreateCheckpointHint")}},AvmCommitCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmCommitCheckpointHint")}},AvmRevertCheckpointHint=class _AvmRevertCheckpointHint{static{__name(this,"AvmRevertCheckpointHint")}actionCounter;oldCheckpointId;newCheckpointId;stateBefore;stateAfter;constructor(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter){this.actionCounter=actionCounter,this.oldCheckpointId=oldCheckpointId,this.newCheckpointId=newCheckpointId,this.stateBefore=stateBefore,this.stateAfter=stateAfter}static create(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter){return new _AvmRevertCheckpointHint(actionCounter,oldCheckpointId,newCheckpointId,new TreeSnapshots(stateBefore[MerkleTreeId.L1_TO_L2_MESSAGE_TREE],stateBefore[MerkleTreeId.NOTE_HASH_TREE],stateBefore[MerkleTreeId.NULLIFIER_TREE],stateBefore[MerkleTreeId.PUBLIC_DATA_TREE]),new TreeSnapshots(stateAfter[MerkleTreeId.L1_TO_L2_MESSAGE_TREE],stateAfter[MerkleTreeId.NOTE_HASH_TREE],stateAfter[MerkleTreeId.NULLIFIER_TREE],stateAfter[MerkleTreeId.PUBLIC_DATA_TREE]))}static get schema(){return external_exports.object({actionCounter:external_exports.number().int().nonnegative(),oldCheckpointId:external_exports.number().int().nonnegative(),newCheckpointId:external_exports.number().int().nonnegative(),stateBefore:TreeSnapshots.schema,stateAfter:TreeSnapshots.schema}).transform(({actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter})=>new _AvmRevertCheckpointHint(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter))}static fromPlainObject(obj){return obj instanceof _AvmRevertCheckpointHint?obj:new _AvmRevertCheckpointHint(obj.actionCounter,obj.oldCheckpointId,obj.newCheckpointId,TreeSnapshots.fromPlainObject(obj.stateBefore),TreeSnapshots.fromPlainObject(obj.stateAfter))}},AvmContractDbCreateCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbCreateCheckpointHint")}},AvmContractDbCommitCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbCommitCheckpointHint")}},AvmContractDbRevertCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbRevertCheckpointHint")}},AvmTxHint=class _AvmTxHint{static{__name(this,"AvmTxHint")}hash;gasSettings;effectiveGasFees;nonRevertibleContractDeploymentData;revertibleContractDeploymentData;nonRevertibleAccumulatedData;revertibleAccumulatedData;setupEnqueuedCalls;appLogicEnqueuedCalls;teardownEnqueuedCall;gasUsedByPrivate;feePayer;constructor(hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer){this.hash=hash5,this.gasSettings=gasSettings,this.effectiveGasFees=effectiveGasFees,this.nonRevertibleContractDeploymentData=nonRevertibleContractDeploymentData,this.revertibleContractDeploymentData=revertibleContractDeploymentData,this.nonRevertibleAccumulatedData=nonRevertibleAccumulatedData,this.revertibleAccumulatedData=revertibleAccumulatedData,this.setupEnqueuedCalls=setupEnqueuedCalls,this.appLogicEnqueuedCalls=appLogicEnqueuedCalls,this.teardownEnqueuedCall=teardownEnqueuedCall,this.gasUsedByPrivate=gasUsedByPrivate,this.feePayer=feePayer}static fromTx(tx,gasFees){let setupCallRequests=tx.getNonRevertiblePublicCallRequestsWithCalldata(),appLogicCallRequests=tx.getRevertiblePublicCallRequestsWithCalldata(),teardownCallRequest=tx.getTeardownPublicCallRequestWithCalldata(),gasSettings=tx.data.constants.txContext.gasSettings,effectiveGasFees=computeEffectiveGasFees(gasFees,gasSettings),allContractDeploymentData=AllContractDeploymentData.fromTx(tx),txHash=tx.getTxHash();return new _AvmTxHint(txHash.hash.toString(),gasSettings,effectiveGasFees,allContractDeploymentData.getNonRevertibleContractDeploymentData(),allContractDeploymentData.getRevertibleContractDeploymentData(),{noteHashes:tx.data.forPublic.nonRevertibleAccumulatedData.noteHashes.filter(x=>!x.isZero()),nullifiers:tx.data.forPublic.nonRevertibleAccumulatedData.nullifiers.filter(x=>!x.isZero()),l2ToL1Messages:tx.data.forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs.filter(x=>!x.isEmpty())},{noteHashes:tx.data.forPublic.revertibleAccumulatedData.noteHashes.filter(x=>!x.isZero()),nullifiers:tx.data.forPublic.revertibleAccumulatedData.nullifiers.filter(x=>!x.isZero()),l2ToL1Messages:tx.data.forPublic.revertibleAccumulatedData.l2ToL1Msgs.filter(x=>!x.isEmpty())},setupCallRequests,appLogicCallRequests,teardownCallRequest??null,tx.data.gasUsed,tx.data.feePayer)}static empty(){return new _AvmTxHint("",GasSettings.empty(),GasFees.empty(),ContractDeploymentData.empty(),ContractDeploymentData.empty(),{noteHashes:[],nullifiers:[],l2ToL1Messages:[]},{noteHashes:[],nullifiers:[],l2ToL1Messages:[]},[],[],null,Gas.empty(),AztecAddress.zero())}static fromPlainObject(obj){return obj instanceof _AvmTxHint?obj:new _AvmTxHint(obj.hash,GasSettings.fromPlainObject(obj.gasSettings),GasFees.fromPlainObject(obj.effectiveGasFees),ContractDeploymentData.fromPlainObject(obj.nonRevertibleContractDeploymentData),ContractDeploymentData.fromPlainObject(obj.revertibleContractDeploymentData),{noteHashes:obj.nonRevertibleAccumulatedData.noteHashes.map(h=>Fr.fromPlainObject(h)),nullifiers:obj.nonRevertibleAccumulatedData.nullifiers.map(n=>Fr.fromPlainObject(n)),l2ToL1Messages:obj.nonRevertibleAccumulatedData.l2ToL1Messages.map(m=>ScopedL2ToL1Message.fromPlainObject(m))},{noteHashes:obj.revertibleAccumulatedData.noteHashes.map(h=>Fr.fromPlainObject(h)),nullifiers:obj.revertibleAccumulatedData.nullifiers.map(n=>Fr.fromPlainObject(n)),l2ToL1Messages:obj.revertibleAccumulatedData.l2ToL1Messages.map(m=>ScopedL2ToL1Message.fromPlainObject(m))},obj.setupEnqueuedCalls.map(c2=>PublicCallRequestWithCalldata.fromPlainObject(c2)),obj.appLogicEnqueuedCalls.map(c2=>PublicCallRequestWithCalldata.fromPlainObject(c2)),obj.teardownEnqueuedCall?PublicCallRequestWithCalldata.fromPlainObject(obj.teardownEnqueuedCall):null,Gas.fromPlainObject(obj.gasUsedByPrivate),AztecAddress.fromPlainObject(obj.feePayer))}static get schema(){return external_exports.object({hash:external_exports.string(),gasSettings:GasSettings.schema,effectiveGasFees:GasFees.schema,nonRevertibleContractDeploymentData:ContractDeploymentData.schema,revertibleContractDeploymentData:ContractDeploymentData.schema,nonRevertibleAccumulatedData:external_exports.object({noteHashes:schemas2.Fr.array(),nullifiers:schemas2.Fr.array(),l2ToL1Messages:ScopedL2ToL1Message.schema.array()}),revertibleAccumulatedData:external_exports.object({noteHashes:schemas2.Fr.array(),nullifiers:schemas2.Fr.array(),l2ToL1Messages:ScopedL2ToL1Message.schema.array()}),setupEnqueuedCalls:PublicCallRequestWithCalldata.schema.array(),appLogicEnqueuedCalls:PublicCallRequestWithCalldata.schema.array(),teardownEnqueuedCall:PublicCallRequestWithCalldata.schema.nullable(),gasUsedByPrivate:Gas.schema,feePayer:AztecAddress.schema}).transform(({hash:hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer})=>new _AvmTxHint(hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer))}},AvmExecutionHints=class _AvmExecutionHints{static{__name(this,"AvmExecutionHints")}globalVariables;tx;protocolContracts;contractInstances;contractClasses;bytecodeCommitments;debugFunctionNames;contractDbCreateCheckpointHints;contractDbCommitCheckpointHints;contractDbRevertCheckpointHints;startingTreeRoots;getSiblingPathHints;getPreviousValueIndexHints;getLeafPreimageHintsPublicDataTree;getLeafPreimageHintsNullifierTree;getLeafValueHints;sequentialInsertHintsPublicDataTree;sequentialInsertHintsNullifierTree;appendLeavesHints;createCheckpointHints;commitCheckpointHints;revertCheckpointHints;constructor(globalVariables,tx,protocolContracts,contractInstances=[],contractClasses=[],bytecodeCommitments=[],debugFunctionNames=[],contractDbCreateCheckpointHints=[],contractDbCommitCheckpointHints=[],contractDbRevertCheckpointHints=[],startingTreeRoots=TreeSnapshots.empty(),getSiblingPathHints=[],getPreviousValueIndexHints=[],getLeafPreimageHintsPublicDataTree=[],getLeafPreimageHintsNullifierTree=[],getLeafValueHints=[],sequentialInsertHintsPublicDataTree=[],sequentialInsertHintsNullifierTree=[],appendLeavesHints=[],createCheckpointHints=[],commitCheckpointHints=[],revertCheckpointHints=[]){this.globalVariables=globalVariables,this.tx=tx,this.protocolContracts=protocolContracts,this.contractInstances=contractInstances,this.contractClasses=contractClasses,this.bytecodeCommitments=bytecodeCommitments,this.debugFunctionNames=debugFunctionNames,this.contractDbCreateCheckpointHints=contractDbCreateCheckpointHints,this.contractDbCommitCheckpointHints=contractDbCommitCheckpointHints,this.contractDbRevertCheckpointHints=contractDbRevertCheckpointHints,this.startingTreeRoots=startingTreeRoots,this.getSiblingPathHints=getSiblingPathHints,this.getPreviousValueIndexHints=getPreviousValueIndexHints,this.getLeafPreimageHintsPublicDataTree=getLeafPreimageHintsPublicDataTree,this.getLeafPreimageHintsNullifierTree=getLeafPreimageHintsNullifierTree,this.getLeafValueHints=getLeafValueHints,this.sequentialInsertHintsPublicDataTree=sequentialInsertHintsPublicDataTree,this.sequentialInsertHintsNullifierTree=sequentialInsertHintsNullifierTree,this.appendLeavesHints=appendLeavesHints,this.createCheckpointHints=createCheckpointHints,this.commitCheckpointHints=commitCheckpointHints,this.revertCheckpointHints=revertCheckpointHints}static fromPlainObject(obj){return obj instanceof _AvmExecutionHints?obj:new _AvmExecutionHints(GlobalVariables.fromPlainObject(obj.globalVariables),AvmTxHint.fromPlainObject(obj.tx),ProtocolContracts.fromPlainObject(obj.protocolContracts),obj.contractInstances?.map(i=>AvmContractInstanceHint.fromPlainObject(i))||[],obj.contractClasses?.map(c2=>AvmContractClassHint.fromPlainObject(c2))||[],obj.bytecodeCommitments?.map(b=>AvmBytecodeCommitmentHint.fromPlainObject(b))||[],obj.debugFunctionNames?.map(d=>AvmDebugFunctionNameHint.fromPlainObject(d))||[],obj.contractDbCreateCheckpointHints?.map(h=>AvmContractDbCreateCheckpointHint.fromPlainObject(h))||[],obj.contractDbCommitCheckpointHints?.map(h=>AvmContractDbCommitCheckpointHint.fromPlainObject(h))||[],obj.contractDbRevertCheckpointHints?.map(h=>AvmContractDbRevertCheckpointHint.fromPlainObject(h))||[],obj.startingTreeRoots?TreeSnapshots.fromPlainObject(obj.startingTreeRoots):TreeSnapshots.empty(),obj.getSiblingPathHints?.map(h=>AvmGetSiblingPathHint.fromPlainObject(h))||[],obj.getPreviousValueIndexHints?.map(h=>AvmGetPreviousValueIndexHint.fromPlainObject(h))||[],obj.getLeafPreimageHintsPublicDataTree?.map(h=>AvmGetLeafPreimageHintPublicDataTree.fromPlainObject(h))||[],obj.getLeafPreimageHintsNullifierTree?.map(h=>AvmGetLeafPreimageHintNullifierTree.fromPlainObject(h))||[],obj.getLeafValueHints?.map(h=>AvmGetLeafValueHint.fromPlainObject(h))||[],obj.sequentialInsertHintsPublicDataTree?.map(h=>AvmSequentialInsertHintPublicDataTree.fromPlainObject(h))||[],obj.sequentialInsertHintsNullifierTree?.map(h=>AvmSequentialInsertHintNullifierTree.fromPlainObject(h))||[],obj.appendLeavesHints?.map(h=>AvmAppendLeavesHint.fromPlainObject(h))||[],obj.createCheckpointHints?.map(h=>AvmCreateCheckpointHint.fromPlainObject(h))||[],obj.commitCheckpointHints?.map(h=>AvmCommitCheckpointHint.fromPlainObject(h))||[],obj.revertCheckpointHints?.map(h=>AvmRevertCheckpointHint.fromPlainObject(h))||[])}static empty(){return new _AvmExecutionHints(GlobalVariables.empty(),AvmTxHint.empty(),ProtocolContracts.empty())}static get schema(){return external_exports.object({globalVariables:GlobalVariables.schema,tx:AvmTxHint.schema,protocolContracts:ProtocolContracts.schema,contractInstances:AvmContractInstanceHint.schema.array(),contractClasses:AvmContractClassHint.schema.array(),bytecodeCommitments:AvmBytecodeCommitmentHint.schema.array(),debugFunctionNames:AvmDebugFunctionNameHint.schema.array(),contractDbCreateCheckpointHints:AvmContractDbCreateCheckpointHint.schema.array(),contractDbCommitCheckpointHints:AvmContractDbCommitCheckpointHint.schema.array(),contractDbRevertCheckpointHints:AvmContractDbRevertCheckpointHint.schema.array(),startingTreeRoots:TreeSnapshots.schema,getSiblingPathHints:AvmGetSiblingPathHint.schema.array(),getPreviousValueIndexHints:AvmGetPreviousValueIndexHint.schema.array(),getLeafPreimageHintsPublicDataTree:AvmGetLeafPreimageHintPublicDataTree.schema.array(),getLeafPreimageHintsNullifierTree:AvmGetLeafPreimageHintNullifierTree.schema.array(),getLeafValueHints:AvmGetLeafValueHint.schema.array(),sequentialInsertHintsPublicDataTree:AvmSequentialInsertHintPublicDataTree.schema.array(),sequentialInsertHintsNullifierTree:AvmSequentialInsertHintNullifierTree.schema.array(),appendLeavesHints:AvmAppendLeavesHint.schema.array(),createCheckpointHints:AvmCreateCheckpointHint.schema.array(),commitCheckpointHints:AvmCommitCheckpointHint.schema.array(),revertCheckpointHints:AvmRevertCheckpointHint.schema.array()}).transform(({globalVariables,tx,protocolContracts,contractInstances,contractClasses,bytecodeCommitments,debugFunctionNames,contractDbCreateCheckpointHints,contractDbCommitCheckpointHints,contractDbRevertCheckpointHints,startingTreeRoots,getSiblingPathHints,getPreviousValueIndexHints,getLeafPreimageHintsPublicDataTree,getLeafPreimageHintsNullifierTree,getLeafValueHints,sequentialInsertHintsPublicDataTree,sequentialInsertHintsNullifierTree,appendLeavesHints,createCheckpointHints,commitCheckpointHints,revertCheckpointHints})=>new _AvmExecutionHints(globalVariables,tx,protocolContracts,contractInstances,contractClasses,bytecodeCommitments,debugFunctionNames,contractDbCreateCheckpointHints,contractDbCommitCheckpointHints,contractDbRevertCheckpointHints,startingTreeRoots,getSiblingPathHints,getPreviousValueIndexHints,getLeafPreimageHintsPublicDataTree,getLeafPreimageHintsNullifierTree,getLeafValueHints,sequentialInsertHintsPublicDataTree,sequentialInsertHintsNullifierTree,appendLeavesHints,createCheckpointHints,commitCheckpointHints,revertCheckpointHints))}},AvmCircuitInputs=class _AvmCircuitInputs{static{__name(this,"AvmCircuitInputs")}hints;publicInputs;constructor(hints,publicInputs){this.hints=hints,this.publicInputs=publicInputs}static empty(){return new _AvmCircuitInputs(AvmExecutionHints.empty(),AvmCircuitPublicInputs.empty())}static fromPlainObject(obj){return new _AvmCircuitInputs(AvmExecutionHints.fromPlainObject(obj.hints),AvmCircuitPublicInputs.fromPlainObject(obj.publicInputs))}static get schema(){return external_exports.object({hints:AvmExecutionHints.schema,publicInputs:AvmCircuitPublicInputs.schema}).transform(({hints,publicInputs})=>new _AvmCircuitInputs(hints,publicInputs))}serializeWithMessagePack(){return serializeWithMessagePack(this)}toBuffer(){return Buffer73.from(jsonStringify(this))}static fromBuffer(buf){return jsonParseWithSchema(buf.toString(),this.schema)}},CallStackMetadata=class _CallStackMetadata{static{__name(this,"CallStackMetadata")}phase;contractAddress;callerPc;calldata;isStaticCall;gasLimit;output;internalCallStackAtExit;haltingMessage;reverted;nested;numNestedCalls;constructor(phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls){this.phase=phase,this.contractAddress=contractAddress,this.callerPc=callerPc,this.calldata=calldata,this.isStaticCall=isStaticCall,this.gasLimit=gasLimit,this.output=output,this.internalCallStackAtExit=internalCallStackAtExit,this.haltingMessage=haltingMessage,this.reverted=reverted,this.nested=nested,this.numNestedCalls=numNestedCalls}static get schema(){return external_exports.object({phase:external_exports.nativeEnum(TxExecutionPhase),contractAddress:Fr.schema,callerPc:external_exports.number(),calldata:Fr.schema.array(),isStaticCall:external_exports.boolean(),gasLimit:Gas.schema,output:Fr.schema.array(),internalCallStackAtExit:external_exports.number().array(),haltingMessage:NullishToUndefined(external_exports.string()),reverted:external_exports.boolean(),nested:_CallStackMetadata.schema.array(),numNestedCalls:external_exports.number()}).transform(({phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls})=>new _CallStackMetadata(phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls))}static fromPlainObject(obj){return obj instanceof _CallStackMetadata?obj:new _CallStackMetadata(obj.phase,Fr.fromPlainObject(obj.contractAddress),obj.callerPc,obj.calldata.map(f=>Fr.fromPlainObject(f)),obj.isStaticCall,Gas.fromPlainObject(obj.gasLimit),obj.output.map(f=>Fr.fromPlainObject(f)),obj.internalCallStackAtExit.map(p=>Number(p)),obj.haltingMessage,obj.reverted,obj.nested.map(n=>_CallStackMetadata.fromPlainObject(n)),obj.numNestedCalls)}getRevertReason(){let failingCall=this.findDeepestRevert([this]);if(!failingCall)return;let{stack,leaf}=failingCall,aztecCallStack=stack.map(call=>({contractAddress:AztecAddress.fromFieldUnsafe(call.contractAddress),functionSelector:call.calldata.length>0?FunctionSelector.fromFieldOrUndefined(call.calldata[0]):void 0})),noirCallStack=leaf.internalCallStackAtExit.map(pc=>`0.${pc}`);return new SimulationError(leaf.haltingMessage??"Transaction reverted",aztecCallStack,leaf.output,noirCallStack)}findDeepestRevert(calls,parentStack=[]){let lastReverted=calls.findLast(call=>call.reverted);if(!lastReverted)return;let currentStack=[...parentStack,lastReverted];return this.findDeepestRevert(lastReverted.nested,currentStack)||{stack:currentStack,leaf:lastReverted}}},PublicTxEffect=class _PublicTxEffect{static{__name(this,"PublicTxEffect")}transactionFee;noteHashes;nullifiers;l2ToL1Msgs;publicLogs;publicDataWrites;constructor(transactionFee,noteHashes,nullifiers,l2ToL1Msgs,publicLogs,publicDataWrites){this.transactionFee=transactionFee,this.noteHashes=noteHashes,this.nullifiers=nullifiers,this.l2ToL1Msgs=l2ToL1Msgs,this.publicLogs=publicLogs,this.publicDataWrites=publicDataWrites}static empty(){return new _PublicTxEffect(Fr.ZERO,[],[],[],[],[])}static get schema(){return external_exports.object({transactionFee:Fr.schema,noteHashes:Fr.schema.array(),nullifiers:Fr.schema.array(),l2ToL1Msgs:ScopedL2ToL1Message.schema.array(),publicLogs:PublicLog.schema.array(),publicDataWrites:PublicDataWrite.schema.array()}).transform(_PublicTxEffect.from)}static from(obj){return new _PublicTxEffect(obj.transactionFee,obj.noteHashes,obj.nullifiers,obj.l2ToL1Msgs,obj.publicLogs,obj.publicDataWrites)}static fromPlainObject(obj){return new _PublicTxEffect(Fr.fromPlainObject(obj.transactionFee),obj.noteHashes.map(h=>Fr.fromPlainObject(h)),obj.nullifiers.map(n=>Fr.fromPlainObject(n)),obj.l2ToL1Msgs.map(m=>ScopedL2ToL1Message.fromPlainObject(m)),obj.publicLogs.map(l=>PublicLog.fromPlainObject(l)),obj.publicDataWrites.map(w=>PublicDataWrite.fromPlainObject(w)))}equals(other){return this.transactionFee.equals(other.transactionFee)&&this.noteHashes.length===other.noteHashes.length&&this.noteHashes.every((h,i)=>h.equals(other.noteHashes[i]))&&this.nullifiers.length===other.nullifiers.length&&this.nullifiers.every((h,i)=>h.equals(other.nullifiers[i]))&&this.l2ToL1Msgs.length===other.l2ToL1Msgs.length&&this.l2ToL1Msgs.every((m,i)=>m.equals(other.l2ToL1Msgs[i]))&&this.publicLogs.length===other.publicLogs.length&&this.publicLogs.every((l,i)=>l.equals(other.publicLogs[i]))&&this.publicDataWrites.length===other.publicDataWrites.length&&this.publicDataWrites.every((w,i)=>w.equals(other.publicDataWrites[i]))}},PublicTxResult=class _PublicTxResult{static{__name(this,"PublicTxResult")}gasUsed;revertCode;publicTxEffect;callStackMetadata;logs;hints;publicInputs;stats;constructor(gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats={}){this.gasUsed=gasUsed,this.revertCode=revertCode,this.publicTxEffect=publicTxEffect,this.callStackMetadata=callStackMetadata,this.logs=logs,this.hints=hints,this.publicInputs=publicInputs,this.stats=stats}static empty(){return new _PublicTxResult({totalGas:Gas.empty(),teardownGas:Gas.empty(),publicGas:Gas.empty(),billedGas:Gas.empty()},RevertCode.OK,PublicTxEffect.empty(),[],[],AvmExecutionHints.empty(),AvmCircuitPublicInputs.empty())}static get schema(){return external_exports.object({gasUsed:schemas2.GasUsed,revertCode:RevertCode.schema,revertReason:NullishToUndefined(SimulationError.schema),publicTxEffect:PublicTxEffect.schema,callStackMetadata:external_exports.union([CallStackMetadata.schema.array(),NestedProcessReturnValues.schema.array()]),logs:NullishToUndefined(DebugLog.schema.array()),stats:external_exports.record(external_exports.string(),external_exports.string()).nullish().transform(v=>v??{}),publicInputs:NullishToUndefined(AvmCircuitPublicInputs.schema),hints:NullishToUndefined(AvmExecutionHints.schema)}).transform(({gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats})=>new _PublicTxResult(gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats))}static fromPlainObject(obj){return new _PublicTxResult(GasUsed.fromPlainObject(obj.gasUsed),RevertCode.fromPlainObject(obj.revertCode),PublicTxEffect.fromPlainObject(obj.publicTxEffect),obj.callStackMetadata.map(CallStackMetadata.fromPlainObject),obj.logs?.map(DebugLog.fromPlainObject),obj.hints?AvmExecutionHints.fromPlainObject(obj.hints):void 0,obj.publicInputs?AvmCircuitPublicInputs.fromPlainObject(obj.publicInputs):void 0,obj.stats??{})}getAppLogicReturnValues(){return this.callStackMetadata.every(metadata=>metadata instanceof CallStackMetadata)?this.callStackMetadata.filter(metadata=>metadata.phase===TxExecutionPhase.APP_LOGIC).map(metadata=>new NestedProcessReturnValues(metadata.output)):this.callStackMetadata.map(metadata=>new NestedProcessReturnValues(metadata.values,metadata.nested))}findRevertReason(){if(this.revertCode.isOK())return;let callStackMetadata=this.callStackMetadata;if(callStackMetadata.revertReason!==void 0)return callStackMetadata.revertReason;let revertReason;for(let call of callStackMetadata)if(revertReason=call.getRevertReason(),revertReason)break;return revertReason}},DEFAULT_MAX_DEBUG_LOG_MEMORY_READS=125e3,CollectionLimitsConfig=class _CollectionLimitsConfig{static{__name(this,"CollectionLimitsConfig")}maxDebugLogMemoryReads;maxCalldataSizeInFields;maxReturndataSizeInFields;maxCallStackDepth;maxCallStackItems;constructor(maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems){this.maxDebugLogMemoryReads=maxDebugLogMemoryReads,this.maxCalldataSizeInFields=maxCalldataSizeInFields,this.maxReturndataSizeInFields=maxReturndataSizeInFields,this.maxCallStackDepth=maxCallStackDepth,this.maxCallStackItems=maxCallStackItems}static from(obj){return new _CollectionLimitsConfig(obj.maxDebugLogMemoryReads??DEFAULT_MAX_DEBUG_LOG_MEMORY_READS,obj.maxCalldataSizeInFields??300,obj.maxReturndataSizeInFields??300,obj.maxCallStackDepth??5,obj.maxCallStackItems??100)}static empty(){return _CollectionLimitsConfig.from({})}static get schema(){return external_exports.object({maxDebugLogMemoryReads:external_exports.number(),maxCalldataSizeInFields:external_exports.number(),maxReturndataSizeInFields:external_exports.number(),maxCallStackDepth:external_exports.number(),maxCallStackItems:external_exports.number()}).transform(({maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems})=>new _CollectionLimitsConfig(maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems))}},PublicSimulatorConfig=class _PublicSimulatorConfig{static{__name(this,"PublicSimulatorConfig")}proverId;skipFeeEnforcement;collectCallMetadata;collectHints;collectPublicInputs;collectDebugLogs;collectStatistics;collectionLimits;constructor(proverId,skipFeeEnforcement,collectCallMetadata,collectHints,collectPublicInputs,collectDebugLogs,collectStatistics,collectionLimits){this.proverId=proverId,this.skipFeeEnforcement=skipFeeEnforcement,this.collectCallMetadata=collectCallMetadata,this.collectHints=collectHints,this.collectPublicInputs=collectPublicInputs,this.collectDebugLogs=collectDebugLogs,this.collectStatistics=collectStatistics,this.collectionLimits=collectionLimits}static from(obj){return new _PublicSimulatorConfig(obj.proverId??Fr.ZERO,obj.skipFeeEnforcement??!1,obj.collectCallMetadata??!1,obj.collectHints??!1,obj.collectPublicInputs??!1,obj.collectDebugLogs??!1,obj.collectStatistics??!1,obj.collectionLimits??CollectionLimitsConfig.empty())}static empty(){return _PublicSimulatorConfig.from({})}static get schema(){return external_exports.object({proverId:Fr.schema,skipFeeEnforcement:external_exports.boolean(),collectCallMetadata:external_exports.boolean(),collectHints:external_exports.boolean(),collectPublicInputs:external_exports.boolean(),collectDebugLogs:external_exports.boolean(),collectStatistics:external_exports.boolean(),collectionLimits:CollectionLimitsConfig.schema}).transform(_PublicSimulatorConfig.from)}},AvmFastSimulationInputs=class _AvmFastSimulationInputs{static{__name(this,"AvmFastSimulationInputs")}wsRevision;config;tx;globalVariables;protocolContracts;constructor(wsRevision,config2,tx,globalVariables,protocolContracts){this.wsRevision=wsRevision,this.config=config2,this.tx=tx,this.globalVariables=globalVariables,this.protocolContracts=protocolContracts}static empty(){return new _AvmFastSimulationInputs(WorldStateRevision.empty(),PublicSimulatorConfig.empty(),AvmTxHint.empty(),GlobalVariables.empty(),ProtocolContracts.empty())}static get schema(){return external_exports.object({wsRevision:WorldStateRevision.schema,config:PublicSimulatorConfig.schema,tx:AvmTxHint.schema,globalVariables:GlobalVariables.schema,protocolContracts:ProtocolContracts.schema}).transform(({wsRevision,config:config2,tx,globalVariables,protocolContracts})=>new _AvmFastSimulationInputs(wsRevision,config2,tx,globalVariables,protocolContracts))}serializeWithMessagePack(){return serializeWithMessagePack(this)}};var parseCommaSeparatedList=__name(value=>value.split(",").map(item=>item.trim()).filter(Boolean),"parseCommaSeparatedList"),DEFAULT_RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS=3e3,nodeRpcConfigMappings={rpcSimulatePublicMaxGasLimit:{env:"RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT",description:"Maximum gas limit for public tx simulation in the node on `simulatePublicCalls`.",...numberConfigHelper(1e10)},rpcSimulatePublicMaxDebugLogMemoryReads:{env:"RPC_SIMULATE_PUBLIC_MAX_DEBUG_LOG_MEMORY_READS",description:"Maximum memory reads for debug logs performed for public tx simulation in the node on `simulatePublicCalls`. ",...numberConfigHelper(DEFAULT_MAX_DEBUG_LOG_MEMORY_READS)},rpcMaxBatchSize:{env:"RPC_MAX_BATCH_SIZE",description:"Maximum allowed batch size for JSON RPC batch requests.",...numberConfigHelper(100)},rpcMaxBodySize:{env:"RPC_MAX_BODY_SIZE",description:"Maximum allowed batch size for JSON RPC batch requests.",defaultValue:"1mb"},rpcHttpKeepAliveTimeoutMs:{env:"RPC_HTTP_KEEP_ALIVE_TIMEOUT_MS",description:"HTTP keep-alive timeout for JSON RPC connections in milliseconds.",...numberConfigHelper(5e3)},rpcHttpHeadersTimeoutMs:{env:"RPC_HTTP_HEADERS_TIMEOUT_MS",description:"Timeout for receiving complete HTTP headers on JSON RPC connections in milliseconds.",...numberConfigHelper(6e4)},rpcCorsAllowedOrigins:{env:"RPC_CORS_ALLOWED_ORIGINS",description:"Origins allowed to make credentialed cross-origin JSON RPC requests, separated by commas.",parseEnv:parseCommaSeparatedList,defaultValue:[]},rpcCorsAllowedHeaders:{env:"RPC_CORS_ALLOWED_HEADERS",description:"Headers allowed in cross-origin JSON RPC requests, separated by commas.",parseEnv:parseCommaSeparatedList,defaultValue:[]},rpcCorsAllowAnyOrigin:{env:"RPC_CORS_ALLOW_ANY_ORIGIN",description:"Allow credentialed cross-origin JSON RPC requests from any origin.",...booleanConfigHelper(!1)},rpcUnseenBlockByNumberWaitMs:{env:"RPC_UNSEEN_BLOCK_BY_NUMBER_WAIT_MS",description:"Max time in ms an RPC query anchored on a block number exactly one ahead of the node tip is held, waiting for the block to arrive. Defaults to twice the block duration. Set to 0 to fail these queries immediately.",...optionalNumberConfigHelper()},rpcUnseenBlockByHashWaitMs:{env:"RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS",description:"Max time in ms an RPC query anchored on an unknown block hash or archive root is held, waiting for the block to arrive. Set to 0 to fail these queries immediately.",...numberConfigHelper(DEFAULT_RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS)}};function composeHooks(hooks){if(!Object.values(hooks).every(v=>v===void 0))return hooks}__name(composeHooks,"composeHooks");var pxeConfigMappings={...dataConfigMappings,...chainConfigMappings,l2BlockBatchSize:{env:"PXE_L2_BLOCK_BATCH_SIZE",...numberConfigHelper(50),description:"Maximum amount of blocks to pull from the stream in one request when synchronizing"},proverEnabled:{env:"PXE_PROVER_ENABLED",description:"Enable real proofs",...booleanConfigHelper(!0)},syncChainTip:{env:"PXE_SYNC_CHAIN_TIP",description:"Which chain tip to sync to (proposed, checkpointed, proven, finalized)",...enumConfigHelper(["proposed","checkpointed","proven","finalized"],"proposed")},autoSync:{env:"PXE_AUTO_SYNC",description:"Whether PXE syncs with the node automatically before each operation. Disable to let the caller (e.g. a wallet) drive syncs explicitly via pxe.sync().",...booleanConfigHelper(!0)},concurrentContractSyncEnabled:{env:"PXE_CONCURRENT_CONTRACT_SYNC_ENABLED",description:"Whether PXE speculatively syncs contracts it predicts will follow the one requested, running them concurrently with it. Repeated flows sync faster, but a wrong prediction spends unnecessary node requests. Experimental, off by default.",...booleanConfigHelper(!1)}};var pxeCliConfigMappings={nodeUrl:{env:"AZTEC_NODE_URL",description:"Custom Aztec Node URL to connect to"}},allPxeConfigMappings={...pxeConfigMappings,...pxeCliConfigMappings,...dataConfigMappings,proverEnabled:{env:"PXE_PROVER_ENABLED",parseEnv:__name(val=>parseBooleanEnv(val)||!!getEnv().NETWORK,"parseEnv"),description:"Enable real proofs",isBoolean:!0,defaultValue:!0}};import{LazyArtifactProvider}from"@aztec-labs/noir-protocol-circuits-types/client/lazy";import{AztecClientBackend,Barretenberg as Barretenberg2}from"@aztec-foundation/bb.js";import{serializeWitness as serializeWitness2}from"@aztec-foundation/noir-noirc_abi";import{convertHidingKernelPublicInputsToWitnessMapWithAbi,convertHidingKernelToRollupInputsToWitnessMapWithAbi,convertPrivateKernelInit2InputsToWitnessMapWithAbi,convertPrivateKernelInit2OutputsFromWitnessMapWithAbi,convertPrivateKernelInit3InputsToWitnessMapWithAbi,convertPrivateKernelInit3OutputsFromWitnessMapWithAbi,convertPrivateKernelInit4InputsToWitnessMapWithAbi,convertPrivateKernelInit4OutputsFromWitnessMapWithAbi,convertPrivateKernelInit5InputsToWitnessMapWithAbi,convertPrivateKernelInit5OutputsFromWitnessMapWithAbi,convertPrivateKernelInitInputsToWitnessMapWithAbi,convertPrivateKernelInitOutputsFromWitnessMapWithAbi,convertPrivateKernelInner2InputsToWitnessMapWithAbi,convertPrivateKernelInner2OutputsFromWitnessMapWithAbi,convertPrivateKernelInner3InputsToWitnessMapWithAbi,convertPrivateKernelInner3OutputsFromWitnessMapWithAbi,convertPrivateKernelInner4InputsToWitnessMapWithAbi,convertPrivateKernelInner4OutputsFromWitnessMapWithAbi,convertPrivateKernelInner5InputsToWitnessMapWithAbi,convertPrivateKernelInner5OutputsFromWitnessMapWithAbi,convertPrivateKernelInnerInputsToWitnessMapWithAbi,convertPrivateKernelInnerOutputsFromWitnessMapWithAbi,convertPrivateKernelResetInputsToWitnessMapWithAbi,convertPrivateKernelResetOutputsFromWitnessMapWithAbi,convertPrivateKernelResetTailInputsToWitnessMapWithAbi,convertPrivateKernelResetTailToPublicInputsToWitnessMapWithAbi,convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi,convertPrivateKernelTailOutputsFromWitnessMapWithAbi,foreignCallHandler,getPrivateKernelResetArtifactName,getPrivateKernelResetTailArtifactName,updateResetCircuitSampleInputs}from"@aztec-labs/noir-protocol-circuits-types/client";import{mapProtocolArtifactNameToCircuitName}from"@aztec-labs/noir-protocol-circuits-types/types";import{ungzip}from"pako";import{Buffer as Buffer74}from"buffer";function makeProtocolContract(name,artifact){let address=ProtocolContractAddress[name],salt=ProtocolContractSalt[name],classId=ProtocolContractClassId[name],{artifactHash,privateFunctionsRoot,publicBytecodeCommitment}=ProtocolContractClassIdPreimage[name],initializationHash=ProtocolContractInitializationHash[name],contractClass={id:classId,version:1,artifactHash,privateFunctionsRoot,publicBytecodeCommitment,packedBytecode:artifact.functions.find(f=>f.name==="public_dispatch")?.bytecode??Buffer74.alloc(0),privateFunctions:ProtocolContractPrivateFunctions[name]};return{instance:{version:2,currentContractClassId:classId,originalContractClassId:classId,initializationHash,immutablesHash:Fr.ZERO,publicKeys:PublicKeys.default(),salt,deployer:address,address},contractClass,artifact,address}}__name(makeProtocolContract,"makeProtocolContract");var ContractClassPublishedEvent=class _ContractClassPublishedEvent{static{__name(this,"ContractClassPublishedEvent")}contractClassId;version;artifactHash;privateFunctionsRoot;packedPublicBytecode;constructor(contractClassId,version2,artifactHash,privateFunctionsRoot,packedPublicBytecode){this.contractClassId=contractClassId,this.version=version2,this.artifactHash=artifactHash,this.privateFunctionsRoot=privateFunctionsRoot,this.packedPublicBytecode=packedPublicBytecode}static isContractClassPublishedEvent(log2){return log2.contractAddress.equals(ProtocolContractAddress.ContractClassRegistry)&&log2.fields.fields[0].toBigInt()===CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE}static fromLog(log2){let fieldsWithoutTag=log2.fields.fields.slice(1),reader=new FieldReader(fieldsWithoutTag),contractClassId=reader.readField(),version2=reader.readField().toNumber(),artifactHash=reader.readField(),privateFunctionsRoot=reader.readField(),bytecodeFields=reader.readFieldArray(fieldsWithoutTag.length-reader.cursor),maxByteLength=(Math.min(bytecodeFields.length,3e3)-1)*(Fr.SIZE_IN_BYTES-1),packedPublicBytecode=bufferFromFields(bytecodeFields,maxByteLength);return new _ContractClassPublishedEvent(contractClassId,version2,artifactHash,privateFunctionsRoot,packedPublicBytecode)}toContractClassPublic(){return{id:this.contractClassId,artifactHash:this.artifactHash,packedBytecode:this.packedPublicBytecode,privateFunctionsRoot:this.privateFunctionsRoot,version:this.version}}async toContractClassPublicWithBytecodeCommitment(){let publicBytecodeCommitment=await computePublicBytecodeCommitment(this.packedPublicBytecode);return{...this.toContractClassPublic(),publicBytecodeCommitment}}static extractContractClassEvents(logs){return logs.filter(log2=>_ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>_ContractClassPublishedEvent.fromLog(log2))}};var protocolContract,protocolContractArtifact;async function getContractClassRegistryArtifact(){if(!protocolContractArtifact){let{default:contractClassRegistryJson}=await import("./ContractClassRegistry-KVMXSCYB.js");protocolContractArtifact=loadContractArtifact(contractClassRegistryJson)}return protocolContractArtifact}__name(getContractClassRegistryArtifact,"getContractClassRegistryArtifact");async function getCanonicalClassRegistry(){if(!protocolContract){let contractClassRegistryArtifact=await getContractClassRegistryArtifact();protocolContract=makeProtocolContract("ContractClassRegistry",contractClassRegistryArtifact)}return protocolContract}__name(getCanonicalClassRegistry,"getCanonicalClassRegistry");var protocolContract2,protocolContractArtifact2;async function getFeeJuiceArtifact(){if(!protocolContractArtifact2){let{default:feeJuiceJson}=await import("./FeeJuice-BVKXV3SG.js");protocolContractArtifact2=loadContractArtifact(feeJuiceJson)}return protocolContractArtifact2}__name(getFeeJuiceArtifact,"getFeeJuiceArtifact");async function getCanonicalFeeJuice(){if(!protocolContract2){let feeJuiceArtifact=await getFeeJuiceArtifact();protocolContract2=makeProtocolContract("FeeJuice",feeJuiceArtifact)}return protocolContract2}__name(getCanonicalFeeJuice,"getCanonicalFeeJuice");var ContractInstancePublishedEvent=class _ContractInstancePublishedEvent{static{__name(this,"ContractInstancePublishedEvent")}address;version;salt;contractClassId;initializationHash;immutablesHash;publicKeys;deployer;constructor(address,version2,salt,contractClassId,initializationHash,immutablesHash,publicKeys,deployer){this.address=address,this.version=version2,this.salt=salt,this.contractClassId=contractClassId,this.initializationHash=initializationHash,this.immutablesHash=immutablesHash,this.publicKeys=publicKeys,this.deployer=deployer}static isContractInstancePublishedEvent(log2){return log2.fields[0].equals(CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG)}static fromLog(log2){let bufferWithoutTag=log2.toBuffer().subarray(32),reader=new BufferReader(bufferWithoutTag),address=reader.readObject(AztecAddress),version2=reader.readObject(Fr).toNumber(),salt=reader.readObject(Fr),contractClassId=reader.readObject(Fr),initializationHash=reader.readObject(Fr),immutablesHash=reader.readObject(Fr),publicKeys=reader.readObject(PublicKeys),deployer=reader.readObject(AztecAddress);return new _ContractInstancePublishedEvent(address,version2,salt,contractClassId,initializationHash,immutablesHash,publicKeys,deployer)}toContractInstance(){if(this.version!==2)throw new Error(`Unexpected contract instance version ${this.version}`);return{address:this.address,version:this.version,currentContractClassId:this.contractClassId,originalContractClassId:this.contractClassId,initializationHash:this.initializationHash,immutablesHash:this.immutablesHash,publicKeys:this.publicKeys,salt:this.salt,deployer:this.deployer}}static extractContractInstanceEvents(logs){return logs.filter(log2=>_ContractInstancePublishedEvent.isContractInstancePublishedEvent(log2)).map(log2=>_ContractInstancePublishedEvent.fromLog(log2))}};var ContractInstanceUpdatedEvent=class _ContractInstanceUpdatedEvent{static{__name(this,"ContractInstanceUpdatedEvent")}address;prevContractClassId;newContractClassId;timestampOfChange;constructor(address,prevContractClassId,newContractClassId,timestampOfChange){this.address=address,this.prevContractClassId=prevContractClassId,this.newContractClassId=newContractClassId,this.timestampOfChange=timestampOfChange}static isContractInstanceUpdatedEvent(log2){return log2.contractAddress.equals(ProtocolContractAddress.ContractInstanceRegistry)&&log2.fields[0].toBigInt()===CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE}static fromLog(log2){let reader=new FieldReader(log2.fields.slice(1)),address=reader.readObject(AztecAddress),prevContractClassId=reader.readField(),newContractClassId=reader.readField(),timestampOfChange=reader.readField().toBigInt();return new _ContractInstanceUpdatedEvent(address,prevContractClassId,newContractClassId,timestampOfChange)}toContractInstanceUpdate(){return{address:this.address,prevContractClassId:this.prevContractClassId,newContractClassId:this.newContractClassId,timestampOfChange:this.timestampOfChange}}};var protocolContract3,protocolContractArtifact3;async function getContractInstanceRegistryArtifact(){if(!protocolContractArtifact3){let{default:contractInstanceRegistryJson}=await import("./ContractInstanceRegistry-G6UG2R2Y.js");protocolContractArtifact3=loadContractArtifact(contractInstanceRegistryJson)}return protocolContractArtifact3}__name(getContractInstanceRegistryArtifact,"getContractInstanceRegistryArtifact");async function getCanonicalInstanceRegistry(){if(!protocolContract3){let contractInstanceRegistryArtifact=await getContractInstanceRegistryArtifact();protocolContract3=makeProtocolContract("ContractInstanceRegistry",contractInstanceRegistryArtifact)}return protocolContract3}__name(getCanonicalInstanceRegistry,"getCanonicalInstanceRegistry");var LazyProtocolContractsProvider=class{static{__name(this,"LazyProtocolContractsProvider")}getProtocolContractArtifact(name){switch(name){case"ContractInstanceRegistry":return getCanonicalInstanceRegistry();case"ContractClassRegistry":return getCanonicalClassRegistry();case"FeeJuice":return getCanonicalFeeJuice();default:throw new Error(`Unknown protocol contract name: ${name}`)}}};import{Buffer as Buffer75}from"buffer";function makeStandardContract(name,artifact){let address=StandardContractAddress[name],salt=StandardContractSalt[name],classId=StandardContractClassId[name],{artifactHash,privateFunctionsRoot,publicBytecodeCommitment}=StandardContractClassIdPreimage[name],initializationHash=StandardContractInitializationHash[name],contractClass={id:classId,version:1,artifactHash,privateFunctionsRoot,publicBytecodeCommitment,packedBytecode:artifact.functions.find(f=>f.name==="public_dispatch")?.bytecode??Buffer75.alloc(0),privateFunctions:StandardContractPrivateFunctions[name]};return{instance:{version:2,currentContractClassId:classId,originalContractClassId:classId,initializationHash,immutablesHash:Fr.ZERO,publicKeys:PublicKeys.default(),salt,deployer:AztecAddress.ZERO,address},contractClass,artifact,address}}__name(makeStandardContract,"makeStandardContract");var standardContract,standardContractArtifact;async function getAuthRegistryArtifact(){if(!standardContractArtifact){let{default:authRegistryJson}=await import("./AuthRegistry-C3LO5PQT.js");standardContractArtifact=loadContractArtifact(authRegistryJson)}return standardContractArtifact}__name(getAuthRegistryArtifact,"getAuthRegistryArtifact");async function getStandardAuthRegistry(){if(!standardContract){let artifact=await getAuthRegistryArtifact();standardContract=makeStandardContract("AuthRegistry",artifact)}return standardContract}__name(getStandardAuthRegistry,"getStandardAuthRegistry");var standardContract2,standardContractArtifact2;async function getHandshakeRegistryArtifact(){if(!standardContractArtifact2){let{default:handshakeRegistryJson}=await import("./HandshakeRegistry-PPBWWSQT.js");standardContractArtifact2=loadContractArtifact(handshakeRegistryJson)}return standardContractArtifact2}__name(getHandshakeRegistryArtifact,"getHandshakeRegistryArtifact");async function getStandardHandshakeRegistry(){if(!standardContract2){let artifact=await getHandshakeRegistryArtifact();standardContract2=makeStandardContract("HandshakeRegistry",artifact)}return standardContract2}__name(getStandardHandshakeRegistry,"getStandardHandshakeRegistry");var decoder;try{decoder=new TextDecoder}catch{}var src,srcEnd,position2=0;var EMPTY_ARRAY=[],strings=EMPTY_ARRAY,stringPosition=0,currentUnpackr={},currentStructures,srcString,srcStringStart=0,srcStringEnd=0,bundledStrings,referenceMap,currentExtensions=[],dataView,defaultOptions={useRecords:!1,mapsAsObjects:!0},C1Type=class{static{__name(this,"C1Type")}},C1=new C1Type;C1.name="MessagePack 0xC1";var sequentialMode=!1,inlineObjectReadThreshold=2,readStruct,onLoadedStructures,onSaveState;try{new Function("")}catch{inlineObjectReadThreshold=1/0}var Unpackr=class _Unpackr{static{__name(this,"Unpackr")}constructor(options){options&&(options.useRecords===!1&&options.mapsAsObjects===void 0&&(options.mapsAsObjects=!0),options.sequential&&options.trusted!==!1&&(options.trusted=!0,!options.structures&&options.useRecords!=!1&&(options.structures=[],options.maxSharedStructures||(options.maxSharedStructures=0))),options.structures?options.structures.sharedLength=options.structures.length:options.getStructures&&((options.structures=[]).uninitialized=!0,options.structures.sharedLength=0),options.int64AsNumber&&(options.int64AsType="number")),Object.assign(this,options)}unpack(source,options){if(src)return saveState(()=>(clearSource(),this?this.unpack(source,options):_Unpackr.prototype.unpack.call(defaultOptions,source,options)));!source.buffer&&source.constructor===ArrayBuffer&&(source=typeof Buffer<"u"?Buffer.from(source):new Uint8Array(source)),typeof options=="object"?(srcEnd=options.end||source.length,position2=options.start||0):(position2=0,srcEnd=options>-1?options:source.length),stringPosition=0,srcStringEnd=0,srcString=null,strings=EMPTY_ARRAY,bundledStrings=null,src=source;try{dataView=source.dataView||(source.dataView=new DataView(source.buffer,source.byteOffset,source.byteLength))}catch(error2){throw src=null,source instanceof Uint8Array?error2:new Error("Source must be a Uint8Array or Buffer but was a "+(source&&typeof source=="object"?source.constructor.name:typeof source))}if(this instanceof _Unpackr){if(currentUnpackr=this,this.structures)return currentStructures=this.structures,checkedRead(options);(!currentStructures||currentStructures.length>0)&&(currentStructures=[])}else currentUnpackr=defaultOptions,(!currentStructures||currentStructures.length>0)&&(currentStructures=[]);return checkedRead(options)}unpackMultiple(source,forEach){let values,lastPosition=0;try{sequentialMode=!0;let size=source.length,value=this?this.unpack(source,size):defaultUnpackr.unpack(source,size);if(forEach){if(forEach(value,lastPosition,position2)===!1)return;for(;position2<size;)if(lastPosition=position2,forEach(checkedRead(),lastPosition,position2)===!1)return}else{for(values=[value];position2<size;)lastPosition=position2,values.push(checkedRead());return values}}catch(error2){throw error2.lastPosition=lastPosition,error2.values=values,error2}finally{sequentialMode=!1,clearSource()}}_mergeStructures(loadedStructures,existingStructures){onLoadedStructures&&(loadedStructures=onLoadedStructures.call(this,loadedStructures)),loadedStructures=loadedStructures||[],Object.isFrozen(loadedStructures)&&(loadedStructures=loadedStructures.map(structure=>structure.slice(0)));for(let i=0,l=loadedStructures.length;i<l;i++){let structure=loadedStructures[i];structure&&(structure.isShared=!0,i>=32&&(structure.highByte=i-32>>5))}loadedStructures.sharedLength=loadedStructures.length;for(let id in existingStructures||[])if(id>=0){let structure=loadedStructures[id],existing=existingStructures[id];existing&&(structure&&((loadedStructures.restoreStructures||(loadedStructures.restoreStructures=[]))[id]=structure),loadedStructures[id]=existing)}return this.structures=loadedStructures}decode(source,options){return this.unpack(source,options)}};function checkedRead(options){try{if(!currentUnpackr.trusted&&!sequentialMode){let sharedLength=currentStructures.sharedLength||0;sharedLength<currentStructures.length&&(currentStructures.length=sharedLength)}let result;if(currentUnpackr.randomAccessStructure&&src[position2]<64&&src[position2]>=32&&readStruct?(result=readStruct(src,position2,srcEnd,currentUnpackr),src=null,!(options&&options.lazy)&&result&&(result=result.toJSON()),position2=srcEnd):result=read(),bundledStrings&&(position2=bundledStrings.postBundlePosition,bundledStrings=null),sequentialMode&&(currentStructures.restoreStructures=null),position2==srcEnd)currentStructures&&currentStructures.restoreStructures&&restoreStructures(),currentStructures=null,src=null,referenceMap&&(referenceMap=null);else{if(position2>srcEnd)throw new Error("Unexpected end of MessagePack data");if(!sequentialMode){let jsonView;try{jsonView=JSON.stringify(result,(_,value)=>typeof value=="bigint"?`${value}n`:value).slice(0,100)}catch(error2){jsonView="(JSON view not available "+error2+")"}throw new Error("Data read, but end of buffer not reached "+jsonView)}}return result}catch(error2){throw currentStructures&&currentStructures.restoreStructures&&restoreStructures(),clearSource(),(error2 instanceof RangeError||error2.message.startsWith("Unexpected end of buffer")||position2>srcEnd)&&(error2.incomplete=!0),error2}}__name(checkedRead,"checkedRead");function restoreStructures(){for(let id in currentStructures.restoreStructures)currentStructures[id]=currentStructures.restoreStructures[id];currentStructures.restoreStructures=null}__name(restoreStructures,"restoreStructures");function read(){let token=src[position2++];if(token<160)if(token<128){if(token<64)return token;{let structure=currentStructures[token&63]||currentUnpackr.getStructures&&loadStructures()[token&63];return structure?(structure.read||(structure.read=createStructureReader(structure,token&63)),structure.read()):token}}else if(token<144)if(token-=128,currentUnpackr.mapsAsObjects){let object2={};for(let i=0;i<token;i++){let key=readKey2();key==="__proto__"&&(key="__proto_"),object2[key]=read()}return object2}else{let map2=new Map;for(let i=0;i<token;i++)map2.set(read(),read());return map2}else{token-=144;let array2=new Array(token);for(let i=0;i<token;i++)array2[i]=read();return currentUnpackr.freezeData?Object.freeze(array2):array2}else if(token<192){let length=token-160;if(srcStringEnd>=position2)return srcString.slice(position2-srcStringStart,(position2+=length)-srcStringStart);if(srcStringEnd==0&&srcEnd<140){let string4=length<16?shortStringInJS(length):longStringInJS(length);if(string4!=null)return string4}return readFixedString(length)}else{let value;switch(token){case 192:return null;case 193:return bundledStrings?(value=read(),value>0?bundledStrings[1].slice(bundledStrings.position1,bundledStrings.position1+=value):bundledStrings[0].slice(bundledStrings.position0,bundledStrings.position0-=value)):C1;case 194:return!1;case 195:return!0;case 196:if(value=src[position2++],value===void 0)throw new Error("Unexpected end of buffer");return readBin(value);case 197:return value=dataView.getUint16(position2),position2+=2,readBin(value);case 198:return value=dataView.getUint32(position2),position2+=4,readBin(value);case 199:return readExt(src[position2++]);case 200:return value=dataView.getUint16(position2),position2+=2,readExt(value);case 201:return value=dataView.getUint32(position2),position2+=4,readExt(value);case 202:if(value=dataView.getFloat32(position2),currentUnpackr.useFloat32>2){let multiplier=mult10[(src[position2]&127)<<1|src[position2+1]>>7];return position2+=4,(multiplier*value+(value>0?.5:-.5)>>0)/multiplier}return position2+=4,value;case 203:return value=dataView.getFloat64(position2),position2+=8,value;case 204:return src[position2++];case 205:return value=dataView.getUint16(position2),position2+=2,value;case 206:return value=dataView.getUint32(position2),position2+=4,value;case 207:return currentUnpackr.int64AsType==="number"?(value=dataView.getUint32(position2)*4294967296,value+=dataView.getUint32(position2+4)):currentUnpackr.int64AsType==="string"?value=dataView.getBigUint64(position2).toString():currentUnpackr.int64AsType==="auto"?(value=dataView.getBigUint64(position2),value<=BigInt(2)<<BigInt(52)&&(value=Number(value))):value=dataView.getBigUint64(position2),position2+=8,value;case 208:return dataView.getInt8(position2++);case 209:return value=dataView.getInt16(position2),position2+=2,value;case 210:return value=dataView.getInt32(position2),position2+=4,value;case 211:return currentUnpackr.int64AsType==="number"?(value=dataView.getInt32(position2)*4294967296,value+=dataView.getUint32(position2+4)):currentUnpackr.int64AsType==="string"?value=dataView.getBigInt64(position2).toString():currentUnpackr.int64AsType==="auto"?(value=dataView.getBigInt64(position2),value>=BigInt(-2)<<BigInt(52)&&value<=BigInt(2)<<BigInt(52)&&(value=Number(value))):value=dataView.getBigInt64(position2),position2+=8,value;case 212:if(value=src[position2++],value==114)return recordDefinition(src[position2++]&63);{let extension=currentExtensions[value];if(extension)return extension.read?(position2++,extension.read(read())):extension.noBuffer?(position2++,extension()):extension(src.subarray(position2,++position2));throw new Error("Unknown extension "+value)}case 213:return value=src[position2],value==114?(position2++,recordDefinition(src[position2++]&63,src[position2++])):readExt(2);case 214:return readExt(4);case 215:return readExt(8);case 216:return readExt(16);case 217:return value=src[position2++],srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString8(value);case 218:return value=dataView.getUint16(position2),position2+=2,srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString16(value);case 219:return value=dataView.getUint32(position2),position2+=4,srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString32(value);case 220:return value=dataView.getUint16(position2),position2+=2,readArray(value);case 221:return value=dataView.getUint32(position2),position2+=4,readArray(value);case 222:return value=dataView.getUint16(position2),position2+=2,readMap(value);case 223:return value=dataView.getUint32(position2),position2+=4,readMap(value);default:if(token>=224)return token-256;if(token===void 0){let error2=new Error("Unexpected end of MessagePack data");throw error2.incomplete=!0,error2}throw new Error("Unknown MessagePack token "+token)}}}__name(read,"read");var validName=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function createStructureReader(structure,firstId){function readObject(){if(readObject.count++>inlineObjectReadThreshold){let readObject2=structure.read=new Function("r","return function(){return "+(currentUnpackr.freezeData?"Object.freeze":"")+"({"+structure.map(key=>key==="__proto__"?"__proto_:r()":validName.test(key)?key+":r()":"["+JSON.stringify(key)+"]:r()").join(",")+"})}")(read);return structure.highByte===0&&(structure.read=createSecondByteReader(firstId,structure.read)),readObject2()}let object2={};for(let i=0,l=structure.length;i<l;i++){let key=structure[i];key==="__proto__"&&(key="__proto_"),object2[key]=read()}return currentUnpackr.freezeData?Object.freeze(object2):object2}return __name(readObject,"readObject"),readObject.count=0,structure.highByte===0?createSecondByteReader(firstId,readObject):readObject}__name(createStructureReader,"createStructureReader");var createSecondByteReader=__name((firstId,read0)=>function(){let highByte=src[position2++];if(highByte===0)return read0();let id=firstId<32?-(firstId+(highByte<<5)):firstId+(highByte<<5),structure=currentStructures[id]||loadStructures()[id];if(!structure)throw new Error("Record id is not defined for "+id);return structure.read||(structure.read=createStructureReader(structure,firstId)),structure.read()},"createSecondByteReader");function loadStructures(){let loadedStructures=saveState(()=>(src=null,currentUnpackr.getStructures()));return currentStructures=currentUnpackr._mergeStructures(loadedStructures,currentStructures)}__name(loadStructures,"loadStructures");var readFixedString=readStringJS,readString8=readStringJS,readString16=readStringJS,readString32=readStringJS,isNativeAccelerationEnabled=!1;function setExtractor(extractStrings){isNativeAccelerationEnabled=!0,readFixedString=readString3(1),readString8=readString3(2),readString16=readString3(3),readString32=readString3(5);function readString3(headerLength){return __name(function(length){let string4=strings[stringPosition++];if(string4==null){if(bundledStrings)return readStringJS(length);let byteOffset=src.byteOffset,extraction=extractStrings(position2-headerLength+byteOffset,srcEnd+byteOffset,src.buffer);if(typeof extraction=="string")string4=extraction,strings=EMPTY_ARRAY;else if(strings=extraction,stringPosition=1,srcStringEnd=1,string4=strings[0],string4===void 0)throw new Error("Unexpected end of buffer")}let srcStringLength=string4.length;return srcStringLength<=length?(position2+=length,string4):(srcString=string4,srcStringStart=position2,srcStringEnd=position2+srcStringLength,position2+=length,string4.slice(0,length))},"readString")}__name(readString3,"readString")}__name(setExtractor,"setExtractor");function readStringJS(length){let result;if(length<16&&(result=shortStringInJS(length)))return result;if(length>64&&decoder)return decoder.decode(src.subarray(position2,position2+=length));let end=position2+length,units=[];for(result="";position2<end;){let byte1=src[position2++];if((byte1&128)===0)units.push(byte1);else if((byte1&224)===192){let byte2=src[position2++]&63;units.push((byte1&31)<<6|byte2)}else if((byte1&240)===224){let byte2=src[position2++]&63,byte3=src[position2++]&63;units.push((byte1&31)<<12|byte2<<6|byte3)}else if((byte1&248)===240){let byte2=src[position2++]&63,byte3=src[position2++]&63,byte4=src[position2++]&63,unit=(byte1&7)<<18|byte2<<12|byte3<<6|byte4;unit>65535&&(unit-=65536,units.push(unit>>>10&1023|55296),unit=56320|unit&1023),units.push(unit)}else units.push(byte1);units.length>=4096&&(result+=fromCharCode2.apply(String,units),units.length=0)}return units.length>0&&(result+=fromCharCode2.apply(String,units)),result}__name(readStringJS,"readStringJS");function readString2(source,start,length){let existingSrc=src;src=source,position2=start;try{return readStringJS(length)}finally{src=existingSrc}}__name(readString2,"readString");function readArray(length){let array2=new Array(length);for(let i=0;i<length;i++)array2[i]=read();return currentUnpackr.freezeData?Object.freeze(array2):array2}__name(readArray,"readArray");function readMap(length){if(currentUnpackr.mapsAsObjects){let object2={};for(let i=0;i<length;i++){let key=readKey2();key==="__proto__"&&(key="__proto_"),object2[key]=read()}return object2}else{let map2=new Map;for(let i=0;i<length;i++)map2.set(read(),read());return map2}}__name(readMap,"readMap");var fromCharCode2=String.fromCharCode;function longStringInJS(length){let start=position2,bytes=new Array(length);for(let i=0;i<length;i++){let byte=src[position2++];if((byte&128)>0){position2=start;return}bytes[i]=byte}return fromCharCode2.apply(String,bytes)}__name(longStringInJS,"longStringInJS");function shortStringInJS(length){if(length<4)if(length<2){if(length===0)return"";{let a=src[position2++];if((a&128)>1){position2-=1;return}return fromCharCode2(a)}}else{let a=src[position2++],b=src[position2++];if((a&128)>0||(b&128)>0){position2-=2;return}if(length<3)return fromCharCode2(a,b);let c2=src[position2++];if((c2&128)>0){position2-=3;return}return fromCharCode2(a,b,c2)}else{let a=src[position2++],b=src[position2++],c2=src[position2++],d=src[position2++];if((a&128)>0||(b&128)>0||(c2&128)>0||(d&128)>0){position2-=4;return}if(length<6){if(length===4)return fromCharCode2(a,b,c2,d);{let e2=src[position2++];if((e2&128)>0){position2-=5;return}return fromCharCode2(a,b,c2,d,e2)}}else if(length<8){let e2=src[position2++],f=src[position2++];if((e2&128)>0||(f&128)>0){position2-=6;return}if(length<7)return fromCharCode2(a,b,c2,d,e2,f);let g=src[position2++];if((g&128)>0){position2-=7;return}return fromCharCode2(a,b,c2,d,e2,f,g)}else{let e2=src[position2++],f=src[position2++],g=src[position2++],h=src[position2++];if((e2&128)>0||(f&128)>0||(g&128)>0||(h&128)>0){position2-=8;return}if(length<10){if(length===8)return fromCharCode2(a,b,c2,d,e2,f,g,h);{let i=src[position2++];if((i&128)>0){position2-=9;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i)}}else if(length<12){let i=src[position2++],j=src[position2++];if((i&128)>0||(j&128)>0){position2-=10;return}if(length<11)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j);let k=src[position2++];if((k&128)>0){position2-=11;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k)}else{let i=src[position2++],j=src[position2++],k=src[position2++],l=src[position2++];if((i&128)>0||(j&128)>0||(k&128)>0||(l&128)>0){position2-=12;return}if(length<14){if(length===12)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l);{let m=src[position2++];if((m&128)>0){position2-=13;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m)}}else{let m=src[position2++],n=src[position2++];if((m&128)>0||(n&128)>0){position2-=14;return}if(length<15)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m,n);let o=src[position2++];if((o&128)>0){position2-=15;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m,n,o)}}}}}__name(shortStringInJS,"shortStringInJS");function readOnlyJSString(){let token=src[position2++],length;if(token<192)length=token-160;else switch(token){case 217:length=src[position2++];break;case 218:length=dataView.getUint16(position2),position2+=2;break;case 219:length=dataView.getUint32(position2),position2+=4;break;default:throw new Error("Expected string")}return readStringJS(length)}__name(readOnlyJSString,"readOnlyJSString");function readBin(length){return currentUnpackr.copyBuffers?Uint8Array.prototype.slice.call(src,position2,position2+=length):src.subarray(position2,position2+=length)}__name(readBin,"readBin");function readExt(length){let type=src[position2++];if(currentExtensions[type]){let end;return currentExtensions[type](src.subarray(position2,end=position2+=length),readPosition=>{position2=readPosition;try{return read()}finally{position2=end}})}else throw new Error("Unknown extension type "+type)}__name(readExt,"readExt");var keyCache=new Array(4096);function readKey2(){let length=src[position2++];if(length>=160&&length<192){if(length=length-160,srcStringEnd>=position2)return srcString.slice(position2-srcStringStart,(position2+=length)-srcStringStart);if(!(srcStringEnd==0&&srcEnd<180))return readFixedString(length)}else return position2--,asSafeString(read());let key=(length<<5^(length>1?dataView.getUint16(position2):length>0?src[position2]:0))&4095,entry=keyCache[key],checkPosition=position2,end=position2+length-3,chunk3,i=0;if(entry&&entry.bytes==length){for(;checkPosition<end;){if(chunk3=dataView.getUint32(checkPosition),chunk3!=entry[i++]){checkPosition=1879048192;break}checkPosition+=4}for(end+=3;checkPosition<end;)if(chunk3=src[checkPosition++],chunk3!=entry[i++]){checkPosition=1879048192;break}if(checkPosition===end)return position2=checkPosition,entry.string;end-=3,checkPosition=position2}for(entry=[],keyCache[key]=entry,entry.bytes=length;checkPosition<end;)chunk3=dataView.getUint32(checkPosition),entry.push(chunk3),checkPosition+=4;for(end+=3;checkPosition<end;)chunk3=src[checkPosition++],entry.push(chunk3);let string4=length<16?shortStringInJS(length):longStringInJS(length);return string4!=null?entry.string=string4:entry.string=readFixedString(length)}__name(readKey2,"readKey");function asSafeString(property){if(typeof property=="string")return property;if(typeof property=="number"||typeof property=="boolean"||typeof property=="bigint")return property.toString();if(property==null)return property+"";throw new Error("Invalid property type for record",typeof property)}__name(asSafeString,"asSafeString");var recordDefinition=__name((id,highByte)=>{let structure=read().map(asSafeString),firstByte=id;highByte!==void 0&&(id=id<32?-((highByte<<5)+id):(highByte<<5)+id,structure.highByte=highByte);let existingStructure=currentStructures[id];return existingStructure&&(existingStructure.isShared||sequentialMode)&&((currentStructures.restoreStructures||(currentStructures.restoreStructures=[]))[id]=existingStructure),currentStructures[id]=structure,structure.read=createStructureReader(structure,firstByte),structure.read()},"recordDefinition");currentExtensions[0]=()=>{};currentExtensions[0].noBuffer=!0;currentExtensions[66]=data=>{let length=data.length,value=BigInt(data[0]&128?data[0]-256:data[0]);for(let i=1;i<length;i++)value<<=BigInt(8),value+=BigInt(data[i]);return value};var errors={Error,TypeError,ReferenceError};currentExtensions[101]=()=>{let data=read();return(errors[data[0]]||Error)(data[1],{cause:data[2]})};currentExtensions[105]=data=>{if(currentUnpackr.structuredClone===!1)throw new Error("Structured clone extension is disabled");let id=dataView.getUint32(position2-4);referenceMap||(referenceMap=new Map);let token=src[position2],target2;token>=144&&token<160||token==220||token==221?target2=[]:target2={};let refEntry={target:target2};referenceMap.set(id,refEntry);let targetProperties=read();return refEntry.used?Object.assign(target2,targetProperties):(refEntry.target=targetProperties,targetProperties)};currentExtensions[112]=data=>{if(currentUnpackr.structuredClone===!1)throw new Error("Structured clone extension is disabled");let id=dataView.getUint32(position2-4),refEntry=referenceMap.get(id);return refEntry.used=!0,refEntry.target};currentExtensions[115]=()=>new Set(read());var typedArrays=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(type=>type+"Array"),glbl=typeof globalThis=="object"?globalThis:window;currentExtensions[116]=data=>{let typeCode=data[0],typedArrayName=typedArrays[typeCode];if(!typedArrayName){if(typeCode===16){let ab=new ArrayBuffer(data.length-1);return new Uint8Array(ab).set(data.subarray(1)),ab}throw new Error("Could not find typed array for code "+typeCode)}return new glbl[typedArrayName](Uint8Array.prototype.slice.call(data,1).buffer)};currentExtensions[120]=()=>{let data=read();return new RegExp(data[0],data[1])};var TEMP_BUNDLE=[];currentExtensions[98]=data=>{let dataSize=(data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3],dataPosition=position2;return position2+=dataSize-data.length,bundledStrings=TEMP_BUNDLE,bundledStrings=[readOnlyJSString(),readOnlyJSString()],bundledStrings.position0=0,bundledStrings.position1=0,bundledStrings.postBundlePosition=position2,position2=dataPosition,read()};currentExtensions[255]=data=>data.length==4?new Date((data[0]*16777216+(data[1]<<16)+(data[2]<<8)+data[3])*1e3):data.length==8?new Date(((data[0]<<22)+(data[1]<<14)+(data[2]<<6)+(data[3]>>2))/1e6+((data[3]&3)*4294967296+data[4]*16777216+(data[5]<<16)+(data[6]<<8)+data[7])*1e3):data.length==12?new Date(((data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3])/1e6+((data[4]&128?-281474976710656:0)+data[6]*1099511627776+data[7]*4294967296+data[8]*16777216+(data[9]<<16)+(data[10]<<8)+data[11])*1e3):new Date("invalid");function saveState(callback){onSaveState&&onSaveState();let savedSrcEnd=srcEnd,savedPosition=position2,savedStringPosition=stringPosition,savedSrcStringStart=srcStringStart,savedSrcStringEnd=srcStringEnd,savedSrcString=srcString,savedStrings=strings,savedReferenceMap=referenceMap,savedBundledStrings=bundledStrings,savedSrc=new Uint8Array(src.slice(0,srcEnd)),savedStructures=currentStructures,savedStructuresContents=currentStructures.slice(0,currentStructures.length),savedPackr=currentUnpackr,savedSequentialMode=sequentialMode,value=callback();return srcEnd=savedSrcEnd,position2=savedPosition,stringPosition=savedStringPosition,srcStringStart=savedSrcStringStart,srcStringEnd=savedSrcStringEnd,srcString=savedSrcString,strings=savedStrings,referenceMap=savedReferenceMap,bundledStrings=savedBundledStrings,src=savedSrc,sequentialMode=savedSequentialMode,currentStructures=savedStructures,currentStructures.splice(0,currentStructures.length,...savedStructuresContents),currentUnpackr=savedPackr,dataView=new DataView(src.buffer,src.byteOffset,src.byteLength),value}__name(saveState,"saveState");function clearSource(){src=null,referenceMap=null,currentStructures=null}__name(clearSource,"clearSource");var mult10=new Array(147);for(let i=0;i<256;i++)mult10[i]=+("1e"+Math.floor(45.15-i*.30103));var defaultUnpackr=new Unpackr({useRecords:!1}),unpack=defaultUnpackr.unpack,unpackMultiple=defaultUnpackr.unpackMultiple,decode3=defaultUnpackr.unpack,FLOAT32_OPTIONS={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},f32Array=new Float32Array(1),u8Array=new Uint8Array(f32Array.buffer,0,4);function setReadStruct(updatedReadStruct,loadedStructs,saveState3){readStruct=updatedReadStruct,onLoadedStructures=loadedStructs,onSaveState=saveState3}__name(setReadStruct,"setReadStruct");var textEncoder2;try{textEncoder2=new TextEncoder}catch{}var extensions,extensionClasses,hasNodeBuffer2=typeof Buffer<"u",ByteArrayAllocate2=hasNodeBuffer2?function(length){return Buffer.allocUnsafeSlow(length)}:Uint8Array,ByteArray=hasNodeBuffer2?Buffer:Uint8Array,MAX_BUFFER_SIZE=hasNodeBuffer2?4294967296:2144337920,target,keysTarget,targetView,position3=0,safeEnd,bundledStrings2=null,writeStructSlots,MAX_BUNDLE_SIZE=21760,hasNonLatin=/[\u0080-\uFFFF]/,RECORD_SYMBOL=Symbol("record-id"),Packr=class extends Unpackr{static{__name(this,"Packr")}constructor(options){super(options),this.offset=0;let typeBuffer,start,hasSharedUpdate,structures,referenceMap2,encodeUtf82=ByteArray.prototype.utf8Write?function(string4,position4){return target.utf8Write(string4,position4,target.byteLength-position4)}:textEncoder2&&textEncoder2.encodeInto?function(string4,position4){return textEncoder2.encodeInto(string4,target.subarray(position4)).written}:!1,packr=this;options||(options={});let isSequential=options&&options.sequential,hasSharedStructures=options.structures||options.saveStructures,maxSharedStructures=options.maxSharedStructures;if(maxSharedStructures==null&&(maxSharedStructures=hasSharedStructures?32:0),maxSharedStructures>8160)throw new Error("Maximum maxSharedStructure is 8160");options.structuredClone&&options.moreTypes==null&&(this.moreTypes=!0);let maxOwnStructures=options.maxOwnStructures;maxOwnStructures==null&&(maxOwnStructures=hasSharedStructures?32:64),!this.structures&&options.useRecords!=!1&&(this.structures=[]);let useTwoByteRecords=maxSharedStructures>32||maxOwnStructures+maxSharedStructures>64,sharedLimitId=maxSharedStructures+64,maxStructureId=maxSharedStructures+maxOwnStructures+64;if(maxStructureId>8256)throw new Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let recordIdsToRemove=[],transitionsCount=0,serializationsSinceTransitionRebuild=0;this.pack=this.encode=function(value,encodeOptions){if(target||(target=new ByteArrayAllocate2(8192),targetView=target.dataView||(target.dataView=new DataView(target.buffer,0,8192)),position3=0),safeEnd=target.length-10,safeEnd-position3<2048?(target=new ByteArrayAllocate2(target.length),targetView=target.dataView||(target.dataView=new DataView(target.buffer,0,target.length)),safeEnd=target.length-10,position3=0):position3=position3+7&2147483640,start=position3,encodeOptions&RESERVE_START_SPACE&&(position3+=encodeOptions&255),referenceMap2=packr.structuredClone?new Map:null,packr.bundleStrings&&typeof value!="string"?(bundledStrings2=[],bundledStrings2.size=1/0):bundledStrings2=null,structures=packr.structures,structures){structures.uninitialized&&(structures=packr._mergeStructures(packr.getStructures()));let sharedLength=structures.sharedLength||0;if(sharedLength>maxSharedStructures)throw new Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+structures.sharedLength);if(!structures.transitions){structures.transitions=Object.create(null);for(let i=0;i<sharedLength;i++){let keys=structures[i];if(!keys)continue;let nextTransition,transition=structures.transitions;for(let j=0,l=keys.length;j<l;j++){let key=keys[j];nextTransition=transition[key],nextTransition||(nextTransition=transition[key]=Object.create(null)),transition=nextTransition}transition[RECORD_SYMBOL]=i+64}this.lastNamedStructuresLength=sharedLength}isSequential||(structures.nextId=sharedLength+64)}hasSharedUpdate&&(hasSharedUpdate=!1);let encodingError;try{packr.randomAccessStructure&&value&&value.constructor&&value.constructor===Object?writeStruct2(value):pack2(value);let lastBundle=bundledStrings2;if(bundledStrings2&&writeBundles(start,pack2,0),referenceMap2&&referenceMap2.idsToInsert){let idsToInsert=referenceMap2.idsToInsert.sort((a,b)=>a.offset>b.offset?1:-1),i=idsToInsert.length,incrementPosition=-1;for(;lastBundle&&i>0;){let insertionPoint=idsToInsert[--i].offset+start;insertionPoint<lastBundle.stringsPosition+start&&incrementPosition===-1&&(incrementPosition=0),insertionPoint>lastBundle.position+start?incrementPosition>=0&&(incrementPosition+=6):(incrementPosition>=0&&(targetView.setUint32(lastBundle.position+start,targetView.getUint32(lastBundle.position+start)+incrementPosition),incrementPosition=-1),lastBundle=lastBundle.previous,i++)}incrementPosition>=0&&lastBundle&&targetView.setUint32(lastBundle.position+start,targetView.getUint32(lastBundle.position+start)+incrementPosition),position3+=idsToInsert.length*6,position3>safeEnd&&makeRoom(position3),packr.offset=position3;let serialized=insertIds(target.subarray(start,position3),idsToInsert);return referenceMap2=null,serialized}return packr.offset=position3,encodeOptions&REUSE_BUFFER_MODE?(target.start=start,target.end=position3,target):target.subarray(start,position3)}catch(error2){throw encodingError=error2,error2}finally{if(structures&&(resetStructures(),hasSharedUpdate&&packr.saveStructures)){let sharedLength=structures.sharedLength||0,returnBuffer=target.subarray(start,position3),newSharedData=prepareStructures(structures,packr);if(!encodingError)return packr.saveStructures(newSharedData,newSharedData.isCompatible)===!1?packr.pack(value,encodeOptions):(packr.lastNamedStructuresLength=sharedLength,target.length>1073741824&&(target=null),returnBuffer)}target.length>1073741824&&(target=null),encodeOptions&RESET_BUFFER_MODE&&(position3=start)}};let resetStructures=__name(()=>{serializationsSinceTransitionRebuild<10&&serializationsSinceTransitionRebuild++;let sharedLength=structures.sharedLength||0;if(structures.length>sharedLength&&!isSequential&&(structures.length=sharedLength),transitionsCount>1e4)structures.transitions=null,serializationsSinceTransitionRebuild=0,transitionsCount=0,recordIdsToRemove.length>0&&(recordIdsToRemove=[]);else if(recordIdsToRemove.length>0&&!isSequential){for(let i=0,l=recordIdsToRemove.length;i<l;i++)recordIdsToRemove[i][RECORD_SYMBOL]=0;recordIdsToRemove=[]}},"resetStructures"),packArray=__name(value=>{var length=value.length;length<16?target[position3++]=144|length:length<65536?(target[position3++]=220,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=221,targetView.setUint32(position3,length),position3+=4);for(let i=0;i<length;i++)pack2(value[i])},"packArray"),pack2=__name(value=>{position3>safeEnd&&(target=makeRoom(position3));var type=typeof value,length;if(type==="string"){let strLength=value.length;if(bundledStrings2&&strLength>=4&&strLength<4096){if((bundledStrings2.size+=strLength)>MAX_BUNDLE_SIZE){let extStart,maxBytes2=(bundledStrings2[0]?bundledStrings2[0].length*3+bundledStrings2[1].length:0)+10;position3+maxBytes2>safeEnd&&(target=makeRoom(position3+maxBytes2));let lastBundle;bundledStrings2.position?(lastBundle=bundledStrings2,target[position3]=200,position3+=3,target[position3++]=98,extStart=position3-start,position3+=4,writeBundles(start,pack2,0),targetView.setUint16(extStart+start-3,position3-start-extStart)):(target[position3++]=214,target[position3++]=98,extStart=position3-start,position3+=4),bundledStrings2=["",""],bundledStrings2.previous=lastBundle,bundledStrings2.size=0,bundledStrings2.position=extStart}let twoByte=hasNonLatin.test(value);bundledStrings2[twoByte?0:1]+=value,target[position3++]=193,pack2(twoByte?-strLength:strLength);return}let headerSize;strLength<32?headerSize=1:strLength<256?headerSize=2:strLength<65536?headerSize=3:headerSize=5;let maxBytes=strLength*3;if(position3+maxBytes>safeEnd&&(target=makeRoom(position3+maxBytes)),strLength<64||!encodeUtf82){let i,c1,c2,strPosition=position3+headerSize;for(i=0;i<strLength;i++)c1=value.charCodeAt(i),c1<128?target[strPosition++]=c1:c1<2048?(target[strPosition++]=c1>>6|192,target[strPosition++]=c1&63|128):(c1&64512)===55296&&((c2=value.charCodeAt(i+1))&64512)===56320?(c1=65536+((c1&1023)<<10)+(c2&1023),i++,target[strPosition++]=c1>>18|240,target[strPosition++]=c1>>12&63|128,target[strPosition++]=c1>>6&63|128,target[strPosition++]=c1&63|128):(target[strPosition++]=c1>>12|224,target[strPosition++]=c1>>6&63|128,target[strPosition++]=c1&63|128);length=strPosition-position3-headerSize}else length=encodeUtf82(value,position3+headerSize);length<32?target[position3++]=160|length:length<256?(headerSize<2&&target.copyWithin(position3+2,position3+1,position3+1+length),target[position3++]=217,target[position3++]=length):length<65536?(headerSize<3&&target.copyWithin(position3+3,position3+2,position3+2+length),target[position3++]=218,target[position3++]=length>>8,target[position3++]=length&255):(headerSize<5&&target.copyWithin(position3+5,position3+3,position3+3+length),target[position3++]=219,targetView.setUint32(position3,length),position3+=4),position3+=length}else if(type==="number")if(value>>>0===value)value<32||value<128&&this.useRecords===!1||value<64&&!this.randomAccessStructure?target[position3++]=value:value<256?(target[position3++]=204,target[position3++]=value):value<65536?(target[position3++]=205,target[position3++]=value>>8,target[position3++]=value&255):(target[position3++]=206,targetView.setUint32(position3,value),position3+=4);else if(value>>0===value)value>=-32?target[position3++]=256+value:value>=-128?(target[position3++]=208,target[position3++]=value+256):value>=-32768?(target[position3++]=209,targetView.setInt16(position3,value),position3+=2):(target[position3++]=210,targetView.setInt32(position3,value),position3+=4);else{let useFloat32;if((useFloat32=this.useFloat32)>0&&value<4294967296&&value>=-2147483648){target[position3++]=202,targetView.setFloat32(position3,value);let xShifted;if(useFloat32<4||(xShifted=value*mult10[(target[position3]&127)<<1|target[position3+1]>>7])>>0===xShifted){position3+=4;return}else position3--}target[position3++]=203,targetView.setFloat64(position3,value),position3+=8}else if(type==="object"||type==="function")if(!value)target[position3++]=192;else{if(referenceMap2){let referee=referenceMap2.get(value);if(referee){if(!referee.id){let idsToInsert=referenceMap2.idsToInsert||(referenceMap2.idsToInsert=[]);referee.id=idsToInsert.push(referee)}target[position3++]=214,target[position3++]=112,targetView.setUint32(position3,referee.id),position3+=4;return}else referenceMap2.set(value,{offset:position3-start})}let constructor=value.constructor;if(constructor===Object)writeObject(value);else if(constructor===Array)packArray(value);else if(constructor===Map)if(this.mapAsEmptyObject)target[position3++]=128;else{length=value.size,length<16?target[position3++]=128|length:length<65536?(target[position3++]=222,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=223,targetView.setUint32(position3,length),position3+=4);for(let[key,entryValue]of value)pack2(key),pack2(entryValue)}else{for(let i=0,l=extensions.length;i<l;i++){let extensionClass=extensionClasses[i];if(value instanceof extensionClass){let extension=extensions[i];if(extension.write){extension.type&&(target[position3++]=212,target[position3++]=extension.type,target[position3++]=0);let writeResult=extension.write.call(this,value);writeResult===value?Array.isArray(value)?packArray(value):writeObject(value):pack2(writeResult);return}let currentTarget=target,currentTargetView=targetView,currentPosition=position3;target=null;let result;try{result=extension.pack.call(this,value,size=>(target=currentTarget,currentTarget=null,position3+=size,position3>safeEnd&&makeRoom(position3),{target,targetView,position:position3-size}),pack2)}finally{currentTarget&&(target=currentTarget,targetView=currentTargetView,position3=currentPosition,safeEnd=target.length-10)}result&&(result.length+position3>safeEnd&&makeRoom(result.length+position3),position3=writeExtensionData(result,target,position3,extension.type));return}}if(Array.isArray(value))packArray(value);else{if(value.toJSON){let json2=value.toJSON();if(json2!==value)return pack2(json2)}if(type==="function")return pack2(this.writeFunction&&this.writeFunction(value));writeObject(value)}}}else if(type==="boolean")target[position3++]=value?195:194;else if(type==="bigint"){if(value<BigInt(1)<<BigInt(63)&&value>=-(BigInt(1)<<BigInt(63)))target[position3++]=211,targetView.setBigInt64(position3,value);else if(value<BigInt(1)<<BigInt(64)&&value>0)target[position3++]=207,targetView.setBigUint64(position3,value);else if(this.largeBigIntToFloat)target[position3++]=203,targetView.setFloat64(position3,Number(value));else{if(this.largeBigIntToString)return pack2(value.toString());if(this.useBigIntExtension&&value<BigInt(2)**BigInt(1023)&&value>-(BigInt(2)**BigInt(1023))){target[position3++]=199,position3++,target[position3++]=66;let bytes=[],alignedSign;do{let byte=value&BigInt(255);alignedSign=(byte&BigInt(128))===(value<BigInt(0)?BigInt(128):BigInt(0)),bytes.push(byte),value>>=BigInt(8)}while(!((value===BigInt(0)||value===BigInt(-1))&&alignedSign));target[position3-2]=bytes.length;for(let i=bytes.length;i>0;)target[position3++]=Number(bytes[--i]);return}else throw new RangeError(value+" was too large to fit in MessagePack 64-bit integer format, use useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set largeBigIntToString to convert to string")}position3+=8}else if(type==="undefined")this.encodeUndefinedAsNil?target[position3++]=192:(target[position3++]=212,target[position3++]=0,target[position3++]=0);else throw new Error("Unknown type: "+type)},"pack"),writePlainObject=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?object2=>{let keys;if(this.skipValues){keys=[];for(let key2 in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key2))&&!this.skipValues.includes(object2[key2])&&keys.push(key2)}else keys=Object.keys(object2);let length=keys.length;length<16?target[position3++]=128|length:length<65536?(target[position3++]=222,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=223,targetView.setUint32(position3,length),position3+=4);let key;if(this.coercibleKeyAsNumber)for(let i=0;i<length;i++){key=keys[i];let num=Number(key);pack2(isNaN(num)?key:num),pack2(object2[key])}else for(let i=0;i<length;i++)pack2(key=keys[i]),pack2(object2[key])}:object2=>{target[position3++]=222;let objectOffset=position3-start;position3+=2;let size=0;for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&(pack2(key),pack2(object2[key]),size++);if(size>65535)throw new Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');target[objectOffset+++start]=size>>8,target[objectOffset+start]=size&255},writeRecord=this.useRecords===!1?writePlainObject:options.progressiveRecords&&!useTwoByteRecords?object2=>{let nextTransition,transition=structures.transitions||(structures.transitions=Object.create(null)),objectOffset=position3++-start,wroteKeys;for(let key in object2)if(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key)){if(nextTransition=transition[key],nextTransition)transition=nextTransition;else{let keys=Object.keys(object2),lastTransition=transition;transition=structures.transitions;let newTransitions=0;for(let i=0,l=keys.length;i<l;i++){let key2=keys[i];nextTransition=transition[key2],nextTransition||(nextTransition=transition[key2]=Object.create(null),newTransitions++),transition=nextTransition}objectOffset+start+1==position3?(position3--,newRecord(transition,keys,newTransitions)):insertNewRecord(transition,keys,objectOffset,newTransitions),wroteKeys=!0,transition=lastTransition[key]}pack2(object2[key])}if(!wroteKeys){let recordId=transition[RECORD_SYMBOL];recordId?target[objectOffset+start]=recordId:insertNewRecord(transition,Object.keys(object2),objectOffset,0)}}:object2=>{let nextTransition,transition=structures.transitions||(structures.transitions=Object.create(null)),newTransitions=0;for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&(nextTransition=transition[key],nextTransition||(nextTransition=transition[key]=Object.create(null),newTransitions++),transition=nextTransition);let recordId=transition[RECORD_SYMBOL];recordId?recordId>=96&&useTwoByteRecords?(target[position3++]=((recordId-=96)&31)+96,target[position3++]=recordId>>5):target[position3++]=recordId:newRecord(transition,transition.__keys__||Object.keys(object2),newTransitions);for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&pack2(object2[key])},checkUseRecords=typeof this.useRecords=="function"&&this.useRecords,writeObject=checkUseRecords?object2=>{checkUseRecords(object2)?writeRecord(object2):writePlainObject(object2)}:writeRecord,makeRoom=__name(end=>{let newSize;if(end>16777216){if(end-start>MAX_BUFFER_SIZE)throw new Error("Packed buffer would be larger than maximum buffer size");newSize=Math.min(MAX_BUFFER_SIZE,Math.round(Math.max((end-start)*(end>67108864?1.25:2),4194304)/4096)*4096)}else newSize=(Math.max(end-start<<2,target.length-1)>>12)+1<<12;let newBuffer=new ByteArrayAllocate2(newSize);return targetView=newBuffer.dataView||(newBuffer.dataView=new DataView(newBuffer.buffer,0,newSize)),end=Math.min(end,target.length),target.copy?target.copy(newBuffer,0,start,end):newBuffer.set(target.slice(start,end)),position3-=start,start=0,safeEnd=newBuffer.length-10,target=newBuffer},"makeRoom"),newRecord=__name((transition,keys,newTransitions)=>{let recordId=structures.nextId;recordId||(recordId=64),recordId<sharedLimitId&&this.shouldShareStructure&&!this.shouldShareStructure(keys)?(recordId=structures.nextOwnId,recordId<maxStructureId||(recordId=sharedLimitId),structures.nextOwnId=recordId+1):(recordId>=maxStructureId&&(recordId=sharedLimitId),structures.nextId=recordId+1);let highByte=keys.highByte=recordId>=96&&useTwoByteRecords?recordId-96>>5:-1;transition[RECORD_SYMBOL]=recordId,transition.__keys__=keys,structures[recordId-64]=keys,recordId<sharedLimitId?(keys.isShared=!0,structures.sharedLength=recordId-63,hasSharedUpdate=!0,highByte>=0?(target[position3++]=(recordId&31)+96,target[position3++]=highByte):target[position3++]=recordId):(highByte>=0?(target[position3++]=213,target[position3++]=114,target[position3++]=(recordId&31)+96,target[position3++]=highByte):(target[position3++]=212,target[position3++]=114,target[position3++]=recordId),newTransitions&&(transitionsCount+=serializationsSinceTransitionRebuild*newTransitions),recordIdsToRemove.length>=maxOwnStructures&&(recordIdsToRemove.shift()[RECORD_SYMBOL]=0),recordIdsToRemove.push(transition),pack2(keys))},"newRecord"),insertNewRecord=__name((transition,keys,insertionOffset,newTransitions)=>{let mainTarget=target,mainPosition=position3,mainSafeEnd=safeEnd,mainStart=start;target=keysTarget,position3=0,start=0,target||(keysTarget=target=new ByteArrayAllocate2(8192)),safeEnd=target.length-10,newRecord(transition,keys,newTransitions),keysTarget=target;let keysPosition=position3;if(target=mainTarget,position3=mainPosition,safeEnd=mainSafeEnd,start=mainStart,keysPosition>1){let newEnd=position3+keysPosition-1;newEnd>safeEnd&&makeRoom(newEnd);let insertionPosition=insertionOffset+start;target.copyWithin(insertionPosition+keysPosition,insertionPosition+1,position3),target.set(keysTarget.slice(0,keysPosition),insertionPosition),position3=newEnd}else target[insertionOffset+start]=keysTarget[0]},"insertNewRecord"),writeStruct2=__name(object2=>{let newPosition=writeStructSlots(object2,target,start,position3,structures,makeRoom,(value,newPosition2,notifySharedUpdate)=>{if(notifySharedUpdate)return hasSharedUpdate=!0;position3=newPosition2;let startTarget=target;return pack2(value),resetStructures(),startTarget!==target?{position:position3,targetView,target}:position3},this);if(newPosition===0)return writeObject(object2);position3=newPosition},"writeStruct")}useBuffer(buffer){target=buffer,target.dataView||(target.dataView=new DataView(target.buffer,target.byteOffset,target.byteLength)),position3=0}set position(value){position3=value}get position(){return position3}clearSharedData(){this.structures&&(this.structures=[]),this.typedStructs&&(this.typedStructs=[])}};extensionClasses=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,C1Type];extensions=[{pack(date5,allocateForWrite,pack2){let seconds=date5.getTime()/1e3;if((this.useTimestamp32||date5.getMilliseconds()===0)&&seconds>=0&&seconds<4294967296){let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(6);target2[position4++]=214,target2[position4++]=255,targetView2.setUint32(position4,seconds)}else if(seconds>0&&seconds<4294967296){let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(10);target2[position4++]=215,target2[position4++]=255,targetView2.setUint32(position4,date5.getMilliseconds()*4e6+(seconds/1e3/4294967296>>0)),targetView2.setUint32(position4+4,seconds)}else if(isNaN(seconds)){if(this.onInvalidDate)return allocateForWrite(0),pack2(this.onInvalidDate());let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(3);target2[position4++]=212,target2[position4++]=255,target2[position4++]=255}else{let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(15);target2[position4++]=199,target2[position4++]=12,target2[position4++]=255,targetView2.setUint32(position4,date5.getMilliseconds()*1e6),targetView2.setBigInt64(position4+4,BigInt(Math.floor(seconds)))}}},{pack(set2,allocateForWrite,pack2){if(this.setAsEmptyObject)return allocateForWrite(0),pack2({});let array2=Array.from(set2),{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=115,target2[position4++]=0),pack2(array2)}},{pack(error2,allocateForWrite,pack2){let{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=101,target2[position4++]=0),pack2([error2.name,error2.message,error2.cause])}},{pack(regex,allocateForWrite,pack2){let{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=120,target2[position4++]=0),pack2([regex.source,regex.flags])}},{pack(arrayBuffer,allocateForWrite){this.moreTypes?writeExtBuffer(arrayBuffer,16,allocateForWrite):writeBuffer(hasNodeBuffer2?Buffer.from(arrayBuffer):new Uint8Array(arrayBuffer),allocateForWrite)}},{pack(typedArray,allocateForWrite){let constructor=typedArray.constructor;constructor!==ByteArray&&this.moreTypes?writeExtBuffer(typedArray,typedArrays.indexOf(constructor.name),allocateForWrite):writeBuffer(typedArray,allocateForWrite)}},{pack(c1,allocateForWrite){let{target:target2,position:position4}=allocateForWrite(1);target2[position4]=193}}];function writeExtBuffer(typedArray,type,allocateForWrite,encode4){let length=typedArray.byteLength;if(length+1<256){var{target:target2,position:position4}=allocateForWrite(4+length);target2[position4++]=199,target2[position4++]=length+1}else if(length+1<65536){var{target:target2,position:position4}=allocateForWrite(5+length);target2[position4++]=200,target2[position4++]=length+1>>8,target2[position4++]=length+1&255}else{var{target:target2,position:position4,targetView:targetView2}=allocateForWrite(7+length);target2[position4++]=201,targetView2.setUint32(position4,length+1),position4+=4}target2[position4++]=116,target2[position4++]=type,typedArray.buffer||(typedArray=new Uint8Array(typedArray)),target2.set(new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength),position4)}__name(writeExtBuffer,"writeExtBuffer");function writeBuffer(buffer,allocateForWrite){let length=buffer.byteLength;var target2,position4;if(length<256){var{target:target2,position:position4}=allocateForWrite(length+2);target2[position4++]=196,target2[position4++]=length}else if(length<65536){var{target:target2,position:position4}=allocateForWrite(length+3);target2[position4++]=197,target2[position4++]=length>>8,target2[position4++]=length&255}else{var{target:target2,position:position4,targetView:targetView2}=allocateForWrite(length+5);target2[position4++]=198,targetView2.setUint32(position4,length),position4+=4}target2.set(buffer,position4)}__name(writeBuffer,"writeBuffer");function writeExtensionData(result,target2,position4,type){let length=result.length;switch(length){case 1:target2[position4++]=212;break;case 2:target2[position4++]=213;break;case 4:target2[position4++]=214;break;case 8:target2[position4++]=215;break;case 16:target2[position4++]=216;break;default:length<256?(target2[position4++]=199,target2[position4++]=length):length<65536?(target2[position4++]=200,target2[position4++]=length>>8,target2[position4++]=length&255):(target2[position4++]=201,target2[position4++]=length>>24,target2[position4++]=length>>16&255,target2[position4++]=length>>8&255,target2[position4++]=length&255)}return target2[position4++]=type,target2.set(result,position4),position4+=length,position4}__name(writeExtensionData,"writeExtensionData");function insertIds(serialized,idsToInsert){let nextId,distanceToMove=idsToInsert.length*6,lastEnd=serialized.length-distanceToMove;for(;nextId=idsToInsert.pop();){let offset=nextId.offset,id=nextId.id;serialized.copyWithin(offset+distanceToMove,offset,lastEnd),distanceToMove-=6;let position4=offset+distanceToMove;serialized[position4++]=214,serialized[position4++]=105,serialized[position4++]=id>>24,serialized[position4++]=id>>16&255,serialized[position4++]=id>>8&255,serialized[position4++]=id&255,lastEnd=offset}return serialized}__name(insertIds,"insertIds");function writeBundles(start,pack2,incrementPosition){if(bundledStrings2.length>0){targetView.setUint32(bundledStrings2.position+start,position3+incrementPosition-bundledStrings2.position-start),bundledStrings2.stringsPosition=position3-start;let writeStrings=bundledStrings2;bundledStrings2=null,pack2(writeStrings[0]),pack2(writeStrings[1])}}__name(writeBundles,"writeBundles");function prepareStructures(structures,packr){return structures.isCompatible=existingStructures=>{let compatible=!existingStructures||(packr.lastNamedStructuresLength||0)===existingStructures.length;return compatible||packr._mergeStructures(existingStructures),compatible},structures}__name(prepareStructures,"prepareStructures");function setWriteStructSlots(writeSlots,makeStructures){writeStructSlots=writeSlots,prepareStructures=makeStructures}__name(setWriteStructSlots,"setWriteStructSlots");var defaultPackr=new Packr({useRecords:!1}),pack=defaultPackr.pack,encode3=defaultPackr.pack,Encoder7=Packr,{NEVER:NEVER2,ALWAYS,DECIMAL_ROUND,DECIMAL_FIT}=FLOAT32_OPTIONS,REUSE_BUFFER_MODE=512,RESET_BUFFER_MODE=1024,RESERVE_START_SPACE=2048;var ASCII=3,NUMBER=0,UTF8=2,OBJECT_DATA=1,DATE=16,TYPE_NAMES=["num","object","string","ascii"];TYPE_NAMES[DATE]="date";var float32Headers=[!1,!0,!0,!1,!1,!0,!0,!1],evalSupported;try{new Function(""),evalSupported=!0}catch{}var updatedPosition,hasNodeBuffer3=typeof Buffer<"u",textEncoder3,currentSource;try{textEncoder3=new TextEncoder}catch{}var encodeUtf8=hasNodeBuffer3?function(target2,string4,position4){return target2.utf8Write(string4,position4,target2.byteLength-position4)}:textEncoder3&&textEncoder3.encodeInto?function(target2,string4,position4){return textEncoder3.encodeInto(string4,target2.subarray(position4)).written}:!1;setWriteStructSlots(writeStruct,prepareStructures2);function writeStruct(object2,target2,encodingStart,position4,structures,makeRoom,pack2,packr){let typedStructs=packr.typedStructs||(packr.typedStructs=[]),targetView2=target2.dataView,refsStartPosition=(typedStructs.lastStringStart||100)+position4,safeEnd2=target2.length-10,start=position4;position4>safeEnd2&&(target2=makeRoom(position4),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10);let refOffset,refPosition=refsStartPosition,transition=typedStructs.transitions||(typedStructs.transitions=Object.create(null)),nextId=typedStructs.nextId||typedStructs.length,headerSize=nextId<15?1:nextId<240?2:nextId<61440?3:nextId<15728640?4:0;if(headerSize===0)return 0;position4+=headerSize;let queuedReferences=[],usedAscii0,keyIndex=0;for(let key in object2){let value=object2[key],nextTransition=transition[key];switch(nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:0,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null,date64:null}),position4>safeEnd2&&(target2=makeRoom(position4),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,refPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10),typeof value){case"number":let number4=value;if(nextId<200||!nextTransition.num64){if(number4>>0===number4&&number4<536870912&&number4>-520093696){number4<246&&number4>=0&&(nextTransition.num8&&!(nextId>200&&nextTransition.num32)||number4<32&&!nextTransition.num32)?(transition=nextTransition.num8||createTypeTransition(nextTransition,NUMBER,1),target2[position4++]=number4):(transition=nextTransition.num32||createTypeTransition(nextTransition,NUMBER,4),targetView2.setUint32(position4,number4,!0),position4+=4);break}else if(number4<4294967296&&number4>=-2147483648&&(targetView2.setFloat32(position4,number4,!0),float32Headers[target2[position4+3]>>>5])){let xShifted;if((xShifted=number4*mult10[(target2[position4+3]&127)<<1|target2[position4+2]>>7])>>0===xShifted){transition=nextTransition.num32||createTypeTransition(nextTransition,NUMBER,4),position4+=4;break}}}transition=nextTransition.num64||createTypeTransition(nextTransition,NUMBER,8),targetView2.setFloat64(position4,number4,!0),position4+=8;break;case"string":let strLength=value.length;if(refOffset=refPosition-refsStartPosition,(strLength<<2)+refPosition>safeEnd2&&(target2=makeRoom((strLength<<2)+refPosition),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,refPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10),strLength>65280+refOffset>>2){queuedReferences.push(key,value,position4-start);break}let isNotAscii,strStart=refPosition;if(strLength<64){let i,c1,c2;for(i=0;i<strLength;i++)c1=value.charCodeAt(i),c1<128?target2[refPosition++]=c1:c1<2048?(isNotAscii=!0,target2[refPosition++]=c1>>6|192,target2[refPosition++]=c1&63|128):(c1&64512)===55296&&((c2=value.charCodeAt(i+1))&64512)===56320?(isNotAscii=!0,c1=65536+((c1&1023)<<10)+(c2&1023),i++,target2[refPosition++]=c1>>18|240,target2[refPosition++]=c1>>12&63|128,target2[refPosition++]=c1>>6&63|128,target2[refPosition++]=c1&63|128):(isNotAscii=!0,target2[refPosition++]=c1>>12|224,target2[refPosition++]=c1>>6&63|128,target2[refPosition++]=c1&63|128)}else refPosition+=encodeUtf8(target2,value,refPosition),isNotAscii=refPosition-strStart>strLength;if(refOffset<160||refOffset<246&&(nextTransition.ascii8||nextTransition.string8)){if(isNotAscii)(transition=nextTransition.string8)||(typedStructs.length>10&&(transition=nextTransition.ascii8)?(transition.__type=UTF8,nextTransition.ascii8=null,nextTransition.string8=transition,pack2(null,0,!0)):transition=createTypeTransition(nextTransition,UTF8,1));else if(refOffset===0&&!usedAscii0){usedAscii0=!0,transition=nextTransition.ascii0||createTypeTransition(nextTransition,ASCII,0);break}else!(transition=nextTransition.ascii8)&&!(typedStructs.length>10&&(transition=nextTransition.string8))&&(transition=createTypeTransition(nextTransition,ASCII,1));target2[position4++]=refOffset}else transition=nextTransition.string16||createTypeTransition(nextTransition,UTF8,2),targetView2.setUint16(position4,refOffset,!0),position4+=2;break;case"object":if(value){value.constructor===Date?(transition=nextTransition.date64||createTypeTransition(nextTransition,DATE,8),targetView2.setFloat64(position4,value.getTime(),!0),position4+=8):queuedReferences.push(key,value,keyIndex);break}else nextTransition=anyType(nextTransition,position4,targetView2,-10),nextTransition?(transition=nextTransition,position4=updatedPosition):queuedReferences.push(key,value,keyIndex);break;case"boolean":transition=nextTransition.num8||nextTransition.ascii8||createTypeTransition(nextTransition,NUMBER,1),target2[position4++]=value?249:248;break;case"undefined":nextTransition=anyType(nextTransition,position4,targetView2,-9),nextTransition?(transition=nextTransition,position4=updatedPosition):queuedReferences.push(key,value,keyIndex);break;default:queuedReferences.push(key,value,keyIndex)}keyIndex++}for(let i=0,l=queuedReferences.length;i<l;){let key=queuedReferences[i++],value=queuedReferences[i++],propertyIndex=queuedReferences[i++],nextTransition=transition[key];nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:propertyIndex-keyIndex,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null});let newPosition;if(value){let size;refOffset=refPosition-refsStartPosition,refOffset<65280?(transition=nextTransition.object16,transition?size=2:(transition=nextTransition.object32)?size=4:(transition=createTypeTransition(nextTransition,OBJECT_DATA,2),size=2)):(transition=nextTransition.object32||createTypeTransition(nextTransition,OBJECT_DATA,4),size=4),newPosition=pack2(value,refPosition),typeof newPosition=="object"?(refPosition=newPosition.position,targetView2=newPosition.targetView,target2=newPosition.target,refsStartPosition-=encodingStart,position4-=encodingStart,start-=encodingStart,encodingStart=0):refPosition=newPosition,size===2?(targetView2.setUint16(position4,refOffset,!0),position4+=2):(targetView2.setUint32(position4,refOffset,!0),position4+=4)}else transition=nextTransition.object16||createTypeTransition(nextTransition,OBJECT_DATA,2),targetView2.setInt16(position4,value===null?-10:-9,!0),position4+=2;keyIndex++}let recordId=transition[RECORD_SYMBOL];if(recordId==null){recordId=packr.typedStructs.length;let structure=[],nextTransition=transition,key,type;for(;(type=nextTransition.__type)!==void 0;){let size=nextTransition.__size;nextTransition=nextTransition.__parent,key=nextTransition.key;let property=[type,size,key];nextTransition.enumerationOffset&&property.push(nextTransition.enumerationOffset),structure.push(property),nextTransition=nextTransition.parent}structure.reverse(),transition[RECORD_SYMBOL]=recordId,packr.typedStructs[recordId]=structure,pack2(null,0,!0)}switch(headerSize){case 1:if(recordId>=16)return 0;target2[start]=recordId+32;break;case 2:if(recordId>=256)return 0;target2[start]=56,target2[start+1]=recordId;break;case 3:if(recordId>=65536)return 0;target2[start]=57,targetView2.setUint16(start+1,recordId,!0);break;case 4:if(recordId>=16777216)return 0;targetView2.setUint32(start,(recordId<<8)+58,!0);break}if(position4<refsStartPosition){if(refsStartPosition===refPosition)return position4;target2.copyWithin(position4,refsStartPosition,refPosition),refPosition+=position4-refsStartPosition,typedStructs.lastStringStart=position4-start}else if(position4>refsStartPosition)return refsStartPosition===refPosition?position4:(typedStructs.lastStringStart=position4-start,writeStruct(object2,target2,encodingStart,start,structures,makeRoom,pack2,packr));return refPosition}__name(writeStruct,"writeStruct");function anyType(transition,position4,targetView2,value){let nextTransition;if(nextTransition=transition.ascii8||transition.num8)return targetView2.setInt8(position4,value,!0),updatedPosition=position4+1,nextTransition;if(nextTransition=transition.string16||transition.object16)return targetView2.setInt16(position4,value,!0),updatedPosition=position4+2,nextTransition;if(nextTransition=transition.num32)return targetView2.setUint32(position4,3758096640+value,!0),updatedPosition=position4+4,nextTransition;if(nextTransition=transition.num64)return targetView2.setFloat64(position4,NaN,!0),targetView2.setInt8(position4,value),updatedPosition=position4+8,nextTransition;updatedPosition=position4}__name(anyType,"anyType");function createTypeTransition(transition,type,size){let typeName=TYPE_NAMES[type]+(size<<3),newTransition=transition[typeName]||(transition[typeName]=Object.create(null));return newTransition.__type=type,newTransition.__size=size,newTransition.__parent=transition,newTransition}__name(createTypeTransition,"createTypeTransition");function onLoadedStructures2(sharedData){if(!(sharedData instanceof Map))return sharedData;let typed=sharedData.get("typed")||[];Object.isFrozen(typed)&&(typed=typed.map(structure=>structure.slice(0)));let named=sharedData.get("named"),transitions=Object.create(null);for(let i=0,l=typed.length;i<l;i++){let structure=typed[i],transition=transitions;for(let[type,size,key]of structure){let nextTransition=transition[key];nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:0,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null,date64:null}),transition=createTypeTransition(nextTransition,type,size)}transition[RECORD_SYMBOL]=i}return typed.transitions=transitions,this.typedStructs=typed,this.lastTypedStructuresLength=typed.length,named}__name(onLoadedStructures2,"onLoadedStructures");var sourceSymbol=Symbol.for("source");function readStruct2(src2,position4,srcEnd2,unpackr){let recordId=src2[position4++]-32;if(recordId>=24)switch(recordId){case 24:recordId=src2[position4++];break;case 25:recordId=src2[position4++]+(src2[position4++]<<8);break;case 26:recordId=src2[position4++]+(src2[position4++]<<8)+(src2[position4++]<<16);break;case 27:recordId=src2[position4++]+(src2[position4++]<<8)+(src2[position4++]<<16)+(src2[position4++]<<24);break}let structure=unpackr.typedStructs&&unpackr.typedStructs[recordId];if(!structure){if(src2=Uint8Array.prototype.slice.call(src2,position4,srcEnd2),srcEnd2-=position4,position4=0,!unpackr.getStructures)throw new Error(`Reference to shared structure ${recordId} without getStructures method`);if(unpackr._mergeStructures(unpackr.getStructures()),!unpackr.typedStructs)throw new Error("Could not find any shared typed structures");if(unpackr.lastTypedStructuresLength=unpackr.typedStructs.length,structure=unpackr.typedStructs[recordId],!structure)throw new Error("Could not find typed structure "+recordId)}var construct=structure.construct;if(!construct){construct=structure.construct=__name(function(){},"LazyObject");var prototype=construct.prototype;let properties=[],currentOffset=0,lastRefProperty;for(let i=0,l=structure.length;i<l;i++){let definition=structure[i],[type,size,key,enumerationOffset]=definition;key==="__proto__"&&(key="__proto_");let property={key,offset:currentOffset};enumerationOffset?properties.splice(i+enumerationOffset,0,property):properties.push(property);let getRef;switch(size){case 0:getRef=__name(()=>0,"getRef");break;case 1:getRef=__name((source,position5)=>{let ref=source.bytes[position5+property.offset];return ref>=246?toConstant(ref):ref},"getRef");break;case 2:getRef=__name((source,position5)=>{let src3=source.bytes,ref=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getUint16(position5+property.offset,!0);return ref>=65280?toConstant(ref&255):ref},"getRef");break;case 4:getRef=__name((source,position5)=>{let src3=source.bytes,ref=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getUint32(position5+property.offset,!0);return ref>=4294967040?toConstant(ref&255):ref},"getRef");break}property.getRef=getRef,currentOffset+=size;let get;switch(type){case ASCII:lastRefProperty&&!lastRefProperty.next&&(lastRefProperty.next=property),lastRefProperty=property,property.multiGetCount=0,get=__name(function(source){let src3=source.bytes,position5=source.position,refStart=currentOffset+position5,ref=getRef(source,position5);if(typeof ref!="number")return ref;let end,next=property.next;for(;next&&(end=next.getRef(source,position5),typeof end!="number");)end=null,next=next.next;return end==null&&(end=source.bytesEnd-refStart),source.srcString?source.srcString.slice(ref,end):readString2(src3,ref+refStart,end-ref)},"get");break;case UTF8:case OBJECT_DATA:lastRefProperty&&!lastRefProperty.next&&(lastRefProperty.next=property),lastRefProperty=property,get=__name(function(source){let position5=source.position,refStart=currentOffset+position5,ref=getRef(source,position5);if(typeof ref!="number")return ref;let src3=source.bytes,end,next=property.next;for(;next&&(end=next.getRef(source,position5),typeof end!="number");)end=null,next=next.next;if(end==null&&(end=source.bytesEnd-refStart),type===UTF8)return src3.toString("utf8",ref+refStart,end+refStart);currentSource=source;try{return unpackr.unpack(src3,{start:ref+refStart,end:end+refStart})}finally{currentSource=null}},"get");break;case NUMBER:switch(size){case 4:get=__name(function(source){let src3=source.bytes,dataView2=src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength)),position5=source.position+property.offset,value=dataView2.getInt32(position5,!0);if(value<536870912){if(value>-520093696)return value;if(value>-536870912)return toConstant(value&255)}let fValue=dataView2.getFloat32(position5,!0),multiplier=mult10[(src3[position5+3]&127)<<1|src3[position5+2]>>7];return(multiplier*fValue+(fValue>0?.5:-.5)>>0)/multiplier},"get");break;case 8:get=__name(function(source){let src3=source.bytes,value=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getFloat64(source.position+property.offset,!0);if(isNaN(value)){let byte=src3[source.position+property.offset];if(byte>=246)return toConstant(byte)}return value},"get");break;case 1:get=__name(function(source){let value=source.bytes[source.position+property.offset];return value<246?value:toConstant(value)},"get");break}break;case DATE:get=__name(function(source){let src3=source.bytes,dataView2=src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength));return new Date(dataView2.getFloat64(source.position+property.offset,!0))},"get");break}property.get=get}if(evalSupported){let objectLiteralProperties=[],args=[],i=0,hasInheritedProperties;for(let property of properties){if(unpackr.alwaysLazyProperty&&unpackr.alwaysLazyProperty(property.key)){hasInheritedProperties=!0;continue}Object.defineProperty(prototype,property.key,{get:withSource(property.get),enumerable:!0});let valueFunction="v"+i++;args.push(valueFunction),objectLiteralProperties.push("["+JSON.stringify(property.key)+"]:"+valueFunction+"(s)")}hasInheritedProperties&&objectLiteralProperties.push("__proto__:this");let toObject=new Function(...args,"return function(s){return{"+objectLiteralProperties.join(",")+"}}").apply(null,properties.map(prop=>prop.get));Object.defineProperty(prototype,"toJSON",{value(omitUnderscoredProperties){return toObject.call(this,this[sourceSymbol])}})}else Object.defineProperty(prototype,"toJSON",{value(omitUnderscoredProperties){let resolved={};for(let i=0,l=properties.length;i<l;i++){let key=properties[i].key;resolved[key]=this[key]}return resolved}})}var instance=new construct;return instance[sourceSymbol]={bytes:src2,position:position4,srcString:"",bytesEnd:srcEnd2},instance}__name(readStruct2,"readStruct");function toConstant(code){switch(code){case 246:return null;case 247:return;case 248:return!1;case 249:return!0}throw new Error("Unknown constant")}__name(toConstant,"toConstant");function withSource(get){return function(){return get(this[sourceSymbol])}}__name(withSource,"withSource");function saveState2(){currentSource&&(currentSource.bytes=Uint8Array.prototype.slice.call(currentSource.bytes,currentSource.position,currentSource.bytesEnd),currentSource.position=0,currentSource.bytesEnd=currentSource.bytes.length)}__name(saveState2,"saveState");function prepareStructures2(structures,packr){if(packr.typedStructs){let structMap=new Map;structMap.set("named",structures),structMap.set("typed",packr.typedStructs),structures=structMap}let lastTypedStructuresLength=packr.lastTypedStructuresLength||0;return structures.isCompatible=existing=>{let compatible=!0;return existing instanceof Map?((existing.get("named")||[]).length!==(packr.lastNamedStructuresLength||0)&&(compatible=!1),(existing.get("typed")||[]).length!==lastTypedStructuresLength&&(compatible=!1)):(existing instanceof Array||Array.isArray(existing))&&existing.length!==(packr.lastNamedStructuresLength||0)&&(compatible=!1),compatible||packr._mergeStructures(existing),compatible},packr.lastTypedStructuresLength=packr.typedStructs&&packr.typedStructs.length,structures}__name(prepareStructures2,"prepareStructures");setReadStruct(readStruct2,onLoadedStructures2,saveState2);import{createRequire}from"module";var nativeAccelerationDisabled=process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED!==void 0&&process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED.toLowerCase()==="true";if(!nativeAccelerationDisabled){let extractor;try{typeof __require=="function"?extractor=__require("msgpackr-extract"):extractor=createRequire(import.meta.url)("msgpackr-extract"),extractor&&setExtractor(extractor.extractStrings)}catch{}}function serialize(o){return typeof o=="string"?`'${o}'`:new c().serialize(o)}__name(serialize,"serialize");var c=(function(){class o{static{__name(this,"o")}#t=new Map;compare(t,r2){let e2=typeof t,n=typeof r2;return e2==="string"&&n==="string"?t.localeCompare(r2):e2==="number"&&n==="number"?t-r2:String.prototype.localeCompare.call(this.serialize(t,!0),this.serialize(r2,!0))}serialize(t,r2){if(t===null)return"null";switch(typeof t){case"string":return r2?t:`'${t}'`;case"bigint":return`${t}n`;case"object":return this.$object(t);case"function":return this.$function(t)}return String(t)}serializeObject(t){let r2=Object.prototype.toString.call(t);if(r2!=="[object Object]")return this.serializeBuiltInType(r2.length<10?`unknown:${r2}`:r2.slice(8,-1),t);let e2=t.constructor,n=e2===Object||e2===void 0?"":e2.name;if(n!==""&&globalThis[n]===e2)return this.serializeBuiltInType(n,t);if(typeof t.toJSON=="function"){let i=t.toJSON();return n+(i!==null&&typeof i=="object"?this.$object(i):`(${this.serialize(i)})`)}return this.serializeObjectEntries(n,Object.entries(t))}serializeBuiltInType(t,r2){let e2=this["$"+t];if(e2)return e2.call(this,r2);if(typeof r2?.entries=="function")return this.serializeObjectEntries(t,r2.entries());throw new Error(`Cannot serialize ${t}`)}serializeObjectEntries(t,r2){let e2=Array.from(r2).sort((i,a)=>this.compare(i[0],a[0])),n=`${t}{`;for(let i=0;i<e2.length;i++){let[a,l]=e2[i];n+=`${this.serialize(a,!0)}:${this.serialize(l)}`,i<e2.length-1&&(n+=",")}return n+"}"}$object(t){let r2=this.#t.get(t);return r2===void 0&&(this.#t.set(t,`#${this.#t.size}`),r2=this.serializeObject(t),this.#t.set(t,r2)),r2}$function(t){let r2=Function.prototype.toString.call(t);return r2.slice(-15)==="[native code] }"?`${t.name||""}()[native]`:`${t.name}(${t.length})${r2.replace(/\s*\n\s*/g,"")}`}$Array(t){let r2="[";for(let e2=0;e2<t.length;e2++)r2+=this.serialize(t[e2]),e2<t.length-1&&(r2+=",");return r2+"]"}$Date(t){try{return`Date(${t.toISOString()})`}catch{return"Date(null)"}}$ArrayBuffer(t){return`ArrayBuffer[${new Uint8Array(t).join(",")}]`}$Set(t){return`Set${this.$Array(Array.from(t).sort((r2,e2)=>this.compare(r2,e2)))}`}$Map(t){return this.serializeObjectEntries("Map",t.entries())}}for(let s2 of["Error","RegExp","URL"])o.prototype["$"+s2]=function(t){return`${s2}(${t})`};for(let s2 of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])o.prototype["$"+s2]=function(t){return`${s2}[${t.join(",")}]`};for(let s2 of["BigInt64Array","BigUint64Array"])o.prototype["$"+s2]=function(t){return`${s2}[${t.join("n,")}${t.length>0?"n":""}]`};return o})();import{createHash}from"node:crypto";var e=globalThis.process?.getBuiltinModule?.("crypto")?.hash,r="sha256",s="base64url";function digest(t){if(e)return e(r,t,s);let o=createHash(r).update(t);return globalThis.process?.versions?.webcontainer?o.digest().toString(s):o.digest(s)}__name(digest,"digest");function hash4(input){return digest(serialize(input))}__name(hash4,"hash");var _computedKey41;_computedKey41=Symbol.asyncIterator;var SQLiteOPFSAztecArray=class{static{__name(this,"SQLiteOPFSAztecArray")}store;#name;#container;#encoder;constructor(store,name){this.store=store,this.#encoder=new Encoder7,this.#name=name,this.#container=`array:${name}`}async lengthAsync(){let rows=await this.store.allAsync("SELECT COUNT(*) FROM data WHERE container = ? AND key = ?",[this.#container,this.#encodedKey()]);return Number(rows[0]?.[0]??0)}async push(...vals){return vals.length===0?this.lengthAsync():await this.store.transactionAsync(async()=>{let length=await this.lengthAsync();for(let val of vals)await this.store.runAsync(`INSERT INTO data (slot, container, key, key_count, hash, value)
257
+ }`}};var AvmContractClassHint=class _AvmContractClassHint{static{__name(this,"AvmContractClassHint")}hintKey;classId;artifactHash;privateFunctionsRoot;packedBytecode;constructor(hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode){this.hintKey=hintKey,this.classId=classId,this.artifactHash=artifactHash,this.privateFunctionsRoot=privateFunctionsRoot,this.packedBytecode=packedBytecode}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),classId:schemas2.Fr,artifactHash:schemas2.Fr,privateFunctionsRoot:schemas2.Fr,packedBytecode:schemas2.Buffer}).transform(({hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode})=>new _AvmContractClassHint(hintKey,classId,artifactHash,privateFunctionsRoot,packedBytecode))}static fromPlainObject(obj){return obj instanceof _AvmContractClassHint?obj:new _AvmContractClassHint(obj.hintKey,Fr.fromPlainObject(obj.classId),Fr.fromPlainObject(obj.artifactHash),Fr.fromPlainObject(obj.privateFunctionsRoot),obj.packedBytecode instanceof Buffer73?obj.packedBytecode:Buffer73.from(obj.packedBytecode))}},AvmBytecodeCommitmentHint=class _AvmBytecodeCommitmentHint{static{__name(this,"AvmBytecodeCommitmentHint")}hintKey;classId;commitment;constructor(hintKey,classId,commitment){this.hintKey=hintKey,this.classId=classId,this.commitment=commitment}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),classId:schemas2.Fr,commitment:schemas2.Fr}).transform(({hintKey,classId,commitment})=>new _AvmBytecodeCommitmentHint(hintKey,classId,commitment))}static fromPlainObject(obj){return obj instanceof _AvmBytecodeCommitmentHint?obj:new _AvmBytecodeCommitmentHint(obj.hintKey,Fr.fromPlainObject(obj.classId),Fr.fromPlainObject(obj.commitment))}},AvmContractInstanceHint=class _AvmContractInstanceHint{static{__name(this,"AvmContractInstanceHint")}hintKey;address;salt;deployer;currentContractClassId;originalContractClassId;initializationHash;immutablesHash;publicKeys;constructor(hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys){this.hintKey=hintKey,this.address=address,this.salt=salt,this.deployer=deployer,this.currentContractClassId=currentContractClassId,this.originalContractClassId=originalContractClassId,this.initializationHash=initializationHash,this.immutablesHash=immutablesHash,this.publicKeys=publicKeys}static get schema(){return external_exports.object({hintKey:external_exports.number().int().nonnegative(),address:AztecAddress.schema,salt:schemas2.Fr,deployer:AztecAddress.schema,currentContractClassId:schemas2.Fr,originalContractClassId:schemas2.Fr,initializationHash:schemas2.Fr,immutablesHash:schemas2.Fr,publicKeys:PublicKeys.schema}).transform(({hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys})=>new _AvmContractInstanceHint(hintKey,address,salt,deployer,currentContractClassId,originalContractClassId,initializationHash,immutablesHash,publicKeys))}static fromPlainObject(obj){return obj instanceof _AvmContractInstanceHint?obj:new _AvmContractInstanceHint(obj.hintKey,AztecAddress.fromPlainObject(obj.address),Fr.fromPlainObject(obj.salt),AztecAddress.fromPlainObject(obj.deployer),Fr.fromPlainObject(obj.currentContractClassId),Fr.fromPlainObject(obj.originalContractClassId),Fr.fromPlainObject(obj.initializationHash),Fr.fromPlainObject(obj.immutablesHash),PublicKeys.fromPlainObject(obj.publicKeys))}},AvmDebugFunctionNameHint=class _AvmDebugFunctionNameHint{static{__name(this,"AvmDebugFunctionNameHint")}address;selector;name;constructor(address,selector,name){this.address=address,this.selector=selector,this.name=name}static get schema(){return external_exports.object({address:AztecAddress.schema,selector:schemas2.Fr,name:external_exports.string()}).transform(({address,selector,name})=>new _AvmDebugFunctionNameHint(address,selector,name))}static fromPlainObject(obj){return obj instanceof _AvmDebugFunctionNameHint?obj:new _AvmDebugFunctionNameHint(AztecAddress.fromPlainObject(obj.address),Fr.fromPlainObject(obj.selector),obj.name)}},AvmGetSiblingPathHint=class _AvmGetSiblingPathHint{static{__name(this,"AvmGetSiblingPathHint")}hintKey;treeId;index;path;constructor(hintKey,treeId,index,path5){this.hintKey=hintKey,this.treeId=treeId,this.index=index,this.path=path5}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),index:schemas2.BigInt,path:schemas2.Fr.array()}).transform(({hintKey,treeId,index,path:path5})=>new _AvmGetSiblingPathHint(hintKey,treeId,index,path5))}static fromPlainObject(obj){return obj instanceof _AvmGetSiblingPathHint?obj:new _AvmGetSiblingPathHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,typeof obj.index=="bigint"?obj.index:BigInt(obj.index),obj.path.map(p=>Fr.fromPlainObject(p)))}},AvmGetPreviousValueIndexHint=class _AvmGetPreviousValueIndexHint{static{__name(this,"AvmGetPreviousValueIndexHint")}hintKey;treeId;value;index;alreadyPresent;constructor(hintKey,treeId,value,index,alreadyPresent){this.hintKey=hintKey,this.treeId=treeId,this.value=value,this.index=index,this.alreadyPresent=alreadyPresent}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),value:schemas2.Fr,index:schemas2.BigInt,alreadyPresent:external_exports.boolean()}).transform(({hintKey,treeId,value,index,alreadyPresent})=>new _AvmGetPreviousValueIndexHint(hintKey,treeId,value,index,alreadyPresent))}static fromPlainObject(obj){return obj instanceof _AvmGetPreviousValueIndexHint?obj:new _AvmGetPreviousValueIndexHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,Fr.fromPlainObject(obj.value),typeof obj.index=="bigint"?obj.index:BigInt(obj.index),obj.alreadyPresent)}};function AvmGetLeafPreimageHintFactory(klass){return class{hintKey;index;leafPreimage;constructor(hintKey,index,leafPreimage){this.hintKey=hintKey,this.index=index,this.leafPreimage=leafPreimage}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,index:schemas2.BigInt,leafPreimage:klass.schema}).transform(({hintKey,index,leafPreimage})=>new this(hintKey,index,leafPreimage))}static fromPlainObject(obj){return obj instanceof this?obj:new this(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),typeof obj.index=="bigint"?obj.index:BigInt(obj.index),klass.fromPlainObject(obj.leafPreimage))}}}__name(AvmGetLeafPreimageHintFactory,"AvmGetLeafPreimageHintFactory");var AvmGetLeafPreimageHintPublicDataTree=class extends AvmGetLeafPreimageHintFactory(PublicDataTreeLeafPreimage){static{__name(this,"AvmGetLeafPreimageHintPublicDataTree")}},AvmGetLeafPreimageHintNullifierTree=class extends AvmGetLeafPreimageHintFactory(NullifierLeafPreimage){static{__name(this,"AvmGetLeafPreimageHintNullifierTree")}},AvmGetLeafValueHint=class _AvmGetLeafValueHint{static{__name(this,"AvmGetLeafValueHint")}hintKey;treeId;index;value;constructor(hintKey,treeId,index,value){this.hintKey=hintKey,this.treeId=treeId,this.index=index,this.value=value}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),index:schemas2.BigInt,value:schemas2.Fr}).transform(({hintKey,treeId,index,value})=>new _AvmGetLeafValueHint(hintKey,treeId,index,value))}static fromPlainObject(obj){return obj instanceof _AvmGetLeafValueHint?obj:new _AvmGetLeafValueHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),obj.treeId,typeof obj.index=="bigint"?obj.index:BigInt(obj.index),Fr.fromPlainObject(obj.value))}};function AvmSequentialInsertHintFactory(klass){return class{hintKey;stateAfter;treeId;leaf;lowLeavesWitnessData;insertionWitnessData;constructor(hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData){this.hintKey=hintKey,this.stateAfter=stateAfter,this.treeId=treeId,this.leaf=leaf,this.lowLeavesWitnessData=lowLeavesWitnessData,this.insertionWitnessData=insertionWitnessData}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,stateAfter:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),leaf:klass.leafSchema,lowLeavesWitnessData:external_exports.object({leaf:klass.schema,index:schemas2.BigInt,path:schemas2.Fr.array()}),insertionWitnessData:external_exports.object({leaf:klass.schema,index:schemas2.BigInt,path:schemas2.Fr.array()})}).transform(({hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData})=>new this(hintKey,stateAfter,treeId,leaf,lowLeavesWitnessData,insertionWitnessData))}static fromPlainObject(obj){if(obj instanceof this)return obj;let LeafClass=klass===PublicDataTreeLeafPreimage?PublicDataTreeLeaf:NullifierLeaf;return new this(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),AppendOnlyTreeSnapshot.fromPlainObject(obj.stateAfter),obj.treeId,LeafClass.fromPlainObject(obj.leaf),{leaf:klass.fromPlainObject(obj.lowLeavesWitnessData.leaf),index:typeof obj.lowLeavesWitnessData.index=="bigint"?obj.lowLeavesWitnessData.index:BigInt(obj.lowLeavesWitnessData.index),path:obj.lowLeavesWitnessData.path.map(p=>Fr.fromPlainObject(p))},{leaf:klass.fromPlainObject(obj.insertionWitnessData.leaf),index:typeof obj.insertionWitnessData.index=="bigint"?obj.insertionWitnessData.index:BigInt(obj.insertionWitnessData.index),path:obj.insertionWitnessData.path.map(p=>Fr.fromPlainObject(p))})}}}__name(AvmSequentialInsertHintFactory,"AvmSequentialInsertHintFactory");var AvmSequentialInsertHintPublicDataTree=class extends AvmSequentialInsertHintFactory(PublicDataTreeLeafPreimage){static{__name(this,"AvmSequentialInsertHintPublicDataTree")}},AvmSequentialInsertHintNullifierTree=class extends AvmSequentialInsertHintFactory(NullifierLeafPreimage){static{__name(this,"AvmSequentialInsertHintNullifierTree")}},AvmAppendLeavesHint=class _AvmAppendLeavesHint{static{__name(this,"AvmAppendLeavesHint")}hintKey;stateAfter;treeId;leaves;constructor(hintKey,stateAfter,treeId,leaves){this.hintKey=hintKey,this.stateAfter=stateAfter,this.treeId=treeId,this.leaves=leaves}static get schema(){return external_exports.object({hintKey:AppendOnlyTreeSnapshot.schema,stateAfter:AppendOnlyTreeSnapshot.schema,treeId:external_exports.number().int().nonnegative(),leaves:schemas2.Fr.array()}).transform(({hintKey,stateAfter,treeId,leaves})=>new _AvmAppendLeavesHint(hintKey,stateAfter,treeId,leaves))}static fromPlainObject(obj){return obj instanceof _AvmAppendLeavesHint?obj:new _AvmAppendLeavesHint(AppendOnlyTreeSnapshot.fromPlainObject(obj.hintKey),AppendOnlyTreeSnapshot.fromPlainObject(obj.stateAfter),obj.treeId,obj.leaves.map(l=>Fr.fromPlainObject(l)))}},AvmCheckpointActionNoStateChangeHint=class{static{__name(this,"AvmCheckpointActionNoStateChangeHint")}actionCounter;oldCheckpointId;newCheckpointId;constructor(actionCounter,oldCheckpointId,newCheckpointId){this.actionCounter=actionCounter,this.oldCheckpointId=oldCheckpointId,this.newCheckpointId=newCheckpointId}static get schema(){return external_exports.object({actionCounter:external_exports.number().int().nonnegative(),oldCheckpointId:external_exports.number().int().nonnegative(),newCheckpointId:external_exports.number().int().nonnegative()}).transform(({actionCounter,oldCheckpointId,newCheckpointId})=>new this(actionCounter,oldCheckpointId,newCheckpointId))}static fromPlainObject(obj){return obj instanceof this?obj:new this(obj.actionCounter,obj.oldCheckpointId,obj.newCheckpointId)}},AvmCreateCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmCreateCheckpointHint")}},AvmCommitCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmCommitCheckpointHint")}},AvmRevertCheckpointHint=class _AvmRevertCheckpointHint{static{__name(this,"AvmRevertCheckpointHint")}actionCounter;oldCheckpointId;newCheckpointId;stateBefore;stateAfter;constructor(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter){this.actionCounter=actionCounter,this.oldCheckpointId=oldCheckpointId,this.newCheckpointId=newCheckpointId,this.stateBefore=stateBefore,this.stateAfter=stateAfter}static create(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter){return new _AvmRevertCheckpointHint(actionCounter,oldCheckpointId,newCheckpointId,new TreeSnapshots(stateBefore[MerkleTreeId.L1_TO_L2_MESSAGE_TREE],stateBefore[MerkleTreeId.NOTE_HASH_TREE],stateBefore[MerkleTreeId.NULLIFIER_TREE],stateBefore[MerkleTreeId.PUBLIC_DATA_TREE]),new TreeSnapshots(stateAfter[MerkleTreeId.L1_TO_L2_MESSAGE_TREE],stateAfter[MerkleTreeId.NOTE_HASH_TREE],stateAfter[MerkleTreeId.NULLIFIER_TREE],stateAfter[MerkleTreeId.PUBLIC_DATA_TREE]))}static get schema(){return external_exports.object({actionCounter:external_exports.number().int().nonnegative(),oldCheckpointId:external_exports.number().int().nonnegative(),newCheckpointId:external_exports.number().int().nonnegative(),stateBefore:TreeSnapshots.schema,stateAfter:TreeSnapshots.schema}).transform(({actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter})=>new _AvmRevertCheckpointHint(actionCounter,oldCheckpointId,newCheckpointId,stateBefore,stateAfter))}static fromPlainObject(obj){return obj instanceof _AvmRevertCheckpointHint?obj:new _AvmRevertCheckpointHint(obj.actionCounter,obj.oldCheckpointId,obj.newCheckpointId,TreeSnapshots.fromPlainObject(obj.stateBefore),TreeSnapshots.fromPlainObject(obj.stateAfter))}},AvmContractDbCreateCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbCreateCheckpointHint")}},AvmContractDbCommitCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbCommitCheckpointHint")}},AvmContractDbRevertCheckpointHint=class extends AvmCheckpointActionNoStateChangeHint{static{__name(this,"AvmContractDbRevertCheckpointHint")}},AvmTxHint=class _AvmTxHint{static{__name(this,"AvmTxHint")}hash;gasSettings;effectiveGasFees;nonRevertibleContractDeploymentData;revertibleContractDeploymentData;nonRevertibleAccumulatedData;revertibleAccumulatedData;setupEnqueuedCalls;appLogicEnqueuedCalls;teardownEnqueuedCall;gasUsedByPrivate;feePayer;constructor(hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer){this.hash=hash5,this.gasSettings=gasSettings,this.effectiveGasFees=effectiveGasFees,this.nonRevertibleContractDeploymentData=nonRevertibleContractDeploymentData,this.revertibleContractDeploymentData=revertibleContractDeploymentData,this.nonRevertibleAccumulatedData=nonRevertibleAccumulatedData,this.revertibleAccumulatedData=revertibleAccumulatedData,this.setupEnqueuedCalls=setupEnqueuedCalls,this.appLogicEnqueuedCalls=appLogicEnqueuedCalls,this.teardownEnqueuedCall=teardownEnqueuedCall,this.gasUsedByPrivate=gasUsedByPrivate,this.feePayer=feePayer}static fromTx(tx,gasFees){let setupCallRequests=tx.getNonRevertiblePublicCallRequestsWithCalldata(),appLogicCallRequests=tx.getRevertiblePublicCallRequestsWithCalldata(),teardownCallRequest=tx.getTeardownPublicCallRequestWithCalldata(),gasSettings=tx.data.constants.txContext.gasSettings,effectiveGasFees=computeEffectiveGasFees(gasFees,gasSettings),allContractDeploymentData=AllContractDeploymentData.fromTx(tx),txHash=tx.getTxHash();return new _AvmTxHint(txHash.hash.toString(),gasSettings,effectiveGasFees,allContractDeploymentData.getNonRevertibleContractDeploymentData(),allContractDeploymentData.getRevertibleContractDeploymentData(),{noteHashes:tx.data.forPublic.nonRevertibleAccumulatedData.noteHashes.filter(x=>!x.isZero()),nullifiers:tx.data.forPublic.nonRevertibleAccumulatedData.nullifiers.filter(x=>!x.isZero()),l2ToL1Messages:tx.data.forPublic.nonRevertibleAccumulatedData.l2ToL1Msgs.filter(x=>!x.isEmpty())},{noteHashes:tx.data.forPublic.revertibleAccumulatedData.noteHashes.filter(x=>!x.isZero()),nullifiers:tx.data.forPublic.revertibleAccumulatedData.nullifiers.filter(x=>!x.isZero()),l2ToL1Messages:tx.data.forPublic.revertibleAccumulatedData.l2ToL1Msgs.filter(x=>!x.isEmpty())},setupCallRequests,appLogicCallRequests,teardownCallRequest??null,tx.data.gasUsed,tx.data.feePayer)}static empty(){return new _AvmTxHint("",GasSettings.empty(),GasFees.empty(),ContractDeploymentData.empty(),ContractDeploymentData.empty(),{noteHashes:[],nullifiers:[],l2ToL1Messages:[]},{noteHashes:[],nullifiers:[],l2ToL1Messages:[]},[],[],null,Gas.empty(),AztecAddress.zero())}static fromPlainObject(obj){return obj instanceof _AvmTxHint?obj:new _AvmTxHint(obj.hash,GasSettings.fromPlainObject(obj.gasSettings),GasFees.fromPlainObject(obj.effectiveGasFees),ContractDeploymentData.fromPlainObject(obj.nonRevertibleContractDeploymentData),ContractDeploymentData.fromPlainObject(obj.revertibleContractDeploymentData),{noteHashes:obj.nonRevertibleAccumulatedData.noteHashes.map(h=>Fr.fromPlainObject(h)),nullifiers:obj.nonRevertibleAccumulatedData.nullifiers.map(n=>Fr.fromPlainObject(n)),l2ToL1Messages:obj.nonRevertibleAccumulatedData.l2ToL1Messages.map(m=>ScopedL2ToL1Message.fromPlainObject(m))},{noteHashes:obj.revertibleAccumulatedData.noteHashes.map(h=>Fr.fromPlainObject(h)),nullifiers:obj.revertibleAccumulatedData.nullifiers.map(n=>Fr.fromPlainObject(n)),l2ToL1Messages:obj.revertibleAccumulatedData.l2ToL1Messages.map(m=>ScopedL2ToL1Message.fromPlainObject(m))},obj.setupEnqueuedCalls.map(c2=>PublicCallRequestWithCalldata.fromPlainObject(c2)),obj.appLogicEnqueuedCalls.map(c2=>PublicCallRequestWithCalldata.fromPlainObject(c2)),obj.teardownEnqueuedCall?PublicCallRequestWithCalldata.fromPlainObject(obj.teardownEnqueuedCall):null,Gas.fromPlainObject(obj.gasUsedByPrivate),AztecAddress.fromPlainObject(obj.feePayer))}static get schema(){return external_exports.object({hash:external_exports.string(),gasSettings:GasSettings.schema,effectiveGasFees:GasFees.schema,nonRevertibleContractDeploymentData:ContractDeploymentData.schema,revertibleContractDeploymentData:ContractDeploymentData.schema,nonRevertibleAccumulatedData:external_exports.object({noteHashes:schemas2.Fr.array(),nullifiers:schemas2.Fr.array(),l2ToL1Messages:ScopedL2ToL1Message.schema.array()}),revertibleAccumulatedData:external_exports.object({noteHashes:schemas2.Fr.array(),nullifiers:schemas2.Fr.array(),l2ToL1Messages:ScopedL2ToL1Message.schema.array()}),setupEnqueuedCalls:PublicCallRequestWithCalldata.schema.array(),appLogicEnqueuedCalls:PublicCallRequestWithCalldata.schema.array(),teardownEnqueuedCall:PublicCallRequestWithCalldata.schema.nullable(),gasUsedByPrivate:Gas.schema,feePayer:AztecAddress.schema}).transform(({hash:hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer})=>new _AvmTxHint(hash5,gasSettings,effectiveGasFees,nonRevertibleContractDeploymentData,revertibleContractDeploymentData,nonRevertibleAccumulatedData,revertibleAccumulatedData,setupEnqueuedCalls,appLogicEnqueuedCalls,teardownEnqueuedCall,gasUsedByPrivate,feePayer))}},AvmExecutionHints=class _AvmExecutionHints{static{__name(this,"AvmExecutionHints")}globalVariables;tx;protocolContracts;contractInstances;contractClasses;bytecodeCommitments;debugFunctionNames;contractDbCreateCheckpointHints;contractDbCommitCheckpointHints;contractDbRevertCheckpointHints;startingTreeRoots;getSiblingPathHints;getPreviousValueIndexHints;getLeafPreimageHintsPublicDataTree;getLeafPreimageHintsNullifierTree;getLeafValueHints;sequentialInsertHintsPublicDataTree;sequentialInsertHintsNullifierTree;appendLeavesHints;createCheckpointHints;commitCheckpointHints;revertCheckpointHints;constructor(globalVariables,tx,protocolContracts,contractInstances=[],contractClasses=[],bytecodeCommitments=[],debugFunctionNames=[],contractDbCreateCheckpointHints=[],contractDbCommitCheckpointHints=[],contractDbRevertCheckpointHints=[],startingTreeRoots=TreeSnapshots.empty(),getSiblingPathHints=[],getPreviousValueIndexHints=[],getLeafPreimageHintsPublicDataTree=[],getLeafPreimageHintsNullifierTree=[],getLeafValueHints=[],sequentialInsertHintsPublicDataTree=[],sequentialInsertHintsNullifierTree=[],appendLeavesHints=[],createCheckpointHints=[],commitCheckpointHints=[],revertCheckpointHints=[]){this.globalVariables=globalVariables,this.tx=tx,this.protocolContracts=protocolContracts,this.contractInstances=contractInstances,this.contractClasses=contractClasses,this.bytecodeCommitments=bytecodeCommitments,this.debugFunctionNames=debugFunctionNames,this.contractDbCreateCheckpointHints=contractDbCreateCheckpointHints,this.contractDbCommitCheckpointHints=contractDbCommitCheckpointHints,this.contractDbRevertCheckpointHints=contractDbRevertCheckpointHints,this.startingTreeRoots=startingTreeRoots,this.getSiblingPathHints=getSiblingPathHints,this.getPreviousValueIndexHints=getPreviousValueIndexHints,this.getLeafPreimageHintsPublicDataTree=getLeafPreimageHintsPublicDataTree,this.getLeafPreimageHintsNullifierTree=getLeafPreimageHintsNullifierTree,this.getLeafValueHints=getLeafValueHints,this.sequentialInsertHintsPublicDataTree=sequentialInsertHintsPublicDataTree,this.sequentialInsertHintsNullifierTree=sequentialInsertHintsNullifierTree,this.appendLeavesHints=appendLeavesHints,this.createCheckpointHints=createCheckpointHints,this.commitCheckpointHints=commitCheckpointHints,this.revertCheckpointHints=revertCheckpointHints}static fromPlainObject(obj){return obj instanceof _AvmExecutionHints?obj:new _AvmExecutionHints(GlobalVariables.fromPlainObject(obj.globalVariables),AvmTxHint.fromPlainObject(obj.tx),ProtocolContracts.fromPlainObject(obj.protocolContracts),obj.contractInstances?.map(i=>AvmContractInstanceHint.fromPlainObject(i))||[],obj.contractClasses?.map(c2=>AvmContractClassHint.fromPlainObject(c2))||[],obj.bytecodeCommitments?.map(b=>AvmBytecodeCommitmentHint.fromPlainObject(b))||[],obj.debugFunctionNames?.map(d=>AvmDebugFunctionNameHint.fromPlainObject(d))||[],obj.contractDbCreateCheckpointHints?.map(h=>AvmContractDbCreateCheckpointHint.fromPlainObject(h))||[],obj.contractDbCommitCheckpointHints?.map(h=>AvmContractDbCommitCheckpointHint.fromPlainObject(h))||[],obj.contractDbRevertCheckpointHints?.map(h=>AvmContractDbRevertCheckpointHint.fromPlainObject(h))||[],obj.startingTreeRoots?TreeSnapshots.fromPlainObject(obj.startingTreeRoots):TreeSnapshots.empty(),obj.getSiblingPathHints?.map(h=>AvmGetSiblingPathHint.fromPlainObject(h))||[],obj.getPreviousValueIndexHints?.map(h=>AvmGetPreviousValueIndexHint.fromPlainObject(h))||[],obj.getLeafPreimageHintsPublicDataTree?.map(h=>AvmGetLeafPreimageHintPublicDataTree.fromPlainObject(h))||[],obj.getLeafPreimageHintsNullifierTree?.map(h=>AvmGetLeafPreimageHintNullifierTree.fromPlainObject(h))||[],obj.getLeafValueHints?.map(h=>AvmGetLeafValueHint.fromPlainObject(h))||[],obj.sequentialInsertHintsPublicDataTree?.map(h=>AvmSequentialInsertHintPublicDataTree.fromPlainObject(h))||[],obj.sequentialInsertHintsNullifierTree?.map(h=>AvmSequentialInsertHintNullifierTree.fromPlainObject(h))||[],obj.appendLeavesHints?.map(h=>AvmAppendLeavesHint.fromPlainObject(h))||[],obj.createCheckpointHints?.map(h=>AvmCreateCheckpointHint.fromPlainObject(h))||[],obj.commitCheckpointHints?.map(h=>AvmCommitCheckpointHint.fromPlainObject(h))||[],obj.revertCheckpointHints?.map(h=>AvmRevertCheckpointHint.fromPlainObject(h))||[])}static empty(){return new _AvmExecutionHints(GlobalVariables.empty(),AvmTxHint.empty(),ProtocolContracts.empty())}static get schema(){return external_exports.object({globalVariables:GlobalVariables.schema,tx:AvmTxHint.schema,protocolContracts:ProtocolContracts.schema,contractInstances:AvmContractInstanceHint.schema.array(),contractClasses:AvmContractClassHint.schema.array(),bytecodeCommitments:AvmBytecodeCommitmentHint.schema.array(),debugFunctionNames:AvmDebugFunctionNameHint.schema.array(),contractDbCreateCheckpointHints:AvmContractDbCreateCheckpointHint.schema.array(),contractDbCommitCheckpointHints:AvmContractDbCommitCheckpointHint.schema.array(),contractDbRevertCheckpointHints:AvmContractDbRevertCheckpointHint.schema.array(),startingTreeRoots:TreeSnapshots.schema,getSiblingPathHints:AvmGetSiblingPathHint.schema.array(),getPreviousValueIndexHints:AvmGetPreviousValueIndexHint.schema.array(),getLeafPreimageHintsPublicDataTree:AvmGetLeafPreimageHintPublicDataTree.schema.array(),getLeafPreimageHintsNullifierTree:AvmGetLeafPreimageHintNullifierTree.schema.array(),getLeafValueHints:AvmGetLeafValueHint.schema.array(),sequentialInsertHintsPublicDataTree:AvmSequentialInsertHintPublicDataTree.schema.array(),sequentialInsertHintsNullifierTree:AvmSequentialInsertHintNullifierTree.schema.array(),appendLeavesHints:AvmAppendLeavesHint.schema.array(),createCheckpointHints:AvmCreateCheckpointHint.schema.array(),commitCheckpointHints:AvmCommitCheckpointHint.schema.array(),revertCheckpointHints:AvmRevertCheckpointHint.schema.array()}).transform(({globalVariables,tx,protocolContracts,contractInstances,contractClasses,bytecodeCommitments,debugFunctionNames,contractDbCreateCheckpointHints,contractDbCommitCheckpointHints,contractDbRevertCheckpointHints,startingTreeRoots,getSiblingPathHints,getPreviousValueIndexHints,getLeafPreimageHintsPublicDataTree,getLeafPreimageHintsNullifierTree,getLeafValueHints,sequentialInsertHintsPublicDataTree,sequentialInsertHintsNullifierTree,appendLeavesHints,createCheckpointHints,commitCheckpointHints,revertCheckpointHints})=>new _AvmExecutionHints(globalVariables,tx,protocolContracts,contractInstances,contractClasses,bytecodeCommitments,debugFunctionNames,contractDbCreateCheckpointHints,contractDbCommitCheckpointHints,contractDbRevertCheckpointHints,startingTreeRoots,getSiblingPathHints,getPreviousValueIndexHints,getLeafPreimageHintsPublicDataTree,getLeafPreimageHintsNullifierTree,getLeafValueHints,sequentialInsertHintsPublicDataTree,sequentialInsertHintsNullifierTree,appendLeavesHints,createCheckpointHints,commitCheckpointHints,revertCheckpointHints))}},AvmCircuitInputs=class _AvmCircuitInputs{static{__name(this,"AvmCircuitInputs")}hints;publicInputs;constructor(hints,publicInputs){this.hints=hints,this.publicInputs=publicInputs}static empty(){return new _AvmCircuitInputs(AvmExecutionHints.empty(),AvmCircuitPublicInputs.empty())}static fromPlainObject(obj){return new _AvmCircuitInputs(AvmExecutionHints.fromPlainObject(obj.hints),AvmCircuitPublicInputs.fromPlainObject(obj.publicInputs))}static get schema(){return external_exports.object({hints:AvmExecutionHints.schema,publicInputs:AvmCircuitPublicInputs.schema}).transform(({hints,publicInputs})=>new _AvmCircuitInputs(hints,publicInputs))}serializeWithMessagePack(){return serializeWithMessagePack(this)}toBuffer(){return Buffer73.from(jsonStringify(this))}static fromBuffer(buf){return jsonParseWithSchema(buf.toString(),this.schema)}},CallStackMetadata=class _CallStackMetadata{static{__name(this,"CallStackMetadata")}phase;contractAddress;callerPc;calldata;isStaticCall;gasLimit;output;internalCallStackAtExit;haltingMessage;reverted;nested;numNestedCalls;constructor(phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls){this.phase=phase,this.contractAddress=contractAddress,this.callerPc=callerPc,this.calldata=calldata,this.isStaticCall=isStaticCall,this.gasLimit=gasLimit,this.output=output,this.internalCallStackAtExit=internalCallStackAtExit,this.haltingMessage=haltingMessage,this.reverted=reverted,this.nested=nested,this.numNestedCalls=numNestedCalls}static get schema(){return external_exports.object({phase:external_exports.nativeEnum(TxExecutionPhase),contractAddress:Fr.schema,callerPc:external_exports.number(),calldata:Fr.schema.array(),isStaticCall:external_exports.boolean(),gasLimit:Gas.schema,output:Fr.schema.array(),internalCallStackAtExit:external_exports.number().array(),haltingMessage:NullishToUndefined(external_exports.string()),reverted:external_exports.boolean(),nested:_CallStackMetadata.schema.array(),numNestedCalls:external_exports.number()}).transform(({phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls})=>new _CallStackMetadata(phase,contractAddress,callerPc,calldata,isStaticCall,gasLimit,output,internalCallStackAtExit,haltingMessage,reverted,nested,numNestedCalls))}static fromPlainObject(obj){return obj instanceof _CallStackMetadata?obj:new _CallStackMetadata(obj.phase,Fr.fromPlainObject(obj.contractAddress),obj.callerPc,obj.calldata.map(f=>Fr.fromPlainObject(f)),obj.isStaticCall,Gas.fromPlainObject(obj.gasLimit),obj.output.map(f=>Fr.fromPlainObject(f)),obj.internalCallStackAtExit.map(p=>Number(p)),obj.haltingMessage,obj.reverted,obj.nested.map(n=>_CallStackMetadata.fromPlainObject(n)),obj.numNestedCalls)}getRevertReason(){let failingCall=this.findDeepestRevert([this]);if(!failingCall)return;let{stack,leaf}=failingCall,aztecCallStack=stack.map(call=>({contractAddress:AztecAddress.fromFieldUnsafe(call.contractAddress),functionSelector:call.calldata.length>0?FunctionSelector.fromFieldOrUndefined(call.calldata[0]):void 0})),noirCallStack=leaf.internalCallStackAtExit.map(pc=>`0.${pc}`);return new SimulationError(leaf.haltingMessage??"Transaction reverted",aztecCallStack,leaf.output,noirCallStack)}findDeepestRevert(calls,parentStack=[]){let lastReverted=calls.findLast(call=>call.reverted);if(!lastReverted)return;let currentStack=[...parentStack,lastReverted];return this.findDeepestRevert(lastReverted.nested,currentStack)||{stack:currentStack,leaf:lastReverted}}},PublicTxEffect=class _PublicTxEffect{static{__name(this,"PublicTxEffect")}transactionFee;noteHashes;nullifiers;l2ToL1Msgs;publicLogs;publicDataWrites;constructor(transactionFee,noteHashes,nullifiers,l2ToL1Msgs,publicLogs,publicDataWrites){this.transactionFee=transactionFee,this.noteHashes=noteHashes,this.nullifiers=nullifiers,this.l2ToL1Msgs=l2ToL1Msgs,this.publicLogs=publicLogs,this.publicDataWrites=publicDataWrites}static empty(){return new _PublicTxEffect(Fr.ZERO,[],[],[],[],[])}static get schema(){return external_exports.object({transactionFee:Fr.schema,noteHashes:Fr.schema.array(),nullifiers:Fr.schema.array(),l2ToL1Msgs:ScopedL2ToL1Message.schema.array(),publicLogs:PublicLog.schema.array(),publicDataWrites:PublicDataWrite.schema.array()}).transform(_PublicTxEffect.from)}static from(obj){return new _PublicTxEffect(obj.transactionFee,obj.noteHashes,obj.nullifiers,obj.l2ToL1Msgs,obj.publicLogs,obj.publicDataWrites)}static fromPlainObject(obj){return new _PublicTxEffect(Fr.fromPlainObject(obj.transactionFee),obj.noteHashes.map(h=>Fr.fromPlainObject(h)),obj.nullifiers.map(n=>Fr.fromPlainObject(n)),obj.l2ToL1Msgs.map(m=>ScopedL2ToL1Message.fromPlainObject(m)),obj.publicLogs.map(l=>PublicLog.fromPlainObject(l)),obj.publicDataWrites.map(w=>PublicDataWrite.fromPlainObject(w)))}equals(other){return this.transactionFee.equals(other.transactionFee)&&this.noteHashes.length===other.noteHashes.length&&this.noteHashes.every((h,i)=>h.equals(other.noteHashes[i]))&&this.nullifiers.length===other.nullifiers.length&&this.nullifiers.every((h,i)=>h.equals(other.nullifiers[i]))&&this.l2ToL1Msgs.length===other.l2ToL1Msgs.length&&this.l2ToL1Msgs.every((m,i)=>m.equals(other.l2ToL1Msgs[i]))&&this.publicLogs.length===other.publicLogs.length&&this.publicLogs.every((l,i)=>l.equals(other.publicLogs[i]))&&this.publicDataWrites.length===other.publicDataWrites.length&&this.publicDataWrites.every((w,i)=>w.equals(other.publicDataWrites[i]))}},PublicTxResult=class _PublicTxResult{static{__name(this,"PublicTxResult")}gasUsed;revertCode;publicTxEffect;callStackMetadata;logs;hints;publicInputs;stats;constructor(gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats={}){this.gasUsed=gasUsed,this.revertCode=revertCode,this.publicTxEffect=publicTxEffect,this.callStackMetadata=callStackMetadata,this.logs=logs,this.hints=hints,this.publicInputs=publicInputs,this.stats=stats}static empty(){return new _PublicTxResult({totalGas:Gas.empty(),teardownGas:Gas.empty(),publicGas:Gas.empty(),billedGas:Gas.empty()},RevertCode.OK,PublicTxEffect.empty(),[],[],AvmExecutionHints.empty(),AvmCircuitPublicInputs.empty())}static get schema(){return external_exports.object({gasUsed:schemas2.GasUsed,revertCode:RevertCode.schema,revertReason:NullishToUndefined(SimulationError.schema),publicTxEffect:PublicTxEffect.schema,callStackMetadata:external_exports.union([CallStackMetadata.schema.array(),NestedProcessReturnValues.schema.array()]),logs:NullishToUndefined(DebugLog.schema.array()),stats:external_exports.record(external_exports.string(),external_exports.string()).nullish().transform(v=>v??{}),publicInputs:NullishToUndefined(AvmCircuitPublicInputs.schema),hints:NullishToUndefined(AvmExecutionHints.schema)}).transform(({gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats})=>new _PublicTxResult(gasUsed,revertCode,publicTxEffect,callStackMetadata,logs,hints,publicInputs,stats))}static fromPlainObject(obj){return new _PublicTxResult(GasUsed.fromPlainObject(obj.gasUsed),RevertCode.fromPlainObject(obj.revertCode),PublicTxEffect.fromPlainObject(obj.publicTxEffect),obj.callStackMetadata.map(CallStackMetadata.fromPlainObject),obj.logs?.map(DebugLog.fromPlainObject),obj.hints?AvmExecutionHints.fromPlainObject(obj.hints):void 0,obj.publicInputs?AvmCircuitPublicInputs.fromPlainObject(obj.publicInputs):void 0,obj.stats??{})}getAppLogicReturnValues(){return this.callStackMetadata.every(metadata=>metadata instanceof CallStackMetadata)?this.callStackMetadata.filter(metadata=>metadata.phase===TxExecutionPhase.APP_LOGIC).map(metadata=>new NestedProcessReturnValues(metadata.output)):this.callStackMetadata.map(metadata=>new NestedProcessReturnValues(metadata.values,metadata.nested))}findRevertReason(){if(this.revertCode.isOK())return;let callStackMetadata=this.callStackMetadata;if(callStackMetadata.revertReason!==void 0)return callStackMetadata.revertReason;let revertReason;for(let call of callStackMetadata)if(revertReason=call.getRevertReason(),revertReason)break;return revertReason}},DEFAULT_MAX_DEBUG_LOG_MEMORY_READS=125e3,CollectionLimitsConfig=class _CollectionLimitsConfig{static{__name(this,"CollectionLimitsConfig")}maxDebugLogMemoryReads;maxCalldataSizeInFields;maxReturndataSizeInFields;maxCallStackDepth;maxCallStackItems;constructor(maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems){this.maxDebugLogMemoryReads=maxDebugLogMemoryReads,this.maxCalldataSizeInFields=maxCalldataSizeInFields,this.maxReturndataSizeInFields=maxReturndataSizeInFields,this.maxCallStackDepth=maxCallStackDepth,this.maxCallStackItems=maxCallStackItems}static from(obj){return new _CollectionLimitsConfig(obj.maxDebugLogMemoryReads??DEFAULT_MAX_DEBUG_LOG_MEMORY_READS,obj.maxCalldataSizeInFields??300,obj.maxReturndataSizeInFields??300,obj.maxCallStackDepth??5,obj.maxCallStackItems??100)}static empty(){return _CollectionLimitsConfig.from({})}static get schema(){return external_exports.object({maxDebugLogMemoryReads:external_exports.number(),maxCalldataSizeInFields:external_exports.number(),maxReturndataSizeInFields:external_exports.number(),maxCallStackDepth:external_exports.number(),maxCallStackItems:external_exports.number()}).transform(({maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems})=>new _CollectionLimitsConfig(maxDebugLogMemoryReads,maxCalldataSizeInFields,maxReturndataSizeInFields,maxCallStackDepth,maxCallStackItems))}},PublicSimulatorConfig=class _PublicSimulatorConfig{static{__name(this,"PublicSimulatorConfig")}proverId;skipFeeEnforcement;collectCallMetadata;collectHints;collectPublicInputs;collectDebugLogs;collectStatistics;collectionLimits;constructor(proverId,skipFeeEnforcement,collectCallMetadata,collectHints,collectPublicInputs,collectDebugLogs,collectStatistics,collectionLimits){this.proverId=proverId,this.skipFeeEnforcement=skipFeeEnforcement,this.collectCallMetadata=collectCallMetadata,this.collectHints=collectHints,this.collectPublicInputs=collectPublicInputs,this.collectDebugLogs=collectDebugLogs,this.collectStatistics=collectStatistics,this.collectionLimits=collectionLimits}static from(obj){return new _PublicSimulatorConfig(obj.proverId??Fr.ZERO,obj.skipFeeEnforcement??!1,obj.collectCallMetadata??!1,obj.collectHints??!1,obj.collectPublicInputs??!1,obj.collectDebugLogs??!1,obj.collectStatistics??!1,obj.collectionLimits??CollectionLimitsConfig.empty())}static empty(){return _PublicSimulatorConfig.from({})}static get schema(){return external_exports.object({proverId:Fr.schema,skipFeeEnforcement:external_exports.boolean(),collectCallMetadata:external_exports.boolean(),collectHints:external_exports.boolean(),collectPublicInputs:external_exports.boolean(),collectDebugLogs:external_exports.boolean(),collectStatistics:external_exports.boolean(),collectionLimits:CollectionLimitsConfig.schema}).transform(_PublicSimulatorConfig.from)}},AvmFastSimulationInputs=class _AvmFastSimulationInputs{static{__name(this,"AvmFastSimulationInputs")}wsRevision;config;tx;globalVariables;protocolContracts;constructor(wsRevision,config2,tx,globalVariables,protocolContracts){this.wsRevision=wsRevision,this.config=config2,this.tx=tx,this.globalVariables=globalVariables,this.protocolContracts=protocolContracts}static empty(){return new _AvmFastSimulationInputs(WorldStateRevision.empty(),PublicSimulatorConfig.empty(),AvmTxHint.empty(),GlobalVariables.empty(),ProtocolContracts.empty())}static get schema(){return external_exports.object({wsRevision:WorldStateRevision.schema,config:PublicSimulatorConfig.schema,tx:AvmTxHint.schema,globalVariables:GlobalVariables.schema,protocolContracts:ProtocolContracts.schema}).transform(({wsRevision,config:config2,tx,globalVariables,protocolContracts})=>new _AvmFastSimulationInputs(wsRevision,config2,tx,globalVariables,protocolContracts))}serializeWithMessagePack(){return serializeWithMessagePack(this)}};var parseCommaSeparatedList=__name(value=>value.split(",").map(item=>item.trim()).filter(Boolean),"parseCommaSeparatedList"),DEFAULT_RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS=3e3,nodeRpcConfigMappings={rpcSimulatePublicMaxGasLimit:{env:"RPC_SIMULATE_PUBLIC_MAX_GAS_LIMIT",description:"Maximum gas limit for public tx simulation in the node on `simulatePublicCalls`.",...numberConfigHelper(1e10)},rpcSimulatePublicMaxDebugLogMemoryReads:{env:"RPC_SIMULATE_PUBLIC_MAX_DEBUG_LOG_MEMORY_READS",description:"Maximum memory reads for debug logs performed for public tx simulation in the node on `simulatePublicCalls`. ",...numberConfigHelper(DEFAULT_MAX_DEBUG_LOG_MEMORY_READS)},rpcMaxBatchSize:{env:"RPC_MAX_BATCH_SIZE",description:"Maximum allowed batch size for JSON RPC batch requests.",...numberConfigHelper(100)},rpcMaxBodySize:{env:"RPC_MAX_BODY_SIZE",description:"Maximum allowed batch size for JSON RPC batch requests.",defaultValue:"1mb"},rpcHttpKeepAliveTimeoutMs:{env:"RPC_HTTP_KEEP_ALIVE_TIMEOUT_MS",description:"HTTP keep-alive timeout for JSON RPC connections in milliseconds.",...numberConfigHelper(5e3)},rpcHttpHeadersTimeoutMs:{env:"RPC_HTTP_HEADERS_TIMEOUT_MS",description:"Timeout for receiving complete HTTP headers on JSON RPC connections in milliseconds.",...numberConfigHelper(6e4)},rpcCorsAllowedOrigins:{env:"RPC_CORS_ALLOWED_ORIGINS",description:"Origins allowed to make credentialed cross-origin JSON RPC requests, separated by commas.",parseEnv:parseCommaSeparatedList,defaultValue:[]},rpcCorsAllowedHeaders:{env:"RPC_CORS_ALLOWED_HEADERS",description:"Headers allowed in cross-origin JSON RPC requests, separated by commas.",parseEnv:parseCommaSeparatedList,defaultValue:[]},rpcCorsAllowAnyOrigin:{env:"RPC_CORS_ALLOW_ANY_ORIGIN",description:"Allow credentialed cross-origin JSON RPC requests from any origin.",...booleanConfigHelper(!1)},rpcUnseenBlockByNumberWaitMs:{env:"RPC_UNSEEN_BLOCK_BY_NUMBER_WAIT_MS",description:"Max time in ms an RPC query anchored on a block number exactly one ahead of the node tip is held, waiting for the block to arrive. Defaults to twice the block duration. Set to 0 to fail these queries immediately.",...optionalNumberConfigHelper()},rpcUnseenBlockByHashWaitMs:{env:"RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS",description:"Max time in ms an RPC query anchored on an unknown block hash or archive root is held, waiting for the block to arrive. Set to 0 to fail these queries immediately.",...numberConfigHelper(DEFAULT_RPC_UNSEEN_BLOCK_BY_HASH_WAIT_MS)}};function composeHooks(hooks){if(!Object.values(hooks).every(v=>v===void 0))return hooks}__name(composeHooks,"composeHooks");var pxeConfigMappings={...dataConfigMappings,...chainConfigMappings,l2BlockBatchSize:{env:"PXE_L2_BLOCK_BATCH_SIZE",...numberConfigHelper(50),description:"Maximum amount of blocks to pull from the stream in one request when synchronizing"},proverEnabled:{env:"PXE_PROVER_ENABLED",description:"Enable real proofs",...booleanConfigHelper(!0)},syncChainTip:{env:"PXE_SYNC_CHAIN_TIP",description:"Which chain tip to sync to (proposed, checkpointed, proven, finalized)",...enumConfigHelper(["proposed","checkpointed","proven","finalized"],"proposed")},autoSync:{env:"PXE_AUTO_SYNC",description:"Whether PXE syncs with the node automatically before each operation. Disable to let the caller (e.g. a wallet) drive syncs explicitly via pxe.sync().",...booleanConfigHelper(!0)},concurrentContractSyncEnabled:{env:"PXE_CONCURRENT_CONTRACT_SYNC_ENABLED",description:"Whether PXE speculatively syncs contracts it predicts will follow the one requested, running them concurrently with it. Repeated flows sync faster, but a wrong prediction spends unnecessary node requests. Experimental, off by default.",...booleanConfigHelper(!1)}};var pxeCliConfigMappings={nodeUrl:{env:"AZTEC_NODE_URL",description:"Custom Aztec Node URL to connect to"}},allPxeConfigMappings={...pxeConfigMappings,...pxeCliConfigMappings,...dataConfigMappings,proverEnabled:{env:"PXE_PROVER_ENABLED",parseEnv:__name(val=>parseBooleanEnv(val)||!!getEnv().NETWORK,"parseEnv"),description:"Enable real proofs",isBoolean:!0,defaultValue:!0}};import{LazyArtifactProvider}from"@aztec-labs/noir-protocol-circuits-types/client/lazy";import{AztecClientBackend,Barretenberg as Barretenberg2}from"@aztec-foundation/bb.js";import{serializeWitness as serializeWitness2}from"@aztec-foundation/noir-noirc_abi";import{convertHidingKernelPublicInputsToWitnessMapWithAbi,convertHidingKernelToRollupInputsToWitnessMapWithAbi,convertPrivateKernelInit2InputsToWitnessMapWithAbi,convertPrivateKernelInit2OutputsFromWitnessMapWithAbi,convertPrivateKernelInit3InputsToWitnessMapWithAbi,convertPrivateKernelInit3OutputsFromWitnessMapWithAbi,convertPrivateKernelInit4InputsToWitnessMapWithAbi,convertPrivateKernelInit4OutputsFromWitnessMapWithAbi,convertPrivateKernelInit5InputsToWitnessMapWithAbi,convertPrivateKernelInit5OutputsFromWitnessMapWithAbi,convertPrivateKernelInitInputsToWitnessMapWithAbi,convertPrivateKernelInitOutputsFromWitnessMapWithAbi,convertPrivateKernelInner2InputsToWitnessMapWithAbi,convertPrivateKernelInner2OutputsFromWitnessMapWithAbi,convertPrivateKernelInner3InputsToWitnessMapWithAbi,convertPrivateKernelInner3OutputsFromWitnessMapWithAbi,convertPrivateKernelInner4InputsToWitnessMapWithAbi,convertPrivateKernelInner4OutputsFromWitnessMapWithAbi,convertPrivateKernelInner5InputsToWitnessMapWithAbi,convertPrivateKernelInner5OutputsFromWitnessMapWithAbi,convertPrivateKernelInnerInputsToWitnessMapWithAbi,convertPrivateKernelInnerOutputsFromWitnessMapWithAbi,convertPrivateKernelResetInputsToWitnessMapWithAbi,convertPrivateKernelResetOutputsFromWitnessMapWithAbi,convertPrivateKernelResetTailInputsToWitnessMapWithAbi,convertPrivateKernelResetTailToPublicInputsToWitnessMapWithAbi,convertPrivateKernelTailForPublicOutputsFromWitnessMapWithAbi,convertPrivateKernelTailOutputsFromWitnessMapWithAbi,foreignCallHandler,getPrivateKernelResetArtifactName,getPrivateKernelResetTailArtifactName,updateResetCircuitSampleInputs}from"@aztec-labs/noir-protocol-circuits-types/client";import{mapProtocolArtifactNameToCircuitName}from"@aztec-labs/noir-protocol-circuits-types/types";import{ungzip}from"pako";import{Buffer as Buffer74}from"buffer";function makeProtocolContract(name,artifact){let address=ProtocolContractAddress[name],salt=ProtocolContractSalt[name],classId=ProtocolContractClassId[name],{artifactHash,privateFunctionsRoot,publicBytecodeCommitment}=ProtocolContractClassIdPreimage[name],initializationHash=ProtocolContractInitializationHash[name],contractClass={id:classId,version:1,artifactHash,privateFunctionsRoot,publicBytecodeCommitment,packedBytecode:artifact.functions.find(f=>f.name==="public_dispatch")?.bytecode??Buffer74.alloc(0),privateFunctions:ProtocolContractPrivateFunctions[name]};return{instance:{version:2,currentContractClassId:classId,originalContractClassId:classId,initializationHash,immutablesHash:Fr.ZERO,publicKeys:PublicKeys.default(),salt,deployer:address,address},contractClass,artifact,address}}__name(makeProtocolContract,"makeProtocolContract");var ContractClassPublishedEvent=class _ContractClassPublishedEvent{static{__name(this,"ContractClassPublishedEvent")}contractClassId;version;artifactHash;privateFunctionsRoot;packedPublicBytecode;constructor(contractClassId,version2,artifactHash,privateFunctionsRoot,packedPublicBytecode){this.contractClassId=contractClassId,this.version=version2,this.artifactHash=artifactHash,this.privateFunctionsRoot=privateFunctionsRoot,this.packedPublicBytecode=packedPublicBytecode}static isContractClassPublishedEvent(log2){return log2.contractAddress.equals(ProtocolContractAddress.ContractClassRegistry)&&log2.fields.fields[0].toBigInt()===CONTRACT_CLASS_PUBLISHED_MAGIC_VALUE}static fromLog(log2){let fieldsWithoutTag=log2.fields.fields.slice(1),reader=new FieldReader(fieldsWithoutTag),contractClassId=reader.readField(),version2=reader.readField().toNumber(),artifactHash=reader.readField(),privateFunctionsRoot=reader.readField(),bytecodeFields=reader.readFieldArray(fieldsWithoutTag.length-reader.cursor),maxByteLength=(Math.min(bytecodeFields.length,3e3)-1)*(Fr.SIZE_IN_BYTES-1),packedPublicBytecode=bufferFromFields(bytecodeFields,maxByteLength);return new _ContractClassPublishedEvent(contractClassId,version2,artifactHash,privateFunctionsRoot,packedPublicBytecode)}toContractClassPublic(){return{id:this.contractClassId,artifactHash:this.artifactHash,packedBytecode:this.packedPublicBytecode,privateFunctionsRoot:this.privateFunctionsRoot,version:this.version}}async toContractClassPublicWithBytecodeCommitment(){let publicBytecodeCommitment=await computePublicBytecodeCommitment(this.packedPublicBytecode);return{...this.toContractClassPublic(),publicBytecodeCommitment}}static extractContractClassEvents(logs){return logs.filter(log2=>_ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>_ContractClassPublishedEvent.fromLog(log2))}};var protocolContract,protocolContractArtifact;async function getContractClassRegistryArtifact(){if(!protocolContractArtifact){let{default:contractClassRegistryJson}=await import("./ContractClassRegistry-WUTBZG4R.js");protocolContractArtifact=loadContractArtifact(contractClassRegistryJson)}return protocolContractArtifact}__name(getContractClassRegistryArtifact,"getContractClassRegistryArtifact");async function getCanonicalClassRegistry(){if(!protocolContract){let contractClassRegistryArtifact=await getContractClassRegistryArtifact();protocolContract=makeProtocolContract("ContractClassRegistry",contractClassRegistryArtifact)}return protocolContract}__name(getCanonicalClassRegistry,"getCanonicalClassRegistry");var protocolContract2,protocolContractArtifact2;async function getFeeJuiceArtifact(){if(!protocolContractArtifact2){let{default:feeJuiceJson}=await import("./FeeJuice-MGJHUQBC.js");protocolContractArtifact2=loadContractArtifact(feeJuiceJson)}return protocolContractArtifact2}__name(getFeeJuiceArtifact,"getFeeJuiceArtifact");async function getCanonicalFeeJuice(){if(!protocolContract2){let feeJuiceArtifact=await getFeeJuiceArtifact();protocolContract2=makeProtocolContract("FeeJuice",feeJuiceArtifact)}return protocolContract2}__name(getCanonicalFeeJuice,"getCanonicalFeeJuice");var ContractInstancePublishedEvent=class _ContractInstancePublishedEvent{static{__name(this,"ContractInstancePublishedEvent")}address;version;salt;contractClassId;initializationHash;immutablesHash;publicKeys;deployer;constructor(address,version2,salt,contractClassId,initializationHash,immutablesHash,publicKeys,deployer){this.address=address,this.version=version2,this.salt=salt,this.contractClassId=contractClassId,this.initializationHash=initializationHash,this.immutablesHash=immutablesHash,this.publicKeys=publicKeys,this.deployer=deployer}static isContractInstancePublishedEvent(log2){return log2.fields[0].equals(CONTRACT_INSTANCE_PUBLISHED_EVENT_TAG)}static fromLog(log2){let bufferWithoutTag=log2.toBuffer().subarray(32),reader=new BufferReader(bufferWithoutTag),address=reader.readObject(AztecAddress),version2=reader.readObject(Fr).toNumber(),salt=reader.readObject(Fr),contractClassId=reader.readObject(Fr),initializationHash=reader.readObject(Fr),immutablesHash=reader.readObject(Fr),publicKeys=reader.readObject(PublicKeys),deployer=reader.readObject(AztecAddress);return new _ContractInstancePublishedEvent(address,version2,salt,contractClassId,initializationHash,immutablesHash,publicKeys,deployer)}toContractInstance(){if(this.version!==2)throw new Error(`Unexpected contract instance version ${this.version}`);return{address:this.address,version:this.version,currentContractClassId:this.contractClassId,originalContractClassId:this.contractClassId,initializationHash:this.initializationHash,immutablesHash:this.immutablesHash,publicKeys:this.publicKeys,salt:this.salt,deployer:this.deployer}}static extractContractInstanceEvents(logs){return logs.filter(log2=>_ContractInstancePublishedEvent.isContractInstancePublishedEvent(log2)).map(log2=>_ContractInstancePublishedEvent.fromLog(log2))}};var ContractInstanceUpdatedEvent=class _ContractInstanceUpdatedEvent{static{__name(this,"ContractInstanceUpdatedEvent")}address;prevContractClassId;newContractClassId;timestampOfChange;constructor(address,prevContractClassId,newContractClassId,timestampOfChange){this.address=address,this.prevContractClassId=prevContractClassId,this.newContractClassId=newContractClassId,this.timestampOfChange=timestampOfChange}static isContractInstanceUpdatedEvent(log2){return log2.contractAddress.equals(ProtocolContractAddress.ContractInstanceRegistry)&&log2.fields[0].toBigInt()===CONTRACT_INSTANCE_UPDATED_MAGIC_VALUE}static fromLog(log2){let reader=new FieldReader(log2.fields.slice(1)),address=reader.readObject(AztecAddress),prevContractClassId=reader.readField(),newContractClassId=reader.readField(),timestampOfChange=reader.readField().toBigInt();return new _ContractInstanceUpdatedEvent(address,prevContractClassId,newContractClassId,timestampOfChange)}toContractInstanceUpdate(){return{address:this.address,prevContractClassId:this.prevContractClassId,newContractClassId:this.newContractClassId,timestampOfChange:this.timestampOfChange}}};var protocolContract3,protocolContractArtifact3;async function getContractInstanceRegistryArtifact(){if(!protocolContractArtifact3){let{default:contractInstanceRegistryJson}=await import("./ContractInstanceRegistry-NKANW4JS.js");protocolContractArtifact3=loadContractArtifact(contractInstanceRegistryJson)}return protocolContractArtifact3}__name(getContractInstanceRegistryArtifact,"getContractInstanceRegistryArtifact");async function getCanonicalInstanceRegistry(){if(!protocolContract3){let contractInstanceRegistryArtifact=await getContractInstanceRegistryArtifact();protocolContract3=makeProtocolContract("ContractInstanceRegistry",contractInstanceRegistryArtifact)}return protocolContract3}__name(getCanonicalInstanceRegistry,"getCanonicalInstanceRegistry");var LazyProtocolContractsProvider=class{static{__name(this,"LazyProtocolContractsProvider")}getProtocolContractArtifact(name){switch(name){case"ContractInstanceRegistry":return getCanonicalInstanceRegistry();case"ContractClassRegistry":return getCanonicalClassRegistry();case"FeeJuice":return getCanonicalFeeJuice();default:throw new Error(`Unknown protocol contract name: ${name}`)}}};import{Buffer as Buffer75}from"buffer";function makeStandardContract(name,artifact){let address=StandardContractAddress[name],salt=StandardContractSalt[name],classId=StandardContractClassId[name],{artifactHash,privateFunctionsRoot,publicBytecodeCommitment}=StandardContractClassIdPreimage[name],initializationHash=StandardContractInitializationHash[name],contractClass={id:classId,version:1,artifactHash,privateFunctionsRoot,publicBytecodeCommitment,packedBytecode:artifact.functions.find(f=>f.name==="public_dispatch")?.bytecode??Buffer75.alloc(0),privateFunctions:StandardContractPrivateFunctions[name]};return{instance:{version:2,currentContractClassId:classId,originalContractClassId:classId,initializationHash,immutablesHash:Fr.ZERO,publicKeys:PublicKeys.default(),salt,deployer:AztecAddress.ZERO,address},contractClass,artifact,address}}__name(makeStandardContract,"makeStandardContract");var standardContract,standardContractArtifact;async function getAuthRegistryArtifact(){if(!standardContractArtifact){let{default:authRegistryJson}=await import("./AuthRegistry-C3LO5PQT.js");standardContractArtifact=loadContractArtifact(authRegistryJson)}return standardContractArtifact}__name(getAuthRegistryArtifact,"getAuthRegistryArtifact");async function getStandardAuthRegistry(){if(!standardContract){let artifact=await getAuthRegistryArtifact();standardContract=makeStandardContract("AuthRegistry",artifact)}return standardContract}__name(getStandardAuthRegistry,"getStandardAuthRegistry");var standardContract2,standardContractArtifact2;async function getHandshakeRegistryArtifact(){if(!standardContractArtifact2){let{default:handshakeRegistryJson}=await import("./HandshakeRegistry-PPBWWSQT.js");standardContractArtifact2=loadContractArtifact(handshakeRegistryJson)}return standardContractArtifact2}__name(getHandshakeRegistryArtifact,"getHandshakeRegistryArtifact");async function getStandardHandshakeRegistry(){if(!standardContract2){let artifact=await getHandshakeRegistryArtifact();standardContract2=makeStandardContract("HandshakeRegistry",artifact)}return standardContract2}__name(getStandardHandshakeRegistry,"getStandardHandshakeRegistry");var decoder;try{decoder=new TextDecoder}catch{}var src,srcEnd,position2=0;var EMPTY_ARRAY=[],strings=EMPTY_ARRAY,stringPosition=0,currentUnpackr={},currentStructures,srcString,srcStringStart=0,srcStringEnd=0,bundledStrings,referenceMap,currentExtensions=[],dataView,defaultOptions={useRecords:!1,mapsAsObjects:!0},C1Type=class{static{__name(this,"C1Type")}},C1=new C1Type;C1.name="MessagePack 0xC1";var sequentialMode=!1,inlineObjectReadThreshold=2,readStruct,onLoadedStructures,onSaveState;try{new Function("")}catch{inlineObjectReadThreshold=1/0}var Unpackr=class _Unpackr{static{__name(this,"Unpackr")}constructor(options){options&&(options.useRecords===!1&&options.mapsAsObjects===void 0&&(options.mapsAsObjects=!0),options.sequential&&options.trusted!==!1&&(options.trusted=!0,!options.structures&&options.useRecords!=!1&&(options.structures=[],options.maxSharedStructures||(options.maxSharedStructures=0))),options.structures?options.structures.sharedLength=options.structures.length:options.getStructures&&((options.structures=[]).uninitialized=!0,options.structures.sharedLength=0),options.int64AsNumber&&(options.int64AsType="number")),Object.assign(this,options)}unpack(source,options){if(src)return saveState(()=>(clearSource(),this?this.unpack(source,options):_Unpackr.prototype.unpack.call(defaultOptions,source,options)));!source.buffer&&source.constructor===ArrayBuffer&&(source=typeof Buffer<"u"?Buffer.from(source):new Uint8Array(source)),typeof options=="object"?(srcEnd=options.end||source.length,position2=options.start||0):(position2=0,srcEnd=options>-1?options:source.length),stringPosition=0,srcStringEnd=0,srcString=null,strings=EMPTY_ARRAY,bundledStrings=null,src=source;try{dataView=source.dataView||(source.dataView=new DataView(source.buffer,source.byteOffset,source.byteLength))}catch(error2){throw src=null,source instanceof Uint8Array?error2:new Error("Source must be a Uint8Array or Buffer but was a "+(source&&typeof source=="object"?source.constructor.name:typeof source))}if(this instanceof _Unpackr){if(currentUnpackr=this,this.structures)return currentStructures=this.structures,checkedRead(options);(!currentStructures||currentStructures.length>0)&&(currentStructures=[])}else currentUnpackr=defaultOptions,(!currentStructures||currentStructures.length>0)&&(currentStructures=[]);return checkedRead(options)}unpackMultiple(source,forEach){let values,lastPosition=0;try{sequentialMode=!0;let size=source.length,value=this?this.unpack(source,size):defaultUnpackr.unpack(source,size);if(forEach){if(forEach(value,lastPosition,position2)===!1)return;for(;position2<size;)if(lastPosition=position2,forEach(checkedRead(),lastPosition,position2)===!1)return}else{for(values=[value];position2<size;)lastPosition=position2,values.push(checkedRead());return values}}catch(error2){throw error2.lastPosition=lastPosition,error2.values=values,error2}finally{sequentialMode=!1,clearSource()}}_mergeStructures(loadedStructures,existingStructures){onLoadedStructures&&(loadedStructures=onLoadedStructures.call(this,loadedStructures)),loadedStructures=loadedStructures||[],Object.isFrozen(loadedStructures)&&(loadedStructures=loadedStructures.map(structure=>structure.slice(0)));for(let i=0,l=loadedStructures.length;i<l;i++){let structure=loadedStructures[i];structure&&(structure.isShared=!0,i>=32&&(structure.highByte=i-32>>5))}loadedStructures.sharedLength=loadedStructures.length;for(let id in existingStructures||[])if(id>=0){let structure=loadedStructures[id],existing=existingStructures[id];existing&&(structure&&((loadedStructures.restoreStructures||(loadedStructures.restoreStructures=[]))[id]=structure),loadedStructures[id]=existing)}return this.structures=loadedStructures}decode(source,options){return this.unpack(source,options)}};function checkedRead(options){try{if(!currentUnpackr.trusted&&!sequentialMode){let sharedLength=currentStructures.sharedLength||0;sharedLength<currentStructures.length&&(currentStructures.length=sharedLength)}let result;if(currentUnpackr.randomAccessStructure&&src[position2]<64&&src[position2]>=32&&readStruct?(result=readStruct(src,position2,srcEnd,currentUnpackr),src=null,!(options&&options.lazy)&&result&&(result=result.toJSON()),position2=srcEnd):result=read(),bundledStrings&&(position2=bundledStrings.postBundlePosition,bundledStrings=null),sequentialMode&&(currentStructures.restoreStructures=null),position2==srcEnd)currentStructures&&currentStructures.restoreStructures&&restoreStructures(),currentStructures=null,src=null,referenceMap&&(referenceMap=null);else{if(position2>srcEnd)throw new Error("Unexpected end of MessagePack data");if(!sequentialMode){let jsonView;try{jsonView=JSON.stringify(result,(_,value)=>typeof value=="bigint"?`${value}n`:value).slice(0,100)}catch(error2){jsonView="(JSON view not available "+error2+")"}throw new Error("Data read, but end of buffer not reached "+jsonView)}}return result}catch(error2){throw currentStructures&&currentStructures.restoreStructures&&restoreStructures(),clearSource(),(error2 instanceof RangeError||error2.message.startsWith("Unexpected end of buffer")||position2>srcEnd)&&(error2.incomplete=!0),error2}}__name(checkedRead,"checkedRead");function restoreStructures(){for(let id in currentStructures.restoreStructures)currentStructures[id]=currentStructures.restoreStructures[id];currentStructures.restoreStructures=null}__name(restoreStructures,"restoreStructures");function read(){let token=src[position2++];if(token<160)if(token<128){if(token<64)return token;{let structure=currentStructures[token&63]||currentUnpackr.getStructures&&loadStructures()[token&63];return structure?(structure.read||(structure.read=createStructureReader(structure,token&63)),structure.read()):token}}else if(token<144)if(token-=128,currentUnpackr.mapsAsObjects){let object2={};for(let i=0;i<token;i++){let key=readKey2();key==="__proto__"&&(key="__proto_"),object2[key]=read()}return object2}else{let map2=new Map;for(let i=0;i<token;i++)map2.set(read(),read());return map2}else{token-=144;let array2=new Array(token);for(let i=0;i<token;i++)array2[i]=read();return currentUnpackr.freezeData?Object.freeze(array2):array2}else if(token<192){let length=token-160;if(srcStringEnd>=position2)return srcString.slice(position2-srcStringStart,(position2+=length)-srcStringStart);if(srcStringEnd==0&&srcEnd<140){let string4=length<16?shortStringInJS(length):longStringInJS(length);if(string4!=null)return string4}return readFixedString(length)}else{let value;switch(token){case 192:return null;case 193:return bundledStrings?(value=read(),value>0?bundledStrings[1].slice(bundledStrings.position1,bundledStrings.position1+=value):bundledStrings[0].slice(bundledStrings.position0,bundledStrings.position0-=value)):C1;case 194:return!1;case 195:return!0;case 196:if(value=src[position2++],value===void 0)throw new Error("Unexpected end of buffer");return readBin(value);case 197:return value=dataView.getUint16(position2),position2+=2,readBin(value);case 198:return value=dataView.getUint32(position2),position2+=4,readBin(value);case 199:return readExt(src[position2++]);case 200:return value=dataView.getUint16(position2),position2+=2,readExt(value);case 201:return value=dataView.getUint32(position2),position2+=4,readExt(value);case 202:if(value=dataView.getFloat32(position2),currentUnpackr.useFloat32>2){let multiplier=mult10[(src[position2]&127)<<1|src[position2+1]>>7];return position2+=4,(multiplier*value+(value>0?.5:-.5)>>0)/multiplier}return position2+=4,value;case 203:return value=dataView.getFloat64(position2),position2+=8,value;case 204:return src[position2++];case 205:return value=dataView.getUint16(position2),position2+=2,value;case 206:return value=dataView.getUint32(position2),position2+=4,value;case 207:return currentUnpackr.int64AsType==="number"?(value=dataView.getUint32(position2)*4294967296,value+=dataView.getUint32(position2+4)):currentUnpackr.int64AsType==="string"?value=dataView.getBigUint64(position2).toString():currentUnpackr.int64AsType==="auto"?(value=dataView.getBigUint64(position2),value<=BigInt(2)<<BigInt(52)&&(value=Number(value))):value=dataView.getBigUint64(position2),position2+=8,value;case 208:return dataView.getInt8(position2++);case 209:return value=dataView.getInt16(position2),position2+=2,value;case 210:return value=dataView.getInt32(position2),position2+=4,value;case 211:return currentUnpackr.int64AsType==="number"?(value=dataView.getInt32(position2)*4294967296,value+=dataView.getUint32(position2+4)):currentUnpackr.int64AsType==="string"?value=dataView.getBigInt64(position2).toString():currentUnpackr.int64AsType==="auto"?(value=dataView.getBigInt64(position2),value>=BigInt(-2)<<BigInt(52)&&value<=BigInt(2)<<BigInt(52)&&(value=Number(value))):value=dataView.getBigInt64(position2),position2+=8,value;case 212:if(value=src[position2++],value==114)return recordDefinition(src[position2++]&63);{let extension=currentExtensions[value];if(extension)return extension.read?(position2++,extension.read(read())):extension.noBuffer?(position2++,extension()):extension(src.subarray(position2,++position2));throw new Error("Unknown extension "+value)}case 213:return value=src[position2],value==114?(position2++,recordDefinition(src[position2++]&63,src[position2++])):readExt(2);case 214:return readExt(4);case 215:return readExt(8);case 216:return readExt(16);case 217:return value=src[position2++],srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString8(value);case 218:return value=dataView.getUint16(position2),position2+=2,srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString16(value);case 219:return value=dataView.getUint32(position2),position2+=4,srcStringEnd>=position2?srcString.slice(position2-srcStringStart,(position2+=value)-srcStringStart):readString32(value);case 220:return value=dataView.getUint16(position2),position2+=2,readArray(value);case 221:return value=dataView.getUint32(position2),position2+=4,readArray(value);case 222:return value=dataView.getUint16(position2),position2+=2,readMap(value);case 223:return value=dataView.getUint32(position2),position2+=4,readMap(value);default:if(token>=224)return token-256;if(token===void 0){let error2=new Error("Unexpected end of MessagePack data");throw error2.incomplete=!0,error2}throw new Error("Unknown MessagePack token "+token)}}}__name(read,"read");var validName=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function createStructureReader(structure,firstId){function readObject(){if(readObject.count++>inlineObjectReadThreshold){let readObject2=structure.read=new Function("r","return function(){return "+(currentUnpackr.freezeData?"Object.freeze":"")+"({"+structure.map(key=>key==="__proto__"?"__proto_:r()":validName.test(key)?key+":r()":"["+JSON.stringify(key)+"]:r()").join(",")+"})}")(read);return structure.highByte===0&&(structure.read=createSecondByteReader(firstId,structure.read)),readObject2()}let object2={};for(let i=0,l=structure.length;i<l;i++){let key=structure[i];key==="__proto__"&&(key="__proto_"),object2[key]=read()}return currentUnpackr.freezeData?Object.freeze(object2):object2}return __name(readObject,"readObject"),readObject.count=0,structure.highByte===0?createSecondByteReader(firstId,readObject):readObject}__name(createStructureReader,"createStructureReader");var createSecondByteReader=__name((firstId,read0)=>function(){let highByte=src[position2++];if(highByte===0)return read0();let id=firstId<32?-(firstId+(highByte<<5)):firstId+(highByte<<5),structure=currentStructures[id]||loadStructures()[id];if(!structure)throw new Error("Record id is not defined for "+id);return structure.read||(structure.read=createStructureReader(structure,firstId)),structure.read()},"createSecondByteReader");function loadStructures(){let loadedStructures=saveState(()=>(src=null,currentUnpackr.getStructures()));return currentStructures=currentUnpackr._mergeStructures(loadedStructures,currentStructures)}__name(loadStructures,"loadStructures");var readFixedString=readStringJS,readString8=readStringJS,readString16=readStringJS,readString32=readStringJS,isNativeAccelerationEnabled=!1;function setExtractor(extractStrings){isNativeAccelerationEnabled=!0,readFixedString=readString3(1),readString8=readString3(2),readString16=readString3(3),readString32=readString3(5);function readString3(headerLength){return __name(function(length){let string4=strings[stringPosition++];if(string4==null){if(bundledStrings)return readStringJS(length);let byteOffset=src.byteOffset,extraction=extractStrings(position2-headerLength+byteOffset,srcEnd+byteOffset,src.buffer);if(typeof extraction=="string")string4=extraction,strings=EMPTY_ARRAY;else if(strings=extraction,stringPosition=1,srcStringEnd=1,string4=strings[0],string4===void 0)throw new Error("Unexpected end of buffer")}let srcStringLength=string4.length;return srcStringLength<=length?(position2+=length,string4):(srcString=string4,srcStringStart=position2,srcStringEnd=position2+srcStringLength,position2+=length,string4.slice(0,length))},"readString")}__name(readString3,"readString")}__name(setExtractor,"setExtractor");function readStringJS(length){let result;if(length<16&&(result=shortStringInJS(length)))return result;if(length>64&&decoder)return decoder.decode(src.subarray(position2,position2+=length));let end=position2+length,units=[];for(result="";position2<end;){let byte1=src[position2++];if((byte1&128)===0)units.push(byte1);else if((byte1&224)===192){let byte2=src[position2++]&63;units.push((byte1&31)<<6|byte2)}else if((byte1&240)===224){let byte2=src[position2++]&63,byte3=src[position2++]&63;units.push((byte1&31)<<12|byte2<<6|byte3)}else if((byte1&248)===240){let byte2=src[position2++]&63,byte3=src[position2++]&63,byte4=src[position2++]&63,unit=(byte1&7)<<18|byte2<<12|byte3<<6|byte4;unit>65535&&(unit-=65536,units.push(unit>>>10&1023|55296),unit=56320|unit&1023),units.push(unit)}else units.push(byte1);units.length>=4096&&(result+=fromCharCode2.apply(String,units),units.length=0)}return units.length>0&&(result+=fromCharCode2.apply(String,units)),result}__name(readStringJS,"readStringJS");function readString2(source,start,length){let existingSrc=src;src=source,position2=start;try{return readStringJS(length)}finally{src=existingSrc}}__name(readString2,"readString");function readArray(length){let array2=new Array(length);for(let i=0;i<length;i++)array2[i]=read();return currentUnpackr.freezeData?Object.freeze(array2):array2}__name(readArray,"readArray");function readMap(length){if(currentUnpackr.mapsAsObjects){let object2={};for(let i=0;i<length;i++){let key=readKey2();key==="__proto__"&&(key="__proto_"),object2[key]=read()}return object2}else{let map2=new Map;for(let i=0;i<length;i++)map2.set(read(),read());return map2}}__name(readMap,"readMap");var fromCharCode2=String.fromCharCode;function longStringInJS(length){let start=position2,bytes=new Array(length);for(let i=0;i<length;i++){let byte=src[position2++];if((byte&128)>0){position2=start;return}bytes[i]=byte}return fromCharCode2.apply(String,bytes)}__name(longStringInJS,"longStringInJS");function shortStringInJS(length){if(length<4)if(length<2){if(length===0)return"";{let a=src[position2++];if((a&128)>1){position2-=1;return}return fromCharCode2(a)}}else{let a=src[position2++],b=src[position2++];if((a&128)>0||(b&128)>0){position2-=2;return}if(length<3)return fromCharCode2(a,b);let c2=src[position2++];if((c2&128)>0){position2-=3;return}return fromCharCode2(a,b,c2)}else{let a=src[position2++],b=src[position2++],c2=src[position2++],d=src[position2++];if((a&128)>0||(b&128)>0||(c2&128)>0||(d&128)>0){position2-=4;return}if(length<6){if(length===4)return fromCharCode2(a,b,c2,d);{let e2=src[position2++];if((e2&128)>0){position2-=5;return}return fromCharCode2(a,b,c2,d,e2)}}else if(length<8){let e2=src[position2++],f=src[position2++];if((e2&128)>0||(f&128)>0){position2-=6;return}if(length<7)return fromCharCode2(a,b,c2,d,e2,f);let g=src[position2++];if((g&128)>0){position2-=7;return}return fromCharCode2(a,b,c2,d,e2,f,g)}else{let e2=src[position2++],f=src[position2++],g=src[position2++],h=src[position2++];if((e2&128)>0||(f&128)>0||(g&128)>0||(h&128)>0){position2-=8;return}if(length<10){if(length===8)return fromCharCode2(a,b,c2,d,e2,f,g,h);{let i=src[position2++];if((i&128)>0){position2-=9;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i)}}else if(length<12){let i=src[position2++],j=src[position2++];if((i&128)>0||(j&128)>0){position2-=10;return}if(length<11)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j);let k=src[position2++];if((k&128)>0){position2-=11;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k)}else{let i=src[position2++],j=src[position2++],k=src[position2++],l=src[position2++];if((i&128)>0||(j&128)>0||(k&128)>0||(l&128)>0){position2-=12;return}if(length<14){if(length===12)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l);{let m=src[position2++];if((m&128)>0){position2-=13;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m)}}else{let m=src[position2++],n=src[position2++];if((m&128)>0||(n&128)>0){position2-=14;return}if(length<15)return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m,n);let o=src[position2++];if((o&128)>0){position2-=15;return}return fromCharCode2(a,b,c2,d,e2,f,g,h,i,j,k,l,m,n,o)}}}}}__name(shortStringInJS,"shortStringInJS");function readOnlyJSString(){let token=src[position2++],length;if(token<192)length=token-160;else switch(token){case 217:length=src[position2++];break;case 218:length=dataView.getUint16(position2),position2+=2;break;case 219:length=dataView.getUint32(position2),position2+=4;break;default:throw new Error("Expected string")}return readStringJS(length)}__name(readOnlyJSString,"readOnlyJSString");function readBin(length){return currentUnpackr.copyBuffers?Uint8Array.prototype.slice.call(src,position2,position2+=length):src.subarray(position2,position2+=length)}__name(readBin,"readBin");function readExt(length){let type=src[position2++];if(currentExtensions[type]){let end;return currentExtensions[type](src.subarray(position2,end=position2+=length),readPosition=>{position2=readPosition;try{return read()}finally{position2=end}})}else throw new Error("Unknown extension type "+type)}__name(readExt,"readExt");var keyCache=new Array(4096);function readKey2(){let length=src[position2++];if(length>=160&&length<192){if(length=length-160,srcStringEnd>=position2)return srcString.slice(position2-srcStringStart,(position2+=length)-srcStringStart);if(!(srcStringEnd==0&&srcEnd<180))return readFixedString(length)}else return position2--,asSafeString(read());let key=(length<<5^(length>1?dataView.getUint16(position2):length>0?src[position2]:0))&4095,entry=keyCache[key],checkPosition=position2,end=position2+length-3,chunk3,i=0;if(entry&&entry.bytes==length){for(;checkPosition<end;){if(chunk3=dataView.getUint32(checkPosition),chunk3!=entry[i++]){checkPosition=1879048192;break}checkPosition+=4}for(end+=3;checkPosition<end;)if(chunk3=src[checkPosition++],chunk3!=entry[i++]){checkPosition=1879048192;break}if(checkPosition===end)return position2=checkPosition,entry.string;end-=3,checkPosition=position2}for(entry=[],keyCache[key]=entry,entry.bytes=length;checkPosition<end;)chunk3=dataView.getUint32(checkPosition),entry.push(chunk3),checkPosition+=4;for(end+=3;checkPosition<end;)chunk3=src[checkPosition++],entry.push(chunk3);let string4=length<16?shortStringInJS(length):longStringInJS(length);return string4!=null?entry.string=string4:entry.string=readFixedString(length)}__name(readKey2,"readKey");function asSafeString(property){if(typeof property=="string")return property;if(typeof property=="number"||typeof property=="boolean"||typeof property=="bigint")return property.toString();if(property==null)return property+"";throw new Error("Invalid property type for record",typeof property)}__name(asSafeString,"asSafeString");var recordDefinition=__name((id,highByte)=>{let structure=read().map(asSafeString),firstByte=id;highByte!==void 0&&(id=id<32?-((highByte<<5)+id):(highByte<<5)+id,structure.highByte=highByte);let existingStructure=currentStructures[id];return existingStructure&&(existingStructure.isShared||sequentialMode)&&((currentStructures.restoreStructures||(currentStructures.restoreStructures=[]))[id]=existingStructure),currentStructures[id]=structure,structure.read=createStructureReader(structure,firstByte),structure.read()},"recordDefinition");currentExtensions[0]=()=>{};currentExtensions[0].noBuffer=!0;currentExtensions[66]=data=>{let length=data.length,value=BigInt(data[0]&128?data[0]-256:data[0]);for(let i=1;i<length;i++)value<<=BigInt(8),value+=BigInt(data[i]);return value};var errors={Error,TypeError,ReferenceError};currentExtensions[101]=()=>{let data=read();return(errors[data[0]]||Error)(data[1],{cause:data[2]})};currentExtensions[105]=data=>{if(currentUnpackr.structuredClone===!1)throw new Error("Structured clone extension is disabled");let id=dataView.getUint32(position2-4);referenceMap||(referenceMap=new Map);let token=src[position2],target2;token>=144&&token<160||token==220||token==221?target2=[]:target2={};let refEntry={target:target2};referenceMap.set(id,refEntry);let targetProperties=read();return refEntry.used?Object.assign(target2,targetProperties):(refEntry.target=targetProperties,targetProperties)};currentExtensions[112]=data=>{if(currentUnpackr.structuredClone===!1)throw new Error("Structured clone extension is disabled");let id=dataView.getUint32(position2-4),refEntry=referenceMap.get(id);return refEntry.used=!0,refEntry.target};currentExtensions[115]=()=>new Set(read());var typedArrays=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(type=>type+"Array"),glbl=typeof globalThis=="object"?globalThis:window;currentExtensions[116]=data=>{let typeCode=data[0],typedArrayName=typedArrays[typeCode];if(!typedArrayName){if(typeCode===16){let ab=new ArrayBuffer(data.length-1);return new Uint8Array(ab).set(data.subarray(1)),ab}throw new Error("Could not find typed array for code "+typeCode)}return new glbl[typedArrayName](Uint8Array.prototype.slice.call(data,1).buffer)};currentExtensions[120]=()=>{let data=read();return new RegExp(data[0],data[1])};var TEMP_BUNDLE=[];currentExtensions[98]=data=>{let dataSize=(data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3],dataPosition=position2;return position2+=dataSize-data.length,bundledStrings=TEMP_BUNDLE,bundledStrings=[readOnlyJSString(),readOnlyJSString()],bundledStrings.position0=0,bundledStrings.position1=0,bundledStrings.postBundlePosition=position2,position2=dataPosition,read()};currentExtensions[255]=data=>data.length==4?new Date((data[0]*16777216+(data[1]<<16)+(data[2]<<8)+data[3])*1e3):data.length==8?new Date(((data[0]<<22)+(data[1]<<14)+(data[2]<<6)+(data[3]>>2))/1e6+((data[3]&3)*4294967296+data[4]*16777216+(data[5]<<16)+(data[6]<<8)+data[7])*1e3):data.length==12?new Date(((data[0]<<24)+(data[1]<<16)+(data[2]<<8)+data[3])/1e6+((data[4]&128?-281474976710656:0)+data[6]*1099511627776+data[7]*4294967296+data[8]*16777216+(data[9]<<16)+(data[10]<<8)+data[11])*1e3):new Date("invalid");function saveState(callback){onSaveState&&onSaveState();let savedSrcEnd=srcEnd,savedPosition=position2,savedStringPosition=stringPosition,savedSrcStringStart=srcStringStart,savedSrcStringEnd=srcStringEnd,savedSrcString=srcString,savedStrings=strings,savedReferenceMap=referenceMap,savedBundledStrings=bundledStrings,savedSrc=new Uint8Array(src.slice(0,srcEnd)),savedStructures=currentStructures,savedStructuresContents=currentStructures.slice(0,currentStructures.length),savedPackr=currentUnpackr,savedSequentialMode=sequentialMode,value=callback();return srcEnd=savedSrcEnd,position2=savedPosition,stringPosition=savedStringPosition,srcStringStart=savedSrcStringStart,srcStringEnd=savedSrcStringEnd,srcString=savedSrcString,strings=savedStrings,referenceMap=savedReferenceMap,bundledStrings=savedBundledStrings,src=savedSrc,sequentialMode=savedSequentialMode,currentStructures=savedStructures,currentStructures.splice(0,currentStructures.length,...savedStructuresContents),currentUnpackr=savedPackr,dataView=new DataView(src.buffer,src.byteOffset,src.byteLength),value}__name(saveState,"saveState");function clearSource(){src=null,referenceMap=null,currentStructures=null}__name(clearSource,"clearSource");var mult10=new Array(147);for(let i=0;i<256;i++)mult10[i]=+("1e"+Math.floor(45.15-i*.30103));var defaultUnpackr=new Unpackr({useRecords:!1}),unpack=defaultUnpackr.unpack,unpackMultiple=defaultUnpackr.unpackMultiple,decode3=defaultUnpackr.unpack,FLOAT32_OPTIONS={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},f32Array=new Float32Array(1),u8Array=new Uint8Array(f32Array.buffer,0,4);function setReadStruct(updatedReadStruct,loadedStructs,saveState3){readStruct=updatedReadStruct,onLoadedStructures=loadedStructs,onSaveState=saveState3}__name(setReadStruct,"setReadStruct");var textEncoder2;try{textEncoder2=new TextEncoder}catch{}var extensions,extensionClasses,hasNodeBuffer2=typeof Buffer<"u",ByteArrayAllocate2=hasNodeBuffer2?function(length){return Buffer.allocUnsafeSlow(length)}:Uint8Array,ByteArray=hasNodeBuffer2?Buffer:Uint8Array,MAX_BUFFER_SIZE=hasNodeBuffer2?4294967296:2144337920,target,keysTarget,targetView,position3=0,safeEnd,bundledStrings2=null,writeStructSlots,MAX_BUNDLE_SIZE=21760,hasNonLatin=/[\u0080-\uFFFF]/,RECORD_SYMBOL=Symbol("record-id"),Packr=class extends Unpackr{static{__name(this,"Packr")}constructor(options){super(options),this.offset=0;let typeBuffer,start,hasSharedUpdate,structures,referenceMap2,encodeUtf82=ByteArray.prototype.utf8Write?function(string4,position4){return target.utf8Write(string4,position4,target.byteLength-position4)}:textEncoder2&&textEncoder2.encodeInto?function(string4,position4){return textEncoder2.encodeInto(string4,target.subarray(position4)).written}:!1,packr=this;options||(options={});let isSequential=options&&options.sequential,hasSharedStructures=options.structures||options.saveStructures,maxSharedStructures=options.maxSharedStructures;if(maxSharedStructures==null&&(maxSharedStructures=hasSharedStructures?32:0),maxSharedStructures>8160)throw new Error("Maximum maxSharedStructure is 8160");options.structuredClone&&options.moreTypes==null&&(this.moreTypes=!0);let maxOwnStructures=options.maxOwnStructures;maxOwnStructures==null&&(maxOwnStructures=hasSharedStructures?32:64),!this.structures&&options.useRecords!=!1&&(this.structures=[]);let useTwoByteRecords=maxSharedStructures>32||maxOwnStructures+maxSharedStructures>64,sharedLimitId=maxSharedStructures+64,maxStructureId=maxSharedStructures+maxOwnStructures+64;if(maxStructureId>8256)throw new Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let recordIdsToRemove=[],transitionsCount=0,serializationsSinceTransitionRebuild=0;this.pack=this.encode=function(value,encodeOptions){if(target||(target=new ByteArrayAllocate2(8192),targetView=target.dataView||(target.dataView=new DataView(target.buffer,0,8192)),position3=0),safeEnd=target.length-10,safeEnd-position3<2048?(target=new ByteArrayAllocate2(target.length),targetView=target.dataView||(target.dataView=new DataView(target.buffer,0,target.length)),safeEnd=target.length-10,position3=0):position3=position3+7&2147483640,start=position3,encodeOptions&RESERVE_START_SPACE&&(position3+=encodeOptions&255),referenceMap2=packr.structuredClone?new Map:null,packr.bundleStrings&&typeof value!="string"?(bundledStrings2=[],bundledStrings2.size=1/0):bundledStrings2=null,structures=packr.structures,structures){structures.uninitialized&&(structures=packr._mergeStructures(packr.getStructures()));let sharedLength=structures.sharedLength||0;if(sharedLength>maxSharedStructures)throw new Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+structures.sharedLength);if(!structures.transitions){structures.transitions=Object.create(null);for(let i=0;i<sharedLength;i++){let keys=structures[i];if(!keys)continue;let nextTransition,transition=structures.transitions;for(let j=0,l=keys.length;j<l;j++){let key=keys[j];nextTransition=transition[key],nextTransition||(nextTransition=transition[key]=Object.create(null)),transition=nextTransition}transition[RECORD_SYMBOL]=i+64}this.lastNamedStructuresLength=sharedLength}isSequential||(structures.nextId=sharedLength+64)}hasSharedUpdate&&(hasSharedUpdate=!1);let encodingError;try{packr.randomAccessStructure&&value&&value.constructor&&value.constructor===Object?writeStruct2(value):pack2(value);let lastBundle=bundledStrings2;if(bundledStrings2&&writeBundles(start,pack2,0),referenceMap2&&referenceMap2.idsToInsert){let idsToInsert=referenceMap2.idsToInsert.sort((a,b)=>a.offset>b.offset?1:-1),i=idsToInsert.length,incrementPosition=-1;for(;lastBundle&&i>0;){let insertionPoint=idsToInsert[--i].offset+start;insertionPoint<lastBundle.stringsPosition+start&&incrementPosition===-1&&(incrementPosition=0),insertionPoint>lastBundle.position+start?incrementPosition>=0&&(incrementPosition+=6):(incrementPosition>=0&&(targetView.setUint32(lastBundle.position+start,targetView.getUint32(lastBundle.position+start)+incrementPosition),incrementPosition=-1),lastBundle=lastBundle.previous,i++)}incrementPosition>=0&&lastBundle&&targetView.setUint32(lastBundle.position+start,targetView.getUint32(lastBundle.position+start)+incrementPosition),position3+=idsToInsert.length*6,position3>safeEnd&&makeRoom(position3),packr.offset=position3;let serialized=insertIds(target.subarray(start,position3),idsToInsert);return referenceMap2=null,serialized}return packr.offset=position3,encodeOptions&REUSE_BUFFER_MODE?(target.start=start,target.end=position3,target):target.subarray(start,position3)}catch(error2){throw encodingError=error2,error2}finally{if(structures&&(resetStructures(),hasSharedUpdate&&packr.saveStructures)){let sharedLength=structures.sharedLength||0,returnBuffer=target.subarray(start,position3),newSharedData=prepareStructures(structures,packr);if(!encodingError)return packr.saveStructures(newSharedData,newSharedData.isCompatible)===!1?packr.pack(value,encodeOptions):(packr.lastNamedStructuresLength=sharedLength,target.length>1073741824&&(target=null),returnBuffer)}target.length>1073741824&&(target=null),encodeOptions&RESET_BUFFER_MODE&&(position3=start)}};let resetStructures=__name(()=>{serializationsSinceTransitionRebuild<10&&serializationsSinceTransitionRebuild++;let sharedLength=structures.sharedLength||0;if(structures.length>sharedLength&&!isSequential&&(structures.length=sharedLength),transitionsCount>1e4)structures.transitions=null,serializationsSinceTransitionRebuild=0,transitionsCount=0,recordIdsToRemove.length>0&&(recordIdsToRemove=[]);else if(recordIdsToRemove.length>0&&!isSequential){for(let i=0,l=recordIdsToRemove.length;i<l;i++)recordIdsToRemove[i][RECORD_SYMBOL]=0;recordIdsToRemove=[]}},"resetStructures"),packArray=__name(value=>{var length=value.length;length<16?target[position3++]=144|length:length<65536?(target[position3++]=220,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=221,targetView.setUint32(position3,length),position3+=4);for(let i=0;i<length;i++)pack2(value[i])},"packArray"),pack2=__name(value=>{position3>safeEnd&&(target=makeRoom(position3));var type=typeof value,length;if(type==="string"){let strLength=value.length;if(bundledStrings2&&strLength>=4&&strLength<4096){if((bundledStrings2.size+=strLength)>MAX_BUNDLE_SIZE){let extStart,maxBytes2=(bundledStrings2[0]?bundledStrings2[0].length*3+bundledStrings2[1].length:0)+10;position3+maxBytes2>safeEnd&&(target=makeRoom(position3+maxBytes2));let lastBundle;bundledStrings2.position?(lastBundle=bundledStrings2,target[position3]=200,position3+=3,target[position3++]=98,extStart=position3-start,position3+=4,writeBundles(start,pack2,0),targetView.setUint16(extStart+start-3,position3-start-extStart)):(target[position3++]=214,target[position3++]=98,extStart=position3-start,position3+=4),bundledStrings2=["",""],bundledStrings2.previous=lastBundle,bundledStrings2.size=0,bundledStrings2.position=extStart}let twoByte=hasNonLatin.test(value);bundledStrings2[twoByte?0:1]+=value,target[position3++]=193,pack2(twoByte?-strLength:strLength);return}let headerSize;strLength<32?headerSize=1:strLength<256?headerSize=2:strLength<65536?headerSize=3:headerSize=5;let maxBytes=strLength*3;if(position3+maxBytes>safeEnd&&(target=makeRoom(position3+maxBytes)),strLength<64||!encodeUtf82){let i,c1,c2,strPosition=position3+headerSize;for(i=0;i<strLength;i++)c1=value.charCodeAt(i),c1<128?target[strPosition++]=c1:c1<2048?(target[strPosition++]=c1>>6|192,target[strPosition++]=c1&63|128):(c1&64512)===55296&&((c2=value.charCodeAt(i+1))&64512)===56320?(c1=65536+((c1&1023)<<10)+(c2&1023),i++,target[strPosition++]=c1>>18|240,target[strPosition++]=c1>>12&63|128,target[strPosition++]=c1>>6&63|128,target[strPosition++]=c1&63|128):(target[strPosition++]=c1>>12|224,target[strPosition++]=c1>>6&63|128,target[strPosition++]=c1&63|128);length=strPosition-position3-headerSize}else length=encodeUtf82(value,position3+headerSize);length<32?target[position3++]=160|length:length<256?(headerSize<2&&target.copyWithin(position3+2,position3+1,position3+1+length),target[position3++]=217,target[position3++]=length):length<65536?(headerSize<3&&target.copyWithin(position3+3,position3+2,position3+2+length),target[position3++]=218,target[position3++]=length>>8,target[position3++]=length&255):(headerSize<5&&target.copyWithin(position3+5,position3+3,position3+3+length),target[position3++]=219,targetView.setUint32(position3,length),position3+=4),position3+=length}else if(type==="number")if(value>>>0===value)value<32||value<128&&this.useRecords===!1||value<64&&!this.randomAccessStructure?target[position3++]=value:value<256?(target[position3++]=204,target[position3++]=value):value<65536?(target[position3++]=205,target[position3++]=value>>8,target[position3++]=value&255):(target[position3++]=206,targetView.setUint32(position3,value),position3+=4);else if(value>>0===value)value>=-32?target[position3++]=256+value:value>=-128?(target[position3++]=208,target[position3++]=value+256):value>=-32768?(target[position3++]=209,targetView.setInt16(position3,value),position3+=2):(target[position3++]=210,targetView.setInt32(position3,value),position3+=4);else{let useFloat32;if((useFloat32=this.useFloat32)>0&&value<4294967296&&value>=-2147483648){target[position3++]=202,targetView.setFloat32(position3,value);let xShifted;if(useFloat32<4||(xShifted=value*mult10[(target[position3]&127)<<1|target[position3+1]>>7])>>0===xShifted){position3+=4;return}else position3--}target[position3++]=203,targetView.setFloat64(position3,value),position3+=8}else if(type==="object"||type==="function")if(!value)target[position3++]=192;else{if(referenceMap2){let referee=referenceMap2.get(value);if(referee){if(!referee.id){let idsToInsert=referenceMap2.idsToInsert||(referenceMap2.idsToInsert=[]);referee.id=idsToInsert.push(referee)}target[position3++]=214,target[position3++]=112,targetView.setUint32(position3,referee.id),position3+=4;return}else referenceMap2.set(value,{offset:position3-start})}let constructor=value.constructor;if(constructor===Object)writeObject(value);else if(constructor===Array)packArray(value);else if(constructor===Map)if(this.mapAsEmptyObject)target[position3++]=128;else{length=value.size,length<16?target[position3++]=128|length:length<65536?(target[position3++]=222,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=223,targetView.setUint32(position3,length),position3+=4);for(let[key,entryValue]of value)pack2(key),pack2(entryValue)}else{for(let i=0,l=extensions.length;i<l;i++){let extensionClass=extensionClasses[i];if(value instanceof extensionClass){let extension=extensions[i];if(extension.write){extension.type&&(target[position3++]=212,target[position3++]=extension.type,target[position3++]=0);let writeResult=extension.write.call(this,value);writeResult===value?Array.isArray(value)?packArray(value):writeObject(value):pack2(writeResult);return}let currentTarget=target,currentTargetView=targetView,currentPosition=position3;target=null;let result;try{result=extension.pack.call(this,value,size=>(target=currentTarget,currentTarget=null,position3+=size,position3>safeEnd&&makeRoom(position3),{target,targetView,position:position3-size}),pack2)}finally{currentTarget&&(target=currentTarget,targetView=currentTargetView,position3=currentPosition,safeEnd=target.length-10)}result&&(result.length+position3>safeEnd&&makeRoom(result.length+position3),position3=writeExtensionData(result,target,position3,extension.type));return}}if(Array.isArray(value))packArray(value);else{if(value.toJSON){let json2=value.toJSON();if(json2!==value)return pack2(json2)}if(type==="function")return pack2(this.writeFunction&&this.writeFunction(value));writeObject(value)}}}else if(type==="boolean")target[position3++]=value?195:194;else if(type==="bigint"){if(value<BigInt(1)<<BigInt(63)&&value>=-(BigInt(1)<<BigInt(63)))target[position3++]=211,targetView.setBigInt64(position3,value);else if(value<BigInt(1)<<BigInt(64)&&value>0)target[position3++]=207,targetView.setBigUint64(position3,value);else if(this.largeBigIntToFloat)target[position3++]=203,targetView.setFloat64(position3,Number(value));else{if(this.largeBigIntToString)return pack2(value.toString());if(this.useBigIntExtension&&value<BigInt(2)**BigInt(1023)&&value>-(BigInt(2)**BigInt(1023))){target[position3++]=199,position3++,target[position3++]=66;let bytes=[],alignedSign;do{let byte=value&BigInt(255);alignedSign=(byte&BigInt(128))===(value<BigInt(0)?BigInt(128):BigInt(0)),bytes.push(byte),value>>=BigInt(8)}while(!((value===BigInt(0)||value===BigInt(-1))&&alignedSign));target[position3-2]=bytes.length;for(let i=bytes.length;i>0;)target[position3++]=Number(bytes[--i]);return}else throw new RangeError(value+" was too large to fit in MessagePack 64-bit integer format, use useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set largeBigIntToString to convert to string")}position3+=8}else if(type==="undefined")this.encodeUndefinedAsNil?target[position3++]=192:(target[position3++]=212,target[position3++]=0,target[position3++]=0);else throw new Error("Unknown type: "+type)},"pack"),writePlainObject=this.variableMapSize||this.coercibleKeyAsNumber||this.skipValues?object2=>{let keys;if(this.skipValues){keys=[];for(let key2 in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key2))&&!this.skipValues.includes(object2[key2])&&keys.push(key2)}else keys=Object.keys(object2);let length=keys.length;length<16?target[position3++]=128|length:length<65536?(target[position3++]=222,target[position3++]=length>>8,target[position3++]=length&255):(target[position3++]=223,targetView.setUint32(position3,length),position3+=4);let key;if(this.coercibleKeyAsNumber)for(let i=0;i<length;i++){key=keys[i];let num=Number(key);pack2(isNaN(num)?key:num),pack2(object2[key])}else for(let i=0;i<length;i++)pack2(key=keys[i]),pack2(object2[key])}:object2=>{target[position3++]=222;let objectOffset=position3-start;position3+=2;let size=0;for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&(pack2(key),pack2(object2[key]),size++);if(size>65535)throw new Error('Object is too large to serialize with fast 16-bit map size, use the "variableMapSize" option to serialize this object');target[objectOffset+++start]=size>>8,target[objectOffset+start]=size&255},writeRecord=this.useRecords===!1?writePlainObject:options.progressiveRecords&&!useTwoByteRecords?object2=>{let nextTransition,transition=structures.transitions||(structures.transitions=Object.create(null)),objectOffset=position3++-start,wroteKeys;for(let key in object2)if(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key)){if(nextTransition=transition[key],nextTransition)transition=nextTransition;else{let keys=Object.keys(object2),lastTransition=transition;transition=structures.transitions;let newTransitions=0;for(let i=0,l=keys.length;i<l;i++){let key2=keys[i];nextTransition=transition[key2],nextTransition||(nextTransition=transition[key2]=Object.create(null),newTransitions++),transition=nextTransition}objectOffset+start+1==position3?(position3--,newRecord(transition,keys,newTransitions)):insertNewRecord(transition,keys,objectOffset,newTransitions),wroteKeys=!0,transition=lastTransition[key]}pack2(object2[key])}if(!wroteKeys){let recordId=transition[RECORD_SYMBOL];recordId?target[objectOffset+start]=recordId:insertNewRecord(transition,Object.keys(object2),objectOffset,0)}}:object2=>{let nextTransition,transition=structures.transitions||(structures.transitions=Object.create(null)),newTransitions=0;for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&(nextTransition=transition[key],nextTransition||(nextTransition=transition[key]=Object.create(null),newTransitions++),transition=nextTransition);let recordId=transition[RECORD_SYMBOL];recordId?recordId>=96&&useTwoByteRecords?(target[position3++]=((recordId-=96)&31)+96,target[position3++]=recordId>>5):target[position3++]=recordId:newRecord(transition,transition.__keys__||Object.keys(object2),newTransitions);for(let key in object2)(typeof object2.hasOwnProperty!="function"||object2.hasOwnProperty(key))&&pack2(object2[key])},checkUseRecords=typeof this.useRecords=="function"&&this.useRecords,writeObject=checkUseRecords?object2=>{checkUseRecords(object2)?writeRecord(object2):writePlainObject(object2)}:writeRecord,makeRoom=__name(end=>{let newSize;if(end>16777216){if(end-start>MAX_BUFFER_SIZE)throw new Error("Packed buffer would be larger than maximum buffer size");newSize=Math.min(MAX_BUFFER_SIZE,Math.round(Math.max((end-start)*(end>67108864?1.25:2),4194304)/4096)*4096)}else newSize=(Math.max(end-start<<2,target.length-1)>>12)+1<<12;let newBuffer=new ByteArrayAllocate2(newSize);return targetView=newBuffer.dataView||(newBuffer.dataView=new DataView(newBuffer.buffer,0,newSize)),end=Math.min(end,target.length),target.copy?target.copy(newBuffer,0,start,end):newBuffer.set(target.slice(start,end)),position3-=start,start=0,safeEnd=newBuffer.length-10,target=newBuffer},"makeRoom"),newRecord=__name((transition,keys,newTransitions)=>{let recordId=structures.nextId;recordId||(recordId=64),recordId<sharedLimitId&&this.shouldShareStructure&&!this.shouldShareStructure(keys)?(recordId=structures.nextOwnId,recordId<maxStructureId||(recordId=sharedLimitId),structures.nextOwnId=recordId+1):(recordId>=maxStructureId&&(recordId=sharedLimitId),structures.nextId=recordId+1);let highByte=keys.highByte=recordId>=96&&useTwoByteRecords?recordId-96>>5:-1;transition[RECORD_SYMBOL]=recordId,transition.__keys__=keys,structures[recordId-64]=keys,recordId<sharedLimitId?(keys.isShared=!0,structures.sharedLength=recordId-63,hasSharedUpdate=!0,highByte>=0?(target[position3++]=(recordId&31)+96,target[position3++]=highByte):target[position3++]=recordId):(highByte>=0?(target[position3++]=213,target[position3++]=114,target[position3++]=(recordId&31)+96,target[position3++]=highByte):(target[position3++]=212,target[position3++]=114,target[position3++]=recordId),newTransitions&&(transitionsCount+=serializationsSinceTransitionRebuild*newTransitions),recordIdsToRemove.length>=maxOwnStructures&&(recordIdsToRemove.shift()[RECORD_SYMBOL]=0),recordIdsToRemove.push(transition),pack2(keys))},"newRecord"),insertNewRecord=__name((transition,keys,insertionOffset,newTransitions)=>{let mainTarget=target,mainPosition=position3,mainSafeEnd=safeEnd,mainStart=start;target=keysTarget,position3=0,start=0,target||(keysTarget=target=new ByteArrayAllocate2(8192)),safeEnd=target.length-10,newRecord(transition,keys,newTransitions),keysTarget=target;let keysPosition=position3;if(target=mainTarget,position3=mainPosition,safeEnd=mainSafeEnd,start=mainStart,keysPosition>1){let newEnd=position3+keysPosition-1;newEnd>safeEnd&&makeRoom(newEnd);let insertionPosition=insertionOffset+start;target.copyWithin(insertionPosition+keysPosition,insertionPosition+1,position3),target.set(keysTarget.slice(0,keysPosition),insertionPosition),position3=newEnd}else target[insertionOffset+start]=keysTarget[0]},"insertNewRecord"),writeStruct2=__name(object2=>{let newPosition=writeStructSlots(object2,target,start,position3,structures,makeRoom,(value,newPosition2,notifySharedUpdate)=>{if(notifySharedUpdate)return hasSharedUpdate=!0;position3=newPosition2;let startTarget=target;return pack2(value),resetStructures(),startTarget!==target?{position:position3,targetView,target}:position3},this);if(newPosition===0)return writeObject(object2);position3=newPosition},"writeStruct")}useBuffer(buffer){target=buffer,target.dataView||(target.dataView=new DataView(target.buffer,target.byteOffset,target.byteLength)),position3=0}set position(value){position3=value}get position(){return position3}clearSharedData(){this.structures&&(this.structures=[]),this.typedStructs&&(this.typedStructs=[])}};extensionClasses=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,C1Type];extensions=[{pack(date5,allocateForWrite,pack2){let seconds=date5.getTime()/1e3;if((this.useTimestamp32||date5.getMilliseconds()===0)&&seconds>=0&&seconds<4294967296){let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(6);target2[position4++]=214,target2[position4++]=255,targetView2.setUint32(position4,seconds)}else if(seconds>0&&seconds<4294967296){let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(10);target2[position4++]=215,target2[position4++]=255,targetView2.setUint32(position4,date5.getMilliseconds()*4e6+(seconds/1e3/4294967296>>0)),targetView2.setUint32(position4+4,seconds)}else if(isNaN(seconds)){if(this.onInvalidDate)return allocateForWrite(0),pack2(this.onInvalidDate());let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(3);target2[position4++]=212,target2[position4++]=255,target2[position4++]=255}else{let{target:target2,targetView:targetView2,position:position4}=allocateForWrite(15);target2[position4++]=199,target2[position4++]=12,target2[position4++]=255,targetView2.setUint32(position4,date5.getMilliseconds()*1e6),targetView2.setBigInt64(position4+4,BigInt(Math.floor(seconds)))}}},{pack(set2,allocateForWrite,pack2){if(this.setAsEmptyObject)return allocateForWrite(0),pack2({});let array2=Array.from(set2),{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=115,target2[position4++]=0),pack2(array2)}},{pack(error2,allocateForWrite,pack2){let{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=101,target2[position4++]=0),pack2([error2.name,error2.message,error2.cause])}},{pack(regex,allocateForWrite,pack2){let{target:target2,position:position4}=allocateForWrite(this.moreTypes?3:0);this.moreTypes&&(target2[position4++]=212,target2[position4++]=120,target2[position4++]=0),pack2([regex.source,regex.flags])}},{pack(arrayBuffer,allocateForWrite){this.moreTypes?writeExtBuffer(arrayBuffer,16,allocateForWrite):writeBuffer(hasNodeBuffer2?Buffer.from(arrayBuffer):new Uint8Array(arrayBuffer),allocateForWrite)}},{pack(typedArray,allocateForWrite){let constructor=typedArray.constructor;constructor!==ByteArray&&this.moreTypes?writeExtBuffer(typedArray,typedArrays.indexOf(constructor.name),allocateForWrite):writeBuffer(typedArray,allocateForWrite)}},{pack(c1,allocateForWrite){let{target:target2,position:position4}=allocateForWrite(1);target2[position4]=193}}];function writeExtBuffer(typedArray,type,allocateForWrite,encode4){let length=typedArray.byteLength;if(length+1<256){var{target:target2,position:position4}=allocateForWrite(4+length);target2[position4++]=199,target2[position4++]=length+1}else if(length+1<65536){var{target:target2,position:position4}=allocateForWrite(5+length);target2[position4++]=200,target2[position4++]=length+1>>8,target2[position4++]=length+1&255}else{var{target:target2,position:position4,targetView:targetView2}=allocateForWrite(7+length);target2[position4++]=201,targetView2.setUint32(position4,length+1),position4+=4}target2[position4++]=116,target2[position4++]=type,typedArray.buffer||(typedArray=new Uint8Array(typedArray)),target2.set(new Uint8Array(typedArray.buffer,typedArray.byteOffset,typedArray.byteLength),position4)}__name(writeExtBuffer,"writeExtBuffer");function writeBuffer(buffer,allocateForWrite){let length=buffer.byteLength;var target2,position4;if(length<256){var{target:target2,position:position4}=allocateForWrite(length+2);target2[position4++]=196,target2[position4++]=length}else if(length<65536){var{target:target2,position:position4}=allocateForWrite(length+3);target2[position4++]=197,target2[position4++]=length>>8,target2[position4++]=length&255}else{var{target:target2,position:position4,targetView:targetView2}=allocateForWrite(length+5);target2[position4++]=198,targetView2.setUint32(position4,length),position4+=4}target2.set(buffer,position4)}__name(writeBuffer,"writeBuffer");function writeExtensionData(result,target2,position4,type){let length=result.length;switch(length){case 1:target2[position4++]=212;break;case 2:target2[position4++]=213;break;case 4:target2[position4++]=214;break;case 8:target2[position4++]=215;break;case 16:target2[position4++]=216;break;default:length<256?(target2[position4++]=199,target2[position4++]=length):length<65536?(target2[position4++]=200,target2[position4++]=length>>8,target2[position4++]=length&255):(target2[position4++]=201,target2[position4++]=length>>24,target2[position4++]=length>>16&255,target2[position4++]=length>>8&255,target2[position4++]=length&255)}return target2[position4++]=type,target2.set(result,position4),position4+=length,position4}__name(writeExtensionData,"writeExtensionData");function insertIds(serialized,idsToInsert){let nextId,distanceToMove=idsToInsert.length*6,lastEnd=serialized.length-distanceToMove;for(;nextId=idsToInsert.pop();){let offset=nextId.offset,id=nextId.id;serialized.copyWithin(offset+distanceToMove,offset,lastEnd),distanceToMove-=6;let position4=offset+distanceToMove;serialized[position4++]=214,serialized[position4++]=105,serialized[position4++]=id>>24,serialized[position4++]=id>>16&255,serialized[position4++]=id>>8&255,serialized[position4++]=id&255,lastEnd=offset}return serialized}__name(insertIds,"insertIds");function writeBundles(start,pack2,incrementPosition){if(bundledStrings2.length>0){targetView.setUint32(bundledStrings2.position+start,position3+incrementPosition-bundledStrings2.position-start),bundledStrings2.stringsPosition=position3-start;let writeStrings=bundledStrings2;bundledStrings2=null,pack2(writeStrings[0]),pack2(writeStrings[1])}}__name(writeBundles,"writeBundles");function prepareStructures(structures,packr){return structures.isCompatible=existingStructures=>{let compatible=!existingStructures||(packr.lastNamedStructuresLength||0)===existingStructures.length;return compatible||packr._mergeStructures(existingStructures),compatible},structures}__name(prepareStructures,"prepareStructures");function setWriteStructSlots(writeSlots,makeStructures){writeStructSlots=writeSlots,prepareStructures=makeStructures}__name(setWriteStructSlots,"setWriteStructSlots");var defaultPackr=new Packr({useRecords:!1}),pack=defaultPackr.pack,encode3=defaultPackr.pack,Encoder7=Packr,{NEVER:NEVER2,ALWAYS,DECIMAL_ROUND,DECIMAL_FIT}=FLOAT32_OPTIONS,REUSE_BUFFER_MODE=512,RESET_BUFFER_MODE=1024,RESERVE_START_SPACE=2048;var ASCII=3,NUMBER=0,UTF8=2,OBJECT_DATA=1,DATE=16,TYPE_NAMES=["num","object","string","ascii"];TYPE_NAMES[DATE]="date";var float32Headers=[!1,!0,!0,!1,!1,!0,!0,!1],evalSupported;try{new Function(""),evalSupported=!0}catch{}var updatedPosition,hasNodeBuffer3=typeof Buffer<"u",textEncoder3,currentSource;try{textEncoder3=new TextEncoder}catch{}var encodeUtf8=hasNodeBuffer3?function(target2,string4,position4){return target2.utf8Write(string4,position4,target2.byteLength-position4)}:textEncoder3&&textEncoder3.encodeInto?function(target2,string4,position4){return textEncoder3.encodeInto(string4,target2.subarray(position4)).written}:!1;setWriteStructSlots(writeStruct,prepareStructures2);function writeStruct(object2,target2,encodingStart,position4,structures,makeRoom,pack2,packr){let typedStructs=packr.typedStructs||(packr.typedStructs=[]),targetView2=target2.dataView,refsStartPosition=(typedStructs.lastStringStart||100)+position4,safeEnd2=target2.length-10,start=position4;position4>safeEnd2&&(target2=makeRoom(position4),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10);let refOffset,refPosition=refsStartPosition,transition=typedStructs.transitions||(typedStructs.transitions=Object.create(null)),nextId=typedStructs.nextId||typedStructs.length,headerSize=nextId<15?1:nextId<240?2:nextId<61440?3:nextId<15728640?4:0;if(headerSize===0)return 0;position4+=headerSize;let queuedReferences=[],usedAscii0,keyIndex=0;for(let key in object2){let value=object2[key],nextTransition=transition[key];switch(nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:0,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null,date64:null}),position4>safeEnd2&&(target2=makeRoom(position4),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,refPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10),typeof value){case"number":let number4=value;if(nextId<200||!nextTransition.num64){if(number4>>0===number4&&number4<536870912&&number4>-520093696){number4<246&&number4>=0&&(nextTransition.num8&&!(nextId>200&&nextTransition.num32)||number4<32&&!nextTransition.num32)?(transition=nextTransition.num8||createTypeTransition(nextTransition,NUMBER,1),target2[position4++]=number4):(transition=nextTransition.num32||createTypeTransition(nextTransition,NUMBER,4),targetView2.setUint32(position4,number4,!0),position4+=4);break}else if(number4<4294967296&&number4>=-2147483648&&(targetView2.setFloat32(position4,number4,!0),float32Headers[target2[position4+3]>>>5])){let xShifted;if((xShifted=number4*mult10[(target2[position4+3]&127)<<1|target2[position4+2]>>7])>>0===xShifted){transition=nextTransition.num32||createTypeTransition(nextTransition,NUMBER,4),position4+=4;break}}}transition=nextTransition.num64||createTypeTransition(nextTransition,NUMBER,8),targetView2.setFloat64(position4,number4,!0),position4+=8;break;case"string":let strLength=value.length;if(refOffset=refPosition-refsStartPosition,(strLength<<2)+refPosition>safeEnd2&&(target2=makeRoom((strLength<<2)+refPosition),targetView2=target2.dataView,position4-=encodingStart,start-=encodingStart,refsStartPosition-=encodingStart,refPosition-=encodingStart,encodingStart=0,safeEnd2=target2.length-10),strLength>65280+refOffset>>2){queuedReferences.push(key,value,position4-start);break}let isNotAscii,strStart=refPosition;if(strLength<64){let i,c1,c2;for(i=0;i<strLength;i++)c1=value.charCodeAt(i),c1<128?target2[refPosition++]=c1:c1<2048?(isNotAscii=!0,target2[refPosition++]=c1>>6|192,target2[refPosition++]=c1&63|128):(c1&64512)===55296&&((c2=value.charCodeAt(i+1))&64512)===56320?(isNotAscii=!0,c1=65536+((c1&1023)<<10)+(c2&1023),i++,target2[refPosition++]=c1>>18|240,target2[refPosition++]=c1>>12&63|128,target2[refPosition++]=c1>>6&63|128,target2[refPosition++]=c1&63|128):(isNotAscii=!0,target2[refPosition++]=c1>>12|224,target2[refPosition++]=c1>>6&63|128,target2[refPosition++]=c1&63|128)}else refPosition+=encodeUtf8(target2,value,refPosition),isNotAscii=refPosition-strStart>strLength;if(refOffset<160||refOffset<246&&(nextTransition.ascii8||nextTransition.string8)){if(isNotAscii)(transition=nextTransition.string8)||(typedStructs.length>10&&(transition=nextTransition.ascii8)?(transition.__type=UTF8,nextTransition.ascii8=null,nextTransition.string8=transition,pack2(null,0,!0)):transition=createTypeTransition(nextTransition,UTF8,1));else if(refOffset===0&&!usedAscii0){usedAscii0=!0,transition=nextTransition.ascii0||createTypeTransition(nextTransition,ASCII,0);break}else!(transition=nextTransition.ascii8)&&!(typedStructs.length>10&&(transition=nextTransition.string8))&&(transition=createTypeTransition(nextTransition,ASCII,1));target2[position4++]=refOffset}else transition=nextTransition.string16||createTypeTransition(nextTransition,UTF8,2),targetView2.setUint16(position4,refOffset,!0),position4+=2;break;case"object":if(value){value.constructor===Date?(transition=nextTransition.date64||createTypeTransition(nextTransition,DATE,8),targetView2.setFloat64(position4,value.getTime(),!0),position4+=8):queuedReferences.push(key,value,keyIndex);break}else nextTransition=anyType(nextTransition,position4,targetView2,-10),nextTransition?(transition=nextTransition,position4=updatedPosition):queuedReferences.push(key,value,keyIndex);break;case"boolean":transition=nextTransition.num8||nextTransition.ascii8||createTypeTransition(nextTransition,NUMBER,1),target2[position4++]=value?249:248;break;case"undefined":nextTransition=anyType(nextTransition,position4,targetView2,-9),nextTransition?(transition=nextTransition,position4=updatedPosition):queuedReferences.push(key,value,keyIndex);break;default:queuedReferences.push(key,value,keyIndex)}keyIndex++}for(let i=0,l=queuedReferences.length;i<l;){let key=queuedReferences[i++],value=queuedReferences[i++],propertyIndex=queuedReferences[i++],nextTransition=transition[key];nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:propertyIndex-keyIndex,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null});let newPosition;if(value){let size;refOffset=refPosition-refsStartPosition,refOffset<65280?(transition=nextTransition.object16,transition?size=2:(transition=nextTransition.object32)?size=4:(transition=createTypeTransition(nextTransition,OBJECT_DATA,2),size=2)):(transition=nextTransition.object32||createTypeTransition(nextTransition,OBJECT_DATA,4),size=4),newPosition=pack2(value,refPosition),typeof newPosition=="object"?(refPosition=newPosition.position,targetView2=newPosition.targetView,target2=newPosition.target,refsStartPosition-=encodingStart,position4-=encodingStart,start-=encodingStart,encodingStart=0):refPosition=newPosition,size===2?(targetView2.setUint16(position4,refOffset,!0),position4+=2):(targetView2.setUint32(position4,refOffset,!0),position4+=4)}else transition=nextTransition.object16||createTypeTransition(nextTransition,OBJECT_DATA,2),targetView2.setInt16(position4,value===null?-10:-9,!0),position4+=2;keyIndex++}let recordId=transition[RECORD_SYMBOL];if(recordId==null){recordId=packr.typedStructs.length;let structure=[],nextTransition=transition,key,type;for(;(type=nextTransition.__type)!==void 0;){let size=nextTransition.__size;nextTransition=nextTransition.__parent,key=nextTransition.key;let property=[type,size,key];nextTransition.enumerationOffset&&property.push(nextTransition.enumerationOffset),structure.push(property),nextTransition=nextTransition.parent}structure.reverse(),transition[RECORD_SYMBOL]=recordId,packr.typedStructs[recordId]=structure,pack2(null,0,!0)}switch(headerSize){case 1:if(recordId>=16)return 0;target2[start]=recordId+32;break;case 2:if(recordId>=256)return 0;target2[start]=56,target2[start+1]=recordId;break;case 3:if(recordId>=65536)return 0;target2[start]=57,targetView2.setUint16(start+1,recordId,!0);break;case 4:if(recordId>=16777216)return 0;targetView2.setUint32(start,(recordId<<8)+58,!0);break}if(position4<refsStartPosition){if(refsStartPosition===refPosition)return position4;target2.copyWithin(position4,refsStartPosition,refPosition),refPosition+=position4-refsStartPosition,typedStructs.lastStringStart=position4-start}else if(position4>refsStartPosition)return refsStartPosition===refPosition?position4:(typedStructs.lastStringStart=position4-start,writeStruct(object2,target2,encodingStart,start,structures,makeRoom,pack2,packr));return refPosition}__name(writeStruct,"writeStruct");function anyType(transition,position4,targetView2,value){let nextTransition;if(nextTransition=transition.ascii8||transition.num8)return targetView2.setInt8(position4,value,!0),updatedPosition=position4+1,nextTransition;if(nextTransition=transition.string16||transition.object16)return targetView2.setInt16(position4,value,!0),updatedPosition=position4+2,nextTransition;if(nextTransition=transition.num32)return targetView2.setUint32(position4,3758096640+value,!0),updatedPosition=position4+4,nextTransition;if(nextTransition=transition.num64)return targetView2.setFloat64(position4,NaN,!0),targetView2.setInt8(position4,value),updatedPosition=position4+8,nextTransition;updatedPosition=position4}__name(anyType,"anyType");function createTypeTransition(transition,type,size){let typeName=TYPE_NAMES[type]+(size<<3),newTransition=transition[typeName]||(transition[typeName]=Object.create(null));return newTransition.__type=type,newTransition.__size=size,newTransition.__parent=transition,newTransition}__name(createTypeTransition,"createTypeTransition");function onLoadedStructures2(sharedData){if(!(sharedData instanceof Map))return sharedData;let typed=sharedData.get("typed")||[];Object.isFrozen(typed)&&(typed=typed.map(structure=>structure.slice(0)));let named=sharedData.get("named"),transitions=Object.create(null);for(let i=0,l=typed.length;i<l;i++){let structure=typed[i],transition=transitions;for(let[type,size,key]of structure){let nextTransition=transition[key];nextTransition||(transition[key]=nextTransition={key,parent:transition,enumerationOffset:0,ascii0:null,ascii8:null,num8:null,string16:null,object16:null,num32:null,float64:null,date64:null}),transition=createTypeTransition(nextTransition,type,size)}transition[RECORD_SYMBOL]=i}return typed.transitions=transitions,this.typedStructs=typed,this.lastTypedStructuresLength=typed.length,named}__name(onLoadedStructures2,"onLoadedStructures");var sourceSymbol=Symbol.for("source");function readStruct2(src2,position4,srcEnd2,unpackr){let recordId=src2[position4++]-32;if(recordId>=24)switch(recordId){case 24:recordId=src2[position4++];break;case 25:recordId=src2[position4++]+(src2[position4++]<<8);break;case 26:recordId=src2[position4++]+(src2[position4++]<<8)+(src2[position4++]<<16);break;case 27:recordId=src2[position4++]+(src2[position4++]<<8)+(src2[position4++]<<16)+(src2[position4++]<<24);break}let structure=unpackr.typedStructs&&unpackr.typedStructs[recordId];if(!structure){if(src2=Uint8Array.prototype.slice.call(src2,position4,srcEnd2),srcEnd2-=position4,position4=0,!unpackr.getStructures)throw new Error(`Reference to shared structure ${recordId} without getStructures method`);if(unpackr._mergeStructures(unpackr.getStructures()),!unpackr.typedStructs)throw new Error("Could not find any shared typed structures");if(unpackr.lastTypedStructuresLength=unpackr.typedStructs.length,structure=unpackr.typedStructs[recordId],!structure)throw new Error("Could not find typed structure "+recordId)}var construct=structure.construct;if(!construct){construct=structure.construct=__name(function(){},"LazyObject");var prototype=construct.prototype;let properties=[],currentOffset=0,lastRefProperty;for(let i=0,l=structure.length;i<l;i++){let definition=structure[i],[type,size,key,enumerationOffset]=definition;key==="__proto__"&&(key="__proto_");let property={key,offset:currentOffset};enumerationOffset?properties.splice(i+enumerationOffset,0,property):properties.push(property);let getRef;switch(size){case 0:getRef=__name(()=>0,"getRef");break;case 1:getRef=__name((source,position5)=>{let ref=source.bytes[position5+property.offset];return ref>=246?toConstant(ref):ref},"getRef");break;case 2:getRef=__name((source,position5)=>{let src3=source.bytes,ref=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getUint16(position5+property.offset,!0);return ref>=65280?toConstant(ref&255):ref},"getRef");break;case 4:getRef=__name((source,position5)=>{let src3=source.bytes,ref=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getUint32(position5+property.offset,!0);return ref>=4294967040?toConstant(ref&255):ref},"getRef");break}property.getRef=getRef,currentOffset+=size;let get;switch(type){case ASCII:lastRefProperty&&!lastRefProperty.next&&(lastRefProperty.next=property),lastRefProperty=property,property.multiGetCount=0,get=__name(function(source){let src3=source.bytes,position5=source.position,refStart=currentOffset+position5,ref=getRef(source,position5);if(typeof ref!="number")return ref;let end,next=property.next;for(;next&&(end=next.getRef(source,position5),typeof end!="number");)end=null,next=next.next;return end==null&&(end=source.bytesEnd-refStart),source.srcString?source.srcString.slice(ref,end):readString2(src3,ref+refStart,end-ref)},"get");break;case UTF8:case OBJECT_DATA:lastRefProperty&&!lastRefProperty.next&&(lastRefProperty.next=property),lastRefProperty=property,get=__name(function(source){let position5=source.position,refStart=currentOffset+position5,ref=getRef(source,position5);if(typeof ref!="number")return ref;let src3=source.bytes,end,next=property.next;for(;next&&(end=next.getRef(source,position5),typeof end!="number");)end=null,next=next.next;if(end==null&&(end=source.bytesEnd-refStart),type===UTF8)return src3.toString("utf8",ref+refStart,end+refStart);currentSource=source;try{return unpackr.unpack(src3,{start:ref+refStart,end:end+refStart})}finally{currentSource=null}},"get");break;case NUMBER:switch(size){case 4:get=__name(function(source){let src3=source.bytes,dataView2=src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength)),position5=source.position+property.offset,value=dataView2.getInt32(position5,!0);if(value<536870912){if(value>-520093696)return value;if(value>-536870912)return toConstant(value&255)}let fValue=dataView2.getFloat32(position5,!0),multiplier=mult10[(src3[position5+3]&127)<<1|src3[position5+2]>>7];return(multiplier*fValue+(fValue>0?.5:-.5)>>0)/multiplier},"get");break;case 8:get=__name(function(source){let src3=source.bytes,value=(src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength))).getFloat64(source.position+property.offset,!0);if(isNaN(value)){let byte=src3[source.position+property.offset];if(byte>=246)return toConstant(byte)}return value},"get");break;case 1:get=__name(function(source){let value=source.bytes[source.position+property.offset];return value<246?value:toConstant(value)},"get");break}break;case DATE:get=__name(function(source){let src3=source.bytes,dataView2=src3.dataView||(src3.dataView=new DataView(src3.buffer,src3.byteOffset,src3.byteLength));return new Date(dataView2.getFloat64(source.position+property.offset,!0))},"get");break}property.get=get}if(evalSupported){let objectLiteralProperties=[],args=[],i=0,hasInheritedProperties;for(let property of properties){if(unpackr.alwaysLazyProperty&&unpackr.alwaysLazyProperty(property.key)){hasInheritedProperties=!0;continue}Object.defineProperty(prototype,property.key,{get:withSource(property.get),enumerable:!0});let valueFunction="v"+i++;args.push(valueFunction),objectLiteralProperties.push("["+JSON.stringify(property.key)+"]:"+valueFunction+"(s)")}hasInheritedProperties&&objectLiteralProperties.push("__proto__:this");let toObject=new Function(...args,"return function(s){return{"+objectLiteralProperties.join(",")+"}}").apply(null,properties.map(prop=>prop.get));Object.defineProperty(prototype,"toJSON",{value(omitUnderscoredProperties){return toObject.call(this,this[sourceSymbol])}})}else Object.defineProperty(prototype,"toJSON",{value(omitUnderscoredProperties){let resolved={};for(let i=0,l=properties.length;i<l;i++){let key=properties[i].key;resolved[key]=this[key]}return resolved}})}var instance=new construct;return instance[sourceSymbol]={bytes:src2,position:position4,srcString:"",bytesEnd:srcEnd2},instance}__name(readStruct2,"readStruct");function toConstant(code){switch(code){case 246:return null;case 247:return;case 248:return!1;case 249:return!0}throw new Error("Unknown constant")}__name(toConstant,"toConstant");function withSource(get){return function(){return get(this[sourceSymbol])}}__name(withSource,"withSource");function saveState2(){currentSource&&(currentSource.bytes=Uint8Array.prototype.slice.call(currentSource.bytes,currentSource.position,currentSource.bytesEnd),currentSource.position=0,currentSource.bytesEnd=currentSource.bytes.length)}__name(saveState2,"saveState");function prepareStructures2(structures,packr){if(packr.typedStructs){let structMap=new Map;structMap.set("named",structures),structMap.set("typed",packr.typedStructs),structures=structMap}let lastTypedStructuresLength=packr.lastTypedStructuresLength||0;return structures.isCompatible=existing=>{let compatible=!0;return existing instanceof Map?((existing.get("named")||[]).length!==(packr.lastNamedStructuresLength||0)&&(compatible=!1),(existing.get("typed")||[]).length!==lastTypedStructuresLength&&(compatible=!1)):(existing instanceof Array||Array.isArray(existing))&&existing.length!==(packr.lastNamedStructuresLength||0)&&(compatible=!1),compatible||packr._mergeStructures(existing),compatible},packr.lastTypedStructuresLength=packr.typedStructs&&packr.typedStructs.length,structures}__name(prepareStructures2,"prepareStructures");setReadStruct(readStruct2,onLoadedStructures2,saveState2);import{createRequire}from"module";var nativeAccelerationDisabled=process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED!==void 0&&process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED.toLowerCase()==="true";if(!nativeAccelerationDisabled){let extractor;try{typeof __require=="function"?extractor=__require("msgpackr-extract"):extractor=createRequire(import.meta.url)("msgpackr-extract"),extractor&&setExtractor(extractor.extractStrings)}catch{}}function serialize(o){return typeof o=="string"?`'${o}'`:new c().serialize(o)}__name(serialize,"serialize");var c=(function(){class o{static{__name(this,"o")}#t=new Map;compare(t,r2){let e2=typeof t,n=typeof r2;return e2==="string"&&n==="string"?t.localeCompare(r2):e2==="number"&&n==="number"?t-r2:String.prototype.localeCompare.call(this.serialize(t,!0),this.serialize(r2,!0))}serialize(t,r2){if(t===null)return"null";switch(typeof t){case"string":return r2?t:`'${t}'`;case"bigint":return`${t}n`;case"object":return this.$object(t);case"function":return this.$function(t)}return String(t)}serializeObject(t){let r2=Object.prototype.toString.call(t);if(r2!=="[object Object]")return this.serializeBuiltInType(r2.length<10?`unknown:${r2}`:r2.slice(8,-1),t);let e2=t.constructor,n=e2===Object||e2===void 0?"":e2.name;if(n!==""&&globalThis[n]===e2)return this.serializeBuiltInType(n,t);if(typeof t.toJSON=="function"){let i=t.toJSON();return n+(i!==null&&typeof i=="object"?this.$object(i):`(${this.serialize(i)})`)}return this.serializeObjectEntries(n,Object.entries(t))}serializeBuiltInType(t,r2){let e2=this["$"+t];if(e2)return e2.call(this,r2);if(typeof r2?.entries=="function")return this.serializeObjectEntries(t,r2.entries());throw new Error(`Cannot serialize ${t}`)}serializeObjectEntries(t,r2){let e2=Array.from(r2).sort((i,a)=>this.compare(i[0],a[0])),n=`${t}{`;for(let i=0;i<e2.length;i++){let[a,l]=e2[i];n+=`${this.serialize(a,!0)}:${this.serialize(l)}`,i<e2.length-1&&(n+=",")}return n+"}"}$object(t){let r2=this.#t.get(t);return r2===void 0&&(this.#t.set(t,`#${this.#t.size}`),r2=this.serializeObject(t),this.#t.set(t,r2)),r2}$function(t){let r2=Function.prototype.toString.call(t);return r2.slice(-15)==="[native code] }"?`${t.name||""}()[native]`:`${t.name}(${t.length})${r2.replace(/\s*\n\s*/g,"")}`}$Array(t){let r2="[";for(let e2=0;e2<t.length;e2++)r2+=this.serialize(t[e2]),e2<t.length-1&&(r2+=",");return r2+"]"}$Date(t){try{return`Date(${t.toISOString()})`}catch{return"Date(null)"}}$ArrayBuffer(t){return`ArrayBuffer[${new Uint8Array(t).join(",")}]`}$Set(t){return`Set${this.$Array(Array.from(t).sort((r2,e2)=>this.compare(r2,e2)))}`}$Map(t){return this.serializeObjectEntries("Map",t.entries())}}for(let s2 of["Error","RegExp","URL"])o.prototype["$"+s2]=function(t){return`${s2}(${t})`};for(let s2 of["Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array"])o.prototype["$"+s2]=function(t){return`${s2}[${t.join(",")}]`};for(let s2 of["BigInt64Array","BigUint64Array"])o.prototype["$"+s2]=function(t){return`${s2}[${t.join("n,")}${t.length>0?"n":""}]`};return o})();import{createHash}from"node:crypto";var e=globalThis.process?.getBuiltinModule?.("crypto")?.hash,r="sha256",s="base64url";function digest(t){if(e)return e(r,t,s);let o=createHash(r).update(t);return globalThis.process?.versions?.webcontainer?o.digest().toString(s):o.digest(s)}__name(digest,"digest");function hash4(input){return digest(serialize(input))}__name(hash4,"hash");var _computedKey41;_computedKey41=Symbol.asyncIterator;var SQLiteOPFSAztecArray=class{static{__name(this,"SQLiteOPFSAztecArray")}store;#name;#container;#encoder;constructor(store,name){this.store=store,this.#encoder=new Encoder7,this.#name=name,this.#container=`array:${name}`}async lengthAsync(){let rows=await this.store.allAsync("SELECT COUNT(*) FROM data WHERE container = ? AND key = ?",[this.#container,this.#encodedKey()]);return Number(rows[0]?.[0]??0)}async push(...vals){return vals.length===0?this.lengthAsync():await this.store.transactionAsync(async()=>{let length=await this.lengthAsync();for(let val of vals)await this.store.runAsync(`INSERT INTO data (slot, container, key, key_count, hash, value)
258
258
  VALUES (?, ?, ?, ?, ?, ?)`,[this.#slot(length),this.#container,this.#encodedKey(),length+1,hash4(val),this.#encoder.pack(val)]),length+=1;return length})}async pop(){return await this.store.transactionAsync(async()=>{let length=await this.lengthAsync();if(length===0)return;let slot=this.#slot(length-1),rows=await this.store.allAsync("SELECT value FROM data WHERE slot = ? LIMIT 1",[slot]);await this.store.runAsync("DELETE FROM data WHERE slot = ?",[slot]);let raw=rows[0]?.[0];return raw instanceof Uint8Array?this.#encoder.unpack(raw):void 0})}async atAsync(index){let length=await this.lengthAsync(),resolved=index<0?length+index:index;if(resolved<0||resolved>=length)return;let raw=(await this.store.allAsync("SELECT value FROM data WHERE slot = ? LIMIT 1",[this.#slot(resolved)]))[0]?.[0];return raw instanceof Uint8Array?this.#encoder.unpack(raw):void 0}async setAt(index,val){return await this.store.transactionAsync(async()=>{let length=await this.lengthAsync(),resolved=index<0?length+index:index;return resolved<0||resolved>=length?!1:(await this.store.runAsync(`INSERT OR REPLACE INTO data (slot, container, key, key_count, hash, value)
259
- VALUES (?, ?, ?, ?, ?, ?)`,[this.#slot(resolved),this.#container,this.#encodedKey(),resolved+1,hash4(val),this.#encoder.pack(val)]),!0)})}async*entriesAsync(){let rows=await this.store.allAsync("SELECT key_count, value FROM data WHERE container = ? AND key = ? ORDER BY key_count ASC",[this.#container,this.#encodedKey()]);for(let row of rows){let keyCount=Number(row[0]),raw=row[1];raw instanceof Uint8Array&&(yield[keyCount-1,this.#encoder.unpack(raw)])}}async*valuesAsync(){for await(let[,val]of this.entriesAsync())yield val}[_computedKey41](){return this.valuesAsync()}#encodedKey(){return toBufferKey([this.#name])}#slot(index){return`array:${this.#name}:slot:${index}`}};var HEADER_MAX_PATH_SIZE=512,HEADER_FLAGS_SIZE=4,HEADER_DIGEST_SIZE=8,HEADER_CORPUS_SIZE=HEADER_MAX_PATH_SIZE+HEADER_FLAGS_SIZE,HEADER_SIZE=HEADER_CORPUS_SIZE+HEADER_DIGEST_SIZE;var SQLITE_OPEN_MAIN_DB=256,SQLITE_OPEN_MAIN_JOURNAL=2048,SQLITE_OPEN_SUPER_JOURNAL=16384,SQLITE_OPEN_WAL=524288,PERSISTENT_FILE_TYPES=SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL|SQLITE_OPEN_SUPER_JOURNAL|SQLITE_OPEN_WAL;import{join as join10}from"path";import{addExtension as addExtension5}from"msgpackr";addExtension5({Class:Fr,write:__name(fr=>fr.toBuffer(),"write")});import{BundleArtifactProvider}from"@aztec-labs/noir-protocol-circuits-types/client/bundle";import{abiDecode as abiDecode2,abiEncode as abiEncode2}from"@aztec-foundation/noir-noirc_abi";var AvmProvingRequestSchema=external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_VM),inputs:AvmCircuitInputs.schema});var INBOX_PARITY_SIZES=[4,16,64,256,1024];function pickInboxParitySize(numMessages){let size=INBOX_PARITY_SIZES.find(s2=>numMessages<=s2);if(size===void 0)throw new Error(`Cannot fit ${numMessages} L1-to-L2 messages into any InboxParity size (max ${1024})`);return size}__name(pickInboxParitySize,"pickInboxParitySize");var InboxParityPrivateInputs=class _InboxParityPrivateInputs{static{__name(this,"InboxParityPrivateInputs")}size;messages;numMessages;startRollingHash;proverId;constructor(size,messages,numMessages,startRollingHash,proverId){if(this.size=size,this.messages=messages,this.numMessages=numMessages,this.startRollingHash=startRollingHash,this.proverId=proverId,messages.length!==size)throw new Error(`InboxParity messages length (${messages.length}) must equal size (${size})`)}static fromMessages(messages,startRollingHash,proverId){let size=pickInboxParitySize(messages.length);return new _InboxParityPrivateInputs(size,padArrayEnd(messages,Fr.ZERO,size),messages.length,startRollingHash,proverId)}toBuffer(){return serializeToBuffer(new Fr(this.size),this.messages,new Fr(this.numMessages),this.startRollingHash,this.proverId)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer),size=Fr.fromBuffer(reader).toNumber(),messages=Array.from({length:size},()=>Fr.fromBuffer(reader));return new _InboxParityPrivateInputs(size,messages,Fr.fromBuffer(reader).toNumber(),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _InboxParityPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_InboxParityPrivateInputs)}};var ParityPublicInputs=class _ParityPublicInputs{static{__name(this,"ParityPublicInputs")}startRollingHash;endRollingHash;endSponge;proverId;constructor(startRollingHash,endRollingHash,endSponge,proverId){this.startRollingHash=startRollingHash,this.endRollingHash=endRollingHash,this.endSponge=endSponge,this.proverId=proverId}toBuffer(){return serializeToBuffer(this.startRollingHash,this.endRollingHash,this.endSponge,this.proverId)}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static from(fields){return new _ParityPublicInputs(..._ParityPublicInputs.getFields(fields))}static getFields(fields){return[fields.startRollingHash,fields.endRollingHash,fields.endSponge,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityPublicInputs(reader.readObject(Fr),reader.readObject(Fr),reader.readObject(L1ToL2MessageSponge),Fr.fromBuffer(reader))}static fromString(str){return _ParityPublicInputs.fromBuffer(hexToBuffer(str))}static get schema(){return bufferSchemaFor(_ParityPublicInputs)}};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))}};var _computedKey42;_computedKey42=inspect.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()}}[_computedKey42](){return`CheckpointConstantData ${inspect(this.toInspect())}`}};var BlockRollupPublicInputs=class _BlockRollupPublicInputs{static{__name(this,"BlockRollupPublicInputs")}constants;previousArchive;newArchive;startState;endState;startSpongeBlob;endSpongeBlob;timestamp;blockHeadersHash;startMsgSponge;endMsgSponge;outHash;accumulatedFees;accumulatedManaUsed;constructor(constants,previousArchive,newArchive,startState,endState,startSpongeBlob,endSpongeBlob,timestamp,blockHeadersHash,startMsgSponge,endMsgSponge,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.startMsgSponge=startMsgSponge,this.endMsgSponge=endMsgSponge,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),reader.readObject(L1ToL2MessageSponge),reader.readObject(L1ToL2MessageSponge),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.startMsgSponge,this.endMsgSponge,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(),startMsgSpongeNumAbsorbed:this.startMsgSponge.numAbsorbed,endMsgSpongeNumAbsorbed:this.endMsgSponge.numAbsorbed,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;accumulatedTxEffectsTreeRoot;accumulatedFees;accumulatedManaUsed;constructor(numTxs,constants,startTreeSnapshots,endTreeSnapshots,startSpongeBlob,endSpongeBlob,outHash,accumulatedTxEffectsTreeRoot,accumulatedFees,accumulatedManaUsed){this.numTxs=numTxs,this.constants=constants,this.startTreeSnapshots=startTreeSnapshots,this.endTreeSnapshots=endTreeSnapshots,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.outHash=outHash,this.accumulatedTxEffectsTreeRoot=accumulatedTxEffectsTreeRoot,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(),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),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.numTxs,this.constants,this.startTreeSnapshots,this.endTreeSnapshots,this.startSpongeBlob,this.endSpongeBlob,this.outHash,this.accumulatedTxEffectsTreeRoot,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 BlockRootNoTxsRollupPrivateInputs=class _BlockRootNoTxsRollupPrivateInputs{static{__name(this,"BlockRootNoTxsRollupPrivateInputs")}previousArchive;previousState;constants;timestamp;startSpongeBlob;startMsgSponge;messageBundle;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousArchive,previousState,constants,timestamp,startSpongeBlob,startMsgSponge,messageBundle,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousArchive=previousArchive,this.previousState=previousState,this.constants=constants,this.timestamp=timestamp,this.startSpongeBlob=startSpongeBlob,this.startMsgSponge=startMsgSponge,this.messageBundle=messageBundle,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootNoTxsRollupPrivateInputs(..._BlockRootNoTxsRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousArchive,fields.previousState,fields.constants,fields.timestamp,fields.startSpongeBlob,fields.startMsgSponge,fields.messageBundle,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousArchive,this.previousState,this.constants,bigintToUInt64BE(this.timestamp),this.startSpongeBlob,this.startMsgSponge,this.messageBundle,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootNoTxsRollupPrivateInputs(AppendOnlyTreeSnapshot.fromBuffer(reader),StateReference.fromBuffer(reader),CheckpointConstantData.fromBuffer(reader),reader.readUInt64(),reader.readObject(SpongeBlob),reader.readObject(L1ToL2MessageSponge),reader.readObject(L1ToL2MessageBundle),reader.readArray(36,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootNoTxsRollupPrivateInputs)}},BlockRootRollupPrivateInputs=class _BlockRootRollupPrivateInputs{static{__name(this,"BlockRootRollupPrivateInputs")}previousRollups;messageBundle;previousL1ToL2;startMsgSponge;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousRollups,messageBundle,previousL1ToL2,startMsgSponge,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousRollups=previousRollups,this.messageBundle=messageBundle,this.previousL1ToL2=previousL1ToL2,this.startMsgSponge=startMsgSponge,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootRollupPrivateInputs(..._BlockRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.messageBundle,fields.previousL1ToL2,fields.startMsgSponge,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousRollups,this.messageBundle,this.previousL1ToL2,this.startMsgSponge,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],reader.readObject(L1ToL2MessageBundle),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readObject(L1ToL2MessageSponge),reader.readArray(36,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootRollupPrivateInputs)}},BlockRootSingleTxRollupPrivateInputs=class _BlockRootSingleTxRollupPrivateInputs{static{__name(this,"BlockRootSingleTxRollupPrivateInputs")}previousRollup;messageBundle;previousL1ToL2;startMsgSponge;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousRollup,messageBundle,previousL1ToL2,startMsgSponge,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousRollup=previousRollup,this.messageBundle=messageBundle,this.previousL1ToL2=previousL1ToL2,this.startMsgSponge=startMsgSponge,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxRollupPrivateInputs(..._BlockRootSingleTxRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.messageBundle,fields.previousL1ToL2,fields.startMsgSponge,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousRollup,this.messageBundle,this.previousL1ToL2,this.startMsgSponge,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxRollupPrivateInputs(ProofData.fromBuffer(reader,TxRollupPublicInputs),reader.readObject(L1ToL2MessageBundle),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readObject(L1ToL2MessageSponge),reader.readArray(36,Fr),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;startInboxRollingHash;endInboxRollingHash;checkpointHeaderHashes;fees;startBlobAccumulator;endBlobAccumulator;finalBlobChallenges;constructor(constants,previousArchive,newArchive,previousOutHash,newOutHash,startInboxRollingHash,endInboxRollingHash,checkpointHeaderHashes,fees,startBlobAccumulator,endBlobAccumulator,finalBlobChallenges){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.previousOutHash=previousOutHash,this.newOutHash=newOutHash,this.startInboxRollingHash=startInboxRollingHash,this.endInboxRollingHash=endInboxRollingHash,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),Fr.fromBuffer(reader),Fr.fromBuffer(reader),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.startInboxRollingHash,this.endInboxRollingHash,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(),startInboxRollingHash:this.startInboxRollingHash.toString(),endInboxRollingHash:this.endInboxRollingHash.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;previousInboxRollingHash;endInboxRollingHash;checkpointHeaderHashes;fees;constants;blobPublicInputs;constructor(previousArchiveRoot,endArchiveRoot,outHash,previousInboxRollingHash,endInboxRollingHash,checkpointHeaderHashes,fees,constants,blobPublicInputs){this.previousArchiveRoot=previousArchiveRoot,this.endArchiveRoot=endArchiveRoot,this.outHash=outHash,this.previousInboxRollingHash=previousInboxRollingHash,this.endInboxRollingHash=endInboxRollingHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.constants=constants,this.blobPublicInputs=blobPublicInputs}static getFields(fields){return[fields.previousArchiveRoot,fields.endArchiveRoot,fields.outHash,fields.previousInboxRollingHash,fields.endInboxRollingHash,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),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(),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,l1ToL2Messages)}__name(insertTxEffectIntoWorldTrees,"insertTxEffectIntoWorldTrees");async function makeTXEBlockHeader(worldTrees,globalVariables,txEffects){let stateReference=await worldTrees.getStateReference(),archiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);return BlockHeader.from({lastArchive:new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root),TreeLeafIndex.fromBigInt(BigInt(archiveInfo.size))),spongeBlobHash:Fr.ZERO,txEffectsTreeRoot:await new Body(txEffects).computeTxEffectsTreeRoot(),state:stateReference,globalVariables,totalFees:Fr.ZERO,totalManaUsed:Fr.ZERO})}__name(makeTXEBlockHeader,"makeTXEBlockHeader");async function makeTXEBlock(worldTrees,globalVariables,txEffects){let header=await makeTXEBlockHeader(worldTrees,globalVariables,txEffects);await worldTrees.updateArchive(header);let newArchiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE),newArchive=new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root),TreeLeafIndex.fromBigInt(BigInt(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=STRUCT([{name:"daGas",type:U32},{name:"l2Gas",type:U32}]),GAS_SETTINGS=STRUCT([{name:"gasLimits",type:GAS},{name:"teardownGasLimits",type:GAS},{name:"maxFeesPerGas",type:GAS_FEES},{name:"maxPriorityFeesPerGas",type:GAS_FEES}]),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"]}),CALL_CONTEXT=STRUCT([{name:"msgSender",type:AZTEC_ADDRESS},{name:"contractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"isStaticCall",type:BOOL}]),TX_CONTEXT=STRUCT([{name:"chainId",type:FIELD},{name:"version",type:FIELD},{name:"gasSettings",type:GAS_SETTINGS}]),PRIVATE_CONTEXT_INPUTS=STRUCT([{name:"callContext",type:CALL_CONTEXT},{name:"anchorBlockHeader",type:BLOCK_HEADER},{name:"txContext",type:TX_CONTEXT},{name:"startSideEffectCounter",type:U32},{name:"protocolNullifier",type:FIELD}]),COMPLETE_ADDRESS=STRUCT([{name:"address",type:AZTEC_ADDRESS},{name:"publicKeys",type:PUBLIC_KEYS}]),TXE_TX_EFFECTS=STRUCT([{name:"txHash",type:TX_HASH},{name:"noteHashes",type:FIXED_BOUNDED_VEC(FIELD,64)},{name:"nullifiers",type:FIXED_BOUNDED_VEC(FIELD,64)},{name:"privateLogs",type:FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,16),64)}]),TXE_OFFCHAIN_EFFECTS=FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,MAX_OFFCHAIN_EFFECT_LEN),MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY),TXE_CALL_CONTEXT=STRUCT([{name:"txHash",type:OPTION(FIELD)},{name:"anchorBlockTimestamp",type:U64}]),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=FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,MAX_PRIVATE_EVENT_LEN),MAX_PRIVATE_EVENTS_PER_TXE_QUERY),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},{name:"immutablesHash",type:FIELD}],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:VECTOR(FIELD)}]}),aztec_avm_returndataSize:makeEntry({returnType:U32}),aztec_avm_returndataCopy:makeEntry({params:[{name:"rdOffset",type:U32},{name:"copySize",type:U32}],returnType:VECTOR(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-foundation/bb.js";import{Buffer as Buffer77}from"buffer";import{Buffer as Buffer76}from"buffer";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=Buffer76.alloc(32),buf2=Buffer76.alloc(32),buf3=Buffer76.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=Buffer76.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(Buffer77.concat([Buffer77.from(response.publicKey.x),Buffer77.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(Buffer77.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 IpcError=class extends Error{static{__name(this,"IpcError")}retry;constructor(message,retry2,options){super(message,options),this.retry=retry2,this.name=new.target.name}},IpcTransportError=class extends IpcError{static{__name(this,"IpcTransportError")}constructor(message,options){super(message,!0,options)}},IpcProcessExitedError=class extends IpcError{static{__name(this,"IpcProcessExitedError")}code;signal;logPath;constructor(message,code,signal,logPath){super(message,!0),this.code=code,this.signal=signal,this.logPath=logPath}},IpcSpawnError=class extends IpcError{static{__name(this,"IpcSpawnError")}};import{spawn}from"node:child_process";import{open,rm as rm3}from"node:fs/promises";import{tmpdir as tmpdir2}from"node:os";import{join as join4}from"node:path";import{threadId}from"node:worker_threads";import{createRequire as createRequire2}from"node:module";import*as fs2 from"node:fs";import*as path from"node:path";import{fileURLToPath}from"node:url";var PLATFORM_TO_BUILD_DIR={"x86_64-linux":"amd64-linux","x86_64-darwin":"amd64-macos","aarch64-linux":"arm64-linux","aarch64-darwin":"arm64-macos"};function detectPlatform(){let arch=process.arch,platform2=process.platform;return arch==="x64"&&platform2==="linux"?"x86_64-linux":arch==="x64"&&platform2==="darwin"?"x86_64-darwin":arch==="arm64"&&platform2==="linux"?"aarch64-linux":arch==="arm64"&&platform2==="darwin"?"aarch64-darwin":null}__name(detectPlatform,"detectPlatform");function findPackageRoot(){let currentDir3=path.dirname(fileURLToPath(import.meta.url)),root=path.parse(currentDir3).root;for(;currentDir3!==root;){let packageJsonPath=path.join(currentDir3,"package.json");if(fs2.existsSync(packageJsonPath)){let buildDir=path.join(currentDir3,"build");if(fs2.existsSync(buildDir))return currentDir3}currentDir3=path.dirname(currentDir3)}return null}__name(findPackageRoot,"findPackageRoot");function findIpcRuntimeNapi(customPath){if(customPath)return fs2.existsSync(customPath)?path.resolve(customPath):null;let platform2=detectPlatform();if(!platform2)return null;let packageRoot=findPackageRoot();if(!packageRoot)return null;let buildDir=PLATFORM_TO_BUILD_DIR[platform2],candidate=path.join(packageRoot,"build",buildDir,"ipc_runtime_napi.node");return fs2.existsSync(candidate)?candidate:null}__name(findIpcRuntimeNapi,"findIpcRuntimeNapi");function loadIpcRuntimeNapi(customPath){let addonPath=findIpcRuntimeNapi(customPath);if(!addonPath)throw new Error("Could not locate ipc_runtime_napi.node. Build with `ipc-runtime/bootstrap.sh` or set the optional `customPath` argument to point at a prebuilt addon.");return createRequire2(import.meta.url)(addonPath)}__name(loadIpcRuntimeNapi,"loadIpcRuntimeNapi");var NapiShmAsyncClient=class{static{__name(this,"NapiShmAsyncClient")}inner;pending=new Map;nextRequestId=(BigInt(Math.floor(Math.random()*4294967295))<<16n)+1n;destroyed=!1;constructor(inner){this.inner=inner,this.inner.setResponseCallback((requestId,response)=>{if(this.destroyed)return;let cb=this.pending.get(requestId);cb?(this.pending.delete(requestId),cb.resolve(new Uint8Array(response)),this.pending.size===0&&this.inner.release()):console.warn(`NapiShmAsyncClient: discarding response for unknown request id ${requestId} (stale frame from a previous ring occupant?)`)})}call(input){if(this.destroyed)return Promise.reject(new Error("NapiShmAsyncClient: call() after destroy()"));let buf=Buffer.isBuffer(input)?input:Buffer.from(input.buffer,input.byteOffset,input.byteLength);return new Promise((resolve4,reject)=>{let requestId=this.nextRequestId++;this.pending.size===0&&this.inner.acquire(),this.pending.set(requestId,{resolve:resolve4,reject});try{this.inner.call(requestId,buf)}catch(err){this.pending.delete(requestId),this.pending.size===0&&this.inner.release(),reject(err instanceof Error?err:new Error(`SHM async call failed: ${String(err)}`))}})}async destroy(){if(this.destroyed)return;this.destroyed=!0;let err=new Error("ipc-runtime SHM client destroyed before response");for(let cb of this.pending.values())cb.reject(err);this.pending.clear(),this.inner.close()}};function createNapiShmAsyncClient(shmName,options={}){let napi=loadIpcRuntimeNapi(options.customAddonPath);return new NapiShmAsyncClient(options.clientId===void 0?new napi.MsgpackClientAsync(shmName):new napi.MsgpackClientAsync(shmName,options.clientId))}__name(createNapiShmAsyncClient,"createNapiShmAsyncClient");import*as net from"node:net";var UdsIpcClient=class _UdsIpcClient{static{__name(this,"UdsIpcClient")}conn;buffer=Buffer.alloc(0);pending=new Map;nextRequestId=(BigInt(Math.floor(Math.random()*4294967295))<<16n)+1n;destroyed=!1;closed=!1;constructor(conn){this.conn=conn,conn.on("data",chunk3=>this.onData(chunk3)),conn.on("error",err=>this.failAll(new IpcTransportError(`UdsIpcClient: socket error: ${err.message}`,{cause:err}))),conn.on("close",()=>this.failAll(new IpcTransportError("socket closed")))}static async connect(socketPath,opts){let conn=await connectWithRetry(socketPath,opts?.connectTimeoutMs??5e3);return conn.setNoDelay(!0),opts?.unref&&conn.unref(),new _UdsIpcClient(conn)}get inflight(){return this.pending.size}get socket(){return this.conn}async call(input){if(this.destroyed)throw new IpcTransportError("UdsIpcClient: call() after destroy()");if(this.closed)throw new IpcTransportError("UdsIpcClient: call() on a closed/errored socket");return new Promise((resolve4,reject)=>{let requestId=this.nextRequestId++;this.pending.set(requestId,{resolve:resolve4,reject});let header=Buffer.allocUnsafe(12);header.writeUInt32LE(input.length+8,0),header.writeBigUInt64LE(requestId,4),this.conn.write(header),this.conn.write(input)})}async destroy(){this.destroyed=!0,this.conn.removeAllListeners(),this.conn.destroy(),this.failAll(new IpcTransportError("UdsIpcClient destroyed"))}onData(chunk3){for(this.buffer=this.buffer.length===0?Buffer.from(chunk3):Buffer.concat([this.buffer,chunk3]);this.buffer.length>=4;){let len=this.buffer.readUInt32LE(0);if(len>268435456){this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: oversized frame (${len} bytes exceeds MAX_FRAME_SIZE)`));return}if(len<8){this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: ${len}-byte frame is shorter than the request-id field \u2014 IPC protocol mismatch (envelope ids); update the peer binary/package`));return}if(this.buffer.length<4+len)return;let requestId=this.buffer.readBigUInt64LE(4),payload=this.buffer.subarray(12,4+len);this.buffer=this.buffer.subarray(4+len);let next=this.pending.get(requestId);if(next)this.pending.delete(requestId),next.resolve(new Uint8Array(payload));else{this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: response for unknown request id ${requestId} \u2014 protocol desync`));return}}}failAll(err){this.closed=!0;let pending=[...this.pending.values()];this.pending.clear();for(let p of pending)p.reject(err)}};async function connectWithRetry(socketPath,timeoutMs){let deadline=Date.now()+timeoutMs,attempt=0,lastErr;for(;;)try{let remainingMs=Math.max(1,deadline-Date.now());return await attemptConnect(socketPath,remainingMs)}catch(err){lastErr=err;let code=err.code;if(code!=="ECONNREFUSED"&&code!=="ECONNRESET"&&code!=="ENOENT"&&code!=="ETIMEDOUT"&&code!=="EAGAIN")throw new IpcTransportError(`UdsIpcClient: connect failed: ${lastErr.message}`,{cause:lastErr});if(Date.now()>=deadline)throw new IpcTransportError(`UdsIpcClient: connect timed out: ${lastErr.message}`,{cause:lastErr});let delay=Math.min(50,5*2**attempt++);await new Promise(resolve4=>setTimeout(resolve4,delay))}}__name(connectWithRetry,"connectWithRetry");function attemptConnect(socketPath,timeoutMs){return new Promise((resolve4,reject)=>{let conn=net.createConnection(socketPath),cleanup=__name(()=>{conn.removeListener("connect",onConnect),conn.removeListener("error",onError),clearTimeout(timer)},"cleanup"),onError=__name(err=>{cleanup(),conn.destroy(),reject(err)},"onError"),onConnect=__name(()=>{cleanup(),resolve4(conn)},"onConnect"),timer=setTimeout(()=>{cleanup(),conn.destroy();let err=new Error(`connect attempt timed out after ${timeoutMs}ms`);err.code="ETIMEDOUT",reject(err)},timeoutMs);conn.once("connect",onConnect),conn.once("error",onError)})}__name(attemptConnect,"attemptConnect");var DEFAULT_CONNECT_TIMEOUT_MS=6e4,SIGTERM_GRACE_MS=5e3,EXIT_ATTRIBUTION_GRACE_MS=250,instanceCounter=0,SpawnedProcessBackend=class _SpawnedProcessBackend{static{__name(this,"SpawnedProcessBackend")}options;current;starting;destroying=!1;exitError;respawn;ipcPath;logPath;constructor(options){this.options=options,this.respawn=options.respawn??!1;let instanceId=`${options.instancePrefix}-${process.pid}-${threadId}-${instanceCounter++}`;this.ipcPath=options.transport==="shm"?`${instanceId}.shm`:join4(tmpdir2(),`${instanceId}.sock`),this.logPath=options.logger?void 0:join4(tmpdir2(),`${instanceId}.log`)}static async spawn(options){if(options.respawn&&options.transport==="shm")throw new IpcError("respawn is not supported over the shm transport",!1);let backend=new _SpawnedProcessBackend(options);return backend.current=await backend.spawnIncarnation(),backend}getIpcPath(){return this.ipcPath}async call(input){let incarnation=await this.ensureUp();try{return await incarnation.client.call(input)}catch(err){throw await this.attributeCallError(incarnation,err)}}sendProcessSignal(signal){let child=this.current?.child;child&&child.exitCode===null&&child.signalCode===null&&child.kill(signal)}async destroy(){this.destroying=!0,await this.starting?.then(incarnation2=>{this.current=incarnation2},()=>{});let incarnation=this.current;if(this.current=void 0,!incarnation)return;await incarnation.client.destroy();let{child}=incarnation,killTimer;child.exitCode===null&&child.signalCode===null&&(child.kill("SIGTERM"),killTimer=setTimeout(()=>{child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL")},SIGTERM_GRACE_MS)),await incarnation.exitPromise,killTimer!==void 0&&clearTimeout(killTimer),child.stdout?.destroy(),child.stderr?.destroy(),child.removeAllListeners(),await this.cleanupIpcPath()}async ensureUp(){if(this.destroying)throw new IpcError(`${this.options.binaryName} backend destroyed`,!1);if(this.current)return this.current;if(this.exitError)throw this.exitError;return this.starting??=this.spawnIncarnation().then(incarnation=>(this.destroying||(this.current=incarnation),incarnation)).finally(()=>{this.starting=void 0}),await this.starting}async attributeCallError(incarnation,err){if(!incarnation.exitInfo&&!this.destroying&&await Promise.race([incarnation.exitPromise,new Promise(resolve4=>setTimeout(resolve4,EXIT_ATTRIBUTION_GRACE_MS))]),incarnation.exitInfo&&!this.destroying){let{code,signal}=incarnation.exitInfo;return new IpcProcessExitedError(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal})`+(this.logPath!==void 0?`; see logs: ${this.logPath}`:""),code,signal,this.logPath)}return err}async spawnIncarnation(){let{options}=this;options.transport==="uds"&&await rm3(this.ipcPath,{force:!0});let logFile=this.logPath!==void 0?await open(this.logPath,"a"):void 0,child=spawn(options.binaryPath,[...options.ipcPathArgs.map(arg=>arg==="{path}"?this.ipcPath:arg),...options.extraArgs??[]],{stdio:["ignore",options.logger?"pipe":logFile.fd,options.logger?"pipe":logFile.fd],env:{...process.env,...options.env??{}}});options.logger&&(child.stdout?.on("data",data=>options.logger?.(`[${options.binaryName} stdout] ${data.toString().trimEnd()}`)),child.stderr?.on("data",data=>options.logger?.(`[${options.binaryName} stderr] ${data.toString().trimEnd()}`)));let incarnation={child},exitPromise=new Promise(resolve4=>{child.on("exit",(code,signal)=>{incarnation.exitInfo={code,signal},this.onIncarnationExit(incarnation,code,signal),resolve4()})});incarnation.exitPromise=exitPromise;let childReadyFailure=new Promise((_,reject)=>{child.once("error",err=>{let code=err.code,retry2=code!=="ENOENT"&&code!=="EACCES";reject(new IpcSpawnError(`Failed to spawn ${options.binaryName}: ${err.message}`,retry2,{cause:err}))}),child.once("exit",(code,signal)=>{reject(new IpcSpawnError(`${options.binaryName} exited before IPC connection was ready (code=${code}, signal=${signal})`,!0))})});childReadyFailure.catch(()=>{}),logFile!==void 0&&await logFile.close();try{incarnation.client=await Promise.race([this.connectClient(),childReadyFailure])}catch(err){throw child.pid!==void 0&&(child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL"),await exitPromise),child.stdout?.destroy(),child.stderr?.destroy(),child.removeAllListeners(),await this.cleanupIpcPath(),this.asSpawnError(err)}return incarnation}onIncarnationExit(incarnation,code,signal){incarnation.client?.destroy(),!(this.destroying||this.current!==incarnation)&&(this.current=void 0,this.respawn?console.error(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal}); will respawn on next call`):(this.exitError=new IpcProcessExitedError(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal})`+(this.logPath!==void 0?`; see logs: ${this.logPath}`:""),code,signal,this.logPath),console.error(this.exitError.message)))}async connectClient(){let{options}=this,timeoutMs=options.connectTimeoutMs??DEFAULT_CONNECT_TIMEOUT_MS;if(options.transport==="uds")return await UdsIpcClient.connect(this.ipcPath,{connectTimeoutMs:timeoutMs});let deadline=Date.now()+timeoutMs,lastError;for(;Date.now()<=deadline;)try{return createNapiShmAsyncClient(this.ipcPath.replace(/\.shm$/,""),{clientId:options.clientId,customAddonPath:options.napiPath})}catch(err){lastError=err,await new Promise(resolve4=>setTimeout(resolve4,50))}let message=lastError instanceof Error?lastError.message:String(lastError);throw new IpcSpawnError(`Timed out connecting to ${this.options.binaryName}: ${message}`,!0,{cause:lastError})}asSpawnError(err){let logHint=this.logPath!==void 0?`; see logs: ${this.logPath}`:"";if(err instanceof IpcSpawnError)return new IpcSpawnError(err.message+logHint,err.retry,{cause:err.cause??err});let message=err instanceof Error?err.message:String(err);return new IpcSpawnError(`Failed to start ${this.options.binaryName}: ${message}${logHint}`,!0,{cause:err})}async cleanupIpcPath(){try{if(this.options.transport==="uds"&&await rm3(this.ipcPath,{force:!0}),this.options.transport==="shm"){let shmName=this.ipcPath.replace(/\.shm$/,"");for(let suffix of["_request","_response"])await rm3(`/dev/shm/${shmName}${suffix}`,{force:!0})}}catch{}}};import*as net2 from"node:net";import*as fs3 from"node:fs";var UdsIpcServer=class _UdsIpcServer{static{__name(this,"UdsIpcServer")}socketPath;server;nextClientId=0;connections=new Set;unlinkOnExit=__name(()=>{try{fs3.unlinkSync(this.socketPath)}catch{}},"unlinkOnExit");constructor(server,socketPath){this.socketPath=socketPath,this.server=server}static async listen(socketPath,handler){try{fs3.unlinkSync(socketPath)}catch{}let server=net2.createServer(),instance=new _UdsIpcServer(server,socketPath);return server.on("connection",conn=>instance.handleConnection(conn,handler)),await new Promise((resolve4,reject)=>{let onError=__name(err=>{server.removeListener("listening",onListening),reject(err)},"onError"),onListening=__name(()=>{server.removeListener("error",onError),resolve4()},"onListening");server.once("error",onError),server.once("listening",onListening),server.listen(socketPath)}),fs3.chmodSync(socketPath,384),process.on("exit",instance.unlinkOnExit),instance}async close(){for(let conn of this.connections)conn.destroy();this.connections.clear(),await new Promise(resolve4=>this.server.close(()=>resolve4())),process.removeListener("exit",this.unlinkOnExit);try{fs3.unlinkSync(this.socketPath)}catch{}}handleConnection(conn,handler){let clientId=this.nextClientId++;this.connections.add(conn),conn.on("close",()=>this.connections.delete(conn));let buffer=Buffer.alloc(0),chain=Promise.resolve();conn.on("data",chunk3=>{for(buffer=buffer.length===0?Buffer.from(chunk3):Buffer.concat([buffer,chunk3]);buffer.length>=4;){let len=buffer.readUInt32LE(0);if(len>268435456){conn.destroy(new Error(`UdsIpcServer: oversized frame (${len} bytes exceeds MAX_FRAME_SIZE)`));return}if(len<8){conn.destroy(new Error(`UdsIpcServer: ${len}-byte frame is shorter than the request-id field \u2014 IPC protocol mismatch (envelope ids); update the peer binary/package`));return}if(buffer.length<4+len)break;let requestId=buffer.readBigUInt64LE(4),payload=Buffer.from(buffer.subarray(12,4+len));buffer=buffer.subarray(4+len);let prev=chain;chain=(async()=>{await prev;try{let resp=await handler(clientId,payload),header=Buffer.allocUnsafe(12);header.writeUInt32LE(resp.length+8,0),header.writeBigUInt64LE(requestId,4),conn.write(header),conn.write(resp)}catch(err){conn.destroy(err)}})(),chain.catch(()=>{})}}),conn.on("error",()=>{})}};import{Decoder as Decoder3,Encoder as Encoder8}from"msgpackr";function toAvmSimulateResponse(o){if(o.result===void 0)throw new Error("Expected result in AvmSimulateResponse deserialization");return{result:o.result}}__name(toAvmSimulateResponse,"toAvmSimulateResponse");function toAvmSimulateWithHintsResponse(o){if(o.result===void 0)throw new Error("Expected result in AvmSimulateWithHintsResponse deserialization");return{result:o.result}}__name(toAvmSimulateWithHintsResponse,"toAvmSimulateWithHintsResponse");function fromAvmSimulate(o){if(o.inputs===void 0)throw new Error("Expected inputs in AvmSimulate serialization");return{inputs:o.inputs}}__name(fromAvmSimulate,"fromAvmSimulate");function fromAvmSimulateWithHints(o){if(o.inputs===void 0)throw new Error("Expected inputs in AvmSimulateWithHints serialization");return{inputs:o.inputs}}__name(fromAvmSimulateWithHints,"fromAvmSimulateWithHints");async function msgpackCall(backend,input){let inputBuffer=new Encoder8({useRecords:!1,variableMapSize:!0}).pack(input),encodedResult=await backend.call(inputBuffer);return new Decoder3({useRecords:!1}).unpack(encodedResult)}__name(msgpackCall,"msgpackCall");var AsyncApi=class{static{__name(this,"AsyncApi")}backend;createError;constructor(backend,createError=message=>new Error(message)){this.backend=backend,this.createError=createError}simulate(command){let msgpackCommand=fromAvmSimulate(command);return msgpackCall(this.backend,[["AvmSimulate",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="AvmErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="AvmSimulateResponse")throw new Error(`Expected variant name 'AvmSimulateResponse' but got '${variantName}'`);return toAvmSimulateResponse(result)})}simulateWithHints(command){let msgpackCommand=fromAvmSimulateWithHints(command);return msgpackCall(this.backend,[["AvmSimulateWithHints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="AvmErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="AvmSimulateWithHintsResponse")throw new Error(`Expected variant name 'AvmSimulateWithHintsResponse' but got '${variantName}'`);return toAvmSimulateWithHintsResponse(result)})}destroy(){return this.backend.destroy()}};import{createRequire as createRequire3}from"node:module";import*as fs4 from"node:fs";import*as path2 from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";var PLATFORM_TO_PACKAGE={"x86_64-linux":"@aztec-foundation/bb-avm-sim-linux-x64","x86_64-darwin":"@aztec-foundation/bb-avm-sim-darwin-x64","aarch64-linux":"@aztec-foundation/bb-avm-sim-linux-arm64","aarch64-darwin":"@aztec-foundation/bb-avm-sim-darwin-arm64"};function currentDir(){return path2.dirname(fileURLToPath2(import.meta.url))}__name(currentDir,"currentDir");function detectPlatform2(){return process.arch==="x64"&&process.platform==="linux"?"x86_64-linux":process.arch==="x64"&&process.platform==="darwin"?"x86_64-darwin":process.arch==="arm64"&&process.platform==="linux"?"aarch64-linux":process.arch==="arm64"&&process.platform==="darwin"?"aarch64-darwin":null}__name(detectPlatform2,"detectPlatform");function findArchPackageDir(platform2){let packageName=PLATFORM_TO_PACKAGE[platform2];try{let require2=createRequire3(import.meta.url);return path2.dirname(require2.resolve(packageName+"/package.json"))}catch{let siblingPackageDir=path2.join(currentDir(),"..","packages",packageName.split("/").pop());return fs4.existsSync(path2.join(siblingPackageDir,"package.json"))?siblingPackageDir:null}}__name(findArchPackageDir,"findArchPackageDir");function findAvmBinary(customPath){if(customPath)return fs4.existsSync(customPath)?path2.resolve(customPath):null;let envPath=process.env.BB_AVM_SIM_PATH;if(envPath)return fs4.existsSync(envPath)?path2.resolve(envPath):null;let platform2=detectPlatform2();if(!platform2)return null;let archDir=findArchPackageDir(platform2);if(archDir){let candidate=path2.join(archDir,"bb-avm-sim");if(fs4.existsSync(candidate))return candidate}return null}__name(findAvmBinary,"findAvmBinary");import{Decoder as Decoder4,Encoder as Encoder9}from"msgpackr";var AvmService=class _AvmService extends AsyncApi{static{__name(this,"AvmService")}spawnedBackend;constructor(spawnedBackend,createError){super(spawnedBackend,createError),this.spawnedBackend=spawnedBackend}static async spawn(options={}){let binaryPath=findAvmBinary(options.binaryPath);if(!binaryPath)throw new IpcSpawnError("bb-avm-sim binary not found",!1);let backend=await SpawnedProcessBackend.spawn({binaryPath,binaryName:"bb-avm-sim",instancePrefix:"avm",ipcPathArgs:["msgpack","run","--input","{path}"],transport:options.transport??"uds",logger:options.logger,connectTimeoutMs:options.connectTimeoutMs,env:options.env,extraArgs:options.extraArgs,respawn:options.respawn});return new _AvmService(backend,options.createError)}getIpcPath(){return this.spawnedBackend.getIpcPath()}sendProcessSignal(signal){this.spawnedBackend.sendProcessSignal(signal)}};function assertU64(value,ctx){if(typeof value=="bigint"){if(value<0n||value>BigInt(Number.MAX_SAFE_INTEGER))throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return Number(value)}if(!Number.isSafeInteger(value)||value<0)throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return value}__name(assertU64,"assertU64");function assertBin32(value,ctx){if(value.length!==32)throw new Error(`${ctx}: expected 32 bytes, got ${value.length}`);return value}__name(assertBin32,"assertBin32");function toCdbGetContractInstance(o){if(o.address===void 0)throw new Error("Expected address in CdbGetContractInstance deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetContractInstance deserialization");return{address:assertBin32(o.address,"o.address"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetContractInstance,"toCdbGetContractInstance");function toCdbGetContractClass(o){if(o.classId===void 0)throw new Error("Expected classId in CdbGetContractClass deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetContractClass deserialization");return{classId:assertBin32(o.classId,"o.classId"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetContractClass,"toCdbGetContractClass");function toCdbGetBytecodeCommitment(o){if(o.classId===void 0)throw new Error("Expected classId in CdbGetBytecodeCommitment deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetBytecodeCommitment deserialization");return{classId:assertBin32(o.classId,"o.classId"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetBytecodeCommitment,"toCdbGetBytecodeCommitment");function toCdbGetDebugFunctionName(o){if(o.address===void 0)throw new Error("Expected address in CdbGetDebugFunctionName deserialization");if(o.selector===void 0)throw new Error("Expected selector in CdbGetDebugFunctionName deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetDebugFunctionName deserialization");return{address:assertBin32(o.address,"o.address"),selector:assertBin32(o.selector,"o.selector"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetDebugFunctionName,"toCdbGetDebugFunctionName");function toCdbAddContracts(o){if(o.contractDeploymentData===void 0)throw new Error("Expected contractDeploymentData in CdbAddContracts deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbAddContracts deserialization");return{contractDeploymentData:o.contractDeploymentData,forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbAddContracts,"toCdbAddContracts");function toCdbCreateCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbCreateCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbCreateCheckpoint,"toCdbCreateCheckpoint");function toCdbCommitCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbCommitCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbCommitCheckpoint,"toCdbCommitCheckpoint");function toCdbRevertCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbRevertCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbRevertCheckpoint,"toCdbRevertCheckpoint");function fromCdbGetContractInstanceResponse(o){return{instance:o.instance??null}}__name(fromCdbGetContractInstanceResponse,"fromCdbGetContractInstanceResponse");function fromCdbGetContractClassResponse(o){return{contractClass:o.contractClass??null}}__name(fromCdbGetContractClassResponse,"fromCdbGetContractClassResponse");function fromCdbGetBytecodeCommitmentResponse(o){return{commitment:o.commitment!=null?assertBin32(o.commitment,"o.commitment"):null}}__name(fromCdbGetBytecodeCommitmentResponse,"fromCdbGetBytecodeCommitmentResponse");function fromCdbGetDebugFunctionNameResponse(o){return{name:o.name??null}}__name(fromCdbGetDebugFunctionNameResponse,"fromCdbGetDebugFunctionNameResponse");function fromCdbAddContractsResponse(o){return{}}__name(fromCdbAddContractsResponse,"fromCdbAddContractsResponse");function fromCdbCreateCheckpointResponse(o){return{}}__name(fromCdbCreateCheckpointResponse,"fromCdbCreateCheckpointResponse");function fromCdbCommitCheckpointResponse(o){return{}}__name(fromCdbCommitCheckpointResponse,"fromCdbCommitCheckpointResponse");function fromCdbRevertCheckpointResponse(o){return{}}__name(fromCdbRevertCheckpointResponse,"fromCdbRevertCheckpointResponse");import{Decoder as Decoder5,Encoder as Encoder10}from"msgpackr";async function dispatch(handler,commandName,payload){try{switch(commandName){case"CdbGetContractInstance":{let cmd=toCdbGetContractInstance(payload),result=await handler.getContractInstance(cmd);return["CdbGetContractInstanceResponse",fromCdbGetContractInstanceResponse(result)]}case"CdbGetContractClass":{let cmd=toCdbGetContractClass(payload),result=await handler.getContractClass(cmd);return["CdbGetContractClassResponse",fromCdbGetContractClassResponse(result)]}case"CdbGetBytecodeCommitment":{let cmd=toCdbGetBytecodeCommitment(payload),result=await handler.getBytecodeCommitment(cmd);return["CdbGetBytecodeCommitmentResponse",fromCdbGetBytecodeCommitmentResponse(result)]}case"CdbGetDebugFunctionName":{let cmd=toCdbGetDebugFunctionName(payload),result=await handler.getDebugFunctionName(cmd);return["CdbGetDebugFunctionNameResponse",fromCdbGetDebugFunctionNameResponse(result)]}case"CdbAddContracts":{let cmd=toCdbAddContracts(payload),result=await handler.addContracts(cmd);return["CdbAddContractsResponse",fromCdbAddContractsResponse(result)]}case"CdbCreateCheckpoint":{let cmd=toCdbCreateCheckpoint(payload),result=await handler.createCheckpoint(cmd);return["CdbCreateCheckpointResponse",fromCdbCreateCheckpointResponse(result)]}case"CdbCommitCheckpoint":{let cmd=toCdbCommitCheckpoint(payload),result=await handler.commitCheckpoint(cmd);return["CdbCommitCheckpointResponse",fromCdbCommitCheckpointResponse(result)]}case"CdbRevertCheckpoint":{let cmd=toCdbRevertCheckpoint(payload),result=await handler.revertCheckpoint(cmd);return["CdbRevertCheckpointResponse",fromCdbRevertCheckpointResponse(result)]}default:return["CdbErrorResponse",{message:`Unknown command: ${commandName}`}]}}catch(err){return["CdbErrorResponse",{message:err?.message??String(err)}]}}__name(dispatch,"dispatch");var requestDecoder=new Decoder5({useRecords:!1}),responseEncoder=new Encoder10({useRecords:!1,variableMapSize:!0});async function handleRequest(handler,requestBytes){let commandName,payload;try{if([[commandName,payload]]=requestDecoder.unpack(requestBytes),typeof commandName!="string")throw new Error("expected [name, payload] request framing")}catch(err){return responseEncoder.pack(["CdbErrorResponse",{message:`Malformed request: ${err?.message??String(err)}`}])}let[respName,respPayload]=await dispatch(handler,commandName,payload??{});return responseEncoder.pack([respName,respPayload])}__name(handleRequest,"handleRequest");import{Buffer as Buffer78}from"buffer";import{Decoder as Decoder6,Encoder as Encoder11}from"msgpackr";import*as os from"node:os";import*as path3 from"node:path";import{threadId as threadId2}from"node:worker_threads";var _computedKey43,encoder2=new Encoder11({useRecords:!1}),decoder2=new Decoder6({useRecords:!1}),instanceCounter2=0;function toFieldBuffer(field){return field.toBuffer()}__name(toFieldBuffer,"toFieldBuffer");function serializeContractInstance(instance){return{salt:toFieldBuffer(instance.salt),deployer:toFieldBuffer(instance.deployer),currentContractClassId:toFieldBuffer(instance.currentContractClassId),originalContractClassId:toFieldBuffer(instance.originalContractClassId),initializationHash:toFieldBuffer(instance.initializationHash),immutablesHash:toFieldBuffer(instance.immutablesHash),publicKeys:{npkMHash:toFieldBuffer(instance.publicKeys.npkMHash),ivpkM:{x:toFieldBuffer(instance.publicKeys.ivpkM.x),y:toFieldBuffer(instance.publicKeys.ivpkM.y)},ovpkMHash:toFieldBuffer(instance.publicKeys.ovpkMHash),tpkMHash:toFieldBuffer(instance.publicKeys.tpkMHash),mspkMHash:toFieldBuffer(instance.publicKeys.mspkMHash),fbpkMHash:toFieldBuffer(instance.publicKeys.fbpkMHash)}}}__name(serializeContractInstance,"serializeContractInstance");function serializeContractClass(contractClass){return{id:toFieldBuffer(contractClass.id),artifactHash:toFieldBuffer(contractClass.artifactHash),privateFunctionsRoot:toFieldBuffer(contractClass.privateFunctionsRoot),packedBytecode:contractClass.packedBytecode}}__name(serializeContractClass,"serializeContractClass");_computedKey43=Symbol.asyncDispose;var CdbIpcServer=class{static{__name(this,"CdbIpcServer")}ipcPath;server;log;forks=new Map;constructor(){this.log=createLogger("cdb-ipc-server"),this.ipcPath=path3.join(os.tmpdir(),`cdb-ts-${process.pid}-${threadId2}-${instanceCounter2++}.sock`),this.server=UdsIpcServer.listen(this.ipcPath,(_clientId,request)=>handleRequest(this,request)),this.server.then(()=>this.log.debug(`CDB IPC server listening on ${this.ipcPath}`),err=>this.log.error(`CDB IPC server failed to listen on ${this.ipcPath}`,{err}))}registerFork(forkId,contractsDB,timestamp){this.forks.set(forkId,{db:contractsDB,timestamp})}unregisterFork(forkId){this.forks.delete(forkId)}async close(){await(await this.server.catch(()=>{}))?.close()}async[_computedKey43](){await this.close()}getFork(forkId){let fork=this.forks.get(forkId);if(!fork){let registered=Array.from(this.forks.keys()).sort((a,b)=>a-b);throw new Error(`CDB server: no contracts DB registered for forkId ${forkId} (registered=[${registered.join(",")}])`)}return fork}async getContractInstance(command){let{db,timestamp}=this.getFork(command.forkId),address=AztecAddress.fromBuffer(Buffer78.from(command.address)),instance=await db.getContractInstance(address,timestamp);return{instance:instance?encoder2.encode(serializeContractInstance(instance)):null}}async getContractClass(command){let{db}=this.getFork(command.forkId),classId=Fr.fromBuffer(Buffer78.from(command.classId)),contractClass=await db.getContractClass(classId);return{contractClass:contractClass?encoder2.encode(serializeContractClass(contractClass)):null}}async getBytecodeCommitment(command){let{db}=this.getFork(command.forkId),classId=Fr.fromBuffer(Buffer78.from(command.classId)),commitment=await db.getBytecodeCommitment(classId);return{commitment:commitment?toFieldBuffer(commitment):null}}async getDebugFunctionName(command){let{db}=this.getFork(command.forkId),address=AztecAddress.fromBuffer(Buffer78.from(command.address)),selectorField=Fr.fromBuffer(Buffer78.from(command.selector)),selector=FunctionSelector.fromFieldOrUndefined(selectorField);return{name:(selector?await db.getDebugFunctionName(address,selector):void 0)??null}}addContracts(command){let{db}=this.getFork(command.forkId),contractDeploymentData=ContractDeploymentData.fromPlainObject(decoder2.decode(command.contractDeploymentData));return db.addContractsFromLogs(contractDeploymentData),Promise.resolve({})}createCheckpoint(command){let{db}=this.getFork(command.forkId);return db.createCheckpoint(),Promise.resolve({})}commitCheckpoint(command){let{db}=this.getFork(command.forkId);return db.commitCheckpoint(),Promise.resolve({})}revertCheckpoint(command){let{db}=this.getFork(command.forkId);return db.revertCheckpoint(),Promise.resolve({})}};var _computedKey44;function isProcessFailure(err){return isRetryableError(err)}__name(isProcessFailure,"isProcessFailure");async function abortableSleep(ms,signal){if(!signal)return sleep(ms);let onAbort,aborted2=new Promise(resolve4=>{onAbort=resolve4,signal.addEventListener("abort",onAbort,{once:!0})});try{await Promise.race([sleep(ms),aborted2])}finally{signal.removeEventListener("abort",onAbort)}}__name(abortableSleep,"abortableSleep");var CANCEL_KILL_GRACE_MS=5e3;_computedKey44=Symbol.asyncDispose;var AvmSimulatorPool=class _AvmSimulatorPool{static{__name(this,"AvmSimulatorPool")}options;slots;available;waiters;createdCount;destroyed;log;maxSize;cdbServer;spawnRetryIntervalMs;spawnProcess;constructor(options){this.options=options,this.slots=[],this.available=[],this.waiters=[],this.createdCount=0,this.destroyed=!1,this.log=createLogger("simulator:avm-pool"),this.maxSize=options.maxSize??parseInt(getEnv().AVM_MAX_CONCURRENT_SIMULATIONS??"4",10),this.cdbServer=new CdbIpcServer,this.spawnRetryIntervalMs=options.spawnRetryIntervalMs??1e3,this.spawnProcess=options.spawnProcess??(spawnOptions=>AvmSimulatorProcess.spawn(spawnOptions))}static async spawn(options){let pool=new _AvmSimulatorPool(options);return await pool.prewarm(),pool}async[_computedKey44](){await this.destroy()}async simulate(inputBuffer,context2,signal){this.cdbServer.registerFork(context2.forkId,context2.contractsDB,context2.timestamp);try{return await this.runOnPool(simulator=>simulator.simulate(inputBuffer,signal),signal)}finally{this.cdbServer.unregisterFork(context2.forkId)}}async simulateWithHints(inputBuffer){return await this.runOnPool(simulator=>simulator.simulateWithHints(inputBuffer))}async destroy(){this.destroyed=!0;for(let waiter of this.waiters.splice(0))waiter.reject(new Error("AVM simulator pool destroyed"));await Promise.all(this.slots.map(slot=>slot.destroy())),this.slots=[],this.available=[],this.createdCount=0,await this.cdbServer.close(),this.log.info("AVM simulator pool destroyed")}async prewarm(count2=1){let target2=Math.min(count2,this.maxSize),created=[];for(;this.createdCount<target2;)created.push(await this.checkout());for(let simulator of created)this.return(simulator)}async runOnPool(fn,signal){for(let attempt=0;;attempt++){let simulator=await this.checkout(signal);try{return await fn(simulator)}catch(err){if(!isProcessFailure(err)||signal?.aborted)throw err;if(attempt>0){let message=err instanceof Error?err.message:String(err);throw new Error(`AVM simulator process died twice running this simulation; attributing the failure to the input: ${message}`,{cause:err})}this.log.warn("AVM process died during simulation; re-issuing once on the respawned process",{err})}finally{this.return(simulator)}}}async checkout(signal){if(this.destroyed)throw new Error("AVM simulator pool destroyed");let idx=this.available.pop();return idx!==void 0?this.slots[idx]:this.createdCount<this.maxSize?await this.createSlot(signal):new Promise((resolve4,reject)=>{let waiter={resolve:resolve4,reject};if(signal){let onAbort=__name(()=>{let at=this.waiters.indexOf(waiter);at>=0&&(this.waiters.splice(at,1),reject(new AbortError("AVM checkout aborted")))},"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),waiter.resolve=simulator=>{signal.removeEventListener("abort",onAbort),resolve4(simulator)},waiter.reject=err=>{signal.removeEventListener("abort",onAbort),reject(err)}}this.waiters.push(waiter)})}return(simulator){let waiter=this.waiters.shift();if(waiter)waiter.resolve(simulator);else{let idx=this.slots.indexOf(simulator);idx>=0&&this.available.push(idx)}}async createSlot(signal){this.createdCount++;try{let simulator=await this.spawnUntilUp(signal);return this.slots.push(simulator),this.log.debug(`Created AVM pool slot (${this.createdCount}/${this.maxSize})`),simulator}catch(err){throw this.createdCount--,err}}async spawnUntilUp(signal){for(let failures=0;;failures++){if(this.destroyed)throw new Error("AVM simulator pool destroyed");if(signal?.aborted)throw new AbortError("AVM process spawn aborted");try{return await this.spawnProcess({binaryPath:this.options.avmBinaryPath,wsdbIpcPath:this.options.wsdbIpcPath,cdbIpcPath:this.cdbServer.ipcPath,logger:this.options.logger})}catch(err){if(!isProcessFailure(err))throw err;this.log.warn(`Failed to spawn AVM process (attempt ${failures+1}); retrying in ${this.spawnRetryIntervalMs}ms`,{err}),await abortableSleep(this.spawnRetryIntervalMs,signal)}}}},AvmSimulatorProcess=class _AvmSimulatorProcess{static{__name(this,"AvmSimulatorProcess")}service;constructor(service){this.service=service}static async spawn(options){let service=await AvmService.spawn({binaryPath:options.binaryPath,transport:"uds",logger:options.logger,extraArgs:["--wsdb",options.wsdbIpcPath,"--cdb",options.cdbIpcPath],respawn:!0});return new _AvmSimulatorProcess(service)}async simulate(inputBuffer,signal){let killTimer,onAbort=__name(()=>{this.service.sendProcessSignal("SIGUSR1"),killTimer=setTimeout(()=>this.service.sendProcessSignal("SIGKILL"),CANCEL_KILL_GRACE_MS)},"onAbort");signal?.aborted&&onAbort(),signal?.addEventListener("abort",onAbort,{once:!0});try{return(await this.service.simulate({inputs:inputBuffer})).result}finally{signal?.removeEventListener("abort",onAbort),killTimer!==void 0&&clearTimeout(killTimer)}}async simulateWithHints(inputBuffer){return(await this.service.simulateWithHints({inputs:inputBuffer})).result}async destroy(){await this.service.destroy()}};import{strict as assert3}from"assert";var ContractsDbCheckpoint=class _ContractsDbCheckpoint{static{__name(this,"ContractsDbCheckpoint")}instances=new Map;classes=new Map;bytecodeCommitments=new Map;addInstance(address,instance){this.instances.set(address.toString(),instance)}addClass(classId,contractClass){this.classes.set(classId.toString(),contractClass)}addBytecodeCommitment(classId,commitment){this.bytecodeCommitments.set(classId.toString(),commitment)}getInstance(address){return this.instances.get(address.toString())}getClass(classId){return this.classes.get(classId.toString())}getBytecodeCommitment(classId){return this.bytecodeCommitments.get(classId.toString())}fork(){let copy=new _ContractsDbCheckpoint;return this.instances.forEach((value,key)=>copy.instances.set(key,value)),this.classes.forEach((value,key)=>copy.classes.set(key,value)),this.bytecodeCommitments.forEach((value,key)=>copy.bytecodeCommitments.set(key,value)),copy}};var SideEffectReadError=class extends Error{static{__name(this,"SideEffectReadError")}constructor(message){super(message),this.name="SideEffectReadError"}},IndexOutOfRangeError=class extends SideEffectReadError{static{__name(this,"IndexOutOfRangeError")}constructor(tree,index,limit){super(`Attempting to read index ${index} of ${tree} tree with maximum ${limit} leaves`),this.name="IndexOutOfRangeError"}},NoteHashIndexOutOfRangeError=class extends IndexOutOfRangeError{static{__name(this,"NoteHashIndexOutOfRangeError")}constructor(index){super("note hash",index,4398046511104),this.name="NoteHashIndexOutOfRangeError"}},L1ToL2MessageIndexOutOfRangeError=class extends IndexOutOfRangeError{static{__name(this,"L1ToL2MessageIndexOutOfRangeError")}constructor(index){super("l1 to l2 message",index,68719476736),this.name="L1ToL2MessageIndexOutOfRangeError"}};var PublicContractsDB=class{static{__name(this,"PublicContractsDB")}dataSource;contractStateStack;log;constructor(dataSource,bindings){this.dataSource=dataSource,this.contractStateStack=[new ContractsDbCheckpoint],this.log=createLogger("simulator:contracts-data-source",bindings)}addContractsFromLogs(contractDeploymentData){let currentState=this.getCurrentState();this.addContractClassesFromEvents(ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),currentState),this.addContractInstancesFromEvents(ContractInstancePublishedEvent.extractContractInstanceEvents(contractDeploymentData.getPrivateLogs()),currentState)}addNewContracts(tx){let contractDeploymentData=AllContractDeploymentData.fromTx(tx);this.addContractsFromLogs(contractDeploymentData.getNonRevertibleContractDeploymentData()),this.addContractsFromLogs(contractDeploymentData.getRevertibleContractDeploymentData())}addContracts(contractInstances){let currentState=this.getCurrentState();for(let instance of contractInstances??[])currentState.addInstance(instance.address,instance)}createCheckpoint(){let newState=this.getCurrentState().fork();this.contractStateStack.push(newState)}commitCheckpoint(){if(this.contractStateStack.length<=1)throw new Error("No checkpoint to commit");let topState=this.contractStateStack.pop();this.contractStateStack[this.contractStateStack.length-1]=topState}commitCheckpointOkIfNone(){if(this.contractStateStack.length<=1)return;let topState=this.contractStateStack.pop();this.contractStateStack[this.contractStateStack.length-1]=topState}revertCheckpoint(){if(this.contractStateStack.length<=1)throw new Error("No checkpoint to revert");this.contractStateStack.pop()}getCurrentState(){return this.contractStateStack[this.contractStateStack.length-1]}async getContractInstance(address,timestamp){return this.getCurrentState().getInstance(address)??await this.dataSource.getContract(address,timestamp)}async getContractClass(contractClassId){return this.getCurrentState().getClass(contractClassId)??await this.dataSource.getContractClass(contractClassId)}async getBytecodeCommitment(contractClassId){let currentState=this.getCurrentState(),commitment=currentState.getBytecodeCommitment(contractClassId)??await this.dataSource.getBytecodeCommitment(contractClassId);if(commitment!==void 0)return commitment;let contractClass=await this.getContractClass(contractClassId);if(contractClass===void 0)return;let value=await computePublicBytecodeCommitment(contractClass.packedBytecode);return currentState.addBytecodeCommitment(contractClassId,value),value}async getDebugFunctionName(address,selector){return await this.dataSource.getDebugFunctionName(address,selector)}addContractClassesFromEvents(contractClassEvents,state){for(let event of contractClassEvents){this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);let contractClass=event.toContractClassPublic();state.addClass(event.contractClassId,contractClass)}}addContractInstancesFromEvents(contractInstanceEvents,state){contractInstanceEvents.forEach(e2=>{this.log.debug(`Adding instance ${e2.address.toString()} with class ${e2.contractClassId.toString()} to contract state`),state.addInstance(e2.address,e2.toContractInstance())})}},PublicTreesDB=class{static{__name(this,"PublicTreesDB")}db;logger;constructor(db,bindings){this.db=db,this.logger=createLogger("simulator:public-trees-db",bindings)}async storageRead(contract,slot){let timer=new Timer,leafSlot=(await computePublicDataTreeLeafSlot(contract,slot)).toBigInt(),lowLeafResult=await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot);if(!lowLeafResult)throw new Error("Low leaf not found");await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);let preimage=await this.db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index),result=lowLeafResult.alreadyPresent?preimage.leaf.value:Fr.ZERO;return this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`,{eventName:"public-db-access",duration:timer.ms(),operation:"storage-read"}),result}async storageWrite(contract,slot,newValue){let timer=new Timer,leafSlot=await computePublicDataTreeLeafSlot(contract,slot),publicDataWrite=new PublicDataWrite(leafSlot,newValue);await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,[publicDataWrite.toBuffer()]),this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"storage-write"})}async getL1ToL2LeafValue(leafIndex){let timer=new Timer;if(leafIndex>68719476736)throw new L1ToL2MessageIndexOutOfRangeError(Number(leafIndex));let leafValue=await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,leafIndex);return assert3(leafValue!==void 0,"Unexpected null response from l1 to l2 message tree"),await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,leafIndex),this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"get-l1-to-l2-message-leaf-value"}),leafValue}async getNoteHash(leafIndex){let timer=new Timer;if(leafIndex>4398046511104)throw new NoteHashIndexOutOfRangeError(Number(leafIndex));let leafValue=await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE,leafIndex);return assert3(leafValue!==void 0,"Unexpected null response from note hash tree"),await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE,leafIndex),this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"get-note-hash"}),leafValue}async writeNoteHash(noteHash){let timer=new Timer;await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,[noteHash]),this.logger.debug(`Wrote note hash (noteHash=${noteHash})`,{eventName:"public-db-access",duration:timer.ms(),operation:"write-note-hash"})}async checkNullifierExists(nullifier){let timer=new Timer,lowLeafResult=await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE,nullifier.toBigInt());if(!lowLeafResult)throw new Error("Low leaf not found");await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE,lowLeafResult.index),await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,lowLeafResult.index);let exists=lowLeafResult.alreadyPresent;return this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`,{eventName:"public-db-access",duration:timer.ms(),operation:"check-nullifier-exists"}),exists}async writeNullifier(siloedNullifier){let timer=new Timer;await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE,[siloedNullifier.toBuffer()]),this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`,{eventName:"public-db-access",duration:timer.ms(),operation:"write-nullifier"})}async padTree(treeId,leavesToInsert){let timer=new Timer;switch(treeId){case MerkleTreeId.NULLIFIER_TREE:await this.db.batchInsert(treeId,Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),6);break;case MerkleTreeId.PUBLIC_DATA_TREE:await this.db.batchInsert(treeId,Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),6);break;case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:case MerkleTreeId.NOTE_HASH_TREE:await this.db.appendLeaves(treeId,Array(leavesToInsert).fill(Fr.ZERO));break;default:throw new Error(`Padding not supported for tree ${treeId}`)}this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`,{eventName:"public-db-access",duration:timer.ms(),operation:"pad-tree"})}async createCheckpoint(){await this.db.createCheckpoint()}async commitCheckpoint(){await this.db.commitCheckpoint()}async revertCheckpoint(){await this.db.revertCheckpoint()}async getTreeSnapshots(){let stateReference=await this.db.getStateReference();return new TreeSnapshots(stateReference.l1ToL2MessageTree,stateReference.partial.noteHashTree,stateReference.partial.nullifierTree,stateReference.partial.publicDataTree)}};var _computedKey45;_computedKey45=Symbol.asyncDispose;var GuardedMerkleTreeOperations=class{static{__name(this,"GuardedMerkleTreeOperations")}target;isStopped;serialQueue;constructor(target2){this.target=target2,this.isStopped=!1,this.serialQueue=new SerialQueue,this.serialQueue.start()}guard(){if(this.isStopped)throw new Error("Merkle tree access has been stopped")}guardAndPush(fn){return this.guard(),this.serialQueue.put(()=>(this.guard(),fn()))}getUnderlyingFork(){return this.target}async stop(){return await this.serialQueue.put(()=>(this.isStopped=!0,Promise.resolve())),this.serialQueue.end()}appendLeaves(treeId,leaves){return this.guardAndPush(()=>this.target.appendLeaves(treeId,leaves))}updateArchive(header){return this.guardAndPush(()=>this.target.updateArchive(header))}batchInsert(treeId,leaves,subtreeHeight){return this.guardAndPush(()=>this.target.batchInsert(treeId,leaves,subtreeHeight))}sequentialInsert(treeId,leaves){return this.guardAndPush(()=>this.target.sequentialInsert(treeId,leaves))}close(){return this.guardAndPush(()=>this.target.close())}async[_computedKey45](){await this.close()}getTreeInfo(treeId){return this.guardAndPush(()=>this.target.getTreeInfo(treeId))}getStateReference(){return this.guardAndPush(()=>this.target.getStateReference())}getInitialHeader(){return this.target.getInitialHeader()}getRevision(){return this.target.getRevision()}getIpcPath(){return this.target.getIpcPath()}getSiblingPath(treeId,index){return this.guardAndPush(()=>this.target.getSiblingPath(treeId,index))}getPreviousValueIndex(treeId,value){return this.guardAndPush(()=>this.target.getPreviousValueIndex(treeId,value))}getLeafPreimage(treeId,index){return this.guardAndPush(()=>this.target.getLeafPreimage(treeId,index))}findLeafIndices(treeId,values){return this.guardAndPush(()=>this.target.findLeafIndices(treeId,values))}findLeafIndicesAfter(treeId,values,startIndex){return this.guardAndPush(()=>this.target.findLeafIndicesAfter(treeId,values,startIndex))}getLeafValue(treeId,index){return this.guardAndPush(()=>this.target.getLeafValue(treeId,index))}getBlockNumbersForLeafIndices(treeId,leafIndices){return this.guardAndPush(()=>this.target.getBlockNumbersForLeafIndices(treeId,leafIndices))}createCheckpoint(){return this.guardAndPush(()=>this.target.createCheckpoint())}commitCheckpoint(){return this.guardAndPush(()=>this.target.commitCheckpoint())}revertCheckpoint(){return this.guardAndPush(()=>this.target.revertCheckpoint())}commitAllCheckpointsTo(depth){return this.guardAndPush(()=>this.target.commitAllCheckpointsTo(depth))}revertAllCheckpointsTo(depth){return this.guardAndPush(()=>this.target.revertAllCheckpointsTo(depth))}findSiblingPaths(treeId,values){return this.guardAndPush(()=>this.target.findSiblingPaths(treeId,values))}};var FeeJuice_default={file_map:{},functions:[{abi:{abi_version:1,error_types:{"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"},"8637882143979902881":{error_kind:"string",string:"Function _increase_public_balance can only be called by the same contract"}},parameters:[{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"}],return_type:null},bytecode:"JwACBAEoAAABBIBGJwAABEYlAAAASicCBAQCJwIFBAAfCgAEAAUARBwARUUGLQhEAi0IRQMlAAAAcCcCAgRGJwIDBAA7DgADAAIsAABDADBkTnLhMaApuFBFtoGBWF0oM+hIeblwkUPh9ZPwAAAAJh4CAAQBCiIEQwUWCgUGHAoGBwAEKgcEBicCBAEACioFBAckAgAHAAAAoycCCAQAPAYIAR4CAAUACioGBQckAgAHAAAAuiUAAAG+JwIFAAEpAgAGAO9SU00rAgAHAAAAAAAAAAADAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4GCgAiCgIKLQ4FCgAiCgIKLQ4CCgAiCgIKLQ4HCi0IAQInAgUEBQAIAQUBJwMCBAEAIggCBQAiAgIGPw8ABQAGJwIFBAEAKgIFBi0LBgYnAgUAAAoqBgUHCioHBAUkAgAFAAABZSUAAAHQHgIABAAvKgAGAAQABRwKBQcGHAoHBAAcCgQFBgAqBQMEDioFBAckAgAHAAABmCUAAAHiLQsIAwAiAwIDLQ4DCC0LAgMAIgMCAy0OAwIcCgQCADAKAAIABiYqAQABBXff7AtjnJehPAQCASYqAQABBbq7IdeCMxhkPAQCASYqAQABBdAH6/TLxmeQPAQCASY=",custom_attributes:["abi_public","abi_only_self"],debug_symbols:"",is_unconstrained:!0,name:"_increase_public_balance"},{abi:{abi_version:1,error_types:{"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"15860392472534760515":{error_kind:"string",string:"Function balance_of_public can only be called statically"}},parameters:[{name:"owner",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"}],return_type:{abi_type:{kind:"integer",sign:"unsigned",width:128},visibility:"public"}},bytecode:"JwACBAEoAAABBIBFJwAABEUnAgMEAScCBAQAHwoAAwAEAEMtCEMCJQAAAEAtAgJEJwIDBEQnAgQEATsOAAQAAx4CAAMJJwIEAQEkAgADAAAAVyUAAAEoKQIAAwDvUlNNJwIEAAErAgAFAAAAAAAAAAADAAAAAAAAAAAtCAEGJwIHBAUACAEHAScDBgQBACIGAgctCgcILQ4DCAAiCAIILQ4ECAAiCAIILQ4CCAAiCAIILQ4FCC0IAQInAgMEBQAIAQMBJwMCBAEAIgYCAwAiAgIEPw8AAwAEJwIDBAEAKgIDBC0LBAQnAgIAAAoqBAIDJwICAQAKKgMCBSQCAAUAAAEHJQAAAToeAgACAC8qAAQAAgADHAoDBAYcCgQCABwKAgMGLQoDAiYqAQABBdwbbuv7trxDPAQCASYqAQABBbq7IdeCMxhkPAQCASY=",custom_attributes:["abi_public","abi_view"],debug_symbols:"",is_unconstrained:!0,name:"balance_of_public"},{abi:{abi_version:1,error_types:{"1080336462466469436":{error_kind:"string",string:"Function check_balance can only be called statically"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"9543832133280402246":{error_kind:"string",string:"Balance too low"}},parameters:[{name:"fee_limit",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"}],return_type:null},bytecode:"JwACBAEoAAABBIBFJwAABEUlAAAARicCAwQBJwIEBAAfCgADAAQARBwAREQGLQhEAiUAAABsJwICBEUnAgMEADsOAAMAAiwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAAmHgIAAwknAgQBASQCAAMAAACDJQAAAZUeAgADAQoiA0MEFgoEBRwKBQYABCoGAwUnAgMBAAoqBAMGJAIABgAAALYnAgcEADwGBwEpAgAEAO9SU00nAgYAASsCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgQKACIKAgotDgYKACIKAgotDgUKACIKAgotDgcKLQgBBCcCBQQFAAgBBQEnAwQEAQAiCAIFACIEAgY/DwAFAAYnAgUEAQAqBAUGLQsGBicCBAAACioGBAUKKgUDBCQCAAQAAAFhJQAAAaceAgAEAC8qAAYABAAFHAoFBgYcCgYEABwKBAUGDCoFAgQKKgQDAiQCAAIAAAGUJQAAAbkmKgEAAQUO/iBJ6zdOPDwEAgEmKgEAAQW6uyHXgjMYZDwEAgEmKgEAAQWEcoDChCMLRjwEAgEm",custom_attributes:["abi_public","abi_view"],debug_symbols:"",is_unconstrained:!0,name:"check_balance"},{abi:{abi_version:1,error_types:{"11019205087382408538":{error_kind:"string",string:"Field failed to decompose into specified 4 limbs"},"12370419938245003393":{error_kind:"string",string:"Field failed to decompose into specified 36 limbs"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"5421095327929394772":{error_kind:"string",string:"attempt to bit-shift with overflow"},"6609888949476313245":{error_kind:"string",string:"Message not in state"}},parameters:[{name:"inputs",type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::context::inputs::PrivateContextInputs"},visibility:"private"},{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"},{name:"secret",type:{kind:"field"},visibility:"private"},{name:"message_leaf_index",type:{kind:"field"},visibility:"private"}],return_type:{abi_type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"min_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"is_fee_payer",type:{kind:"boolean"}},{name:"expiration_timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_non_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"note_hash_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifier_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"key_validation_requests_and_separators",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"request",type:{fields:[{name:"pk_m_hash",type:{kind:"field"}},{name:"sk_app",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{name:"key_type_domain_separator",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:32,type:{fields:[{name:"inner",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_teardown_call_request",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"note_hashes",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifiers",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"note_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::nullifier::Nullifier"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"l2_to_l1_msgs",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"inner",type:{fields:[{name:"recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"content",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_logs",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"log",type:{fields:[{name:"fields",type:{kind:"array",length:16,type:{kind:"field"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log::Log"}},{name:"note_hash_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_log::PrivateLogData"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"contract_class_logs_hashes",type:{fields:[{name:"array",type:{kind:"array",length:1,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log_hash::LogHash"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},visibility:"databus"}},bytecode:"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EI7tUI7tMI7tcI7tCI7tSI7tKI7taI7tGI7tWI7tOI7teI7tBI7tRI7t2xzbdzi2kzi2kzm2Uzi2Uzm273Jsp3Fsp3NsZ3BsZ3JsZ3Fs3+PYvs+x/YBjO5tjO4djO5djO49j+yHHdj7HdgHH9iOO7UKO7SKO7WKO7RKO7VKO7TKO7XKO7ccc2xUc25Uc21Uc2084tp9ybFdzbEm/ovI5x3YNx3Ytx3Ydx3Y9x9bHsRXqX5TSsd3AWe1Gju0mju1mju0Wju1Wju02ju12ju0Oju1Oju0uju1uju0eju1eju0+ju1+ju0Bju1Bju0hju1hju0Rju1Rju0xju1xju0Jju1Jju0XHNsvObZfcWy/5tie4tie5th+w7H9lmN7hmP7Hcf2+2htsZ4QP2QiPSFIDzN+5OzpJ2RPLtK3DH/m2P7Csf2VY/sbx/Z3ju0fHNs/ObZ/cWz/5thyegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsJ2fY8vpAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsH0N5VNYm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9g+yaO7c0c21s4trdybG/j2Jbm2Jbh2HJ66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euXZtjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXrp2OseW00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b8y13m9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rUzObacXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla8/l2HJ66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzWk/Y3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXrq24NhyeunanF66NqeXrs3ppWtv4dhyeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrv09x/YHju2PHNufOLac/rc2p/+tzel/a3P639qc/rc2p/+tzel/a3P639qc/rc2p/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/68rPseX0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/ruoZjy+l/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bVxmOLaf/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63rtocW07/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6ou5/m5mp/puN10NTpyNTV2/aqk16pyqtW7QfErfPVfnGm26+5dbbSpe5/Y4777r7nnvvu/+BBx96+JGyj5YrX6FipcpVqlZ7rHqNmrUer12n7hNP1nvq6WfqN3j2uYaN0p5v3KTpC82at3jxpZatWrdp2y795fYdXnm1Y6fXXn/jzbc6+7r4uvq6+br7evh6+nr5evv6+Pr6+vn6+wb4BvoG+Qb7MnxeX6ZviG+ob5hvuG+Eb6RvlG+0b4xvrG+cb7xvgm+i723fO75Jvsm+Kb6pvnd903zTfTN8M32zfO/53vd94Jvtm+Ob65vn+9A337fA95FvoW+Rb7FviW+pb5lvue9j3wrfSt8q3ye+T32rfZ/5Pvet8a31rfOt9/l8wrfBt9G3ybfZt8W31bfNt923w7fTt8u327fHt9e3z7ffd8B30HfId9h3xHfUd8x33HfCd9L3he9L31e+r32nfKd93/i+9Z3xfef73veD70ffT76ffb/4fvX95vvd94fvT99fvr99/wgrTliWsGxhuYQVL6xcwnILK0FYuYWVKKwkYSULK0VYeYTlEVaqsPIKK5+w8gurgLAKCquQsC4R1qXCKiysIsK6TFhFhXW5sK4Q1pXCKias4sK6SlhXC+saYV0rrOuEdb2wSgirpLBKCesGYd0orJuEdbOwbhHWrcK6TVilhVVGWLcL6w5h3Smsu4R1t7DuEda9wrpPWPcL6wFhPSish4T1sLAeEVZZYT0qrHLCKi+sCsKqKKxKwqosrCrCqiqsasJ6TFjVhVVDWDWFVUtYjwurtrDqCKuusJ4Q1pPCqiesp4T1tLCeEVZ9YTUQ1rPCek5YDYXVSFhpwnpeWI2F1URYTYX1grCaCau5sFoI60VhvSSslsJqJazWwmojrLbCaiesdGG9LKz2wuogrFeE9aqwOgqrk7BeE9brwnpDWG8K6y1hdRZWF2F1FVY3YXUXVg9h9RRWL2H1FlYfYfUVVj9h9RfWAGENFNYgYQ0WVoawvMLKFNYQYQ0V1jBhDRfWCGGNFNYoYY0W1hhhjRXWOGGNF9YEYU0U1tvCekdYk4Q1WVhThDVVWO8Ka5qwpgtrhrBmCmuWsN4T1vvC+kBYs4U1R1hzhTVPWB8Ka76wFgjrI2EtFNYiYS0W1hJhLRXWMmEtF9bHwlohrJXCWiWsT4T1qbBWC+szYX0urDXCWiusdcJaLyyfsISwNghro7A2CWuzsLYIa6uwtglru7B2CGunsHYJa7ew9ghrr7D2CWu/sA4I66CwDgnrsLCOCOuosI4J67iwTgjrpLC+ENaXwvpKWF8L65SwTgvrG2F9K6wzwvpOWN8L6wdh/Sisn4T1s7B+EdavwvpNWL8L6w9h/Smsv4T1t7D+EXacsC1h28J2CTte2LmE7RZ2grBzCztR2EnCThZ2irDzCNsj7FRh5xV2PmHnF3YBYRcUdiFhXyLsS4VdWNhFhH2ZsIsK+3JhXyHsK4VdTNjFhX2VsK8W9jXCvlbY1wn7emGXEHZJYZcS9g3CvlHYNwn7ZmHfIuxbhX2bsEsLu4ywbxf2HcK+U9h3CftuYd8j7HuFfZ+w7xf2A8J+UNgPCfthYT8i7LLCflTY5YRdXtgVhF1R2JWEXVnYVYRdVdjVhP2YsKsLu4awawq7lrAfF3ZtYdcRdl1hPyHsJ4VdT9hPCftpYT8j7PrCbiDsZ4X9nLAbCruRsNOE/bywGwu7ibCbCvsFYTcTdnNhtxD2i8J+Sdgthd1K2K2F3UbYbYXdTtjpwn5Z2O2F3UHYrwj7VWF3FHYnYb8m7NeF/Yaw3xT2W8LuLOwuwu4q7G7C7i7sHsLuKexewu4t7D7C7ivsfsLuL+wBwh4o7EHCHizsDGF7hZ0p7CHCHirsYcIeLuwRwh4p7FHCHi3sMcIeK+xxwh4v7AnCnijst4X9jrAnCXuysKcIe6qw3xX2NGFPF/YMYc8U9ixhvyfs94X9gbBnC3uOsOcKe56wPxT2fGEvEPZHwl4o7EXCXizsJcJeKuxlwl4u7I+FvULYK4W9StifCPtTYa8W9mfC/lzYa4S9VtjrhL1e2D5hC2FvEPZGYW8S9mZhbxH2VmFvE/Z2Ye8Q9k5h7xL2bmHvEfZeYe8T9n5hHxD2QWEfEvZhYR8R9lFhHxP2cWGfEPZJYX8h7C+F/ZWwvxb2KWGfFvY3wv5W2GeE/Z2wvxf2D8L+Udg/CftnYf8i7F+F/Zuwfxf2H8L+U9h/CftvYf8jXHHC5f8St3C5hCteuHIJl1u4EoQrt3AlCleScCULV4pw5REuj3ClClde4conXPmFq4BwFRSuQsJ1iXBdKlyFhauIcF0mXEWF63LhukK4rhSuYsJVXLiuEq6rhesa4bpWuK4TruuFq4RwlRSuUsJ1g3DdKD/8lx/Uyw/V5Qfg8sNq+cGy/BBYfmArP1yVH4TKDy3lB4zyw0D5wZ38kE1+ICY/vJIfNMkPheQHOPLDFvnBiPwQQ37gID8ckA/y5UN3+YBcPsyWD57lQ2L5QFc+fJUPSuVDTfkAUj4slA/25EM4+cBMPtySD6LkQyP5gEc+jJEPTuRDDvlAQj48kG/05Zty+QZavtmVb0zlm0j5hk++OZNvpOSbHvkGRb6ZkC/85Yt0+YJavviVL1Tli0r5AlC+WJMvrOQLnBm1m7bvkN66fFr7tH1xN8ZZtis+lzshd2JSckoeT2refPkLFCx0yaWFi1xW9PIrrixW/Kqrr7n2uutLlCx1Q0bGvrhbMrtOLtu4RXrhzI2bEr7+cf1nzTIyzv/ospw/eiBz495Pbqy9o4K7WOBHD+b80UM5fyTLXqgfukL9MD7ED12nMjeOPFVwSsqYPM8Ef/h9qB/+GuqHf4f4YXx8qB8mhfph3lA/vCTUD+8Psfj4B0L9METghNsK9cNQoXOHCl3C56F+uCbUD9eG+GHiwFA/HBTqh4ND/DC5Tqgf1g31wydC/DBPkVA/vCzUD4uG+GHqgyGOI7VcqB9WCfXDmqF++ESoH9YP9cO0UD9sFuqHMp4zZw1u8maXNV0v/DDv05kb6y9J+n14rTXjgj9smPMCirzNHT8cnbm7ZNrZd00NG7dp1TatfYvnWzZt2CY9rbH8/15pmv5yizatG76anta2bdP0CV2nlGvT+uX2Q7pOLd8ivWnj9nbXd6u0bt+0WdP0SU/cXkb9Vir7v7ei+vddymf/93HRzV++6+RyaS1bepMv+Eyr3bSl3PIrTaPcSVxOB1e0DrP8a2kiK265Nm07XdhSeeeaHObnVp7nolde3sDKJ9dp36atNzPMSrOdUbno3N1Tz6Go68yKbdKbtmjW2r/vYbtLp73Wvmnjhm3T27Rv07hNy4atWrzcuOG5vC13IW1rns3aJ88lbUaGt+t7596Ul23SJL3pyy9fWJG369Q6LVq1bdk0y9LOT5y54PkOLVo2adjq5WYNn2/ZpvFLDZs3bSmTf59V67+c/mMvMv3Hnk+iF3KmQK7onCrmdHCbSf+KzjU5zOXKHRuvGBwEZn3niXuyiSoFB+FFlYOD8KIqwUF4UdXgILyoWnAQXvRYcBBeVD04CC+qERyEF9UMDsKLagUH4UWPBwfhRbWDg/CiOsFBeFHd4CC86IngILzoyeAgvKhecBBe9FRwEF70dHAQXvRMcBBeVD84CC9qEByEFz0bHIQXPRcchBc1DA7CixoFB+FFacFBeNHzwUF4UePgILyoSXAQXtQ0OAgveiE4CC9qFhyEFzUPDsKLWgQH4UUvBgfhRS8FB+FFLYOD8KJWwUF4UevgILyoTXAQXtQ2OAgvahcchBelBwfhRS8HB+FF7YOD8KIOwUF40SvBQXjRq8FBeFHH4CC8qFNwEF70WnAQXvR6cBBe9EZwEF70ZnAQXvRWcBBe1Dk4CC/ydXGMIsi6OkYRZN0cowiy7o5RBFkPxyiCrKdjFEHWyzGKIOvtGEWQ9XGMIsj6OkYRZP0cI+fry+y6/o5RFt3Fvl26+Fe65btOqt7mlUzn69rza7VyeidE512h68xHW7RO83/s2L5m22EXjCfJdzxnt39hJscM71Vp3eTsTy/yTYCVbfLgFBemz7ln+3w0zv+fLufBZPkv8c4lZ/kv2d8XyHc0L2aPse2cOtt/czlyKtt/inek0TnnDuE26cq5STu4yRwHGx9dbAdc9Fu0vGED7Qob6Piwgc51IdAX+/RgwEXHJm/O5w8up9nFPX/I8fyifHT/Psf8FaL7949ceP4R6mYnZL/ZruBhZTm73EFBlp8nBo99ctUOrdp607tOfqxNWpMLAnfQYYoMc3rTnP/UHXptubOvLXfwPoT8B4nZ/0Gi4h8kTXtMPsap2zytdchpErpO9W+pygsXlpzUOhDNi39eka1UJESo4rmj884XfRXPHb6KJxiq4rlzFriECAUuMdpLHGbaxJzTJjr3ne0Ykpz/7VxGy1digcwNJXOHmzkp58xJ4RLygiI5a0qGmjAxmJbBf9Y5bNjDGGYpcTkNc8sXb+e33yfnCw4nMM+JRkYR//hgKQsXuvcDi67QrkNay5ez//uIsUjyDThPF2HdEnYGdVhCew8O7Hho+ESv0+H5CMEOFyh0z64Q60r0Dbmw59KBFQ7PfnC5g4EPJ8kVIv+jOdtcQcxpnW0uVfzHOs42R9FIMlSrknMeYaJzljD/LCXi1hRXOMX3tuMIw0a8fItXstomByOeIx7JF/1ZTorj3VTpKD6RuGCQx/l2TOdzME90e8id0yE1OocQMMqr91o51P1357yUDh6ev3Ezw52/W69suX3vn7cW1k3h32ZV79Ayu63qNufPmZAJyn+Ub2qo+5E/conL55t34X7cEdY5THwSslSoEN4LAqFfGdY6FMgcE4QLEFrW84VYV37fYjXK8ofZc74sNSKE97IL3neHP95I70rDJWnOf5TfuazzbxAcVyLn64lPsl8Tt7OkXBCdf2wTap6sL8ijWGsCUOkLRDzVBOcqcka+gG+N+lQLhDlVd+RMLuBbH4jOjrDWETM57OvZgmgmFwixroK+jeo9h6tuBSJnstu3RZ3Jbp1MDnHn3c5lZc/kfFnS/Nwx7MqeyflCZPKunMwpFB1zioc9tjBB9TinCnVg+y4E9b7wmVSnecuwN90T6Xrmg65niAMo4LTTStUCkYtuQd8RoOhGrBupF1038oe82yf060Z+Vd34MpCLP+rVjfykunFan4AFVAQ8818hYAGIgD8jBPz5X1g3fteqG/ki1Y18BrCe5dZfbN0IhfWCwopT52q+CI/Byl102QhVzwoIK169rgT1q8hQdSNBWAkX3lrkj+ITnHjgOAqglSMh9LaTgeNQv2EIVTryCcujrh35dGpHiIKTz7mu7LUjv3MYOImC2YtH/pzFw6/KUT0KGKoe+dTVo0DouBZWl4+EnOXDHal8uJ1x0HzZkQC8Qs5/Mdc0v7Cu1H+J7HgAkDfUS2RhXeXI13Af5eXO/mFTfLSfPATmeDAnvS58sIQXCbfObUlwRiXHk/v8QN0JsRJHkJIiPN1JiPB0xx18uhP+0+XcgQ+Ysn8ec+Ezm+CB3BWh+2Lg+/hdJ9dNT/N/tnnh3wciamiiokubbnp431f76BPlii86qvgHjR6jT3Qsd60K9vwBxegTVbt/1GvdVp2oq54ozEeqrjAf6jofr2X/N3aODzUlwmtk/6D+wkrQTxIv1Avsk1lX8B9kmTkpzMfMycGlBeBVNVtUcgc9sn3QnByUhP4YOPvqkhSfGydn/wfJin+QEvKD5iTH59TZziRFWBXDpVfUX6sJRKxmmFN2KX9T4dR/9zcVut5zcb+pYN1zgUv2RX8R5kjsdxViv6sQ+12F2O8qxH5XIfa7CrHfVYj9rkLsdxViv6tw7j/yf1chhCzUryqEkA1wjCLIBjpGEWSDHKMIssGOUQRZhmMUQeZ1jCLIMh2jCDLnKIJsqGMUQTbMMYogG+4YRZCNcIwiyEY6RhFkoxyjCLLRjlEE2RjHKIJsrGMUQTbOMYogG+8YRZBNcIwiyCY6RhFkbztGEWTvOEYRZJMcowiyyY5RBNkUxyiCbKpjFEH2rmMUQTbNMYogm+4YRZDNcIwiyGY6RhFksxyjCLL3HKMIsvcdowiyDxyjCLLZjlEE2RzHKIJsrmMUQTbPMYog+9AxiiCb7xhFkC1wjCLIPnKMIsgWOkYRZIscowiyxY5RBNkSxyiCbKljFEG2zDGKIFvuGEWQfewYRZCtcIwiyFY6RhFkqxyjCLJPHKMIsk8dowiy1Y5RBNlnjlEE2eeOUQTZGscogmytYxRBts4xiiBb7xhFkPkcowgy4RhFkG1wjCLINjpGEWSbHKMIss2OUQTZFscogmyrYxRBts0xiiDb7hhFkO1wjCLIdjpGEWS7HKMIst2OUQTZHscogmyvYxRBts8xiiDb7xhFkB1wjCLIDjpGEWSHHKMIssOOUQTZEccoguyoYxRBdswxiiA77hhFkJ1wjCLITjpGEWRfOEYRZF86RhFkXzlGEWRfO0YRZKccowiy045RBNk3jlEE2beOUQTZGccoguw7xyiC7HvHKILsB8coguxHxyiC7CfHKILsZ8coguwXxyiC7FfHKILsN8cogux3xyiC7A/HKILsT8coguwvxyiC7G/HKILsH8covMz/PULHMJLQcg4jCW3nMJLQ5RxGEsY7h5GEuZzDSEK3cxhJmOAcRhLmdg4jCROdw0jCJOcwkjDZOYwkTHEOIwnzOIeRhB7nMJIw1TmMJMzrHEYS5nMOIwnzO4eRhAWcw0jCgs5hJGEh5zCS8BLnMJLwUucwkrCwcxhJWMQ5jCS8zDmMJCzqHEYSXu4cRhJe4RxGEl7pHEYSFnMOIwmLO4eRhFc5h5GEVzuHkYTXOIeRhNc6h5GE1zmHkYTXO4cBYYjuRcIq4RxmUf73+xcdIvYvOhzrX3T+e05urQ5G/sQK18LIn0oB93z/lS5GVsl/aRcjf7gvso9RqL3F+hg5/uc/3cfo7C94/B/uZCRfv8Z6GSkm/7/Xy8j/Uu3f38zI/xLVcDsj/8u6QAiuBRoaRegx8V/oaCQkHgKoWWe6pZGwbryw6dv+VU2NhHXrhW2LC2sso2xrFEKTK9RdiOaI2Y2NhONL6uv+j3U28v86WPAc/yutjQ7FWhvF/RtaGwmrkuneRmd/Fei8+Zr/1eZG/t/OCVyRTaa7Gwmr9oUIPfuv6m8krCfVYNNtcCSspy+Yb/23dTgSVkOgwYNfdf7hTqiZ/sU9joTVRH2yuk2OhNXsQoDS/1VtjoT1knrbun2OhNVandD/rUZHwmoPdDryq/51LUuE1fFCXHf8/9XrSFhvAQX4v9HsSFjd9AtIfmUB6XkhITP+Vf2OhNVXn4iqhkfCGvBfIWIBjIiZEBEz/40FZLhWAfk/0fRorDpf/ytNjyaq16Xf9GjShXR8/1/W9Ohd4Di0mx7NUJeP/17To9lQ06PZ/8amRx+qy8f/1aZHi/VfL6ubHi1z5Cu/6dHuWNOj8xENAfdKsa5HGhPFuh7l+PjVWNejr/4Hux6d+D/e9eiI8a5HX6u6Hn3crGn7hi1LN2zfpmHLMg1bNW31fNP0l5u3aNvw1RbtW8sN7Isr9V/+Q80vXeQfan7por8346I1PSrnXJPDPAcsLujDfXmpfNivLlU4T+hCWVOhotM+DBXjQ1Ex/Cf9UYa10kWH9dqwL2viw36hKZfy+2NXXvSXkSpedGyuy/l1phB7yPmq6eK/RXid0W8RuqOtFXqvFLP8dfubs/11+w7tWzaUVe6x0nXbPFam+oUKV+9cgcvM/nftHVGeXrlpWtuy6elpnZzvf6/NDPzF+ykVWzRt2aTrlHMSb9YfXzskrLMd9r+4wv6X+CHZZo30f0X19cdgRP/D3zK7/v/0d8yuDiB293Wt27Rv8UKnho3Tm6a1b9qkYesOLVu2eKFF0/SGbdLTGrds6k/Vjp3G/Zc5W/4iOVv+ov+apXXRhRfgbAhIhOLsORQkX/RXxi8+KnE5UWA7zbIWv1LZit//a+fadRqGoWgeVkrLSsXAAOrCwl8UUSaohMQapcGilkoozYN+RsgEM2JBQkKMfAsfg9M86/iGpA4gVd3t2PE995zj53Tm6RH8+hH6zhLw+f4DTFAMl6VQPrTDvNSJpeM5Nl2H3Fq6aZhjnED5nk5rwlczqY78L5wHgnAeCIMRCbuACnBecgWiYO03YJUhGyoLuz1U35losDNBDTkTreRA5Cr3G7QfD9zvlsg7AicIJ3HtnjBKBr9PaX/jP/bX2n/s8d1c2eROgSx1j6MqNnZODXs8pMVujGvs+wHfLyPY06oB4J1VQH4OPGNCKB1Sy+SOJsSk2hPRY6I7GxO1MVH8f6pjoo44cDdsG8+cyxB/wwX2kjFaxUd9RJpES4QLbzPjisy/6FbKi9Cqn8TW1wSx36qr/XzcSDmSSld0l+5syvxsY/tT8yZJp6KOtLPW36IKi1idT9PXD9XXuN1j4hX+SoFqofDUbUGsSopfuKPC1xEoRaiusjDOQsq6xtc0ruK0YcXZagkHLEnSQmSC9yxjiOXRTHxiG+sKon2nGZaUsv6kH2Y1KSKDCk1AeIx3ezhYZIOiFjZ45Yqtg9kgPefSQM76wAQvfZKgG3zmg7cYYv3OpZNSbDmPbPdq3vVQ2PrbDYexk30YGA+ljB3AUZTz7KBUKM5jBxlIaYUNRrpb1fkGSGoeGCMwCwA=",custom_attributes:["abi_private"],debug_symbols:"",is_unconstrained:!1,name:"claim",verification_key:"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAANGKq8VDTe1r0E8WCP+GsqqYAAAAAAAAAAAAAAAAAAAAAAB/r4SIQtuEoN/PPa+Ft8wAAAAAAAAAAAAAAAAAAADqLsoWEu36/oB2TbMfq1h8iAAAAAAAAAAAAAAAAAAAAAAAci2xkrCw+grHNNlmX+B4AAAAAAAAAAAAAAAAAAACK9+gSEv6bAmg73GjiLnIS3QAAAAAAAAAAAAAAAAAAAAAAJg6WdTopECZ63FFj3nufAAAAAAAAAAAAAAAAAAAAsVXQA3MbwsliWMsheT9ZXxwAAAAAAAAAAAAAAAAAAAAAAAZNlfyK3FlF5iqi6y/17QAAAAAAAAAAAAAAAAAAAL9jQwvLB5GmFsVJFeqsuLnMAAAAAAAAAAAAAAAAAAAAAAAO+n5Dk1DTLqLAWSCA4mYAAAAAAAAAAAAAAAAAAAC4saKgI223JD2VUJI3XxYWmwAAAAAAAAAAAAAAAAAAAAAALAOfIbVA55X9h5F1J6UnAAAAAAAAAAAAAAAAAAAA9u19NInSxJUa98Nh2tVaBU0AAAAAAAAAAAAAAAAAAAAAADA7VEvWsiy9awWgon2TqwAAAAAAAAAAAAAAAAAAAIX+Xyku6x3XynL3rAU0tKkEAAAAAAAAAAAAAAAAAAAAAAAobFEtb8BJJHfBzWb6FdgAAAAAAAAAAAAAAAAAAADh1u8P6QkHUJDcmxEIm8ywbQAAAAAAAAAAAAAAAAAAAAAAAFrp7EEIXyCka0PFPPwgAAAAAAAAAAAAAAAAAAAA58s9zNIzapaFilQdYF0tNH4AAAAAAAAAAAAAAAAAAAAAACyqRNHoDeUuSMvhWGu20AAAAAAAAAAAAAAAAAAAALpNBQaTSzAffbzC9uNjxcYgAAAAAAAAAAAAAAAAAAAAAAASekG+2VRz8/SoI9jSawQAAAAAAAAAAAAAAAAAAACi4yNIue+9plogv/hxL5P6LgAAAAAAAAAAAAAAAAAAAAAABFu4u8jvVnGlwcKfSKYIAAAAAAAAAAAAAAAAAAAAjL25CRE+uE+Yi9izqnN8EkgAAAAAAAAAAAAAAAAAAAAAACiQMaoHvQlSbWagsLj6RwAAAAAAAAAAAAAAAAAAAEaaC8ja0uerPNkesT/FVJiWAAAAAAAAAAAAAAAAAAAAAAADo2UVLJzH8v69cvuPpEkAAAAAAAAAAAAAAAAAAACORWW6bJwZcyqxXQjJOpw/qQAAAAAAAAAAAAAAAAAAAAAAK8YW6FUKAI16QIMcMG08AAAAAAAAAAAAAAAAAAAAphmbVRAk2pyPCg07morUS6AAAAAAAAAAAAAAAAAAAAAAAByof58GDSBhT9A6Kac6FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv5pFyZBLAg40cQaBy/H3yUwAAAAAAAAAAAAAAAAAAAAAAAsPioax8XQoS5IbCx6E9QAAAAAAAAAAAAAAAAAAAGX82/ujn1cTjYoTScIJJ0/VAAAAAAAAAAAAAAAAAAAAAAAp3dwXW3Iy2K1t5Tip62kAAAAAAAAAAAAAAAAAAACiTYcTAkvHLurO0LP+GhaytwAAAAAAAAAAAAAAAAAAAAAAHq7l0rCiCK0+WbyCxw2xAAAAAAAAAAAAAAAAAAAAmLo3oyRw3h/ufw08lliXIKMAAAAAAAAAAAAAAAAAAAAAAC/9/yuxLSlhGgVcG8CuJwAAAAAAAAAAAAAAAAAAACSIylyuxL25c5ipCHOrNaKPAAAAAAAAAAAAAAAAAAAAAAABFo+KYdnFzPxJKx0hon8AAAAAAAAAAAAAAAAAAAAVMF+6z5JPgDvj0QwK87gJMQAAAAAAAAAAAAAAAAAAAAAAI0anxAxRJtM6/3vX5+tKAAAAAAAAAAAAAAAAAAAAtOgs3nqavKj5d+n3gSoUJGEAAAAAAAAAAAAAAAAAAAAAABvOHic8Ct/ISMeiySu5cgAAAAAAAAAAAAAAAAAAADU6z78e5JxL8/hfur4Db/TFAAAAAAAAAAAAAAAAAAAAAAAtezhEYLOhhsgHRKfAU/EAAAAAAAAAAAAAAAAAAABq8eWhOMwaVip/RbrbHitCbgAAAAAAAAAAAAAAAAAAAAAAAO3l9eoPbbaMhmoMzD01AAAAAAAAAAAAAAAAAAAAuOd18iKxJIMrZdpBVB+Tb+kAAAAAAAAAAAAAAAAAAAAAAAYVbF9rxjGYL6+/AZYEGQAAAAAAAAAAAAAAAAAAAJVeyO1NEAlZdqZen6mMpOb0AAAAAAAAAAAAAAAAAAAAAAAEncgQb1VqHKveON+nkkoAAAAAAAAAAAAAAAAAAACmBn8vp5xRyXzXjmfSn/pzIAAAAAAAAAAAAAAAAAAAAAAAF9nmqh2AUwzhmcTH3wnsAAAAAAAAAAAAAAAAAAAAWNjlsozTW43wfdy0kvlXMXgAAAAAAAAAAAAAAAAAAAAAABdHZS5F9VfT8EduABdcVgAAAAAAAAAAAAAAAAAAAGW49UhgE3dDIcN+p439l2WBAAAAAAAAAAAAAAAAAAAAAAASxjVJPny83uK700CmyuoAAAAAAAAAAAAAAAAAAAChlMCeXOFRea9IUPhg892hZQAAAAAAAAAAAAAAAAAAAAAAFtvU96OsI95c70KDm3r4AAAAAAAAAAAAAAAAAAAAG9682xjNaCAfc+K4cyzQpeIAAAAAAAAAAAAAAAAAAAAAAA5PjGNTEZX8D4ZzZWkz8gAAAAAAAAAAAAAAAAAAAHcHf0NwcpZwK9CYS9frzn3AAAAAAAAAAAAAAAAAAAAAAAAwQQUryx00Zvm0l0byDUoAAAAAAAAAAAAAAAAAAAD8sA/drzgMoxO4drqbd6ADjgAAAAAAAAAAAAAAAAAAAAAAKmMkrfsrS/Xb2P1laABOAAAAAAAAAAAAAAAAAAAAlbKr2IsKMo/+GMjn77g0bm0AAAAAAAAAAAAAAAAAAAAAABG7wExmhC6NPZkW52T5WgAAAAAAAAAAAAAAAAAAAJUlM+O+/qphIpOLApgt/LUUAAAAAAAAAAAAAAAAAAAAAAAkaU9hYnba1sr09m0ZPloAAAAAAAAAAAAAAAAAAAAau3sPk0/ld0PNBKeA9yl6NgAAAAAAAAAAAAAAAAAAAAAAGHi51D0hC8Hw1e/AN+KxAAAAAAAAAAAAAAAAAAAAkmvfIcSa3FRWznR3oVFSxboAAAAAAAAAAAAAAAAAAAAAAAyPFtLoT4DOurZpb6Zo0gAAAAAAAAAAAAAAAAAAAKsPi5n5bbcMvjz3F39NEU7sAAAAAAAAAAAAAAAAAAAAAAArUOr+y+WDxQkyfIjvssoAAAAAAAAAAAAAAAAAAACGuqG1iFF9D2BR4WMoITutLQAAAAAAAAAAAAAAAAAAAAAADuNSbgAV0CKkJJ85mdprAAAAAAAAAAAAAAAAAAAAlHZak02Cd7Ex+/MyQLy+x8cAAAAAAAAAAAAAAAAAAAAAABpHp4ZeiPCMZTW6EoKeugAAAAAAAAAAAAAAAAAAAOs3/VWXqSzI7o77wAcITK/NAAAAAAAAAAAAAAAAAAAAAAAeaPsLpFmF2q4tRR0h1T0AAAAAAAAAAAAAAAAAAACnzLrd/R3wVSH4/ql7Cy5WYgAAAAAAAAAAAAAAAAAAAAAAK922L8kgjwUbyYQaVePBAAAAAAAAAAAAAAAAAAAA9eGZ/oZZw8t/zTWl+BhhkOIAAAAAAAAAAAAAAAAAAAAAADArX2Fijz2gcfWzf/2wJAAAAAAAAAAAAAAAAAAAAGT6QpOZBJ2Hgd6OjXY6zinpAAAAAAAAAAAAAAAAAAAAAAAM/BMVBDlnDV8M8H1xq8gAAAAAAAAAAAAAAAAAAAAkMZq0nmBA/wxTqlRJkQJVPgAAAAAAAAAAAAAAAAAAAAAAHctB/qAZeEYBGeOv115WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuo/hmjGiiI2fIKb0AzIcYpQAAAAAAAAAAAAAAAAAAAAAAGwL3jnJfKdQSp5Ew1rt5AAAAAAAAAAAAAAAAAAAAS4pNjHfzdGm1DREDNizIh+gAAAAAAAAAAAAAAAAAAAAAABzz7dlI4KlF12vg+ReX4QAAAAAAAAAAAAAAAAAAALdG1/g+4B48aNs3+LFBiW7IAAAAAAAAAAAAAAAAAAAAAAArhbDfNtb+gEdn2prfTzEAAAAAAAAAAAAAAAAAAAAkb6AQcPk8UnkQssz8m2m/DQAAAAAAAAAAAAAAAAAAAAAAKfIN2dkcBrw8VM7V/IebAAAAAAAAAAAAAAAAAAAAhvSEULac3ruVGjWYaAtJ6eAAAAAAAAAAAAAAAAAAAAAAACqijynomdErCkdRNfU8FgAAAAAAAAAAAAAAAAAAALPe49ZKZWhnGAov9A3//uFLAAAAAAAAAAAAAAAAAAAAAAALvroWbfGsJfNmIIs167sAAAAAAAAAAAAAAAAAAACOWO0aucKOCnc4/T2x/ljUkgAAAAAAAAAAAAAAAAAAAAAAGsp9wWrpKR80aezJJeKFAAAAAAAAAAAAAAAAAAAAFeAgFMyFurt/KEPCp36g7I8AAAAAAAAAAAAAAAAAAAAAAAn0XSDoa6bhIMOz3GtD5AAAAAAAAAAAAAAAAAAAAP2TcQxskI1UwDhdN0qlMJ6IAAAAAAAAAAAAAAAAAAAAAAAqOvb5ajbU18kz6wuy0ksAAAAAAAAAAAAAAAAAAAAOL+ZkS/bIr4uZ+ZHbDEZzowAAAAAAAAAAAAAAAAAAAAAAF0KY5VYahMhvpPS0PD03AAAAAAAAAAAAAAAAAAAA3QnrHWcQThm47qItZ4I3XeoAAAAAAAAAAAAAAAAAAAAAABhKTLX35iT2jPzRH3y3HgAAAAAAAAAAAAAAAAAAANd++4FKMPSz+4798s0iuFKmAAAAAAAAAAAAAAAAAAAAAAAvzp9QJrge36Nbfb8lJTsAAAAAAAAAAAAAAAAAAACw4Dlzzcrv+e8SoQEn7VtRrwAAAAAAAAAAAAAAAAAAAAAALzxXwBSOSfW7soeQxvERAAAAAAAAAAAAAAAAAAAA//wpVyMLIN4+iIBGbin0YTIAAAAAAAAAAAAAAAAAAAAAAAbCIwQYJ8kObOnQdwiIvAAAAAAAAAAAAAAAAAAAAH85ect2RaLQe0wuhzoEc/mIAAAAAAAAAAAAAAAAAAAAAAAh7yAjhVxupT7kLSvr4QoAAAAAAAAAAAAAAAAAAAArO7Pn9g5i6p+Jv/xYN1/BZwAAAAAAAAAAAAAAAAAAAAAAJh+1jc9LmVjbtKCv87m0AAAAAAAAAAAAAAAAAAAA84HaruZPpwbnRH34kNUZ/sMAAAAAAAAAAAAAAAAAAAAAACR9MI3AAOaGJCPcF4TNAwAAAAAAAAAAAAAAAAAAACZKM69uwtzD/nZzcldqS70JAAAAAAAAAAAAAAAAAAAAAAAMgeAxdQ74vUEEktOFhRY="},{abi:{abi_version:1,error_types:{"11019205087382408538":{error_kind:"string",string:"Field failed to decompose into specified 4 limbs"},"12370419938245003393":{error_kind:"string",string:"Field failed to decompose into specified 36 limbs"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"5421095327929394772":{error_kind:"string",string:"attempt to bit-shift with overflow"},"6609888949476313245":{error_kind:"string",string:"Message not in state"}},parameters:[{name:"inputs",type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::context::inputs::PrivateContextInputs"},visibility:"private"},{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"},{name:"secret",type:{kind:"field"},visibility:"private"},{name:"message_leaf_index",type:{kind:"field"},visibility:"private"}],return_type:{abi_type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"min_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"is_fee_payer",type:{kind:"boolean"}},{name:"expiration_timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_non_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"note_hash_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifier_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"key_validation_requests_and_separators",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"request",type:{fields:[{name:"pk_m_hash",type:{kind:"field"}},{name:"sk_app",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{name:"key_type_domain_separator",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:32,type:{fields:[{name:"inner",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_teardown_call_request",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"note_hashes",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifiers",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"note_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::nullifier::Nullifier"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"l2_to_l1_msgs",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"inner",type:{fields:[{name:"recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"content",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_logs",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"log",type:{fields:[{name:"fields",type:{kind:"array",length:16,type:{kind:"field"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log::Log"}},{name:"note_hash_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_log::PrivateLogData"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"contract_class_logs_hashes",type:{fields:[{name:"array",type:{kind:"array",length:1,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log_hash::LogHash"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},visibility:"databus"}},bytecode:"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00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL107i2PL6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeuvY8ji2nl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pz2Mzanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrC44tp5euzemla3N66dqcXrr2Zo4tp5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66drfc2x/4Nj+yLH9iWPL6X9rc/rf2pz+tzan/63N6X9rc/rf2pz+tzan/63N6X9rc/rfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+t658HFtO/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63rqs5tpz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dZXl2HL637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/66rLseX0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+t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",custom_attributes:["abi_private"],debug_symbols:"",is_unconstrained:!1,name:"claim_and_end_setup",verification_key:"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkTY6i/XMfdtzimGiyUiPOF8AAAAAAAAAAAAAAAAAAAAAAAeKe8laCswPoPAfrvAFpAAAAAAAAAAAAAAAAAAAALAakr5QBK2vBeVorD0HBVCCAAAAAAAAAAAAAAAAAAAAAAAuARrkESKfZq5HFVp+X98AAAAAAAAAAAAAAAAAAAAzbpXtYZzahwj1pXYnPw1xdQAAAAAAAAAAAAAAAAAAAAAAAiSZeapcyWzM8r5MhaZEAAAAAAAAAAAAAAAAAAAAX6geZ+eWpZ+UVB05iagXIz4AAAAAAAAAAAAAAAAAAAAAAAnyxTdr+6Da5P2r6NvwOQAAAAAAAAAAAAAAAAAAAEI6nIIUU/A1R+2ZppkfFJzGAAAAAAAAAAAAAAAAAAAAAAAhstvtwbgpqGBH6DdvsvIAAAAAAAAAAAAAAAAAAABOw0l2rT5edpe4f8gNznt5twAAAAAAAAAAAAAAAAAAAAAAHfsdDNUbKfeUEWFX0BbKAAAAAAAAAAAAAAAAAAAArcuLc+e2Q5xV9DAOVbyNasYAAAAAAAAAAAAAAAAAAAAAACizzjabBavr3uwxJiJwzwAAAAAAAAAAAAAAAAAAAN2pn0/VXcgXo4ryFNoUJEt9AAAAAAAAAAAAAAAAAAAAAAAcM8wlZyM3mi7jQ4cLs2IAAAAAAAAAAAAAAAAAAADgkfHmqFYi9Wva38oMSlPPKgAAAAAAAAAAAAAAAAAAAAAABSyW0Gs6voIq/nHjKaszAAAAAAAAAAAAAAAAAAAAdSbxWjOdJa6w0qoe1CzIfygAAAAAAAAAAAAAAAAAAAAAACRmDSKQfTg28oq6sQLR/QAAAAAAAAAAAAAAAAAAAC+AVCsfPcoS++GElEX9H2LRAAAAAAAAAAAAAAAAAAAAAAAQregLgGO/ji29oJDtAX0AAAAAAAAAAAAAAAAAAAC2zpWT6PHL+LBAoYsqox8xfgAAAAAAAAAAAAAAAAAAAAAAE0MZx84zaBLkD/mep39ZAAAAAAAAAAAAAAAAAAAAw2as9HDRPDvl1hHBeegEWoIAAAAAAAAAAAAAAAAAAAAAACEwOdHpfHxznGk+a2878gAAAAAAAAAAAAAAAAAAAF4+1q+FHp6N1Qeo/P1EIkvHAAAAAAAAAAAAAAAAAAAAAAApiVbndw9rHK3KrFUjpkoAAAAAAAAAAAAAAAAAAACMQJsYKoPeb41UBjvs/aWKDQAAAAAAAAAAAAAAAAAAAAAAF+tPMiaO9DTbEpnLrQRPAAAAAAAAAAAAAAAAAAAAhsR6s2kqmcAdOq7bh8R8x0sAAAAAAAAAAAAAAAAAAAAAACqCUHQFTYB+MDMk/Yi/2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAepe2V71xANwrvsigXHgXcmsAAAAAAAAAAAAAAAAAAAAAABVMYQhHfbvP6eqH6NqtRgAAAAAAAAAAAAAAAAAAAJaI8g4bX/EPVWsGvRa9Nfi2AAAAAAAAAAAAAAAAAAAAAAAVpWQHOYCI6yxmwM/HKJgAAAAAAAAAAAAAAAAAAACiTYcTAkvHLurO0LP+GhaytwAAAAAAAAAAAAAAAAAAAAAAHq7l0rCiCK0+WbyCxw2xAAAAAAAAAAAAAAAAAAAAmLo3oyRw3h/ufw08lliXIKMAAAAAAAAAAAAAAAAAAAAAAC/9/yuxLSlhGgVcG8CuJwAAAAAAAAAAAAAAAAAAACSIylyuxL25c5ipCHOrNaKPAAAAAAAAAAAAAAAAAAAAAAABFo+KYdnFzPxJKx0hon8AAAAAAAAAAAAAAAAAAAAVMF+6z5JPgDvj0QwK87gJMQAAAAAAAAAAAAAAAAAAAAAAI0anxAxRJtM6/3vX5+tKAAAAAAAAAAAAAAAAAAAAtOgs3nqavKj5d+n3gSoUJGEAAAAAAAAAAAAAAAAAAAAAABvOHic8Ct/ISMeiySu5cgAAAAAAAAAAAAAAAAAAADU6z78e5JxL8/hfur4Db/TFAAAAAAAAAAAAAAAAAAAAAAAtezhEYLOhhsgHRKfAU/EAAAAAAAAAAAAAAAAAAABq8eWhOMwaVip/RbrbHitCbgAAAAAAAAAAAAAAAAAAAAAAAO3l9eoPbbaMhmoMzD01AAAAAAAAAAAAAAAAAAAAuOd18iKxJIMrZdpBVB+Tb+kAAAAAAAAAAAAAAAAAAAAAAAYVbF9rxjGYL6+/AZYEGQAAAAAAAAAAAAAAAAAAAJVeyO1NEAlZdqZen6mMpOb0AAAAAAAAAAAAAAAAAAAAAAAEncgQb1VqHKveON+nkkoAAAAAAAAAAAAAAAAAAACmBn8vp5xRyXzXjmfSn/pzIAAAAAAAAAAAAAAAAAAAAAAAF9nmqh2AUwzhmcTH3wnsAAAAAAAAAAAAAAAAAAAAlI2jkfxdBQEDYVLZK6Mu+E4AAAAAAAAAAAAAAAAAAAAAAB75CU96nn/nGKNP4MiPSAAAAAAAAAAAAAAAAAAAADPr2Nrbi1wdeENur7KZ2jUfAAAAAAAAAAAAAAAAAAAAAAArxt6fm/4WVSkC6C5WFEwAAAAAAAAAAAAAAAAAAABXdbTGt5JuBQKrUDYbezYedQAAAAAAAAAAAAAAAAAAAAAAHtNY5RJgom+x2pa9J5xqAAAAAAAAAAAAAAAAAAAAD8ZOpsKBv63aZ37hPO1Z5xkAAAAAAAAAAAAAAAAAAAAAACo9mdyi4jxSuacsn5YLZAAAAAAAAAAAAAAAAAAAAL6UzBuFx4wFT0IfZBM37Pi0AAAAAAAAAAAAAAAAAAAAAAAKBCqDDngc6SaY18xSCX0AAAAAAAAAAAAAAAAAAACDDuHVB7pUhsX61t23RwG5YwAAAAAAAAAAAAAAAAAAAAAAG4acFNHAImYIv84EaCbgAAAAAAAAAAAAAAAAAAAAyHgy/AWhhRqwiyhREDhNG1UAAAAAAAAAAAAAAAAAAAAAABmBz0b9VhWBcSMWPKIHIAAAAAAAAAAAAAAAAAAAAIa904+aDRPPfvA3KXs6JEpiAAAAAAAAAAAAAAAAAAAAAAAGmqsCjfE+xCxIJC/dvaYAAAAAAAAAAAAAAAAAAAAoT5HAzCef9b4zEj/ZOZOeKQAAAAAAAAAAAAAAAAAAAAAADqMzY6UAEH2gFg17dQNNAAAAAAAAAAAAAAAAAAAA8SFFTAS5fDyLD/fQJWm32skAAAAAAAAAAAAAAAAAAAAAACfxKJHdsQx2Qq3N96jaDgAAAAAAAAAAAAAAAAAAAExQkd8cKda+WzO6NJIlYpzhAAAAAAAAAAAAAAAAAAAAAAAoF6eRZrDKNI4K3D8H8J4AAAAAAAAAAAAAAAAAAAA2L5LAXfmQvkG/RclXmmPV9AAAAAAAAAAAAAAAAAAAAAAAIwGU2ZAxZOQQD9mvWaOyAAAAAAAAAAAAAAAAAAAAlHYpb5pl09ZpVlgFsz0EeUEAAAAAAAAAAAAAAAAAAAAAAAa5LzRyy/S4dwHyvEq7KgAAAAAAAAAAAAAAAAAAAFzTWFGprQ147aqyXy/ksEDHAAAAAAAAAAAAAAAAAAAAAAAiPTf/YpVj8kPR14ayT30AAAAAAAAAAAAAAAAAAACus1hBs1fENFAdTOkTiQNshwAAAAAAAAAAAAAAAAAAAAAALz5SwWtQ4ABw+F4u6dhCAAAAAAAAAAAAAAAAAAAAg3ZyMTrctFYcuL/vRJGJXXkAAAAAAAAAAAAAAAAAAAAAACJs66oPGk0SOBqu56PfyQAAAAAAAAAAAAAAAAAAAORI3sjdYzMntaHxa3EPCDS/AAAAAAAAAAAAAAAAAAAAAAAn9/7/ChAzsP3UmMK0+VYAAAAAAAAAAAAAAAAAAADePWc1brtfYHVBn1khdNZhmwAAAAAAAAAAAAAAAAAAAAAAKd9SOkJQJxyZktzawRq8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLnUYi3zuqnao50XcOE38F3gAAAAAAAAAAAAAAAAAAAAAAI9DFfjicXLCvg3BZYuZaAAAAAAAAAAAAAAAAAAAAdxqRjg5mSrPiLHvIavnHj6kAAAAAAAAAAAAAAAAAAAAAAAv5gOY9JqX0Y5OftpMPPwAAAAAAAAAAAAAAAAAAALdG1/g+4B48aNs3+LFBiW7IAAAAAAAAAAAAAAAAAAAAAAArhbDfNtb+gEdn2prfTzEAAAAAAAAAAAAAAAAAAAAkb6AQcPk8UnkQssz8m2m/DQAAAAAAAAAAAAAAAAAAAAAAKfIN2dkcBrw8VM7V/IebAAAAAAAAAAAAAAAAAAAAhvSEULac3ruVGjWYaAtJ6eAAAAAAAAAAAAAAAAAAAAAAACqijynomdErCkdRNfU8FgAAAAAAAAAAAAAAAAAAALPe49ZKZWhnGAov9A3//uFLAAAAAAAAAAAAAAAAAAAAAAALvroWbfGsJfNmIIs167sAAAAAAAAAAAAAAAAAAABdIpnboOgk3UyZMd36A7rPRgAAAAAAAAAAAAAAAAAAAAAAFE1+9DILMglKRgCbpXEMAAAAAAAAAAAAAAAAAAAACRnD6/zqqhkpRrBQcssNSXwAAAAAAAAAAAAAAAAAAAAAAByDTjVw4GNoGix9pnLx9AAAAAAAAAAAAAAAAAAAABKZlt9oFxeYMXZbiBSa+Bh8AAAAAAAAAAAAAAAAAAAAAAAXPKAWV84fPLScYBq0oSAAAAAAAAAAAAAAAAAAAAC1T2ZFfqLa/H1aBzhmzFUvGwAAAAAAAAAAAAAAAAAAAAAABoDg8J7IeFK3n0YfiGQDAAAAAAAAAAAAAAAAAAAANhgm/oWJHJec9TSIU5unGJQAAAAAAAAAAAAAAAAAAAAAABlN0RGBgPwANA5YJfTjgwAAAAAAAAAAAAAAAAAAABQbFNBA0hr74Di1thCVou+HAAAAAAAAAAAAAAAAAAAAAAAc9NSeJivgTL0cCVZJmf4AAAAAAAAAAAAAAAAAAABFSbqa73bAHJ7Ic6YfOVDHIwAAAAAAAAAAAAAAAAAAAAAAKBjEdstrGBdFrwJOucjWAAAAAAAAAAAAAAAAAAAAYuXruKi+lYhf30YNHh/5URgAAAAAAAAAAAAAAAAAAAAAABS6DW+eYRi8K9JzArA9qwAAAAAAAAAAAAAAAAAAAAuHZPjUA/0s6bhy15rQ+ctJAAAAAAAAAAAAAAAAAAAAAAAVSpCcS0FpYl140Y5TPwwAAAAAAAAAAAAAAAAAAAAbJb76Z0kvn/eJiVc7U81qRQAAAAAAAAAAAAAAAAAAAAAAJ90XJn+9IB8AjsL9GtwSAAAAAAAAAAAAAAAAAAAAyCC9xZ49NuYzO/Xyirs/2K8AAAAAAAAAAAAAAAAAAAAAABz7jTH1LNe0EZIBfdRdCwAAAAAAAAAAAAAAAAAAACVvpuI2ZAc0tiR1BFZIyaBCAAAAAAAAAAAAAAAAAAAAAAAdjtK/f86AqYaRPmSAhL4="},{abi:{abi_version:1,error_types:{"1080336462466469436":{error_kind:"string",string:"Function check_balance can only be called statically"},"11194752367584870169":{error_kind:"fmtstring",item_types:[{kind:"field"}],length:27},"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"},"15860392472534760515":{error_kind:"string",string:"Function balance_of_public can only be called statically"},"8637882143979902881":{error_kind:"string",string:"Function _increase_public_balance can only be called by the same contract"},"9543832133280402246":{error_kind:"string",string:"Balance too low"}},parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],return_type:null},bytecode:"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",custom_attributes:["abi_public"],debug_symbols:"",is_unconstrained:!0,name:"public_dispatch"}],name:"FeeJuice",noir_version:"1.0.0-rc.3+5a7ee9bf5ed8973076df7bb0d2b723024db09ae7",outputs:{globals:{storage:[{name:"STORAGE_LAYOUT_FeeJuice",value:{fields:[{name:"contract_name",value:{kind:"string",value:"FeeJuice"}},{name:"fields",value:{fields:[{name:"balances",value:{fields:[{name:"slot",value:{kind:"integer",sign:!1,value:"0000000000000000000000000000000000000000000000000000000000000001"}}],kind:"struct"}}],kind:"struct"}}],kind:"struct"}}]},structs:{functions:[{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::_increase_public_balance_parameters"}}],kind:"struct",path:"FeeJuice::_increase_public_balance_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_owner",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"FeeJuice::balance_of_public_parameters"}},{name:"return_type",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::balance_of_public_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_fee_limit",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::check_balance_parameters"}}],kind:"struct",path:"FeeJuice::check_balance_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}},{name:"_secret",type:{kind:"field"}},{name:"_message_leaf_index",type:{kind:"field"}}],kind:"struct",path:"FeeJuice::claim_parameters"}}],kind:"struct",path:"FeeJuice::claim_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}},{name:"_secret",type:{kind:"field"}},{name:"_message_leaf_index",type:{kind:"field"}}],kind:"struct",path:"FeeJuice::claim_and_end_setup_parameters"}}],kind:"struct",path:"FeeJuice::claim_and_end_setup_abi"}]}},transpiled:!0,aztec_version:"6.0.0-rc.7"};var FeeJuiceArtifact=loadContractArtifact(FeeJuice_default);function computeFeePayerBalanceStorageSlot(feePayer){return deriveStorageSlotInMap(FeeJuiceArtifact.storageLayout.balances.slot,feePayer)}__name(computeFeePayerBalanceStorageSlot,"computeFeePayerBalanceStorageSlot");async function computeFeePayerBalanceLeafSlot(feePayer){let balanceSlot=await computeFeePayerBalanceStorageSlot(feePayer);return computePublicDataTreeLeafSlot(ProtocolContractAddress.FeeJuice,balanceSlot)}__name(computeFeePayerBalanceLeafSlot,"computeFeePayerBalanceLeafSlot");init_esm();init_esm();init_esm();var NoopMeter2=class{static{__name(this,"NoopMeter")}otelMeter=createNoopMeter();createGauge(_metric){return this.otelMeter.createGauge("")}createObservableGauge(_metric){return this.otelMeter.createObservableGauge("")}createHistogram(_metric,_extraOptions){return this.otelMeter.createHistogram("")}createUpDownCounter(_metric){return this.otelMeter.createUpDownCounter("")}createObservableUpDownCounter(_metric){return this.otelMeter.createObservableUpDownCounter("")}addBatchObservableCallback(callback,observables){this.otelMeter.addBatchObservableCallback(callback,observables)}removeBatchObservableCallback(callback,observables){this.otelMeter.removeBatchObservableCallback(callback,observables)}},NoopTelemetryClient=class{static{__name(this,"NoopTelemetryClient")}meter=new NoopMeter2;setExportedPublicTelemetry(_prefixes){}setPublicTelemetryCollectFrom(_roles){}getMeter(){return this.meter}getTracer(){return new NoopTracer2}stop(){return Promise.resolve()}flush(){return Promise.resolve()}isEnabled(){return!1}getTraceContext(){}extractPropagatedContext(_traceContext){}},NoopTracer2=class{static{__name(this,"NoopTracer")}startSpan(){return new NoopSpan}startActiveSpan(_name,...args){return args.find(arg=>typeof arg=="function")(new NoopSpan)}},NoopSpan=class{static{__name(this,"NoopSpan")}recording=!0;addEvent(){return this}addLink(){return this}addLinks(){return this}end(){this.recording=!1}isRecording(){return this.recording}recordException(){}setAttribute(){return this}setAttributes(){return this}setStatus(){return this}spanContext(){return{spanId:"",traceId:"",traceFlags:0}}updateName(){return this}};var telemetryClientConfigMappings={metricsCollectorUrl:{env:"OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",description:"The URL of the telemetry collector for metrics",parseEnv:__name(val=>new URL(val),"parseEnv")},tracesCollectorUrl:{env:"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",description:"The URL of the telemetry collector for traces",parseEnv:__name(val=>new URL(val),"parseEnv")},logsCollectorUrl:{env:"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",description:"The URL of the telemetry collector for logs",parseEnv:__name(val=>new URL(val),"parseEnv")},otelCollectIntervalMs:{env:"OTEL_COLLECT_INTERVAL_MS",description:"The interval at which to collect metrics",...numberConfigHelper(6e4)},otelExportTimeoutMs:{env:"OTEL_EXPORT_TIMEOUT_MS",description:"The timeout for exporting metrics",...numberConfigHelper(3e4)},otelExcludeMetrics:{env:"OTEL_EXCLUDE_METRICS",description:"A list of metric prefixes to exclude from export",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},otelMinTraceDurationMs:{env:"OTEL_MIN_TRACE_DURATION_MS",description:"The minimum successful trace duration to export in milliseconds. Set to 0 to export all traces.",...numberConfigHelper(10)},otelBspMaxQueueSize:{env:"OTEL_BSP_MAX_QUEUE_SIZE",description:"The maximum number of completed spans to queue before export.",...numberConfigHelper(65536)},otelBspMaxExportBatchSize:{env:"OTEL_BSP_MAX_EXPORT_BATCH_SIZE",description:"The maximum number of spans to send to the collector in a single export.",...numberConfigHelper(4096)},otelBspScheduleDelayMs:{env:"OTEL_BSP_SCHEDULE_DELAY",description:"How long to wait before exporting a partially filled batch of spans, in milliseconds.",...numberConfigHelper(5e3)},otelIncludeMetrics:{env:"OTEL_INCLUDE_METRICS",description:"A list of metric prefixes to include in export (ignored if OTEL_EXCLUDE_METRICS is set)",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicMetricsCollectorUrl:{env:"PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",description:"A URL to publish a subset of metrics for public consumption",parseEnv:__name(val=>new URL(val),"parseEnv")},publicMetricsCollectFrom:{env:"PUBLIC_OTEL_COLLECT_FROM",description:"The role types to collect metrics from",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicIncludeMetrics:{env:"PUBLIC_OTEL_INCLUDE_METRICS",description:"A list of metric prefixes to publicly export",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicMetricsOptOut:{env:"PUBLIC_OTEL_OPT_OUT",description:"Whether to opt out of sharing optional telemetry",...booleanConfigHelper(!0)}};var noopTelemetry=new NoopTelemetryClient;function getTelemetryClient(){return noopTelemetry}__name(getTelemetryClient,"getTelemetryClient");function expandAttributeCombinations(attrMap){let keys=Object.keys(attrMap);if(keys.length===0)return[{}];let result=[];function generate(index,current){if(index===keys.length){result.push({...current});return}let key=keys[index];for(let value of attrMap[key])current[key]=value,generate(index+1,current)}return __name(generate,"generate"),generate(0,{}),result}__name(expandAttributeCombinations,"expandAttributeCombinations");function createUpDownCounterWithDefault(meter,metric,attributes=void 0){let counter=meter.createUpDownCounter(metric);if(attributes===void 0)counter.add(0);else if(Array.isArray(attributes))for(let attrs of attributes)counter.add(0,attrs);else{let combinations=expandAttributeCombinations(attributes);for(let attrs of combinations)counter.add(0,attrs)}return counter}__name(createUpDownCounterWithDefault,"createUpDownCounterWithDefault");function trackSpan(spanName,attributes,extraAttributes){return(originalMethod,_context)=>__name(async function(...args){let name=typeof spanName=="function"?spanName.call(this,...args):spanName,currentAttrs=typeof attributes=="function"?await attributes.call(this,...args):attributes;return this.tracer.startActiveSpan(name,{attributes:currentAttrs},async span=>{try{let res=await originalMethod.call(this,...args),extraAttrs=extraAttributes?.call(this,res);return span.setAttributes(extraAttrs??{}),span.setStatus({code:SpanStatusCode.OK}),res}catch(err){throw span.setStatus({code:SpanStatusCode.ERROR,message:String(err)}),(typeof err=="string"||err&&err instanceof Error)&&span.recordException(err),err}finally{span.end()}})},"replacementMethod")}__name(trackSpan,"trackSpan");init_esm();var JSON_RPC_SERVER_REQUEST_COUNT={name:"aztec.json_rpc.server.request_count",description:"Number of completed JSON-RPC server requests",valueType:ValueType.INT},JSON_RPC_SERVER_REQUEST_DURATION={name:"aztec.json_rpc.server.request_duration",description:"JSON-RPC server request handler duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_REQUEST_VALIDATION_DURATION={name:"aztec.json_rpc.server.request_validation_duration",description:"JSON-RPC server request parameter validation duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_REJECTED_REQUEST_COUNT={name:"aztec.json_rpc.server.rejected_request_count",description:"Number of JSON-RPC requests rejected before handler dispatch",valueType:ValueType.INT},JSON_RPC_SERVER_BATCH_COUNT={name:"aztec.json_rpc.server.batch_count",description:"Number of JSON-RPC batches received",valueType:ValueType.INT},JSON_RPC_SERVER_BATCH_DURATION={name:"aztec.json_rpc.server.batch_duration",description:"JSON-RPC batch processing duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_BATCH_SIZE={name:"aztec.json_rpc.server.batch_size",description:"Number of requests in a JSON-RPC batch",unit:"requests",valueType:ValueType.INT},BLOB_SINK_STORE_REQUESTS={name:"aztec.blob_sink.store_request_count",description:"Number of blob store requests",valueType:ValueType.INT},BLOB_SINK_RETRIEVE_REQUESTS={name:"aztec.blob_sink.retrieve_request_count",description:"Number of blob retrieve requests",valueType:ValueType.INT},BLOB_SINK_OBJECTS_IN_BLOB_STORE={name:"aztec.blob_sink.objects_in_blob_store",description:"Number of objects in the blob store",valueType:ValueType.INT},BLOB_SINK_BLOB_SIZE={name:"aztec.blob_sink.blob_size",description:"Size of blobs",unit:"By",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOB_REQUEST_COUNT={name:"aztec.blob_sink.archive.block_request_count",description:"Number of archive blob requests",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOCK_REQUEST_COUNT={name:"aztec.blob_sink.archive.blob_request_count",description:"Number of archive block requests",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOB_COUNT={name:"aztec.blob_sink.archive.blob_count",description:"Number of blobs in archive",valueType:ValueType.INT},CIRCUIT_SIMULATION_DURATION={name:"aztec.circuit.simulation.duration",description:"Records how long it takes to simulate a circuit",unit:"ms",valueType:ValueType.INT},CIRCUIT_SIMULATION_INPUT_SIZE={name:"aztec.circuit.simulation.input_size",description:"Size of the input to the circuit simulation",unit:"By",valueType:ValueType.INT},CIRCUIT_SIMULATION_OUTPUT_SIZE={name:"aztec.circuit.simulation.output_size",description:"Size of the output of the circuit simulation",unit:"By",valueType:ValueType.INT},CIRCUIT_WITNESS_GEN_DURATION={name:"aztec.circuit.witness_generation.duration",description:"Records how long it takes to generate the partial witness for a circuit",unit:"s",valueType:ValueType.DOUBLE},CIRCUIT_WITNESS_GEN_INPUT_SIZE={name:"aztec.circuit.witness_generation.input_size",description:"Records the size of the input to the witness generation",unit:"By",valueType:ValueType.INT},CIRCUIT_WITNESS_GEN_OUTPUT_SIZE={name:"aztec.circuit.witness_generation.output_size",description:"Records the size of the output of the witness generation",unit:"By",valueType:ValueType.INT},CIRCUIT_PROVING_DURATION={name:"aztec.circuit.proving.duration",description:"Records how long it takes to prove a circuit",unit:"s",valueType:ValueType.DOUBLE},CIRCUIT_PROVING_INPUT_SIZE={name:"aztec.circuit.proving.input_size",description:"Size of the input to the circuit proving",unit:"By",valueType:ValueType.INT},CIRCUIT_PROVING_PROOF_SIZE={name:"aztec.circuit.proving.proof_size",description:"Records the size of the proof generated for a circuit",unit:"By",valueType:ValueType.INT},CIRCUIT_PUBLIC_INPUTS_COUNT={name:"aztec.circuit.public_inputs_count",description:"Records the number of public inputs in a circuit",valueType:ValueType.INT},CIRCUIT_GATE_COUNT={name:"aztec.circuit.gate_count",description:"Records the gate count of a circuit",valueType:ValueType.INT},CIRCUIT_SIZE={name:"aztec.circuit.size",description:"Records the size of the circuit in gates",valueType:ValueType.INT},MEMPOOL_TX_COUNT={name:"aztec.mempool.tx_count",description:"The current number of transactions in the mempool",valueType:ValueType.INT},MEMPOOL_TX_SIZE={name:"aztec.mempool.tx_size",description:"The size of transactions in the mempool",unit:"By",valueType:ValueType.INT},MEMPOOL_TX_ADDED_COUNT={name:"aztec.mempool.tx_added_count",description:"The number of transactions added to the mempool",valueType:ValueType.INT},MEMPOOL_TX_MINED_DELAY={name:"aztec.mempool.tx_mined_delay",description:"Delay (ms) from a transaction being received into the pool to being mined",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_EVICTED_COUNT={name:"aztec.mempool.tx_pool_v2.evicted_count",description:"The number of transactions evicted from the tx pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_IGNORED_COUNT={name:"aztec.mempool.tx_pool_v2.ignored_count",description:"The number of transactions ignored in addPendingTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_REJECTED_COUNT={name:"aztec.mempool.tx_pool_v2.rejected_count",description:"The number of transactions rejected in addPendingTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_SOFT_DELETED_HITS={name:"aztec.mempool.tx_pool_v2.soft_deleted_hits",description:"The number of transactions found in the soft-deleted pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_MISSING_ON_PROTECT={name:"aztec.mempool.tx_pool_v2.missing_on_protect",description:"The number of truly missing transactions in protectTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_MISSING_PREVIOUSLY_EVICTED={name:"aztec.mempool.tx_pool_v2.missing_previously_evicted",description:"The number of truly missing transactions in protectTxs that were previously evicted",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_METADATA_MEMORY={name:"aztec.mempool.tx_pool_v2.metadata_memory",description:"Estimated total memory consumed by in-memory transaction metadata",unit:"By",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_WAIT={name:"aztec.mempool.tx_pool_v2.queue_wait",description:"Time an operation waits in the tx pool serial queue before executing, keyed by mempool.operation",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_EXECUTION={name:"aztec.mempool.tx_pool_v2.queue_execution",description:"Time an operation spends executing in the tx pool serial queue, keyed by mempool.operation",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_LENGTH={name:"aztec.mempool.tx_pool_v2.queue_length",description:"Number of operations waiting in the tx pool serial queue",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_DUPLICATE_ADD={name:"aztec.mempool.tx_pool_v2.duplicate_add",description:"Transactions received via addPendingTxs that were already in the pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_ALREADY_PROTECTED_ADD={name:"aztec.mempool.tx_pool_v2.already_protected_add",description:"Transactions received via addPendingTxs that were already pre-protected",valueType:ValueType.INT},DB_NUM_ITEMS={name:"aztec.db.num_items",description:"LMDB Num Items",valueType:ValueType.INT},DB_MAP_SIZE={name:"aztec.db.map_size",description:"LMDB Map Size",unit:"By",valueType:ValueType.INT},DB_PHYSICAL_FILE_SIZE={name:"aztec.db.physical_file_size",description:"LMDB Physical File Size",unit:"By",valueType:ValueType.INT},DB_USED_SIZE={name:"aztec.db.used_size",description:"LMDB Used Size",unit:"By",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_COUNT={name:"aztec.mempool.attestations_count",description:"The current number of attestations in the mempool",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_SIZE={name:"aztec.mempool.attestations_size",description:"The size of attestations in the mempool",unit:"By",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_ADDED_COUNT={name:"aztec.mempool.attestations_added_count",description:"The number of attestations added to the mempool",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_MINED_DELAY={name:"aztec.mempool.attestations_mined_delay",description:"Delay between attestation added and evicted from the mempool",unit:"ms",valueType:ValueType.INT},ARCHIVER_L1_BLOCK_HEIGHT={name:"aztec.archiver.l1_block_height",description:"The height of the latest L1 block processed by the archiver",valueType:ValueType.INT},ARCHIVER_BLOCK_HEIGHT={name:"aztec.archiver.block_height",description:"The height of the latest block processed by the archiver",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_HEIGHT={name:"aztec.archiver.checkpoint_height",description:"The height of the latest checkpoint processed by the archiver",valueType:ValueType.INT},ARCHIVER_ROLLUP_PROOF_DELAY={name:"aztec.archiver.rollup_proof_delay",description:"Time after a block is submitted until its proof is published",unit:"ms",valueType:ValueType.INT},ARCHIVER_ROLLUP_PROOF_COUNT={name:"aztec.archiver.rollup_proof_count",description:"Number of proofs submitted",valueType:ValueType.INT},ARCHIVER_MANA_PER_BLOCK={name:"aztec.archiver.block.mana_count",description:"The mana consumed by blocks",unit:"Mmana",valueType:ValueType.DOUBLE},ARCHIVER_TXS_PER_BLOCK={name:"aztec.archiver.block.tx_count",description:"The block tx count",unit:"tx",valueType:ValueType.INT},ARCHIVER_SYNC_PER_BLOCK={name:"aztec.archiver.block.sync_per_item_duration",description:"Duration to sync a block",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_PER_CHECKPOINT={name:"aztec.archiver.checkpoint.sync_per_item_duration",description:"Duration to sync a checkpoint",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_BLOCK_COUNT={name:"aztec.archiver.block.sync_count",description:"Number of blocks synced from L1",valueType:ValueType.INT},ARCHIVER_SYNC_PER_MESSAGE={name:"aztec.archiver.message.sync_per_item_duration",description:"Duration to sync a message",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_MESSAGE_COUNT={name:"aztec.archiver.message.sync_count",description:"Number of L1 to L2 messages synced",valueType:ValueType.INT},ARCHIVER_PRUNE_DURATION={name:"aztec.archiver.prune_duration",description:"Duration of a prune operation",unit:"ms",valueType:ValueType.INT},ARCHIVER_PRUNE_COUNT={name:"aztec.archiver.prune_count",description:"Number of prunes detected, dimensioned by prune_type: unproven (epoch prune of checkpoints that will not be proven), uncheckpointed (proposed blocks whose slot ended without a checkpoint), l1_conflict (proposed blocks conflicting with an L1 checkpoint), orphan (proposed blocks whose matching proposed checkpoint never arrived before the deadline), abandoned (proposed blocks this node's own sequencer gave up before proposing their checkpoint), and l1_mismatch (the local checkpointed tip diverged from L1 \u2014 an L1 reorg or a pruned/missed-proof checkpoint \u2014 rewinding already-checkpointed blocks).",valueType:ValueType.INT},ARCHIVER_TOTAL_TXS={name:"aztec.archiver.tx_count",description:"The total number of transactions",valueType:ValueType.INT},ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT={name:"aztec.archiver.block_proposal_tx_target_count",description:"Number of block proposals by tx target",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_CALLDATA_UNAVAILABLE_COUNT={name:"aztec.archiver.checkpoint_calldata_unavailable_count",description:"Number of attempts to read a checkpoint whose L1 propose calldata could not be extracted because neither trace_transaction nor debug_traceTransaction succeeded. L1 sync retries the checkpoint, so this keeps rising while the archiver is stuck on it.",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_L1_INCLUSION_DELAY={name:"aztec.archiver.checkpoint_l1_inclusion_delay",description:"Seconds into the L2 slot when the checkpoint L1 tx was included",unit:"s",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_PROMOTED_COUNT={name:"aztec.archiver.checkpoint_promoted_count",description:"Number of checkpoints promoted from proposed (blob fetch skipped)",valueType:ValueType.INT},NODE_RECEIVE_TX_DURATION={name:"aztec.node.receive_tx.duration",description:"The duration of the receiveTx method",unit:"ms",valueType:ValueType.INT},NODE_RECEIVE_TX_COUNT={name:"aztec.node.receive_tx.count",description:"Number of transactions received",valueType:ValueType.INT},NODE_SNAPSHOT_DURATION={name:"aztec.node.snapshot_duration",description:"How long taking a snapshot takes",unit:"ms",valueType:ValueType.INT},NODE_SNAPSHOT_ERROR_COUNT={name:"aztec.node.snapshot_error_count",description:"How many snapshot errors have happened",valueType:ValueType.INT},SEQUENCER_STATE_TRANSITION_BUFFER_DURATION={name:"aztec.sequencer.state_transition_buffer.duration",description:"The time difference between when the sequencer needed to transition to a new state and when it actually did",unit:"ms",valueType:ValueType.INT},SEQUENCER_STATE_DURATION={name:"aztec.sequencer.state_duration",description:"Wall-clock time spent in each sequencer state, labelled by the state being left",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_BUILD_DURATION={name:"aztec.sequencer.block.build_duration",description:"Duration to build a block",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND={name:"aztec.sequencer.block.build_mana_per_second",description:"Mana per second when building a block",unit:"mana/s",valueType:ValueType.INT},SEQUENCER_BLOCK_COUNT={name:"aztec.sequencer.block.count",description:"Number of blocks built by this sequencer",valueType:ValueType.INT},SEQUENCER_BLOCK_INTER_BLOCK_TIME={name:"aztec.sequencer.block.inter_block_time",description:"Wall-clock time elapsed between consecutive blocks being built by this sequencer",unit:"ms",valueType:ValueType.INT},SEQUENCER_CURRENT_SLOT_REWARDS={name:"aztec.sequencer.current_slot_rewards",description:"The rewards earned per filled slot",valueType:ValueType.DOUBLE},SEQUENCER_SLOT_COUNT={name:"aztec.sequencer.slot.total_count",description:"The number of slots this sequencer was selected for",valueType:ValueType.INT},SEQUENCER_FILLED_SLOT_COUNT={name:"aztec.sequencer.slot.filled_count",description:"The number of slots this sequencer has filled",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_ATTESTATION_DELAY={name:"aztec.sequencer.checkpoint.attestation_delay",description:"The time difference between checkpoint proposal and minimal attestation count reached",unit:"ms",valueType:ValueType.INT},SEQUENCER_COLLECTED_ATTESTATIONS_COUNT={name:"aztec.sequencer.attestations.collected_count",description:"The number of attestations collected for a checkpoint proposal",valueType:ValueType.INT},SEQUENCER_REQUIRED_ATTESTATIONS_COUNT={name:"aztec.sequencer.attestations.required_count",description:"The minimum number of attestations required to publish a checkpoint",valueType:ValueType.INT},SEQUENCER_COLLECT_ATTESTATIONS_DURATION={name:"aztec.sequencer.attestations.collect_duration",description:"The time spent collecting attestations from committee members",unit:"ms",valueType:ValueType.INT},SEQUENCER_COLLECT_ATTESTATIONS_TIME_ALLOWANCE={name:"aztec.sequencer.attestations.collect_allowance",description:"Maximum amount of time to collect attestations",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_PROPOSAL_FAILED_COUNT={name:"aztec.sequencer.block.proposal_failed_count",description:"The number of times block proposal failed (including validation builds)",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PROPOSAL_SUCCESS_COUNT={name:"aztec.sequencer.checkpoint.proposal_success_count",description:"The number of times checkpoint proposal succeeded",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PRECHECK_FAILED_COUNT={name:"aztec.sequencer.checkpoint.precheck_failed_count",description:"The number of times checkpoint pre-build checks failed",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PROPOSAL_FAILED_COUNT={name:"aztec.sequencer.checkpoint.proposal_failed_count",description:"The number of times checkpoint proposal failed",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_BUILD_DURATION={name:"aztec.sequencer.checkpoint.build_duration",description:"Total duration to build all blocks in a checkpoint",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_START_TO_FIRST_BLOCK_DURATION={name:"aztec.sequencer.checkpoint.start_to_first_block_duration",description:"Time from starting checkpoint work to the first block finishing build",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_LAST_BLOCK_TO_BROADCAST_DURATION={name:"aztec.sequencer.checkpoint.last_block_to_broadcast_duration",description:"Time from the final block finishing build to the checkpoint proposal being broadcast",unit:"ms",valueType:ValueType.INT},SEQUENCER_PIPELINED_CHECKPOINT_BUILD_START_OFFSET_FROM_SLOT_BOUNDARY={name:"aztec.sequencer.pipelined_checkpoint.build_start_offset_from_slot_boundary",description:"Absolute offset from the wall-clock slot boundary when a pipelined checkpoint build starts. Use aztec.slot_boundary_side to distinguish before vs after the boundary.",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_BLOCK_COUNT={name:"aztec.sequencer.checkpoint.block_count",description:"Number of blocks built in a checkpoint",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_TX_COUNT={name:"aztec.sequencer.checkpoint.tx_count",description:"Total number of transactions across all blocks in a checkpoint",unit:"tx",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_TOTAL_MANA={name:"aztec.sequencer.checkpoint.total_mana",description:"Total L2 mana used across all blocks in a checkpoint",unit:"mana",valueType:ValueType.INT},SEQUENCER_SLASHING_ATTEMPTS_COUNT={name:"aztec.sequencer.slashing.attempts_count",description:"The number of slashing action attempts",valueType:ValueType.INT},SLASHER_ROUND_EXECUTED_COUNT={name:"aztec.slasher.round.executed_count",description:"The number of slashing rounds executed",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_TARGETED_COUNT={name:"aztec.slasher.own_validator.targeted_count",description:"The number of times one of the node's own validators was named as a slash target by an onchain vote, counted once per vote per validator. Votes cast while the node is offline or starting up are not counted, and L1 reorgs can cause small drift within a round.",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_CURRENT_ROUND_VOTES_MAX={name:"aztec.slasher.own_validator.current_round_votes_max",description:"Highest number of votes cast against any committee position held by the node's own validators in the current slashing round, to compare against aztec.slasher.quorum_size (the contract tallies quorum per position). Resets to zero when a new round starts. Votes cast while the node is offline or starting up are not counted, and L1 reorgs can cause small drift within a round.",valueType:ValueType.INT},SLASHER_QUORUM_SIZE={name:"aztec.slasher.quorum_size",description:"The number of votes a validator must receive in a round to be slashed",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_SLASHED_COUNT={name:"aztec.slasher.own_validator.slashed_count",description:"The number of times one of the node's own validators was slashed, from executed Slashed events",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_SLASHED_AMOUNT={name:"aztec.slasher.own_validator.slashed_amount",description:"Cumulative amount slashed from the node's own validators in whole staking-asset tokens, from executed Slashed events",unit:"tokens",valueType:ValueType.DOUBLE},SEQUENCER_CHECKPOINT_SUCCESS_COUNT={name:"aztec.sequencer.checkpoint.success_count",description:"The number of times checkpoint publishing succeeded",valueType:ValueType.INT},SEQUENCER_PIPELINE_DEPTH={name:"aztec.sequencer.pipeline.depth",description:"Current pipeline depth when builder pipelining is enabled",valueType:ValueType.INT},SEQUENCER_PIPELINE_DISCARDS_COUNT={name:"aztec.sequencer.pipeline.discards_count",description:"The number of times a pipeline was discarded",valueType:ValueType.INT},SEQUENCER_PIPELINE_PARENT_CHECKPOINT_MISMATCH_COUNT={name:"aztec.sequencer.pipeline.parent_checkpoint_mismatch_count",description:"The number of times a pipelined checkpoint was discarded because the parent did not match expectations",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_WOULD_BE_INCLUDED={name:"aztec.fisherman.fee_analysis.would_be_included",description:"Whether the transaction would have been included in the block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_TIME_BEFORE_BLOCK={name:"aztec.fisherman.fee_analysis.time_before_block",description:"Time in ms between fee analysis and block being mined",unit:"ms",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_TX_COUNT={name:"aztec.fisherman.fee_analysis.pending_blob_tx_count",description:"Number of blob transactions seen in the pending block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_TX_COUNT={name:"aztec.fisherman.fee_analysis.included_blob_tx_count",description:"Number of blob transactions that got included in the mined block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_CALCULATED_PRIORITY_FEE={name:"aztec.fisherman.fee_analysis.calculated_priority_fee",description:"Priority fee calculated by each strategy",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_PRIORITY_FEE_DELTA={name:"aztec.fisherman.fee_analysis.priority_fee_delta",description:"Difference between our priority fee and minimum included priority fee",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_ESTIMATED_COST={name:"aztec.fisherman.fee_analysis.estimated_cost",description:"Estimated total cost in ETH for the transaction with this strategy",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_ESTIMATED_OVERPAYMENT={name:"aztec.fisherman.fee_analysis.estimated_overpayment",description:"Estimated overpayment in ETH vs minimum required for inclusion",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_PRIORITY_FEE={name:"aztec.fisherman.fee_analysis.mined_blob_tx_priority_fee",description:"Priority fee per gas for blob transactions in mined blocks",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_TOTAL_COST={name:"aztec.fisherman.fee_analysis.mined_blob_tx_total_cost",description:"Total cost in ETH for blob transactions in mined blocks",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_COUNT={name:"aztec.fisherman.fee_analysis.pending_blob_count",description:"Total number of blobs in pending blob transactions",unit:"blobs",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_COUNT={name:"aztec.fisherman.fee_analysis.included_blob_count",description:"Total number of blobs included in the mined block",unit:"blobs",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_BLOCK_BLOBS_FULL={name:"aztec.fisherman.fee_analysis.block_blobs_full",description:"Whether the mined block reached 100% blob capacity",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_MAX_BLOB_CAPACITY={name:"aztec.fisherman.fee_analysis.max_blob_capacity",description:"Maximum blob capacity for the analyzed block based on L1 upgrade schedule",unit:"blobs",valueType:ValueType.INT},VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT={name:"aztec.validator.invalid_attestation_received_count",description:"Number of invalid attestations received",valueType:ValueType.INT},L1_PUBLISHER_LOADED_COUNT={name:"aztec.l1_publisher.loaded_count",description:"Number of L1 publishers loaded by this node",valueType:ValueType.INT},L1_PUBLISHER_GAS_PRICE={name:"aztec.l1_publisher.gas_price",description:"The gas price used for transactions",unit:"gwei",valueType:ValueType.DOUBLE};var L1_PUBLISHER_TX_DURATION={name:"aztec.l1_publisher.tx_duration",description:"The duration of transaction processing",unit:"ms",valueType:ValueType.INT},L1_PUBLISHER_TX_GAS={name:"aztec.l1_publisher.tx_gas",description:"The gas consumed by transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_CALLDATA_SIZE={name:"aztec.l1_publisher.tx_calldata_size",description:"The size of the calldata in transactions",unit:"By",valueType:ValueType.INT},L1_PUBLISHER_TX_CALLDATA_GAS={name:"aztec.l1_publisher.tx_calldata_gas",description:"The gas consumed by the calldata in transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_BLOBDATA_GAS_USED={name:"aztec.l1_publisher.tx_blobdata_gas_used",description:"The amount of blob gas used in transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_BLOBDATA_GAS_COST={name:"aztec.l1_publisher.tx_blobdata_gas_cost",description:"The gas cost of blobs in transactions",unit:"gwei",valueType:ValueType.INT},L1_PUBLISHER_BLOB_COUNT={name:"aztec.l1_publisher.blob_count",description:"Number of blobs in L1 transactions",unit:"blobs",valueType:ValueType.INT},L1_PUBLISHER_BLOB_INCLUSION_BLOCKS={name:"aztec.l1_publisher.blob_inclusion_blocks",description:"Number of L1 blocks between blob tx submission and inclusion",unit:"blocks",valueType:ValueType.INT};var L1_PUBLISHER_BALANCE={name:"aztec.l1_publisher.balance",description:"ETH balance of a publisher, read every minute",unit:"eth",valueType:ValueType.DOUBLE},L1_PUBLISHER_REQUIRED_BALANCE={name:"aztec.l1_publisher.required_balance",description:"ETH a publisher must hold to afford a reference send at current fees: a first-of-epoch checkpoint proposal without invalidation for sequencers, an epoch proof submission for provers",unit:"eth",valueType:ValueType.DOUBLE},L1_PUBLISHER_SENDS_AFFORDABLE={name:"aztec.l1_publisher.sends_affordable",description:"Number of reference sends (see aztec.l1_publisher.required_balance) a publisher balance covers at current fees, 0 while it is backed off after an insufficient funds rejection",valueType:ValueType.INT},L1_BALANCE_ETH={name:"aztec.l1.balance",description:"Deprecated, use aztec.l1_publisher.balance instead. ETH balance of a publisher, read every minute",unit:"eth",valueType:ValueType.DOUBLE},L1_FUNDER_BALANCE={name:"aztec.l1_publisher.funder_balance",description:"ETH balance of the funding account that tops up publishers, read every minute",unit:"eth",valueType:ValueType.DOUBLE},PROVER_NODE_PROOF_SUBMISSION_UNAFFORDABLE_COUNT={name:"aztec.prover_node.proof_submission_unaffordable_count",description:"Number of finished epoch proofs held back from submission because no publisher could afford sending it",valueType:ValueType.INT},L1_PUBLISHER_TX_TOTAL_FEE={name:"aztec.l1_publisher.tx_total_fee",description:"How much L1 tx costs",unit:"eth",valueType:ValueType.DOUBLE},PROVER_NODE_ESTIMATED_SUBMISSION_GAS={name:"aztec.prover_node.estimated_submission.gas",description:"Estimated gas for a proof submission tx (proof publishing disabled, not actually sent)",unit:"gas",valueType:ValueType.INT},PROVER_NODE_ESTIMATED_SUBMISSION_GAS_PRICE={name:"aztec.prover_node.estimated_submission.gas_price",description:"Estimated effective gas price for a proof submission tx (proof publishing disabled, not actually sent)",unit:"gwei",valueType:ValueType.DOUBLE},PROVER_NODE_ESTIMATED_SUBMISSION_TOTAL_FEE={name:"aztec.prover_node.estimated_submission.total_fee",description:"Estimated total L1 fee for a proof submission tx (proof publishing disabled, not actually sent)",unit:"eth",valueType:ValueType.DOUBLE},L1_BLOCK_HEIGHT={name:"aztec.l1.block_height",description:"The current L1 block height",valueType:ValueType.INT},L1_GAS_PRICE_WEI={name:"aztec.l1.gas_price",description:"Current L1 gas price",unit:"wei",valueType:ValueType.INT},L1_BLOB_BASE_FEE_WEI={name:"aztec.l1.blob_base_fee",description:"Current L1 blob base fee",unit:"wei",valueType:ValueType.INT},L1_TX_MINED_DURATION={name:"aztec.l1_tx.mined_duration",description:"Duration from L1 tx submission to mining",unit:"ms",valueType:ValueType.INT},L1_TX_MINED_COUNT={name:"aztec.l1_tx.mined_count",description:"Number of L1 transactions mined",valueType:ValueType.INT},L1_TX_REVERTED_COUNT={name:"aztec.l1_tx.reverted_count",description:"Number of L1 transactions reverted",valueType:ValueType.INT},L1_TX_CANCELLED_COUNT={name:"aztec.l1_tx.cancelled_count",description:"Number of L1 transactions cancelled",valueType:ValueType.INT},L1_TX_NOT_MINED_COUNT={name:"aztec.l1_tx.not_mined_count",description:"Number of L1 transactions not mined",valueType:ValueType.INT},L1_TX_ATTEMPTS_UNTIL_MINED={name:"aztec.l1_tx.attempts_until_mined",description:"Number of attempts until L1 tx was mined",valueType:ValueType.INT},L1_TX_MAX_PRIORITY_FEE={name:"aztec.l1_tx.max_priority_fee",description:"Max priority fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},L1_TX_MAX_FEE={name:"aztec.l1_tx.max_fee",description:"Max fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},L1_TX_BLOB_FEE={name:"aztec.l1_tx.blob_fee",description:"Blob fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},PEER_MANAGER_GOODBYES_SENT={name:"aztec.peer_manager.goodbyes_sent",description:"Number of goodbyes sent to peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_GOODBYES_RECEIVED={name:"aztec.peer_manager.goodbyes_received",description:"Number of goodbyes received from peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_PEER_COUNT={name:"aztec.peer_manager.peer_count",description:"Number of peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_HEALTHY_PEER_COUNT={name:"aztec.peer_manager.healthy_peer_count",description:"Number of healthy (non-protected, non-banned) peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_LOW_SCORE_DISCONNECTS={name:"aztec.peer_manager.low_score_disconnects",description:"Number of peers disconnected due to low score",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_PEER_CONNECTION_DURATION={name:"aztec.peer_manager.peer_connection_duration",description:"Time duration between peer connection and disconnection",unit:"ms",valueType:ValueType.INT},P2P_PEER_STATE_COUNT={name:"aztec.p2p.peer_state_count",description:"Number of peers in each state",unit:"peers",valueType:ValueType.INT},P2P_REQ_RESP_SENT_REQUESTS={name:"aztec.p2p.req_resp.sent_requests",description:"Number of requests sent to peers",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_RECEIVED_REQUESTS={name:"aztec.p2p.req_resp.received_requests",description:"Number of requests received from peers",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS={name:"aztec.p2p.req_resp.failed_outbound_requests",description:"Number of failed outbound requests - nodes not getting valid responses",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_FAILED_INBOUND_REQUESTS={name:"aztec.p2p.req_resp.failed_inbound_requests",description:"Number of failed inbound requests - node failing to respond to requests",unit:"requests",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_VALIDATION_DURATION={name:"aztec.p2p.gossip.message_validation_duration",description:"Duration to validate a gossip message",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT={name:"aztec.p2p.gossip.message_validation_count",description:"Number of gossip messages validated",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_LATENCY={name:"aztec.p2p.gossip.message_latency",description:"Latency of gossip messages",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_TX_RECEIVED_COUNT={name:"aztec.p2p.gossip.tx_received_count",description:"Number of transactions received via gossip",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN={name:"aztec.p2p.gossip.agg_message_latency_min",description:"Minimum aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX={name:"aztec.p2p.gossip.agg_message_latency_max",description:"Maximum aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50={name:"aztec.p2p.gossip.agg_message_latency_p50",description:"P50 aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90={name:"aztec.p2p.gossip.agg_message_latency_p90",description:"P90 aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG={name:"aztec.p2p.gossip.agg_message_latency_avg",description:"Average aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN={name:"aztec.p2p.gossip.agg_message_validation_duration_min",description:"Minimum aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX={name:"aztec.p2p.gossip.agg_message_validation_duration_max",description:"Maximum aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50={name:"aztec.p2p.gossip.agg_message_validation_duration_p50",description:"P50 aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90={name:"aztec.p2p.gossip.agg_message_validation_duration_p90",description:"P90 aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG={name:"aztec.p2p.gossip.agg_message_validation_duration_avg",description:"Average aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_SLOW_VALIDATION_COUNT={name:"aztec.p2p.gossip.slow_validation_count",description:"Number of gossip validations that exceeded 75% of the mcache eviction window",valueType:ValueType.INT},P2P_GOSSIP_TX_VALIDATION_STAGE_DURATION={name:"aztec.p2p.gossip.tx_validation_stage_duration",description:"Duration of each stage of gossiped tx validation, keyed by the tx_validation_stage attribute",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_DURATION={name:"aztec.public_processor.tx_duration",description:"Duration to process a public transaction",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_COUNT={name:"aztec.public_processor.tx_count",description:"Number of public transactions processed",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_PHASE_COUNT={name:"aztec.public_processor.tx_phase_count",description:"Number of phases in public transaction processing",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_GAS={name:"aztec.public_processor.tx_gas",description:"Gas consumed by public transaction",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_PHASE_DURATION={name:"aztec.public_processor.phase_duration",description:"Duration of public processing phase",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_PHASE_COUNT={name:"aztec.public_processor.phase_count",description:"Number of public processing phases",valueType:ValueType.INT},PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE={name:"aztec.public_processor.deploy_bytecode_size",description:"Size of deployed bytecode",unit:"By",valueType:ValueType.INT},PUBLIC_PROCESSOR_TOTAL_GAS={name:"aztec.public_processor.total_gas",description:"Total gas consumed by public processor",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM={name:"aztec.public_processor.total_gas_histogram",description:"Histogram of total gas consumed by public processor",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_GAS_RATE={name:"aztec.public_processor.gas_rate",description:"Gas rate in public processor",unit:"gas/s",valueType:ValueType.DOUBLE},PUBLIC_PROCESSOR_TREE_INSERTION={name:"aztec.public_processor.tree_insertion",description:"Duration of tree insertion in public processor",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT={name:"aztec.public_processor.silently_skipped_count",description:"Public txs fully processed then skipped (e.g. blob-field limit); not counted as processed or failed",valueType:ValueType.INT},PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION={name:"aztec.public_processor.silently_skipped_duration",description:"Wall-clock time spent processing txs that were then silently skipped",unit:"ms",valueType:ValueType.INT};var PUBLIC_EXECUTOR_SIMULATION_COUNT={name:"aztec.public_executor.simulation_count",description:"Number of functions executed",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_DURATION={name:"aztec.public_executor.simulation_duration",description:"How long it takes to execute a function",unit:"ms",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_MANA_PER_SECOND={name:"aztec.public_executor.simulation_mana_per_second",description:"Mana used per second",unit:"mana/s",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_MANA_USED={name:"aztec.public_executor.simulation_mana_used",description:"Total mana used",unit:"mana",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_TOTAL_INSTRUCTIONS={name:"aztec.public_executor.simulation_total_instructions",description:"Total number of instructions executed",valueType:ValueType.INT},PUBLIC_EXECUTOR_TX_HASHING={name:"aztec.public_executor.tx_hashing",description:"Tx hashing time",unit:"ms",valueType:ValueType.INT},PUBLIC_EXECUTOR_PRIVATE_EFFECTS_INSERTION={name:"aztec.public_executor.private_effects_insertion",description:"Private effects insertion time",unit:"us",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_BYTECODE_SIZE={name:"aztec.public_executor.simulation_bytecode_size",description:"Size of bytecode being executed",unit:"By",valueType:ValueType.INT},PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION={name:"aztec.proving_orchestrator.base_rollup.inputs_duration",description:"Duration to build base rollup inputs",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_JOB_SIZE={name:"aztec.proving_queue.job_size",description:"Size of proving jobs",unit:"By",valueType:ValueType.INT},PROVING_QUEUE_SIZE={name:"aztec.proving_queue.size",description:"Number of jobs in the proving queue",valueType:ValueType.INT},PROVING_QUEUE_TOTAL_JOBS={name:"aztec.proving_queue.enqueued_jobs_count",description:"Total number of jobs enqueued",valueType:ValueType.INT},PROVING_QUEUE_CACHED_JOBS={name:"aztec.proving_queue.cached_jobs_count",description:"Number of cached proving jobs",valueType:ValueType.INT},PROVING_QUEUE_ACTIVE_JOBS={name:"aztec.proving_queue.active_jobs_count",description:"Number of active proving jobs",valueType:ValueType.INT},PROVING_QUEUE_RESOLVED_JOBS={name:"aztec.proving_queue.resolved_jobs_count",description:"Number of resolved proving jobs",valueType:ValueType.INT},PROVING_QUEUE_REJECTED_JOBS={name:"aztec.proving_queue.rejected_jobs_count",description:"Number of rejected proving jobs",valueType:ValueType.INT},PROVING_QUEUE_ABORTED_JOBS={name:"aztec.proving_queue.aborted_jobs_count",description:"Number of aborted proving jobs",valueType:ValueType.INT},PROVING_QUEUE_RETRIED_JOBS={name:"aztec.proving_queue.retried_jobs_count",description:"Number of retried proving jobs",valueType:ValueType.INT},PROVING_QUEUE_TIMED_OUT_JOBS={name:"aztec.proving_queue.timed_out_jobs_count",description:"Number of timed out proving jobs",valueType:ValueType.INT},PROVING_QUEUE_JOB_WAIT={name:"aztec.proving_queue.job_wait",description:"Records how long a job sits in the queue",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_JOB_DURATION={name:"aztec.proving_queue.job_duration",description:"Records how long a job takes to complete",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_DB_NUM_ITEMS={name:"aztec.proving_queue.db.num_items",description:"Number of items in the proving queue database",valueType:ValueType.INT},PROVING_QUEUE_DB_MAP_SIZE={name:"aztec.proving_queue.db.map_size",description:"Map size of the proving queue database",unit:"By",valueType:ValueType.INT},PROVING_QUEUE_DB_USED_SIZE={name:"aztec.proving_queue.db.used_size",description:"Used size of the proving queue database",unit:"By",valueType:ValueType.INT},PROVING_AGENT_IDLE={name:"aztec.proving_queue.agent.idle",description:"Records how long an agent was idle",unit:"s",valueType:ValueType.DOUBLE},PROVER_NODE_JOB_DURATION={name:"aztec.prover_node.job_duration",description:"Duration of proving job",unit:"s",valueType:ValueType.DOUBLE},PROVER_NODE_JOB_CHECKPOINTS={name:"aztec.prover_node.job_checkpoints",description:"Number of checkpoints in a proven epoch",valueType:ValueType.INT},PROVER_NODE_JOB_BLOCKS={name:"aztec.prover_node.job_blocks",description:"Number of blocks in a proven epoch",valueType:ValueType.INT},PROVER_NODE_JOB_TRANSACTIONS={name:"aztec.prover_node.job_transactions",description:"Number of transactions in a proven epoch",valueType:ValueType.INT},PROVER_NODE_BLOB_PROCESSING_LAST_DURATION={name:"aztec.prover_node.blob_processing.last_duration",description:"Duration of blob processing step in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_BLOCK_PROCESSING_DURATION={name:"aztec.prover_node.block_processing.duration",description:"Duration of processing a single block in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_PROCESSING_DURATION={name:"aztec.prover_node.checkpoint_processing.duration",description:"Duration of processing a single checkpoint in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_BLOCKS={name:"aztec.prover_node.checkpoint_blocks",description:"Number of blocks in a proven checkpoint",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_TRANSACTIONS={name:"aztec.prover_node.checkpoint_transactions",description:"Number of transactions in a proven checkpoint",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_PROVING_DURATION={name:"aztec.prover_node.checkpoint_proving.duration",description:"Duration from the start of checkpoint processing to its block proofs being ready (excludes tx gathering)",unit:"ms",valueType:ValueType.INT},PROVER_NODE_ACTIVE_CHECKPOINTS={name:"aztec.prover_node.active_checkpoints",description:"Current number of canonical CheckpointProvers in the store (i.e. checkpoints currently being proven)",valueType:ValueType.INT},PROVER_NODE_ACTIVE_EPOCH_SESSIONS={name:"aztec.prover_node.active_epoch_sessions",description:"Current number of live EpochSessions, broken down by kind (full|partial)",valueType:ValueType.INT},PROVER_NODE_REWARDS_TOTAL={name:"aztec.prover_node.rewards_total",description:"The rewards earned (total)",valueType:ValueType.DOUBLE},PROVER_NODE_REWARDS_PER_EPOCH={name:"aztec.prover_node.rewards_per_epoch",description:"The rewards earned",valueType:ValueType.DOUBLE},WORLD_STATE_FORK_DURATION={name:"aztec.world_state.fork.duration",description:"Duration to fork world state",unit:"ms",valueType:ValueType.INT},WORLD_STATE_SYNC_DURATION={name:"aztec.world_state.sync.duration",description:"Duration to sync world state",unit:"ms",valueType:ValueType.INT},WORLD_STATE_MERKLE_TREE_SIZE={name:"aztec.world_state.merkle_tree_size",description:"Size of the merkle tree",valueType:ValueType.INT},WORLD_STATE_DB_SIZE={name:"aztec.world_state.db_size",description:"Size of the world state database",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_MAP_SIZE={name:"aztec.world_state.db_map_size",description:"The current configured map size for each merkle tree",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_PHYSICAL_SIZE={name:"aztec.world_state.db_physical_size",description:"The current physical disk space used for each database",unit:"By",valueType:ValueType.INT},WORLD_STATE_TREE_SIZE={name:"aztec.world_state.tree_size",description:"The current number of leaves in each merkle tree",valueType:ValueType.INT},WORLD_STATE_UNFINALIZED_HEIGHT={name:"aztec.world_state.unfinalized_height",description:"The unfinalized block height of each merkle tree",valueType:ValueType.INT},WORLD_STATE_FINALIZED_HEIGHT={name:"aztec.world_state.finalized_height",description:"The finalized block height of each merkle tree",valueType:ValueType.INT},WORLD_STATE_OLDEST_BLOCK={name:"aztec.world_state.oldest_block",description:"The oldest historical block of each merkle tree",valueType:ValueType.INT},WORLD_STATE_DB_USED_SIZE={name:"aztec.world_state.db_used_size",description:"The current used database size for each db of each merkle tree",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_NUM_ITEMS={name:"aztec.world_state.db_num_items",description:"The current number of items in each database of each merkle tree",valueType:ValueType.INT},WORLD_STATE_REQUEST_TIME={name:"aztec.world_state.request_time",description:"The round trip time of world state requests",unit:"us",valueType:ValueType.INT},WORLD_STATE_CRITICAL_ERROR_COUNT={name:"aztec.world_state.critical_error_count",description:"The number of critical errors in the world state",valueType:ValueType.INT},PROOF_VERIFIER_COUNT={name:"aztec.proof_verifier.count",description:"Number of proofs verified",valueType:ValueType.INT},VALIDATOR_RE_EXECUTION_TIME={name:"aztec.validator.re_execution_time",description:"The time taken to re-execute a transaction",unit:"ms",valueType:ValueType.INT},VALIDATOR_RE_EXECUTION_MANA={name:"aztec.validator.re_execution_mana",description:"The mana consumed by blocks",unit:"Mmana",valueType:ValueType.DOUBLE},VALIDATOR_RE_EXECUTION_TX_COUNT={name:"aztec.validator.re_execution_tx_count",description:"The number of txs in a block proposal",unit:"tx",valueType:ValueType.INT},VALIDATOR_CHECKPOINT_PROPOSAL_TO_PIPELINED_STATE_DURATION={name:"aztec.validator.checkpoint_proposal_to_pipelined_state_duration",description:"Time from receiving a checkpoint proposal to setting proposed checkpoint state for pipelining",unit:"ms",valueType:ValueType.INT},VALIDATOR_CHECKPOINT_PROPOSAL_RECEIVE_OFFSET_FROM_NEXT_SLOT_BOUNDARY={name:"aztec.validator.checkpoint.proposal_receive_offset_from_next_slot_boundary",description:"Absolute offset from the next slot boundary when a foreign checkpoint proposal is received. Use aztec.slot_boundary_side to distinguish before vs after the boundary.",unit:"ms",valueType:ValueType.INT},VALIDATOR_FAILED_REEXECUTION_COUNT={name:"aztec.validator.failed_reexecution_count",description:"The number of failed re-executions",valueType:ValueType.INT},VALIDATOR_ATTESTATION_SUCCESS_COUNT={name:"aztec.validator.attestation_success_count",description:"The number of successful attestations",valueType:ValueType.INT},VALIDATOR_ATTESTATION_FAILED_BAD_PROPOSAL_COUNT={name:"aztec.validator.attestation_failed_bad_proposal_count",description:"The number of failed attestations due to invalid block proposals",valueType:ValueType.INT},VALIDATOR_ATTESTATION_FAILED_NODE_ISSUE_COUNT={name:"aztec.validator.attestation_failed_node_issue_count",description:"The number of failed attestations due to node issues (timeout, missing data, etc.)",valueType:ValueType.INT},VALIDATOR_CURRENT_EPOCH={name:"aztec.validator.current_epoch",description:"The current epoch number, reflecting total epochs elapsed since genesis",valueType:ValueType.INT},VALIDATOR_LOADED_ATTESTERS_COUNT={name:"aztec.validator.loaded_attesters_count",description:"Number of attesters loaded by this validator",valueType:ValueType.INT},VALIDATOR_ATTESTED_EPOCH_COUNT={name:"aztec.validator.attested_epoch_count",description:"The number of epochs in which this node successfully submitted at least one attestation",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MIN={name:"nodejs.eventloop.delay.min",description:"Minimum delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MEAN={name:"nodejs.eventloop.delay.mean",description:"Mean delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MAX={name:"nodejs.eventloop.delay.max",description:"Max delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_STDDEV={name:"nodejs.eventloop.delay.stddev",description:"Stddev delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P50={name:"nodejs.eventloop.delay.p50",description:"P50 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P90={name:"nodejs.eventloop.delay.p90",description:"P90 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P99={name:"nodejs.eventloop.delay.p99",description:"P99 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_UTILIZATION={name:"nodejs.eventloop.utilization",description:"How busy is the event loop",valueType:ValueType.DOUBLE},NODEJS_EVENT_LOOP_TIME={name:"nodejs.eventloop.time",description:"How much time the event loop has spent in a given state",unit:"ms",valueType:ValueType.INT};var TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT={name:"aztec.tx_collector.txs_from_proposal_count",description:"The number of txs taken from block proposals",valueType:ValueType.INT},TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT={name:"aztec.tx_collector.txs_from_mempool_count",description:"The number of txs taken from the local mempool",valueType:ValueType.INT},TX_PROVIDER_TXS_FROM_P2P_COUNT={name:"aztec.tx_collector.txs_from_p2p_count",description:"The number of txs taken from the p2p network",valueType:ValueType.INT},TX_PROVIDER_MISSING_TXS_COUNT={name:"aztec.tx_collector.missing_txs_count",description:"The number of txs not found anywhere",valueType:ValueType.INT},TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION={name:"aztec.tx_collector.txs_requested_fraction",description:"The fraction of transaction requested from peers",valueType:ValueType.DOUBLE},TX_PROVIDER_P2P_TXS_REQUEST_DELAY={name:"aztec.tx_collector.txs_requested_delay",description:"The time it took to request missing transactions from p2p",unit:"ms",valueType:ValueType.INT},TX_COLLECTOR_COUNT={name:"aztec.tx_collector.tx_count",description:"The number of txs collected",valueType:ValueType.INT},TX_COLLECTOR_DURATION_PER_REQUEST={name:"aztec.tx_collector.duration_per_request",description:"Total duration of an individual tx collection request",unit:"ms",valueType:ValueType.INT},TX_COLLECTOR_DURATION_PER_TX={name:"aztec.tx_collector.duration_per_tx",description:"Average duration per tx of an individual tx collection request",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_SUCCESS={name:"aztec.p2p.tx_file_store.uploads_success",description:"Number of successful tx uploads to file storage",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_FAILED={name:"aztec.p2p.tx_file_store.uploads_failed",description:"Number of failed tx uploads to file storage",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_SKIPPED={name:"aztec.p2p.tx_file_store.uploads_skipped",description:"Number of tx uploads skipped (duplicates)",valueType:ValueType.INT},TX_FILE_STORE_UPLOAD_DURATION={name:"aztec.p2p.tx_file_store.upload_duration",description:"Duration to upload a tx to file storage",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_QUEUE_SIZE={name:"aztec.p2p.tx_file_store.queue_size",description:"Number of txs pending upload",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOADS_SUCCESS={name:"aztec.p2p.tx_file_store.downloads_success",description:"Number of successful tx downloads from file storage",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOADS_FAILED={name:"aztec.p2p.tx_file_store.downloads_failed",description:"Number of failed tx downloads from file storage",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOAD_DURATION={name:"aztec.p2p.tx_file_store.download_duration",description:"Duration to download a tx from file storage",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOAD_SIZE={name:"aztec.p2p.tx_file_store.download_size",description:"Size of a downloaded tx from file storage",unit:"By",valueType:ValueType.INT},IVC_VERIFIER_TIME={name:"aztec.ivc_verifier.time",description:"Duration to verify chonk proofs",unit:"ms",valueType:ValueType.INT},IVC_VERIFIER_TOTAL_TIME={name:"aztec.ivc_verifier.total_time",description:"Total duration to verify chonk proofs, including serde",unit:"ms",valueType:ValueType.INT},IVC_VERIFIER_FAILURE_COUNT={name:"aztec.ivc_verifier.failure_count",description:"Count of failed IVC proof verifications",valueType:ValueType.INT},IVC_VERIFIER_AGG_DURATION_MIN={name:"aztec.ivc_verifier.agg_duration_min",description:"MIN ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_MAX={name:"aztec.ivc_verifier.agg_duration_max",description:"MAX ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_P50={name:"aztec.ivc_verifier.agg_duration_p50",description:"P50 ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_P90={name:"aztec.ivc_verifier.agg_duration_p90",description:"P90 ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_AVG={name:"aztec.ivc_verifier.agg_duration_avg",description:"AVG ivc verification",unit:"ms",valueType:ValueType.DOUBLE},HA_SIGNER_SIGNING_DURATION={name:"aztec.ha_signer.signing_duration",description:"End-to-end duration for signing with HA protection (lock + sign + record)",unit:"ms",valueType:ValueType.INT},HA_SIGNER_SIGNING_SUCCESS_COUNT={name:"aztec.ha_signer.signing_success_count",description:"Count of successful signing operations",valueType:ValueType.INT},HA_SIGNER_DUTY_ALREADY_SIGNED_COUNT={name:"aztec.ha_signer.duty_already_signed_count",description:"Count of DutyAlreadySignedError (expected in HA; another node signed first)",valueType:ValueType.INT},HA_SIGNER_SLASHING_PROTECTION_COUNT={name:"aztec.ha_signer.slashing_protection_count",description:"Count of SlashingProtectionError (attempted to sign different data)",valueType:ValueType.INT},HA_SIGNER_SIGNING_ERROR_COUNT={name:"aztec.ha_signer.signing_error_count",description:"Count of signing function failures (lock deleted for retry)",valueType:ValueType.INT},HA_SIGNER_LOCK_ACQUIRED_COUNT={name:"aztec.ha_signer.lock_acquired_count",description:"Count of lock acquisitions (new lock acquired vs existing record found)",valueType:ValueType.INT},HA_SIGNER_CLEANUP_STUCK_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_stuck_duties_count",description:"Number of stuck duties cleaned up per cleanup run",valueType:ValueType.INT},HA_SIGNER_CLEANUP_OLD_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_old_duties_count",description:"Number of old duties cleaned up",valueType:ValueType.INT},HA_SIGNER_CLEANUP_OUTDATED_ROLLUP_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_outdated_rollup_duties_count",description:"Number of duties cleaned due to rollup upgrade",valueType:ValueType.INT},BOT_INBOX_MESSAGE_COUNT={name:"aztec.bot.inbox.message_count",description:"Count of L1\u2192L2 messages reaching each milestone of the inbox bot pipeline",unit:"messages",valueType:ValueType.INT},BOT_INBOX_STAGE_DURATION={name:"aztec.bot.inbox.stage_duration",description:"Bot-observed duration of each stage of the L1\u2192L2 message lifecycle",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_SIMULATION_COUNT={name:"aztec.bot.inbox.simulation_count",description:"Count of L2 consumption simulation attempts by outcome",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_L2_SEND_DURATION={name:"aztec.bot.inbox.l2_send_duration",description:"Duration of the wallet simulate, prove, and submit operation for an Inbox consumption lane",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_L2_ACTIVE_ATTEMPTS={name:"aztec.bot.inbox.l2_active_attempts",description:"Number of Inbox consumption wallet operations currently active in each lane",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_PUBLIC_EXECUTION_COUNT={name:"aztec.bot.inbox.public_execution_count",description:"Count of public consumption executions by outcome",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_PREDICTION_MISMATCH_COUNT={name:"aztec.bot.inbox.prediction_mismatch_count",description:"Count of accepted simulations whose public execution later reverted",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_CHECK_COUNT={name:"aztec.bot.inbox.check_count",description:"Count of node API semantic checks by check and outcome",unit:"checks",valueType:ValueType.INT},BOT_INBOX_FAILURE_COUNT={name:"aztec.bot.inbox.failure_count",description:"Count of inbox bot failures by bounded reason",unit:"failures",valueType:ValueType.INT},BOT_INBOX_PENDING_COUNT={name:"aztec.bot.inbox.pending_count",description:"Number of produced messages not yet completed",unit:"messages",valueType:ValueType.INT},BOT_INBOX_OLDEST_PENDING_AGE={name:"aztec.bot.inbox.oldest_pending_age",description:"Age of the oldest message not yet completed",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_L1_BATCH_COUNT={name:"aztec.bot.inbox.l1_batch_count",description:"Count of L1 Inbox batches submitted by outcome",unit:"batches",valueType:ValueType.INT},BOT_INBOX_L1_BATCH_SIZE={name:"aztec.bot.inbox.l1_batch_size",description:"Number of messages per L1 Inbox batch",unit:"messages",valueType:ValueType.INT},BOT_INBOX_L1_GAS_USED={name:"aztec.bot.inbox.l1_gas_used",description:"L1 gas used by an Inbox batch transaction",unit:"gas",valueType:ValueType.INT},BOT_INBOX_SATURATION_RUN_COUNT={name:"aztec.bot.inbox.saturation_run_count",description:"Count of full-bucket saturation runs by outcome",unit:"runs",valueType:ValueType.INT},BOT_INBOX_SATURATION_LAST_SUCCESS_TIMESTAMP={name:"aztec.bot.inbox.saturation_last_success_timestamp",description:"Unix timestamp of the last fully successful saturation run, or 0 if none",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_SATURATION_ENABLED={name:"aztec.bot.inbox.saturation_enabled",description:"Whether the saturation schedule is enabled (1) or disabled (0)",unit:"1",valueType:ValueType.INT},BOT_INBOX_SATURATION_NEXT_DUE_TIMESTAMP={name:"aztec.bot.inbox.saturation_next_due_timestamp",description:"Unix timestamp of the next scheduled saturation run, or 0 when disabled",unit:"s",valueType:ValueType.DOUBLE};var import_prom_client=__toESM(require_prom_client(),1);function makeMetricDefinition(prop){return{name:`aztec.stub.${prop.toLowerCase()}`,description:"TXE stub metric",valueType:ValueType.INT}}__name(makeMetricDefinition,"makeMetricDefinition");var Metrics=new Proxy(Object.create(null),{get:__name((_target,prop)=>typeof prop=="string"?makeMetricDefinition(prop):void 0,"get")}),Attributes=new Proxy(Object.create(null),{get:__name((_target,prop)=>typeof prop=="string"?`aztec.stub.${prop.toLowerCase()}`:void 0,"get")});import assert5 from"assert/strict";import{mkdir as mkdir3,mkdtemp as mkdtemp2,rm as rm4}from"fs/promises";import{tmpdir as tmpdir4}from"os";import{join as join8}from"path";var durationTrackDenylist=new Set(["getInitialStateReference"]),WorldStateInstrumentation=class{static{__name(this,"WorldStateInstrumentation")}telemetry;log;dbMapSize;dbPhysicalSize;treeSize;unfinalizedHeight;finalizedHeight;oldestBlock;dbNumItems;dbUsedSize;requestHistogram;criticalErrors;constructor(telemetry,log2=createLogger("world-state:instrumentation")){this.telemetry=telemetry,this.log=log2;let meter=telemetry.getMeter("World State");this.dbMapSize=meter.createGauge(Metrics.WORLD_STATE_DB_MAP_SIZE),this.dbPhysicalSize=meter.createGauge(Metrics.WORLD_STATE_DB_PHYSICAL_SIZE),this.treeSize=meter.createGauge(Metrics.WORLD_STATE_TREE_SIZE),this.unfinalizedHeight=meter.createGauge(Metrics.WORLD_STATE_UNFINALIZED_HEIGHT),this.finalizedHeight=meter.createGauge(Metrics.WORLD_STATE_FINALIZED_HEIGHT),this.oldestBlock=meter.createGauge(Metrics.WORLD_STATE_OLDEST_BLOCK),this.dbUsedSize=meter.createGauge(Metrics.WORLD_STATE_DB_USED_SIZE),this.dbNumItems=meter.createGauge(Metrics.WORLD_STATE_DB_NUM_ITEMS),this.requestHistogram=meter.createHistogram(Metrics.WORLD_STATE_REQUEST_TIME),this.criticalErrors=createUpDownCounterWithDefault(meter,Metrics.WORLD_STATE_CRITICAL_ERROR_COUNT,{[Attributes.ERROR_TYPE]:["synch_pending_block","finalize_block","prune_pending_block","prune_historical_block"]})}updateTreeStats(treeDbStats,treeMeta,tree){this.dbMapSize.record(Number(treeDbStats.mapSize),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.dbPhysicalSize.record(Number(treeDbStats.physicalFileSize),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.treeSize.record(Number(treeMeta.size),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.unfinalizedHeight.record(Number(treeMeta.unfinalizedBlockHeight),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.finalizedHeight.record(Number(treeMeta.finalizedBlockHeight),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.oldestBlock.record(Number(treeMeta.oldestHistoricBlock),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.updateTreeDBStats(treeDbStats.blockIndicesDBStats,"block_indices",tree),this.updateTreeDBStats(treeDbStats.blocksDBStats,"blocks",tree),this.updateTreeDBStats(treeDbStats.leafIndicesDBStats,"leaf_indices",tree),this.updateTreeDBStats(treeDbStats.leafPreimagesDBStats,"leaf_preimage",tree),this.updateTreeDBStats(treeDbStats.nodesDBStats,"nodes",tree)}updateTreeDBStats(dbStats,dbType,tree){this.dbNumItems.record(Number(dbStats.numDataItems),{[Attributes.WS_DB_DATA_TYPE]:dbType,[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.dbUsedSize.record(Number(dbStats.totalUsedSize),{[Attributes.WS_DB_DATA_TYPE]:dbType,[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]})}updateWorldStateMetrics(worldStateStatus){this.updateTreeStats(worldStateStatus.dbStats.archiveTreeStats,worldStateStatus.meta.archiveTreeMeta,MerkleTreeId.ARCHIVE),this.updateTreeStats(worldStateStatus.dbStats.messageTreeStats,worldStateStatus.meta.messageTreeMeta,MerkleTreeId.L1_TO_L2_MESSAGE_TREE),this.updateTreeStats(worldStateStatus.dbStats.noteHashTreeStats,worldStateStatus.meta.noteHashTreeMeta,MerkleTreeId.NOTE_HASH_TREE),this.updateTreeStats(worldStateStatus.dbStats.nullifierTreeStats,worldStateStatus.meta.nullifierTreeMeta,MerkleTreeId.NULLIFIER_TREE),this.updateTreeStats(worldStateStatus.dbStats.publicDataTreeStats,worldStateStatus.meta.publicDataTreeMeta,MerkleTreeId.PUBLIC_DATA_TREE)}recordRoundTrip(timeUs,operation){durationTrackDenylist.has(operation)||this.requestHistogram.record(Math.ceil(timeUs),{[Attributes.WORLD_STATE_REQUEST_TYPE]:operation})}incCriticalErrors(errorType){this.criticalErrors.add(1,{[Attributes.ERROR_TYPE]:errorType})}};import{Decoder as Decoder7,Encoder as Encoder12}from"msgpackr";function assertU642(value,ctx){if(typeof value=="bigint"){if(value<0n||value>BigInt(Number.MAX_SAFE_INTEGER))throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return Number(value)}if(!Number.isSafeInteger(value)||value<0)throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return value}__name(assertU642,"assertU64");function toWireU64(value,ctx){let checked=assertU642(value,ctx);return checked>4294967295?BigInt(checked):checked}__name(toWireU64,"toWireU64");function assertBin322(value,ctx){if(value.length!==32)throw new Error(`${ctx}: expected 32 bytes, got ${value.length}`);return value}__name(assertBin322,"assertBin32");function toTreeStateReference(o){if(o.treeId===void 0)throw new Error("Expected treeId in TreeStateReference deserialization");if(o.root===void 0)throw new Error("Expected root in TreeStateReference deserialization");if(o.size===void 0)throw new Error("Expected size in TreeStateReference deserialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:assertU642(o.size,"o.size")}}__name(toTreeStateReference,"toTreeStateReference");function toPublicDataLeafValue(o){if(o.slot===void 0)throw new Error("Expected slot in PublicDataLeafValue deserialization");if(o.value===void 0)throw new Error("Expected value in PublicDataLeafValue deserialization");return{slot:assertBin322(o.slot,"o.slot"),value:assertBin322(o.value,"o.value")}}__name(toPublicDataLeafValue,"toPublicDataLeafValue");function toNullifierLeafValue(o){if(o.nullifier===void 0)throw new Error("Expected nullifier in NullifierLeafValue deserialization");return{nullifier:assertBin322(o.nullifier,"o.nullifier")}}__name(toNullifierLeafValue,"toNullifierLeafValue");function toIndexedPublicDataLeafValue(o){if(o.leaf===void 0)throw new Error("Expected leaf in IndexedPublicDataLeafValue deserialization");if(o.nextIndex===void 0)throw new Error("Expected nextIndex in IndexedPublicDataLeafValue deserialization");if(o.nextKey===void 0)throw new Error("Expected nextKey in IndexedPublicDataLeafValue deserialization");return{leaf:toPublicDataLeafValue(o.leaf),nextIndex:assertU642(o.nextIndex,"o.nextIndex"),nextKey:assertBin322(o.nextKey,"o.nextKey")}}__name(toIndexedPublicDataLeafValue,"toIndexedPublicDataLeafValue");function toIndexedNullifierLeafValue(o){if(o.leaf===void 0)throw new Error("Expected leaf in IndexedNullifierLeafValue deserialization");if(o.nextIndex===void 0)throw new Error("Expected nextIndex in IndexedNullifierLeafValue deserialization");if(o.nextKey===void 0)throw new Error("Expected nextKey in IndexedNullifierLeafValue deserialization");return{leaf:toNullifierLeafValue(o.leaf),nextIndex:assertU642(o.nextIndex,"o.nextIndex"),nextKey:assertBin322(o.nextKey,"o.nextKey")}}__name(toIndexedNullifierLeafValue,"toIndexedNullifierLeafValue");function toSiblingPathAndIndex(o){if(o.index===void 0)throw new Error("Expected index in SiblingPathAndIndex deserialization");if(o.path===void 0)throw new Error("Expected path in SiblingPathAndIndex deserialization");return{index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toSiblingPathAndIndex,"toSiblingPathAndIndex");function toPublicDataLeafUpdateWitnessData(o){if(o.leaf===void 0)throw new Error("Expected leaf in PublicDataLeafUpdateWitnessData deserialization");if(o.index===void 0)throw new Error("Expected index in PublicDataLeafUpdateWitnessData deserialization");if(o.path===void 0)throw new Error("Expected path in PublicDataLeafUpdateWitnessData deserialization");return{leaf:toIndexedPublicDataLeafValue(o.leaf),index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toPublicDataLeafUpdateWitnessData,"toPublicDataLeafUpdateWitnessData");function toSortedPublicDataLeaf(o){if(o.leaf===void 0)throw new Error("Expected leaf in SortedPublicDataLeaf deserialization");if(o.index===void 0)throw new Error("Expected index in SortedPublicDataLeaf deserialization");return{leaf:toPublicDataLeafValue(o.leaf),index:assertU642(o.index,"o.index")}}__name(toSortedPublicDataLeaf,"toSortedPublicDataLeaf");function toBatchInsertionResultPublicData(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in BatchInsertionResultPublicData deserialization");if(o.sortedLeaves===void 0)throw new Error("Expected sortedLeaves in BatchInsertionResultPublicData deserialization");if(o.subtreePath===void 0)throw new Error("Expected subtreePath in BatchInsertionResultPublicData deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v)),sortedLeaves:o.sortedLeaves.map(v=>toSortedPublicDataLeaf(v)),subtreePath:o.subtreePath.map(v=>assertBin322(v,"v"))}}__name(toBatchInsertionResultPublicData,"toBatchInsertionResultPublicData");function toNullifierLeafUpdateWitnessData(o){if(o.leaf===void 0)throw new Error("Expected leaf in NullifierLeafUpdateWitnessData deserialization");if(o.index===void 0)throw new Error("Expected index in NullifierLeafUpdateWitnessData deserialization");if(o.path===void 0)throw new Error("Expected path in NullifierLeafUpdateWitnessData deserialization");return{leaf:toIndexedNullifierLeafValue(o.leaf),index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toNullifierLeafUpdateWitnessData,"toNullifierLeafUpdateWitnessData");function toSortedNullifierLeaf(o){if(o.leaf===void 0)throw new Error("Expected leaf in SortedNullifierLeaf deserialization");if(o.index===void 0)throw new Error("Expected index in SortedNullifierLeaf deserialization");return{leaf:toNullifierLeafValue(o.leaf),index:assertU642(o.index,"o.index")}}__name(toSortedNullifierLeaf,"toSortedNullifierLeaf");function toBatchInsertionResultNullifier(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in BatchInsertionResultNullifier deserialization");if(o.sortedLeaves===void 0)throw new Error("Expected sortedLeaves in BatchInsertionResultNullifier deserialization");if(o.subtreePath===void 0)throw new Error("Expected subtreePath in BatchInsertionResultNullifier deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v)),sortedLeaves:o.sortedLeaves.map(v=>toSortedNullifierLeaf(v)),subtreePath:o.subtreePath.map(v=>assertBin322(v,"v"))}}__name(toBatchInsertionResultNullifier,"toBatchInsertionResultNullifier");function toSequentialInsertionResultPublicData(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in SequentialInsertionResultPublicData deserialization");if(o.insertionWitnessData===void 0)throw new Error("Expected insertionWitnessData in SequentialInsertionResultPublicData deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v)),insertionWitnessData:o.insertionWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v))}}__name(toSequentialInsertionResultPublicData,"toSequentialInsertionResultPublicData");function toSequentialInsertionResultNullifier(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in SequentialInsertionResultNullifier deserialization");if(o.insertionWitnessData===void 0)throw new Error("Expected insertionWitnessData in SequentialInsertionResultNullifier deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v)),insertionWitnessData:o.insertionWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v))}}__name(toSequentialInsertionResultNullifier,"toSequentialInsertionResultNullifier");function toWorldStateStatusSummary(o){if(o.unfinalizedBlockNumber===void 0)throw new Error("Expected unfinalizedBlockNumber in WorldStateStatusSummary deserialization");if(o.finalizedBlockNumber===void 0)throw new Error("Expected finalizedBlockNumber in WorldStateStatusSummary deserialization");if(o.oldestHistoricalBlock===void 0)throw new Error("Expected oldestHistoricalBlock in WorldStateStatusSummary deserialization");if(o.treesAreSynched===void 0)throw new Error("Expected treesAreSynched in WorldStateStatusSummary deserialization");return{unfinalizedBlockNumber:assertU642(o.unfinalizedBlockNumber,"o.unfinalizedBlockNumber"),finalizedBlockNumber:assertU642(o.finalizedBlockNumber,"o.finalizedBlockNumber"),oldestHistoricalBlock:assertU642(o.oldestHistoricalBlock,"o.oldestHistoricalBlock"),treesAreSynched:o.treesAreSynched}}__name(toWorldStateStatusSummary,"toWorldStateStatusSummary");function toDBStats(o){if(o.name===void 0)throw new Error("Expected name in DBStats deserialization");if(o.numDataItems===void 0)throw new Error("Expected numDataItems in DBStats deserialization");if(o.totalUsedSize===void 0)throw new Error("Expected totalUsedSize in DBStats deserialization");return{name:o.name,numDataItems:assertU642(o.numDataItems,"o.numDataItems"),totalUsedSize:assertU642(o.totalUsedSize,"o.totalUsedSize")}}__name(toDBStats,"toDBStats");function toTreeDBStats(o){if(o.mapSize===void 0)throw new Error("Expected mapSize in TreeDBStats deserialization");if(o.physicalFileSize===void 0)throw new Error("Expected physicalFileSize in TreeDBStats deserialization");if(o.blocksDBStats===void 0)throw new Error("Expected blocksDBStats in TreeDBStats deserialization");if(o.nodesDBStats===void 0)throw new Error("Expected nodesDBStats in TreeDBStats deserialization");if(o.leafPreimagesDBStats===void 0)throw new Error("Expected leafPreimagesDBStats in TreeDBStats deserialization");if(o.leafIndicesDBStats===void 0)throw new Error("Expected leafIndicesDBStats in TreeDBStats deserialization");if(o.blockIndicesDBStats===void 0)throw new Error("Expected blockIndicesDBStats in TreeDBStats deserialization");return{mapSize:assertU642(o.mapSize,"o.mapSize"),physicalFileSize:assertU642(o.physicalFileSize,"o.physicalFileSize"),blocksDBStats:toDBStats(o.blocksDBStats),nodesDBStats:toDBStats(o.nodesDBStats),leafPreimagesDBStats:toDBStats(o.leafPreimagesDBStats),leafIndicesDBStats:toDBStats(o.leafIndicesDBStats),blockIndicesDBStats:toDBStats(o.blockIndicesDBStats)}}__name(toTreeDBStats,"toTreeDBStats");function toWorldStateDBStats(o){if(o.noteHashTreeStats===void 0)throw new Error("Expected noteHashTreeStats in WorldStateDBStats deserialization");if(o.messageTreeStats===void 0)throw new Error("Expected messageTreeStats in WorldStateDBStats deserialization");if(o.archiveTreeStats===void 0)throw new Error("Expected archiveTreeStats in WorldStateDBStats deserialization");if(o.publicDataTreeStats===void 0)throw new Error("Expected publicDataTreeStats in WorldStateDBStats deserialization");if(o.nullifierTreeStats===void 0)throw new Error("Expected nullifierTreeStats in WorldStateDBStats deserialization");return{noteHashTreeStats:toTreeDBStats(o.noteHashTreeStats),messageTreeStats:toTreeDBStats(o.messageTreeStats),archiveTreeStats:toTreeDBStats(o.archiveTreeStats),publicDataTreeStats:toTreeDBStats(o.publicDataTreeStats),nullifierTreeStats:toTreeDBStats(o.nullifierTreeStats)}}__name(toWorldStateDBStats,"toWorldStateDBStats");function toTreeMeta(o){if(o.name===void 0)throw new Error("Expected name in TreeMeta deserialization");if(o.depth===void 0)throw new Error("Expected depth in TreeMeta deserialization");if(o.size===void 0)throw new Error("Expected size in TreeMeta deserialization");if(o.committedSize===void 0)throw new Error("Expected committedSize in TreeMeta deserialization");if(o.root===void 0)throw new Error("Expected root in TreeMeta deserialization");if(o.initialSize===void 0)throw new Error("Expected initialSize in TreeMeta deserialization");if(o.initialRoot===void 0)throw new Error("Expected initialRoot in TreeMeta deserialization");if(o.oldestHistoricBlock===void 0)throw new Error("Expected oldestHistoricBlock in TreeMeta deserialization");if(o.unfinalizedBlockHeight===void 0)throw new Error("Expected unfinalizedBlockHeight in TreeMeta deserialization");if(o.finalizedBlockHeight===void 0)throw new Error("Expected finalizedBlockHeight in TreeMeta deserialization");return{name:o.name,depth:o.depth,size:assertU642(o.size,"o.size"),committedSize:assertU642(o.committedSize,"o.committedSize"),root:assertBin322(o.root,"o.root"),initialSize:assertU642(o.initialSize,"o.initialSize"),initialRoot:assertBin322(o.initialRoot,"o.initialRoot"),oldestHistoricBlock:o.oldestHistoricBlock,unfinalizedBlockHeight:o.unfinalizedBlockHeight,finalizedBlockHeight:o.finalizedBlockHeight}}__name(toTreeMeta,"toTreeMeta");function toWorldStateMeta(o){if(o.noteHashTreeMeta===void 0)throw new Error("Expected noteHashTreeMeta in WorldStateMeta deserialization");if(o.messageTreeMeta===void 0)throw new Error("Expected messageTreeMeta in WorldStateMeta deserialization");if(o.archiveTreeMeta===void 0)throw new Error("Expected archiveTreeMeta in WorldStateMeta deserialization");if(o.publicDataTreeMeta===void 0)throw new Error("Expected publicDataTreeMeta in WorldStateMeta deserialization");if(o.nullifierTreeMeta===void 0)throw new Error("Expected nullifierTreeMeta in WorldStateMeta deserialization");return{noteHashTreeMeta:toTreeMeta(o.noteHashTreeMeta),messageTreeMeta:toTreeMeta(o.messageTreeMeta),archiveTreeMeta:toTreeMeta(o.archiveTreeMeta),publicDataTreeMeta:toTreeMeta(o.publicDataTreeMeta),nullifierTreeMeta:toTreeMeta(o.nullifierTreeMeta)}}__name(toWorldStateMeta,"toWorldStateMeta");function toWorldStateStatusFull(o){if(o.summary===void 0)throw new Error("Expected summary in WorldStateStatusFull deserialization");if(o.dbStats===void 0)throw new Error("Expected dbStats in WorldStateStatusFull deserialization");if(o.meta===void 0)throw new Error("Expected meta in WorldStateStatusFull deserialization");return{summary:toWorldStateStatusSummary(o.summary),dbStats:toWorldStateDBStats(o.dbStats),meta:toWorldStateMeta(o.meta)}}__name(toWorldStateStatusFull,"toWorldStateStatusFull");function toWsdbGetTreeInfoResponse(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetTreeInfoResponse deserialization");if(o.root===void 0)throw new Error("Expected root in WsdbGetTreeInfoResponse deserialization");if(o.size===void 0)throw new Error("Expected size in WsdbGetTreeInfoResponse deserialization");if(o.depth===void 0)throw new Error("Expected depth in WsdbGetTreeInfoResponse deserialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:assertU642(o.size,"o.size"),depth:o.depth}}__name(toWsdbGetTreeInfoResponse,"toWsdbGetTreeInfoResponse");function toWsdbGetStateReferenceResponse(o){if(o.state===void 0)throw new Error("Expected state in WsdbGetStateReferenceResponse deserialization");return{state:o.state.map(v=>toTreeStateReference(v))}}__name(toWsdbGetStateReferenceResponse,"toWsdbGetStateReferenceResponse");function toWsdbGetInitialStateReferenceResponse(o){if(o.state===void 0)throw new Error("Expected state in WsdbGetInitialStateReferenceResponse deserialization");return{state:o.state.map(v=>toTreeStateReference(v))}}__name(toWsdbGetInitialStateReferenceResponse,"toWsdbGetInitialStateReferenceResponse");function toWsdbGetLeafValueResponse(o){return{value:o.value!=null?assertBin322(o.value,"o.value"):null}}__name(toWsdbGetLeafValueResponse,"toWsdbGetLeafValueResponse");function toWsdbGetPublicDataLeafValueResponse(o){return{value:o.value!=null?toPublicDataLeafValue(o.value):null}}__name(toWsdbGetPublicDataLeafValueResponse,"toWsdbGetPublicDataLeafValueResponse");function toWsdbGetNullifierLeafValueResponse(o){return{value:o.value!=null?toNullifierLeafValue(o.value):null}}__name(toWsdbGetNullifierLeafValueResponse,"toWsdbGetNullifierLeafValueResponse");function toWsdbGetPublicDataLeafPreimageResponse(o){return{preimage:o.preimage!=null?toIndexedPublicDataLeafValue(o.preimage):null}}__name(toWsdbGetPublicDataLeafPreimageResponse,"toWsdbGetPublicDataLeafPreimageResponse");function toWsdbGetNullifierLeafPreimageResponse(o){return{preimage:o.preimage!=null?toIndexedNullifierLeafValue(o.preimage):null}}__name(toWsdbGetNullifierLeafPreimageResponse,"toWsdbGetNullifierLeafPreimageResponse");function toWsdbGetSiblingPathResponse(o){if(o.path===void 0)throw new Error("Expected path in WsdbGetSiblingPathResponse deserialization");return{path:o.path.map(v=>assertBin322(v,"v"))}}__name(toWsdbGetSiblingPathResponse,"toWsdbGetSiblingPathResponse");function toWsdbGetBlockNumbersForLeafIndicesResponse(o){if(o.blockNumbers===void 0)throw new Error("Expected blockNumbers in WsdbGetBlockNumbersForLeafIndicesResponse deserialization");return{blockNumbers:o.blockNumbers.map(v=>v??null)}}__name(toWsdbGetBlockNumbersForLeafIndicesResponse,"toWsdbGetBlockNumbersForLeafIndicesResponse");function toWsdbFindLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindLeafIndicesResponse,"toWsdbFindLeafIndicesResponse");function toWsdbFindPublicDataLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindPublicDataLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindPublicDataLeafIndicesResponse,"toWsdbFindPublicDataLeafIndicesResponse");function toWsdbFindNullifierLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindNullifierLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindNullifierLeafIndicesResponse,"toWsdbFindNullifierLeafIndicesResponse");function toWsdbFindLowLeafResponse(o){if(o.alreadyPresent===void 0)throw new Error("Expected alreadyPresent in WsdbFindLowLeafResponse deserialization");if(o.index===void 0)throw new Error("Expected index in WsdbFindLowLeafResponse deserialization");return{alreadyPresent:o.alreadyPresent,index:assertU642(o.index,"o.index")}}__name(toWsdbFindLowLeafResponse,"toWsdbFindLowLeafResponse");function toWsdbFindSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindSiblingPathsResponse,"toWsdbFindSiblingPathsResponse");function toWsdbFindPublicDataSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindPublicDataSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindPublicDataSiblingPathsResponse,"toWsdbFindPublicDataSiblingPathsResponse");function toWsdbFindNullifierSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindNullifierSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindNullifierSiblingPathsResponse,"toWsdbFindNullifierSiblingPathsResponse");function toWsdbAppendLeavesResponse(o){return{}}__name(toWsdbAppendLeavesResponse,"toWsdbAppendLeavesResponse");function toWsdbAppendPublicDataLeavesResponse(o){return{}}__name(toWsdbAppendPublicDataLeavesResponse,"toWsdbAppendPublicDataLeavesResponse");function toWsdbAppendNullifierLeavesResponse(o){return{}}__name(toWsdbAppendNullifierLeavesResponse,"toWsdbAppendNullifierLeavesResponse");function toWsdbBatchInsertPublicDataResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbBatchInsertPublicDataResponse deserialization");return{result:toBatchInsertionResultPublicData(o.result)}}__name(toWsdbBatchInsertPublicDataResponse,"toWsdbBatchInsertPublicDataResponse");function toWsdbBatchInsertNullifierResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbBatchInsertNullifierResponse deserialization");return{result:toBatchInsertionResultNullifier(o.result)}}__name(toWsdbBatchInsertNullifierResponse,"toWsdbBatchInsertNullifierResponse");function toWsdbSequentialInsertPublicDataResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbSequentialInsertPublicDataResponse deserialization");return{result:toSequentialInsertionResultPublicData(o.result)}}__name(toWsdbSequentialInsertPublicDataResponse,"toWsdbSequentialInsertPublicDataResponse");function toWsdbSequentialInsertNullifierResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbSequentialInsertNullifierResponse deserialization");return{result:toSequentialInsertionResultNullifier(o.result)}}__name(toWsdbSequentialInsertNullifierResponse,"toWsdbSequentialInsertNullifierResponse");function toWsdbUpdateArchiveResponse(o){return{}}__name(toWsdbUpdateArchiveResponse,"toWsdbUpdateArchiveResponse");function toWsdbCommitResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbCommitResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbCommitResponse,"toWsdbCommitResponse");function toWsdbRollbackResponse(o){return{}}__name(toWsdbRollbackResponse,"toWsdbRollbackResponse");function toWsdbSyncBlockResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbSyncBlockResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbSyncBlockResponse,"toWsdbSyncBlockResponse");function toWsdbCreateForkResponse(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCreateForkResponse deserialization");return{forkId:assertU642(o.forkId,"o.forkId")}}__name(toWsdbCreateForkResponse,"toWsdbCreateForkResponse");function toWsdbDeleteForkResponse(o){return{}}__name(toWsdbDeleteForkResponse,"toWsdbDeleteForkResponse");function toWsdbFinalizeBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbFinalizeBlocksResponse deserialization");return{status:toWorldStateStatusSummary(o.status)}}__name(toWsdbFinalizeBlocksResponse,"toWsdbFinalizeBlocksResponse");function toWsdbUnwindBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbUnwindBlocksResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbUnwindBlocksResponse,"toWsdbUnwindBlocksResponse");function toWsdbRemoveHistoricalBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbRemoveHistoricalBlocksResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbRemoveHistoricalBlocksResponse,"toWsdbRemoveHistoricalBlocksResponse");function toWsdbGetStatusResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbGetStatusResponse deserialization");return{status:toWorldStateStatusSummary(o.status)}}__name(toWsdbGetStatusResponse,"toWsdbGetStatusResponse");function toWsdbCreateCheckpointResponse(o){return{}}__name(toWsdbCreateCheckpointResponse,"toWsdbCreateCheckpointResponse");function toWsdbCommitCheckpointResponse(o){return{}}__name(toWsdbCommitCheckpointResponse,"toWsdbCommitCheckpointResponse");function toWsdbRevertCheckpointResponse(o){return{}}__name(toWsdbRevertCheckpointResponse,"toWsdbRevertCheckpointResponse");function toWsdbCommitAllCheckpointsResponse(o){return{}}__name(toWsdbCommitAllCheckpointsResponse,"toWsdbCommitAllCheckpointsResponse");function toWsdbRevertAllCheckpointsResponse(o){return{}}__name(toWsdbRevertAllCheckpointsResponse,"toWsdbRevertAllCheckpointsResponse");function toWsdbCopyStoresResponse(o){return{}}__name(toWsdbCopyStoresResponse,"toWsdbCopyStoresResponse");function fromTreeStateReference(o){if(o.treeId===void 0)throw new Error("Expected treeId in TreeStateReference serialization");if(o.root===void 0)throw new Error("Expected root in TreeStateReference serialization");if(o.size===void 0)throw new Error("Expected size in TreeStateReference serialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:toWireU64(o.size,"o.size")}}__name(fromTreeStateReference,"fromTreeStateReference");function fromPublicDataLeafValue(o){if(o.slot===void 0)throw new Error("Expected slot in PublicDataLeafValue serialization");if(o.value===void 0)throw new Error("Expected value in PublicDataLeafValue serialization");return{slot:assertBin322(o.slot,"o.slot"),value:assertBin322(o.value,"o.value")}}__name(fromPublicDataLeafValue,"fromPublicDataLeafValue");function fromNullifierLeafValue(o){if(o.nullifier===void 0)throw new Error("Expected nullifier in NullifierLeafValue serialization");return{nullifier:assertBin322(o.nullifier,"o.nullifier")}}__name(fromNullifierLeafValue,"fromNullifierLeafValue");function fromWorldStateRevision(o){if(o.forkId===void 0)throw new Error("Expected forkId in WorldStateRevision serialization");if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WorldStateRevision serialization");if(o.includeUncommitted===void 0)throw new Error("Expected includeUncommitted in WorldStateRevision serialization");return{forkId:toWireU64(o.forkId,"o.forkId"),blockNumber:o.blockNumber,includeUncommitted:o.includeUncommitted}}__name(fromWorldStateRevision,"fromWorldStateRevision");function fromWsdbGetTreeInfo(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetTreeInfo serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetTreeInfo serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision)}}__name(fromWsdbGetTreeInfo,"fromWsdbGetTreeInfo");function fromWsdbGetStateReference(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetStateReference serialization");return{revision:fromWorldStateRevision(o.revision)}}__name(fromWsdbGetStateReference,"fromWsdbGetStateReference");function fromWsdbGetInitialStateReference(o){return{}}__name(fromWsdbGetInitialStateReference,"fromWsdbGetInitialStateReference");function fromWsdbGetLeafValue(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetLeafValue serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetLeafValue serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetLeafValue,"fromWsdbGetLeafValue");function fromWsdbGetPublicDataLeafValue(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetPublicDataLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetPublicDataLeafValue serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetPublicDataLeafValue,"fromWsdbGetPublicDataLeafValue");function fromWsdbGetNullifierLeafValue(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetNullifierLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetNullifierLeafValue serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetNullifierLeafValue,"fromWsdbGetNullifierLeafValue");function fromWsdbGetPublicDataLeafPreimage(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetPublicDataLeafPreimage serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetPublicDataLeafPreimage serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetPublicDataLeafPreimage,"fromWsdbGetPublicDataLeafPreimage");function fromWsdbGetNullifierLeafPreimage(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetNullifierLeafPreimage serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetNullifierLeafPreimage serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetNullifierLeafPreimage,"fromWsdbGetNullifierLeafPreimage");function fromWsdbGetSiblingPath(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetSiblingPath serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetSiblingPath serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetSiblingPath serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetSiblingPath,"fromWsdbGetSiblingPath");function fromWsdbGetBlockNumbersForLeafIndices(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetBlockNumbersForLeafIndices serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetBlockNumbersForLeafIndices serialization");if(o.leafIndices===void 0)throw new Error("Expected leafIndices in WsdbGetBlockNumbersForLeafIndices serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndices:o.leafIndices.map(v=>toWireU64(v,"v"))}}__name(fromWsdbGetBlockNumbersForLeafIndices,"fromWsdbGetBlockNumbersForLeafIndices");function fromWsdbFindLeafIndices(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindLeafIndices serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindLeafIndices serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>assertBin322(v,"v")),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindLeafIndices,"fromWsdbFindLeafIndices");function fromWsdbFindPublicDataLeafIndices(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindPublicDataLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindPublicDataLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindPublicDataLeafIndices serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindPublicDataLeafIndices,"fromWsdbFindPublicDataLeafIndices");function fromWsdbFindNullifierLeafIndices(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindNullifierLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindNullifierLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindNullifierLeafIndices serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindNullifierLeafIndices,"fromWsdbFindNullifierLeafIndices");function fromWsdbFindLowLeaf(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindLowLeaf serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindLowLeaf serialization");if(o.key===void 0)throw new Error("Expected key in WsdbFindLowLeaf serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),key:assertBin322(o.key,"o.key")}}__name(fromWsdbFindLowLeaf,"fromWsdbFindLowLeaf");function fromWsdbFindSiblingPaths(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindSiblingPaths serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindSiblingPaths serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>assertBin322(v,"v"))}}__name(fromWsdbFindSiblingPaths,"fromWsdbFindSiblingPaths");function fromWsdbFindPublicDataSiblingPaths(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindPublicDataSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindPublicDataSiblingPaths serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromPublicDataLeafValue(v))}}__name(fromWsdbFindPublicDataSiblingPaths,"fromWsdbFindPublicDataSiblingPaths");function fromWsdbFindNullifierSiblingPaths(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindNullifierSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindNullifierSiblingPaths serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromNullifierLeafValue(v))}}__name(fromWsdbFindNullifierSiblingPaths,"fromWsdbFindNullifierSiblingPaths");function fromWsdbAppendLeaves(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbAppendLeaves serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendLeaves serialization");return{treeId:o.treeId,leaves:o.leaves.map(v=>assertBin322(v,"v")),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendLeaves,"fromWsdbAppendLeaves");function fromWsdbAppendPublicDataLeaves(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendPublicDataLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendPublicDataLeaves serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendPublicDataLeaves,"fromWsdbAppendPublicDataLeaves");function fromWsdbAppendNullifierLeaves(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendNullifierLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendNullifierLeaves serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendNullifierLeaves,"fromWsdbAppendNullifierLeaves");function fromWsdbBatchInsertPublicData(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbBatchInsertPublicData serialization");if(o.subtreeDepth===void 0)throw new Error("Expected subtreeDepth in WsdbBatchInsertPublicData serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbBatchInsertPublicData serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),subtreeDepth:o.subtreeDepth,forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbBatchInsertPublicData,"fromWsdbBatchInsertPublicData");function fromWsdbBatchInsertNullifier(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbBatchInsertNullifier serialization");if(o.subtreeDepth===void 0)throw new Error("Expected subtreeDepth in WsdbBatchInsertNullifier serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbBatchInsertNullifier serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),subtreeDepth:o.subtreeDepth,forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbBatchInsertNullifier,"fromWsdbBatchInsertNullifier");function fromWsdbSequentialInsertPublicData(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbSequentialInsertPublicData serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbSequentialInsertPublicData serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbSequentialInsertPublicData,"fromWsdbSequentialInsertPublicData");function fromWsdbSequentialInsertNullifier(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbSequentialInsertNullifier serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbSequentialInsertNullifier serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbSequentialInsertNullifier,"fromWsdbSequentialInsertNullifier");function fromWsdbUpdateArchive(o){if(o.blockStateRef===void 0)throw new Error("Expected blockStateRef in WsdbUpdateArchive serialization");if(o.blockHeaderHash===void 0)throw new Error("Expected blockHeaderHash in WsdbUpdateArchive serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbUpdateArchive serialization");return{blockStateRef:o.blockStateRef.map(v=>fromTreeStateReference(v)),blockHeaderHash:assertBin322(o.blockHeaderHash,"o.blockHeaderHash"),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbUpdateArchive,"fromWsdbUpdateArchive");function fromWsdbCommit(o){return{}}__name(fromWsdbCommit,"fromWsdbCommit");function fromWsdbRollback(o){return{}}__name(fromWsdbRollback,"fromWsdbRollback");function fromWsdbSyncBlock(o){if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WsdbSyncBlock serialization");if(o.blockStateRef===void 0)throw new Error("Expected blockStateRef in WsdbSyncBlock serialization");if(o.blockHeaderHash===void 0)throw new Error("Expected blockHeaderHash in WsdbSyncBlock serialization");if(o.paddedNoteHashes===void 0)throw new Error("Expected paddedNoteHashes in WsdbSyncBlock serialization");if(o.paddedL1ToL2Messages===void 0)throw new Error("Expected paddedL1ToL2Messages in WsdbSyncBlock serialization");if(o.paddedNullifiers===void 0)throw new Error("Expected paddedNullifiers in WsdbSyncBlock serialization");if(o.publicDataWrites===void 0)throw new Error("Expected publicDataWrites in WsdbSyncBlock serialization");return{blockNumber:o.blockNumber,blockStateRef:o.blockStateRef.map(v=>fromTreeStateReference(v)),blockHeaderHash:assertBin322(o.blockHeaderHash,"o.blockHeaderHash"),paddedNoteHashes:o.paddedNoteHashes.map(v=>assertBin322(v,"v")),paddedL1ToL2Messages:o.paddedL1ToL2Messages.map(v=>assertBin322(v,"v")),paddedNullifiers:o.paddedNullifiers.map(v=>fromNullifierLeafValue(v)),publicDataWrites:o.publicDataWrites.map(v=>fromPublicDataLeafValue(v)),expectedArchiveRoot:o.expectedArchiveRoot!=null?assertBin322(o.expectedArchiveRoot,"o.expectedArchiveRoot"):null,expectedPreviousArchiveRoot:o.expectedPreviousArchiveRoot!=null?assertBin322(o.expectedPreviousArchiveRoot,"o.expectedPreviousArchiveRoot"):null}}__name(fromWsdbSyncBlock,"fromWsdbSyncBlock");function fromWsdbCreateFork(o){if(o.latest===void 0)throw new Error("Expected latest in WsdbCreateFork serialization");if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WsdbCreateFork serialization");return{latest:o.latest,blockNumber:o.blockNumber}}__name(fromWsdbCreateFork,"fromWsdbCreateFork");function fromWsdbDeleteFork(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbDeleteFork serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbDeleteFork,"fromWsdbDeleteFork");function fromWsdbFinalizeBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbFinalizeBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbFinalizeBlocks,"fromWsdbFinalizeBlocks");function fromWsdbUnwindBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbUnwindBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbUnwindBlocks,"fromWsdbUnwindBlocks");function fromWsdbRemoveHistoricalBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbRemoveHistoricalBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbRemoveHistoricalBlocks,"fromWsdbRemoveHistoricalBlocks");function fromWsdbGetStatus(o){return{}}__name(fromWsdbGetStatus,"fromWsdbGetStatus");function fromWsdbCreateCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCreateCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCreateCheckpoint,"fromWsdbCreateCheckpoint");function fromWsdbCommitCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCommitCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCommitCheckpoint,"fromWsdbCommitCheckpoint");function fromWsdbRevertCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbRevertCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbRevertCheckpoint,"fromWsdbRevertCheckpoint");function fromWsdbCommitAllCheckpoints(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCommitAllCheckpoints serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCommitAllCheckpoints,"fromWsdbCommitAllCheckpoints");function fromWsdbRevertAllCheckpoints(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbRevertAllCheckpoints serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbRevertAllCheckpoints,"fromWsdbRevertAllCheckpoints");function fromWsdbCopyStores(o){if(o.dstPath===void 0)throw new Error("Expected dstPath in WsdbCopyStores serialization");return{dstPath:o.dstPath,compact:o.compact??null}}__name(fromWsdbCopyStores,"fromWsdbCopyStores");async function msgpackCall2(backend,input){let inputBuffer=new Encoder12({useRecords:!1,variableMapSize:!0}).pack(input),encodedResult=await backend.call(inputBuffer);return new Decoder7({useRecords:!1}).unpack(encodedResult)}__name(msgpackCall2,"msgpackCall");var AsyncApi2=class{static{__name(this,"AsyncApi")}backend;createError;constructor(backend,createError=message=>new Error(message)){this.backend=backend,this.createError=createError}getTreeInfo(command){let msgpackCommand=fromWsdbGetTreeInfo(command);return msgpackCall2(this.backend,[["WsdbGetTreeInfo",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetTreeInfoResponse")throw new Error(`Expected variant name 'WsdbGetTreeInfoResponse' but got '${variantName}'`);return toWsdbGetTreeInfoResponse(result)})}getStateReference(command){let msgpackCommand=fromWsdbGetStateReference(command);return msgpackCall2(this.backend,[["WsdbGetStateReference",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetStateReferenceResponse")throw new Error(`Expected variant name 'WsdbGetStateReferenceResponse' but got '${variantName}'`);return toWsdbGetStateReferenceResponse(result)})}getInitialStateReference(command){let msgpackCommand=fromWsdbGetInitialStateReference(command);return msgpackCall2(this.backend,[["WsdbGetInitialStateReference",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetInitialStateReferenceResponse")throw new Error(`Expected variant name 'WsdbGetInitialStateReferenceResponse' but got '${variantName}'`);return toWsdbGetInitialStateReferenceResponse(result)})}getLeafValue(command){let msgpackCommand=fromWsdbGetLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetLeafValueResponse' but got '${variantName}'`);return toWsdbGetLeafValueResponse(result)})}getPublicDataLeafValue(command){let msgpackCommand=fromWsdbGetPublicDataLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetPublicDataLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetPublicDataLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetPublicDataLeafValueResponse' but got '${variantName}'`);return toWsdbGetPublicDataLeafValueResponse(result)})}getNullifierLeafValue(command){let msgpackCommand=fromWsdbGetNullifierLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetNullifierLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetNullifierLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetNullifierLeafValueResponse' but got '${variantName}'`);return toWsdbGetNullifierLeafValueResponse(result)})}getPublicDataLeafPreimage(command){let msgpackCommand=fromWsdbGetPublicDataLeafPreimage(command);return msgpackCall2(this.backend,[["WsdbGetPublicDataLeafPreimage",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetPublicDataLeafPreimageResponse")throw new Error(`Expected variant name 'WsdbGetPublicDataLeafPreimageResponse' but got '${variantName}'`);return toWsdbGetPublicDataLeafPreimageResponse(result)})}getNullifierLeafPreimage(command){let msgpackCommand=fromWsdbGetNullifierLeafPreimage(command);return msgpackCall2(this.backend,[["WsdbGetNullifierLeafPreimage",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetNullifierLeafPreimageResponse")throw new Error(`Expected variant name 'WsdbGetNullifierLeafPreimageResponse' but got '${variantName}'`);return toWsdbGetNullifierLeafPreimageResponse(result)})}getSiblingPath(command){let msgpackCommand=fromWsdbGetSiblingPath(command);return msgpackCall2(this.backend,[["WsdbGetSiblingPath",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetSiblingPathResponse")throw new Error(`Expected variant name 'WsdbGetSiblingPathResponse' but got '${variantName}'`);return toWsdbGetSiblingPathResponse(result)})}getBlockNumbersForLeafIndices(command){let msgpackCommand=fromWsdbGetBlockNumbersForLeafIndices(command);return msgpackCall2(this.backend,[["WsdbGetBlockNumbersForLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetBlockNumbersForLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbGetBlockNumbersForLeafIndicesResponse' but got '${variantName}'`);return toWsdbGetBlockNumbersForLeafIndicesResponse(result)})}findLeafIndices(command){let msgpackCommand=fromWsdbFindLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindLeafIndicesResponse(result)})}findPublicDataLeafIndices(command){let msgpackCommand=fromWsdbFindPublicDataLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindPublicDataLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindPublicDataLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindPublicDataLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindPublicDataLeafIndicesResponse(result)})}findNullifierLeafIndices(command){let msgpackCommand=fromWsdbFindNullifierLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindNullifierLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindNullifierLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindNullifierLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindNullifierLeafIndicesResponse(result)})}findLowLeaf(command){let msgpackCommand=fromWsdbFindLowLeaf(command);return msgpackCall2(this.backend,[["WsdbFindLowLeaf",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindLowLeafResponse")throw new Error(`Expected variant name 'WsdbFindLowLeafResponse' but got '${variantName}'`);return toWsdbFindLowLeafResponse(result)})}findSiblingPaths(command){let msgpackCommand=fromWsdbFindSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindSiblingPathsResponse(result)})}findPublicDataSiblingPaths(command){let msgpackCommand=fromWsdbFindPublicDataSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindPublicDataSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindPublicDataSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindPublicDataSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindPublicDataSiblingPathsResponse(result)})}findNullifierSiblingPaths(command){let msgpackCommand=fromWsdbFindNullifierSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindNullifierSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindNullifierSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindNullifierSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindNullifierSiblingPathsResponse(result)})}appendLeaves(command){let msgpackCommand=fromWsdbAppendLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendLeavesResponse' but got '${variantName}'`);return toWsdbAppendLeavesResponse(result)})}appendPublicDataLeaves(command){let msgpackCommand=fromWsdbAppendPublicDataLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendPublicDataLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendPublicDataLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendPublicDataLeavesResponse' but got '${variantName}'`);return toWsdbAppendPublicDataLeavesResponse(result)})}appendNullifierLeaves(command){let msgpackCommand=fromWsdbAppendNullifierLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendNullifierLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendNullifierLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendNullifierLeavesResponse' but got '${variantName}'`);return toWsdbAppendNullifierLeavesResponse(result)})}batchInsertPublicData(command){let msgpackCommand=fromWsdbBatchInsertPublicData(command);return msgpackCall2(this.backend,[["WsdbBatchInsertPublicData",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbBatchInsertPublicDataResponse")throw new Error(`Expected variant name 'WsdbBatchInsertPublicDataResponse' but got '${variantName}'`);return toWsdbBatchInsertPublicDataResponse(result)})}batchInsertNullifier(command){let msgpackCommand=fromWsdbBatchInsertNullifier(command);return msgpackCall2(this.backend,[["WsdbBatchInsertNullifier",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbBatchInsertNullifierResponse")throw new Error(`Expected variant name 'WsdbBatchInsertNullifierResponse' but got '${variantName}'`);return toWsdbBatchInsertNullifierResponse(result)})}sequentialInsertPublicData(command){let msgpackCommand=fromWsdbSequentialInsertPublicData(command);return msgpackCall2(this.backend,[["WsdbSequentialInsertPublicData",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSequentialInsertPublicDataResponse")throw new Error(`Expected variant name 'WsdbSequentialInsertPublicDataResponse' but got '${variantName}'`);return toWsdbSequentialInsertPublicDataResponse(result)})}sequentialInsertNullifier(command){let msgpackCommand=fromWsdbSequentialInsertNullifier(command);return msgpackCall2(this.backend,[["WsdbSequentialInsertNullifier",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSequentialInsertNullifierResponse")throw new Error(`Expected variant name 'WsdbSequentialInsertNullifierResponse' but got '${variantName}'`);return toWsdbSequentialInsertNullifierResponse(result)})}updateArchive(command){let msgpackCommand=fromWsdbUpdateArchive(command);return msgpackCall2(this.backend,[["WsdbUpdateArchive",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbUpdateArchiveResponse")throw new Error(`Expected variant name 'WsdbUpdateArchiveResponse' but got '${variantName}'`);return toWsdbUpdateArchiveResponse(result)})}commit(command){let msgpackCommand=fromWsdbCommit(command);return msgpackCall2(this.backend,[["WsdbCommit",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitResponse")throw new Error(`Expected variant name 'WsdbCommitResponse' but got '${variantName}'`);return toWsdbCommitResponse(result)})}rollback(command){let msgpackCommand=fromWsdbRollback(command);return msgpackCall2(this.backend,[["WsdbRollback",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRollbackResponse")throw new Error(`Expected variant name 'WsdbRollbackResponse' but got '${variantName}'`);return toWsdbRollbackResponse(result)})}syncBlock(command){let msgpackCommand=fromWsdbSyncBlock(command);return msgpackCall2(this.backend,[["WsdbSyncBlock",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSyncBlockResponse")throw new Error(`Expected variant name 'WsdbSyncBlockResponse' but got '${variantName}'`);return toWsdbSyncBlockResponse(result)})}createFork(command){let msgpackCommand=fromWsdbCreateFork(command);return msgpackCall2(this.backend,[["WsdbCreateFork",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCreateForkResponse")throw new Error(`Expected variant name 'WsdbCreateForkResponse' but got '${variantName}'`);return toWsdbCreateForkResponse(result)})}deleteFork(command){let msgpackCommand=fromWsdbDeleteFork(command);return msgpackCall2(this.backend,[["WsdbDeleteFork",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbDeleteForkResponse")throw new Error(`Expected variant name 'WsdbDeleteForkResponse' but got '${variantName}'`);return toWsdbDeleteForkResponse(result)})}finalizeBlocks(command){let msgpackCommand=fromWsdbFinalizeBlocks(command);return msgpackCall2(this.backend,[["WsdbFinalizeBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFinalizeBlocksResponse")throw new Error(`Expected variant name 'WsdbFinalizeBlocksResponse' but got '${variantName}'`);return toWsdbFinalizeBlocksResponse(result)})}unwindBlocks(command){let msgpackCommand=fromWsdbUnwindBlocks(command);return msgpackCall2(this.backend,[["WsdbUnwindBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbUnwindBlocksResponse")throw new Error(`Expected variant name 'WsdbUnwindBlocksResponse' but got '${variantName}'`);return toWsdbUnwindBlocksResponse(result)})}removeHistoricalBlocks(command){let msgpackCommand=fromWsdbRemoveHistoricalBlocks(command);return msgpackCall2(this.backend,[["WsdbRemoveHistoricalBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRemoveHistoricalBlocksResponse")throw new Error(`Expected variant name 'WsdbRemoveHistoricalBlocksResponse' but got '${variantName}'`);return toWsdbRemoveHistoricalBlocksResponse(result)})}getStatus(command){let msgpackCommand=fromWsdbGetStatus(command);return msgpackCall2(this.backend,[["WsdbGetStatus",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetStatusResponse")throw new Error(`Expected variant name 'WsdbGetStatusResponse' but got '${variantName}'`);return toWsdbGetStatusResponse(result)})}createCheckpoint(command){let msgpackCommand=fromWsdbCreateCheckpoint(command);return msgpackCall2(this.backend,[["WsdbCreateCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCreateCheckpointResponse")throw new Error(`Expected variant name 'WsdbCreateCheckpointResponse' but got '${variantName}'`);return toWsdbCreateCheckpointResponse(result)})}commitCheckpoint(command){let msgpackCommand=fromWsdbCommitCheckpoint(command);return msgpackCall2(this.backend,[["WsdbCommitCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitCheckpointResponse")throw new Error(`Expected variant name 'WsdbCommitCheckpointResponse' but got '${variantName}'`);return toWsdbCommitCheckpointResponse(result)})}revertCheckpoint(command){let msgpackCommand=fromWsdbRevertCheckpoint(command);return msgpackCall2(this.backend,[["WsdbRevertCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRevertCheckpointResponse")throw new Error(`Expected variant name 'WsdbRevertCheckpointResponse' but got '${variantName}'`);return toWsdbRevertCheckpointResponse(result)})}commitAllCheckpoints(command){let msgpackCommand=fromWsdbCommitAllCheckpoints(command);return msgpackCall2(this.backend,[["WsdbCommitAllCheckpoints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitAllCheckpointsResponse")throw new Error(`Expected variant name 'WsdbCommitAllCheckpointsResponse' but got '${variantName}'`);return toWsdbCommitAllCheckpointsResponse(result)})}revertAllCheckpoints(command){let msgpackCommand=fromWsdbRevertAllCheckpoints(command);return msgpackCall2(this.backend,[["WsdbRevertAllCheckpoints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRevertAllCheckpointsResponse")throw new Error(`Expected variant name 'WsdbRevertAllCheckpointsResponse' but got '${variantName}'`);return toWsdbRevertAllCheckpointsResponse(result)})}copyStores(command){let msgpackCommand=fromWsdbCopyStores(command);return msgpackCall2(this.backend,[["WsdbCopyStores",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCopyStoresResponse")throw new Error(`Expected variant name 'WsdbCopyStoresResponse' but got '${variantName}'`);return toWsdbCopyStoresResponse(result)})}destroy(){return this.backend.destroy()}};import{createRequire as createRequire4}from"node:module";import*as fs5 from"node:fs";import*as path4 from"node:path";import{fileURLToPath as fileURLToPath3}from"node:url";var PLATFORM_TO_PACKAGE2={"x86_64-linux":"@aztec-foundation/wsdb-linux-x64","x86_64-darwin":"@aztec-foundation/wsdb-darwin-x64","aarch64-linux":"@aztec-foundation/wsdb-linux-arm64","aarch64-darwin":"@aztec-foundation/wsdb-darwin-arm64"};function currentDir2(){return path4.dirname(fileURLToPath3(import.meta.url))}__name(currentDir2,"currentDir");function detectPlatform3(){return process.arch==="x64"&&process.platform==="linux"?"x86_64-linux":process.arch==="x64"&&process.platform==="darwin"?"x86_64-darwin":process.arch==="arm64"&&process.platform==="linux"?"aarch64-linux":process.arch==="arm64"&&process.platform==="darwin"?"aarch64-darwin":null}__name(detectPlatform3,"detectPlatform");function findArchPackageDir2(platform2){let packageName=PLATFORM_TO_PACKAGE2[platform2];try{let require2=createRequire4(import.meta.url);return path4.dirname(require2.resolve(packageName+"/package.json"))}catch{let siblingPackageDir=path4.join(currentDir2(),"..","packages",packageName.split("/").pop());return fs5.existsSync(path4.join(siblingPackageDir,"package.json"))?siblingPackageDir:null}}__name(findArchPackageDir2,"findArchPackageDir");function findWsdbBinary(customPath){if(customPath)return fs5.existsSync(customPath)?path4.resolve(customPath):null;let envPath=process.env.AZTEC_WSDB_PATH;if(envPath)return fs5.existsSync(envPath)?path4.resolve(envPath):null;let platform2=detectPlatform3();if(!platform2)return null;let archDir=findArchPackageDir2(platform2);if(archDir){let candidate=path4.join(archDir,"aztec-wsdb");if(fs5.existsSync(candidate))return candidate}return null}__name(findWsdbBinary,"findWsdbBinary");import{Decoder as Decoder8,Encoder as Encoder13}from"msgpackr";var WsdbService=class _WsdbService extends AsyncApi2{static{__name(this,"WsdbService")}spawnedBackend;constructor(spawnedBackend,createError){super(spawnedBackend,createError),this.spawnedBackend=spawnedBackend}static async spawn(options={}){let binaryPath=findWsdbBinary(options.binaryPath);if(!binaryPath)throw new IpcSpawnError("aztec-wsdb binary not found",!1);let backend=await SpawnedProcessBackend.spawn({binaryPath,binaryName:"aztec-wsdb",instancePrefix:"wsdb",ipcPathArgs:["msgpack","run","--input","{path}"],transport:options.transport??"uds",logger:options.logger,connectTimeoutMs:options.connectTimeoutMs,env:options.env,extraArgs:options.extraArgs,respawn:options.respawn,clientId:options.clientId,napiPath:options.napiPath});return new _WsdbService(backend,options.createError)}getIpcPath(){return this.spawnedBackend.getIpcPath()}sendProcessSignal(signal){this.spawnedBackend.sendProcessSignal(signal)}};import{Buffer as Buffer79}from"buffer";import{cpus}from"node:os";function toWsdbRevision(rev){return{forkId:rev.forkId,blockNumber:Number(rev.blockNumber),includeUncommitted:rev.includeUncommitted}}__name(toWsdbRevision,"toWsdbRevision");function blockStateRefToMap(ref){return[...ref.entries()].map(([treeId,[root,size]])=>({treeId,root:new Uint8Array(root),size:Number(size)}))}__name(blockStateRefToMap,"blockStateRefToMap");function toPublicDataLeaf(leaf){if(leaf instanceof Buffer79||!("slot"in leaf))throw new Error("Expected public data leaf");return{slot:new Uint8Array(leaf.slot),value:new Uint8Array(leaf.value)}}__name(toPublicDataLeaf,"toPublicDataLeaf");function toNullifierLeaf(leaf){if(leaf instanceof Buffer79||!("nullifier"in leaf))throw new Error("Expected nullifier leaf");return{nullifier:new Uint8Array(leaf.nullifier)}}__name(toNullifierLeaf,"toNullifierLeaf");function fromPublicDataLeaf(leaf){return{slot:Buffer79.from(leaf.slot),value:Buffer79.from(leaf.value)}}__name(fromPublicDataLeaf,"fromPublicDataLeaf");function fromNullifierLeaf(leaf){return{nullifier:Buffer79.from(leaf.nullifier)}}__name(fromNullifierLeaf,"fromNullifierLeaf");function fromIndexedLeaf(leaf,convertLeaf){return{leaf:convertLeaf(leaf.leaf),nextIndex:leaf.nextIndex,nextKey:Buffer79.from(leaf.nextKey)}}__name(fromIndexedLeaf,"fromIndexedLeaf");function fromLeafUpdateWitnessData(data,convertLeaf){return{leaf:fromIndexedLeaf(data.leaf,convertLeaf),index:data.index,path:data.path.map(p=>Buffer79.from(p))}}__name(fromLeafUpdateWitnessData,"fromLeafUpdateWitnessData");function fromBatchInsertionResult(result,convertLeaf){return{lowLeafWitnessData:result.lowLeafWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf)),sortedLeaves:result.sortedLeaves.map(({leaf,index})=>[convertLeaf(leaf),index]),subtreePath:result.subtreePath.map(p=>Buffer79.from(p))}}__name(fromBatchInsertionResult,"fromBatchInsertionResult");function fromSequentialInsertionResult(result,convertLeaf){return{lowLeafWitnessData:result.lowLeafWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf)),insertionWitnessData:result.insertionWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf))}}__name(fromSequentialInsertionResult,"fromSequentialInsertionResult");function toFrLeaf(leaf){if(!(leaf instanceof Buffer79))throw new Error("Expected field leaf");return new Uint8Array(leaf)}__name(toFrLeaf,"toFrLeaf");function formatMap2(map2){if(!(!map2||Object.keys(map2).length===0))return`{${Object.entries(map2).map(([key,value])=>`${key}:${value}`).join(",")}}`}__name(formatMap2,"formatMap");var WSDB_SHM_RING_SIZE=32*1024*1024;function getWsdbThreadCount(){return Math.min(16,cpus().length)}__name(getWsdbThreadCount,"getWsdbThreadCount");function getWsdbExtraArgs(dataDir,wsTreeMapSizes,genesis,threads){let options=getWsdbOptions(dataDir,wsTreeMapSizes),args=["--data-dir",dataDir,"--threads",threads.toString()];args.push("--request-ring-size",WSDB_SHM_RING_SIZE.toString()),args.push("--response-ring-size",WSDB_SHM_RING_SIZE.toString());let treeHeights=formatMap2(options.treeHeights);treeHeights&&args.push("--tree-heights",treeHeights);let treePrefill=formatMap2(options.treePrefill);treePrefill&&args.push("--tree-prefill",treePrefill);let mapSizes=formatMap2(options.mapSizes);if(mapSizes&&args.push("--map-sizes",mapSizes),args.push("--initial-header-generator-point",options.initialHeaderGeneratorPoint.toString()),genesis.prefilledPublicData.length>0){let pairs=genesis.prefilledPublicData.map(data=>[data.slot.toBuffer().toString("hex"),data.value.toBuffer().toString("hex")]);args.push("--prefilled-public-data",JSON.stringify(pairs))}let prefilledNullifiers=genesis.prefilledNullifiers;for(let i=1;i<prefilledNullifiers.length;i++)if(prefilledNullifiers[i].toBigInt()<=prefilledNullifiers[i-1].toBigInt())throw new Error("Prefilled genesis nullifiers must be unique and strictly increasing");prefilledNullifiers.length>0&&args.push("--prefilled-nullifiers",JSON.stringify(prefilledNullifiers.map(nullifier=>nullifier.toBuffer().toString("hex"))));let genesisTimestamp=Number(genesis.genesisTimestamp);return genesisTimestamp!==0&&args.push("--genesis-timestamp",genesisTimestamp.toString()),args}__name(getWsdbExtraArgs,"getWsdbExtraArgs");function convertUint8ArraysToBuffers(obj){if(obj instanceof Uint8Array)return Buffer79.from(obj);if(Array.isArray(obj))return obj.map(convertUint8ArraysToBuffers);if(obj!==null&&typeof obj=="object"){let result={};for(let[key,value]of Object.entries(obj))result[key]=convertUint8ArraysToBuffers(value);return result}return obj}__name(convertUint8ArraysToBuffers,"convertUint8ArraysToBuffers");function convertStateRef(state){let result={};for(let{treeId,root,size}of state)result[treeId]=[Buffer79.from(root),BigInt(size)];return result}__name(convertStateRef,"convertStateRef");function convertStatusSummary(s2){return{unfinalizedBlockNumber:s2.unfinalizedBlockNumber,finalizedBlockNumber:s2.finalizedBlockNumber,oldestHistoricalBlock:s2.oldestHistoricalBlock,treesAreSynched:s2.treesAreSynched}}__name(convertStatusSummary,"convertStatusSummary");function convertDBStats(s2){return{name:s2.name,numDataItems:s2.numDataItems,totalUsedSize:s2.totalUsedSize}}__name(convertDBStats,"convertDBStats");function convertTreeDBStats(s2){return{mapSize:s2.mapSize,physicalFileSize:s2.physicalFileSize,blocksDBStats:convertDBStats(s2.blocksDBStats),nodesDBStats:convertDBStats(s2.nodesDBStats),leafPreimagesDBStats:convertDBStats(s2.leafPreimagesDBStats),leafIndicesDBStats:convertDBStats(s2.leafIndicesDBStats),blockIndicesDBStats:convertDBStats(s2.blockIndicesDBStats)}}__name(convertTreeDBStats,"convertTreeDBStats");function convertWorldStateDBStats(s2){return{noteHashTreeStats:convertTreeDBStats(s2.noteHashTreeStats),messageTreeStats:convertTreeDBStats(s2.messageTreeStats),archiveTreeStats:convertTreeDBStats(s2.archiveTreeStats),publicDataTreeStats:convertTreeDBStats(s2.publicDataTreeStats),nullifierTreeStats:convertTreeDBStats(s2.nullifierTreeStats)}}__name(convertWorldStateDBStats,"convertWorldStateDBStats");function convertTreeMeta(m){return{name:m.name,depth:m.depth,size:m.size,committedSize:m.committedSize,root:m.root,initialSize:m.initialSize,initialRoot:m.initialRoot,oldestHistoricBlock:m.oldestHistoricBlock,unfinalizedBlockHeight:m.unfinalizedBlockHeight,finalizedBlockHeight:m.finalizedBlockHeight}}__name(convertTreeMeta,"convertTreeMeta");function convertWorldStateMeta(m){return{noteHashTreeMeta:convertTreeMeta(m.noteHashTreeMeta),messageTreeMeta:convertTreeMeta(m.messageTreeMeta),archiveTreeMeta:convertTreeMeta(m.archiveTreeMeta),publicDataTreeMeta:convertTreeMeta(m.publicDataTreeMeta),nullifierTreeMeta:convertTreeMeta(m.nullifierTreeMeta)}}__name(convertWorldStateMeta,"convertWorldStateMeta");function convertStatusFull(s2){return{summary:convertStatusSummary(s2.summary),dbStats:convertWorldStateDBStats(s2.dbStats),meta:convertWorldStateMeta(s2.meta)}}__name(convertStatusFull,"convertStatusFull");function convertSiblingPathAndIndex(s2){if(s2)return{index:BigInt(s2.index),path:s2.path.map(p=>Buffer79.from(p))}}__name(convertSiblingPathAndIndex,"convertSiblingPathAndIndex");var IpcWorldState=class _IpcWorldState{static{__name(this,"IpcWorldState")}wsdb;instrumentation;log;open;api;checkpointDepths;constructor(wsdb,instrumentation,bindings,log2=createLogger("world-state:ipc-database",bindings)){this.wsdb=wsdb,this.instrumentation=instrumentation,this.log=log2,this.open=!0,this.checkpointDepths=new Map,this.api=wsdb,this.log.info("Created IPC-backed world state instance")}static async spawn(dataDir,wsTreeMapSizes,genesis,instrumentation,bindings,threads=getWsdbThreadCount()){let transport=getEnv().WSDB_TRANSPORT==="shm"?"shm":"uds",wsdb=await WsdbService.spawn({transport,extraArgs:getWsdbExtraArgs(dataDir,wsTreeMapSizes,genesis,threads),env:{HARDWARE_CONCURRENCY:threads.toString()}});return new _IpcWorldState(wsdb,instrumentation,bindings)}getIpcPath(){return this.wsdb.getIpcPath()}async close(){this.open&&(this.open=!1,await this.wsdb.destroy())}getTreeInfo(treeId,revision){return this.execute("getTreeInfo",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.getTreeInfo({treeId,revision:toWsdbRevision(revision)});return{treeId:resp.treeId,root:Buffer79.from(resp.root),size:BigInt(resp.size),depth:resp.depth}})}getStateReference(revision){return this.execute("getStateReference",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.getStateReference({revision:toWsdbRevision(revision)});return convertStateRef(resp.state)})}getInitialStateReference(){return this.execute("getInitialStateReference",0,!1,async()=>{let resp=await this.api.getInitialStateReference({});return convertStateRef(resp.state)})}getLeafValue(treeId,revision,leafIndex){return this.execute("getLeafValue",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision),wsdbLeafIndex=Number(leafIndex);if(treeId===MerkleTreeId.PUBLIC_DATA_TREE){let resp2=await this.api.getPublicDataLeafValue({revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp2.value?fromPublicDataLeaf(resp2.value):void 0}if(treeId===MerkleTreeId.NULLIFIER_TREE){let resp2=await this.api.getNullifierLeafValue({revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp2.value?fromNullifierLeaf(resp2.value):void 0}let resp=await this.api.getLeafValue({treeId,revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp.value?Buffer79.from(resp.value):void 0})}getLeafPreimage(treeId,revision,leafIndex){return this.execute("getLeafPreimage",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.getPublicDataLeafPreimage({revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)}):await this.api.getNullifierLeafPreimage({revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)});return resp.preimage?convertUint8ArraysToBuffers(resp.preimage):void 0})}getSiblingPath(treeId,revision,leafIndex){return this.execute("getSiblingPath",revision.forkId,revision.includeUncommitted===!1,async()=>(await this.api.getSiblingPath({treeId,revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)})).path.map(p=>Buffer79.from(p)))}getBlockNumbersForLeafIndices(treeId,revision,leafIndices){return this.execute("getBlockNumbersForLeafIndices",revision.forkId,revision.includeUncommitted===!1,async()=>(await this.api.getBlockNumbersForLeafIndices({treeId,revision:toWsdbRevision(revision),leafIndices:leafIndices.map(Number)})).blockNumbers.map(n=>n!=null?BigInt(n):void 0))}findLeafIndices(treeId,revision,leaves,startIndex){return this.execute("findLeafIndices",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision),wsdbStartIndex=Number(startIndex);return(treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.findPublicDataLeafIndices({revision:wsdbRevision,leaves:leaves.map(toPublicDataLeaf),startIndex:wsdbStartIndex}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.findNullifierLeafIndices({revision:wsdbRevision,leaves:leaves.map(toNullifierLeaf),startIndex:wsdbStartIndex}):await this.api.findLeafIndices({treeId,revision:wsdbRevision,leaves:leaves.map(toFrLeaf),startIndex:wsdbStartIndex})).indices.map(n=>n!=null?BigInt(n):void 0)})}findLowLeaf(treeId,revision,key){return this.execute("findLowLeaf",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.findLowLeaf({treeId,revision:toWsdbRevision(revision),key:new Uint8Array(key.toBuffer())});return{alreadyPresent:resp.alreadyPresent,index:BigInt(resp.index)}})}findSiblingPaths(treeId,revision,leaves){return this.execute("findSiblingPaths",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision);return(treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.findPublicDataSiblingPaths({revision:wsdbRevision,leaves:leaves.map(toPublicDataLeaf)}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.findNullifierSiblingPaths({revision:wsdbRevision,leaves:leaves.map(toNullifierLeaf)}):await this.api.findSiblingPaths({treeId,revision:wsdbRevision,leaves:leaves.map(toFrLeaf)})).paths.map(convertSiblingPathAndIndex)})}updateArchive(forkId,blockStateRef,blockHeaderHash){return this.execute("updateArchive",forkId,!1,async()=>{await this.api.updateArchive({blockStateRef:blockStateRefToMap(blockStateRef),blockHeaderHash:new Uint8Array(blockHeaderHash),forkId})})}appendLeaves(treeId,forkId,leaves){return this.execute("appendLeaves",forkId,!1,async()=>{treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.appendPublicDataLeaves({leaves:leaves.map(toPublicDataLeaf),forkId}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.appendNullifierLeaves({leaves:leaves.map(toNullifierLeaf),forkId}):await this.api.appendLeaves({treeId,leaves:leaves.map(toFrLeaf),forkId})})}batchInsert(treeId,forkId,leaves,subtreeDepth){return this.execute("batchInsert",forkId,!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.batchInsertPublicData({leaves:leaves.map(toPublicDataLeaf),subtreeDepth,forkId}):await this.api.batchInsertNullifier({leaves:leaves.map(toNullifierLeaf),subtreeDepth,forkId});return treeId===MerkleTreeId.PUBLIC_DATA_TREE?fromBatchInsertionResult(resp.result,fromPublicDataLeaf):fromBatchInsertionResult(resp.result,fromNullifierLeaf)})}sequentialInsert(treeId,forkId,leaves){return this.execute("sequentialInsert",forkId,!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.sequentialInsertPublicData({leaves:leaves.map(toPublicDataLeaf),forkId}):await this.api.sequentialInsertNullifier({leaves:leaves.map(toNullifierLeaf),forkId});return treeId===MerkleTreeId.PUBLIC_DATA_TREE?fromSequentialInsertionResult(resp.result,fromPublicDataLeaf):fromSequentialInsertionResult(resp.result,fromNullifierLeaf)})}syncBlock(input){return this.execute("syncBlock",0,!1,async()=>{let resp=await this.api.syncBlock({blockNumber:Number(input.blockNumber),blockStateRef:blockStateRefToMap(input.blockStateRef),blockHeaderHash:new Uint8Array(input.blockHeaderHash),expectedArchiveRoot:new Uint8Array(input.expectedArchiveRoot),expectedPreviousArchiveRoot:new Uint8Array(input.expectedPreviousArchiveRoot),paddedNoteHashes:input.paddedNoteHashes.map(toFrLeaf),paddedL1ToL2Messages:input.paddedL1ToL2Messages.map(toFrLeaf),paddedNullifiers:input.paddedNullifiers.map(toNullifierLeaf),publicDataWrites:input.publicDataWrites.map(toPublicDataLeaf)});return convertStatusFull(resp.status)})}createFork(input){return this.execute("createFork",0,!1,async()=>(await this.api.createFork({latest:input.latest,blockNumber:Number(input.blockNumber)})).forkId)}deleteFork(forkId){return this.execute("deleteFork",forkId,!1,async()=>{await this.api.deleteFork({forkId})})}finalizeBlocks(toBlockNumber){return this.execute("finalizeBlocks",0,!1,async()=>{let resp=await this.api.finalizeBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusSummary(resp.status)})}unwindBlocks(toBlockNumber){return this.execute("unwindBlocks",0,!1,async()=>{let resp=await this.api.unwindBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusFull(resp.status)})}removeHistoricalBlocks(toBlockNumber){return this.execute("removeHistoricalBlocks",0,!1,async()=>{let resp=await this.api.removeHistoricalBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusFull(resp.status)})}getStatus(){return this.execute("getStatus",0,!1,async()=>{let resp=await this.api.getStatus({});return convertStatusSummary(resp.status)})}createCheckpoint(forkId){return this.execute("createCheckpoint",forkId,!1,async()=>{await this.api.createCheckpoint({forkId});let depth=(this.checkpointDepths.get(forkId)??0)+1;return this.checkpointDepths.set(forkId,depth),depth})}commitCheckpoint(forkId){return this.execute("commitCheckpoint",forkId,!1,async()=>{await this.api.commitCheckpoint({forkId});let depth=Math.max(0,(this.checkpointDepths.get(forkId)??0)-1);this.checkpointDepths.set(forkId,depth)})}revertCheckpoint(forkId){return this.execute("revertCheckpoint",forkId,!1,async()=>{await this.api.revertCheckpoint({forkId});let depth=Math.max(0,(this.checkpointDepths.get(forkId)??0)-1);this.checkpointDepths.set(forkId,depth)})}commitAllCheckpoints(forkId,depth){return this.execute("commitAllCheckpoints",forkId,!1,async()=>{let currentDepth=this.checkpointDepths.get(forkId)??0;if(depth===0)await this.api.commitAllCheckpoints({forkId});else for(let d=currentDepth;d>depth;d--)await this.api.commitCheckpoint({forkId});this.checkpointDepths.set(forkId,depth)})}revertAllCheckpoints(forkId,depth){return this.execute("revertAllCheckpoints",forkId,!1,async()=>{let currentDepth=this.checkpointDepths.get(forkId)??0;if(depth===0)await this.api.revertAllCheckpoints({forkId});else for(let d=currentDepth;d>depth;d--)await this.api.revertCheckpoint({forkId});this.checkpointDepths.set(forkId,depth)})}copyStores(dstPath,compact2){return this.execute("copyStores",0,!1,async()=>{await this.api.copyStores({dstPath,compact:compact2})})}async execute(operation,_forkId,_committedOnly,request){if(!this.open)throw new Error("IPC instance is closed");return await this.send(operation,request)}async send(operation,request){let start=performance.now();try{let response=await request(),durationMs=performance.now()-start;return this.log.trace(`Call ${operation} took (ms)`,{duration:durationMs}),this.instrumentation.recordRoundTrip(durationMs*1e3,operation),response}catch(error2){throw error2 instanceof IpcProcessExitedError&&exitOnWsdbDeath(operation,error2,this.log),this.log.error(`Call ${operation} failed: ${error2}`,error2),error2}}};function exitOnWsdbDeath(operation,error2,log2){log2.fatal(`World state database process died during ${operation}; exiting`,error2,{code:error2.code,signal:error2.signal,logPath:error2.logPath}),process.exit(1)}__name(exitOnWsdbDeath,"exitOnWsdbDeath");function getWsdbOptions(dataDir,wsTreeMapSizes){return{treeHeights:{[MerkleTreeId.NULLIFIER_TREE]:42,[MerkleTreeId.NOTE_HASH_TREE]:42,[MerkleTreeId.PUBLIC_DATA_TREE]:40,[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]:36,[MerkleTreeId.ARCHIVE]:30},treePrefill:{[MerkleTreeId.NULLIFIER_TREE]:128,[MerkleTreeId.PUBLIC_DATA_TREE]:128},mapSizes:{[MerkleTreeId.NULLIFIER_TREE]:wsTreeMapSizes.nullifierTreeMapSizeKb,[MerkleTreeId.NOTE_HASH_TREE]:wsTreeMapSizes.noteHashTreeMapSizeKb,[MerkleTreeId.PUBLIC_DATA_TREE]:wsTreeMapSizes.publicDataTreeMapSizeKb,[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]:wsTreeMapSizes.messageTreeMapSizeKb,[MerkleTreeId.ARCHIVE]:wsTreeMapSizes.archiveTreeMapSizeKb},initialHeaderGeneratorPoint:DomainSeparator.BLOCK_HEADER_HASH}}__name(getWsdbOptions,"getWsdbOptions");import assert4 from"assert";import{Buffer as Buffer80}from"buffer";function sanitizeSummary(summary){return summary.finalizedBlockNumber=BlockNumber.fromBigInt(BigInt(summary.finalizedBlockNumber)),summary.unfinalizedBlockNumber=BlockNumber.fromBigInt(BigInt(summary.unfinalizedBlockNumber)),summary.oldestHistoricalBlock=BlockNumber.fromBigInt(BigInt(summary.oldestHistoricalBlock)),summary}__name(sanitizeSummary,"sanitizeSummary");function sanitizeDBStats(stats){return stats.numDataItems=BigInt(stats.numDataItems),stats.totalUsedSize=BigInt(stats.totalUsedSize),stats}__name(sanitizeDBStats,"sanitizeDBStats");function sanitizeMeta(meta3){return meta3.committedSize=BigInt(meta3.committedSize),meta3.finalizedBlockHeight=BlockNumber.fromBigInt(BigInt(meta3.finalizedBlockHeight)),meta3.initialSize=BigInt(meta3.initialSize),meta3.oldestHistoricBlock=BlockNumber.fromBigInt(BigInt(meta3.oldestHistoricBlock)),meta3.size=BigInt(meta3.size),meta3.unfinalizedBlockHeight=BlockNumber.fromBigInt(BigInt(meta3.unfinalizedBlockHeight)),meta3}__name(sanitizeMeta,"sanitizeMeta");function sanitizeTreeDBStats(stats){return stats.blocksDBStats=sanitizeDBStats(stats.blocksDBStats),stats.leafIndicesDBStats=sanitizeDBStats(stats.leafIndicesDBStats),stats.leafPreimagesDBStats=sanitizeDBStats(stats.leafPreimagesDBStats),stats.blockIndicesDBStats=sanitizeDBStats(stats.blockIndicesDBStats),stats.nodesDBStats=sanitizeDBStats(stats.nodesDBStats),stats.mapSize=BigInt(stats.mapSize),stats.physicalFileSize=BigInt(stats.physicalFileSize),stats}__name(sanitizeTreeDBStats,"sanitizeTreeDBStats");function sanitizeWorldStateDBStats(stats){return stats.archiveTreeStats=sanitizeTreeDBStats(stats.archiveTreeStats),stats.messageTreeStats=sanitizeTreeDBStats(stats.messageTreeStats),stats.noteHashTreeStats=sanitizeTreeDBStats(stats.noteHashTreeStats),stats.nullifierTreeStats=sanitizeTreeDBStats(stats.nullifierTreeStats),stats.publicDataTreeStats=sanitizeTreeDBStats(stats.publicDataTreeStats),stats}__name(sanitizeWorldStateDBStats,"sanitizeWorldStateDBStats");function sanitizeWorldStateTreeMeta(meta3){return meta3.archiveTreeMeta=sanitizeMeta(meta3.archiveTreeMeta),meta3.messageTreeMeta=sanitizeMeta(meta3.messageTreeMeta),meta3.noteHashTreeMeta=sanitizeMeta(meta3.noteHashTreeMeta),meta3.nullifierTreeMeta=sanitizeMeta(meta3.nullifierTreeMeta),meta3.publicDataTreeMeta=sanitizeMeta(meta3.publicDataTreeMeta),meta3}__name(sanitizeWorldStateTreeMeta,"sanitizeWorldStateTreeMeta");function sanitizeFullStatus(status){return status.dbStats=sanitizeWorldStateDBStats(status.dbStats),status.summary=sanitizeSummary(status.summary),status.meta=sanitizeWorldStateTreeMeta(status.meta),status}__name(sanitizeFullStatus,"sanitizeFullStatus");function treeStateReferenceToSnapshot([root,size]){return new AppendOnlyTreeSnapshot(Fr.fromBuffer(root),TreeLeafIndex.fromBigInt(BigInt(size)))}__name(treeStateReferenceToSnapshot,"treeStateReferenceToSnapshot");function treeStateReference(snapshot){return[snapshot.root.toBuffer(),BigInt(snapshot.nextAvailableLeafIndex)]}__name(treeStateReference,"treeStateReference");function blockStateReference(state){return new Map([[MerkleTreeId.NULLIFIER_TREE,treeStateReference(state.partial.nullifierTree)],[MerkleTreeId.NOTE_HASH_TREE,treeStateReference(state.partial.noteHashTree)],[MerkleTreeId.PUBLIC_DATA_TREE,treeStateReference(state.partial.publicDataTree)],[MerkleTreeId.L1_TO_L2_MESSAGE_TREE,treeStateReference(state.l1ToL2MessageTree)]])}__name(blockStateReference,"blockStateReference");var _computedKey46,MerkleTreesFacade=class{static{__name(this,"MerkleTreesFacade")}instance;initialHeader;revision;constructor(instance,initialHeader,revision){this.instance=instance,this.initialHeader=initialHeader,this.revision=revision}getInitialHeader(){return this.initialHeader}getRevision(){return this.revision}getIpcPath(){return this.instance.getIpcPath()}findLeafIndices(treeId,values){return this.findLeafIndicesAfter(treeId,values,0n)}async findSiblingPaths(treeId,values){return(await this.instance.findSiblingPaths(treeId,this.revision,values.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))))).map(path5=>{if(path5)return{path:new SiblingPath(path5.path.length,path5.path),index:BigInt(path5.index)}})}async findLeafIndicesAfter(treeId,leaves,startIndex){return(await this.instance.findLeafIndices(treeId,this.revision,leaves.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))),startIndex)).map(index=>{if(typeof index=="number"||typeof index=="bigint")return BigInt(index)})}async getLeafPreimage(treeId,leafIndex){let resp=await this.instance.getLeafPreimage(treeId,this.revision,leafIndex);return resp?deserializeIndexedLeaf(resp):void 0}async getLeafValue(treeId,leafIndex){let resp=await this.instance.getLeafValue(treeId,this.revision,leafIndex);if(!resp)return;let leaf=deserializeLeafValue(resp);return leaf instanceof Fr?treeId===MerkleTreeId.ARCHIVE?new BlockHash(leaf):leaf:leaf.toBuffer()}async getPreviousValueIndex(treeId,value){let resp=await this.instance.findLowLeaf(treeId,this.revision,new Fr(value));return{alreadyPresent:resp.alreadyPresent,index:BigInt(resp.index)}}async getSiblingPath(treeId,leafIndex){let siblingPath=await this.instance.getSiblingPath(treeId,this.revision,leafIndex);return new SiblingPath(siblingPath.length,siblingPath)}async getStateReference(){let state=await this.instance.getStateReference(this.revision);return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async getInitialStateReference(){let state=await this.instance.getInitialStateReference();return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async getTreeInfo(treeId){return await this.instance.getTreeInfo(treeId,this.revision)}async getBlockNumbersForLeafIndices(treeId,leafIndices){return(await this.instance.getBlockNumbersForLeafIndices(treeId,this.revision,leafIndices)).map(x=>x==null?void 0:BlockNumber(Number(x)))}};_computedKey46=Symbol.asyncDispose;var MerkleTreesForkFacade=class extends MerkleTreesFacade{static{__name(this,"MerkleTreesForkFacade")}opts;log;closePromise;constructor(instance,initialHeader,revision,opts){assert4.notEqual(revision.forkId,0,"Fork ID must be set"),assert4.equal(revision.includeUncommitted,!0,"Fork must include uncommitted data"),super(instance,initialHeader,revision),this.opts=opts,this.log=createLogger("world-state:merkle-trees-fork-facade")}async updateArchive(header){await this.instance.updateArchive(this.revision.forkId,blockStateReference(header.state),(await header.hash()).toBuffer())}async appendLeaves(treeId,leaves){await this.instance.appendLeaves(treeId,this.revision.forkId,leaves.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))))}async batchInsert(treeId,rawLeaves,subtreeHeight){let leaves=rawLeaves.map(leaf=>hydrateLeaf(treeId,leaf)).map(serializeLeaf),resp=await this.instance.batchInsert(treeId,this.revision.forkId,leaves,subtreeHeight);return{newSubtreeSiblingPath:new SiblingPath(resp.subtreePath.length,resp.subtreePath),sortedNewLeaves:resp.sortedLeaves.map(([leaf])=>leaf).map(deserializeLeafValue).map(serializeToBuffer),sortedNewLeavesIndexes:resp.sortedLeaves.map(([,index])=>index),lowLeavesWitnessData:resp.lowLeafWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)}))}}async sequentialInsert(treeId,rawLeaves){let leaves=rawLeaves.map(leaf=>hydrateLeaf(treeId,leaf)).map(serializeLeaf),resp=await this.instance.sequentialInsert(treeId,this.revision.forkId,leaves);return{lowLeavesWitnessData:resp.lowLeafWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)})),insertionWitnessData:resp.insertionWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)}))}}close(){return assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),this.closePromise?this.closePromise:(this.closePromise=this.doClose(),this.closePromise)}async doClose(){try{await this.instance.deleteFork(this.revision.forkId)}catch(err){if(err?.message==="Native instance is closed"||err?.message==="IPC instance is closed"||err?.message==="Fork not found")return;throw err}}async[_computedKey46](){this.opts.closeDelayMs?sleep(this.opts.closeDelayMs).then(()=>this.close()).catch(err=>{this.log.warn("Error closing MerkleTreesForkFacade after delay",{err})}):await this.close()}async createCheckpoint(){return assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.createCheckpoint(this.revision.forkId)}async commitCheckpoint(){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.commitCheckpoint(this.revision.forkId)}async revertCheckpoint(){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.revertCheckpoint(this.revision.forkId)}async commitAllCheckpointsTo(depth){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.commitAllCheckpoints(this.revision.forkId,depth)}async revertAllCheckpointsTo(depth){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.revertAllCheckpoints(this.revision.forkId,depth)}};function hydrateLeaf(treeId,leaf){return leaf instanceof Fr?leaf:leaf instanceof BlockHash?leaf.toFr():treeId===MerkleTreeId.NULLIFIER_TREE?NullifierLeaf.fromBuffer(leaf):treeId===MerkleTreeId.PUBLIC_DATA_TREE?PublicDataTreeLeaf.fromBuffer(leaf):Fr.fromBuffer(leaf)}__name(hydrateLeaf,"hydrateLeaf");function serializeLeaf(leaf){return leaf instanceof BlockHash||leaf instanceof Fr?leaf.toBuffer():leaf instanceof NullifierLeaf?{nullifier:leaf.nullifier.toBuffer()}:{value:leaf.value.toBuffer(),slot:leaf.slot.toBuffer()}}__name(serializeLeaf,"serializeLeaf");function deserializeLeafValue(leaf){return Buffer80.isBuffer(leaf)?Fr.fromBuffer(leaf):"slot"in leaf?new PublicDataTreeLeaf(Fr.fromBuffer(leaf.slot),Fr.fromBuffer(leaf.value)):new NullifierLeaf(Fr.fromBuffer(leaf.nullifier))}__name(deserializeLeafValue,"deserializeLeafValue");function deserializeIndexedLeaf(leafPreimage){if("slot"in leafPreimage.leaf)return new PublicDataTreeLeafPreimage(new PublicDataTreeLeaf(Fr.fromBuffer(leafPreimage.leaf.slot),Fr.fromBuffer(leafPreimage.leaf.value)),Fr.fromBuffer(leafPreimage.nextKey),BigInt(leafPreimage.nextIndex));if("nullifier"in leafPreimage.leaf)return new NullifierLeafPreimage(new NullifierLeaf(Fr.fromBuffer(leafPreimage.leaf.nullifier)),Fr.fromBuffer(leafPreimage.nextKey),BigInt(leafPreimage.nextIndex));throw new Error("Invalid leaf type")}__name(deserializeIndexedLeaf,"deserializeIndexedLeaf");var _computedKey47,WORLD_STATE_DB_VERSION=2,WORLD_STATE_DIR="world_state";_computedKey47=Symbol.asyncDispose;var NativeWorldStateService=class{static{__name(this,"NativeWorldStateService")}instance;worldStateInstrumentation;log;genesis;cleanup;recreateInstance;initialHeader;cachedStatusSummary;constructor(instance,worldStateInstrumentation,log2,genesis=DEFAULT_GENESIS_DATA,cleanup=()=>Promise.resolve(),recreateInstance){this.instance=instance,this.worldStateInstrumentation=worldStateInstrumentation,this.log=log2,this.genesis=genesis,this.cleanup=cleanup,this.recreateInstance=recreateInstance}static async new(rollupAddress,dataDir,wsTreeMapSizes,genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,cleanup=()=>Promise.resolve()){for(let[key,value]of Object.entries(wsTreeMapSizes))if(value<=0)throw new Error(`Map size must be a positive number, got ${value} for ${key}`);let log2=createLogger("world-state:database",bindings),worldStateDirectory=join8(dataDir,WORLD_STATE_DIR),versionManager=new DatabaseVersionManager({schemaVersion:WORLD_STATE_DB_VERSION,rollupAddress,dataDirectory:worldStateDirectory,onOpen:__name(dir=>IpcWorldState.spawn(dir,wsTreeMapSizes,genesis,instrumentation,bindings),"onOpen")}),[instance]=await versionManager.open(),recreateInstance=__name(async()=>(await rm4(worldStateDirectory,{recursive:!0,force:!0,maxRetries:3}),await mkdir3(worldStateDirectory,{recursive:!0}),IpcWorldState.spawn(worldStateDirectory,wsTreeMapSizes,genesis,instrumentation,bindings)),"recreateInstance"),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);try{await worldState.init()}catch(e2){throw log2.error(`Error initializing world state: ${e2}`),await instance.close(),e2}return worldState}static async tmp(cleanupTmpDir=!0,genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,threads){let log2=createLogger("world-state:database",bindings),dataDir=await mkdtemp2(join8(tmpdir4(),"aztec-world-state-")),dbMapSizeKb=256*1024,worldStateTreeMapSizes={archiveTreeMapSizeKb:dbMapSizeKb,nullifierTreeMapSizeKb:dbMapSizeKb,noteHashTreeMapSizeKb:dbMapSizeKb,messageTreeMapSizeKb:dbMapSizeKb,publicDataTreeMapSizeKb:dbMapSizeKb};log2.debug(`Created temporary world state database at: ${dataDir} with tree map size: ${dbMapSizeKb}`);let instance=await IpcWorldState.spawn(dataDir,worldStateTreeMapSizes,genesis,instrumentation,bindings,threads),cleanup=__name(async()=>{cleanupTmpDir?(await rm4(dataDir,{recursive:!0,force:!0,maxRetries:3}),log2.debug(`Deleted temporary world state database: ${dataDir}`)):log2.debug(`Leaving temporary world state database: ${dataDir}`)},"cleanup"),recreateInstance=__name(async()=>(await rm4(dataDir,{recursive:!0,force:!0,maxRetries:3}),await mkdir3(dataDir,{recursive:!0}),IpcWorldState.spawn(dataDir,worldStateTreeMapSizes,genesis,instrumentation,bindings,threads)),"recreateInstance"),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);try{await worldState.init()}catch(e2){throw log2.error(`Error initializing tmp world state: ${e2}`),e2}return worldState}static ephemeral(genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings){return this.tmp(!0,genesis,instrumentation,bindings,1)}static async fromIpc(wsdbBackend,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,genesis=DEFAULT_GENESIS_DATA,cleanup=()=>Promise.resolve(),recreateInstance){let log2=createLogger("world-state:database",bindings),instance=new IpcWorldState(wsdbBackend,instrumentation,bindings),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);return await worldState.init(),worldState}async init(){if(!(await this.getStatusSummary()).treesAreSynched)throw new Error("World state trees are out of sync, please delete your data directory and re-sync");this.initialHeader=await this.buildInitialHeader();let committed=this.getCommitted();if((await committed.getTreeInfo(MerkleTreeId.ARCHIVE)).size===0n)throw new Error("Archive tree can't be empty");let initialHeaderIndex=(await committed.findLeafIndices(MerkleTreeId.ARCHIVE,[await this.initialHeader.hash()]))[0];assert5.strictEqual(initialHeaderIndex,0n,"Invalid initial archive state")}async clear(){if(!this.recreateInstance)throw new Error("clear() is not available for externally-managed IPC backends");this.log.warn("Clearing world state: shutting down WSDB, deleting data, and recreating"),await this.instance.close(),this.cachedStatusSummary=void 0,this.instance=await this.recreateInstance(),await this.init(),this.log.info("World state cleared and reinitialized from genesis")}getIpcPath(){if(this.instance instanceof IpcWorldState)return this.instance.getIpcPath();throw new Error("getIpcPath() is only available with IPC world state")}getCommitted(){return new MerkleTreesFacade(this.instance,this.initialHeader,WorldStateRevision.empty())}getSnapshot(blockNumber){return new MerkleTreesFacade(this.instance,this.initialHeader,new WorldStateRevision(0,blockNumber,!1))}async fork(blockNumber,opts={}){let forkId=await this.instance.createFork({latest:blockNumber===void 0,blockNumber:blockNumber??BlockNumber.ZERO});return new MerkleTreesForkFacade(this.instance,this.initialHeader,new WorldStateRevision(forkId,WorldStateRevision.LATEST,!0),opts)}getInitialHeader(){return this.initialHeader}async handleL2BlockAndMessages(l2Block,l1ToL2Messages){let paddedNoteHashes=l2Block.body.txEffects.flatMap(txEffect=>padArrayEnd(txEffect.noteHashes,Fr.ZERO,64)),paddedNullifiers=l2Block.body.txEffects.flatMap(txEffect=>padArrayEnd(txEffect.nullifiers,Fr.ZERO,64)).map(nullifier=>new NullifierLeaf(nullifier)),publicDataWrites=l2Block.body.txEffects.flatMap(txEffect=>txEffect.publicDataWrites.map(write=>{if(write.isEmpty())throw new Error("Public data write must not be empty when syncing");return new PublicDataTreeLeaf(write.leafSlot,write.value)}));try{let status=await this.instance.syncBlock({blockNumber:l2Block.number,blockHeaderHash:(await l2Block.hash()).toBuffer(),expectedArchiveRoot:l2Block.archive.root.toBuffer(),expectedPreviousArchiveRoot:l2Block.header.lastArchive.root.toBuffer(),paddedL1ToL2Messages:l1ToL2Messages.map(serializeLeaf),paddedNoteHashes:paddedNoteHashes.map(serializeLeaf),paddedNullifiers:paddedNullifiers.map(serializeLeaf),publicDataWrites:publicDataWrites.map(serializeLeaf),blockStateRef:blockStateReference(l2Block.header.state)});return this.sanitizeAndCacheSummaryFromFull(status)}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("synch_pending_block"),err}}async close(){try{await this.instance.close()}finally{await this.cleanup()}}async[_computedKey47](){await this.close()}async buildInitialHeader(){let state=await this.getInitialStateReference();return BlockHeader.empty({state,globalVariables:GlobalVariables.empty({timestamp:this.genesis.genesisTimestamp})})}sanitizeAndCacheSummaryFromFull(response){let sanitized=sanitizeFullStatus(response);return this.cachedStatusSummary={...sanitized.summary},sanitized}sanitizeAndCacheSummary(response){let sanitized=sanitizeSummary(response);return this.cachedStatusSummary={...sanitized},sanitized}deleteCachedSummary(){this.cachedStatusSummary=void 0}async setFinalized(toBlockNumber){try{this.sanitizeAndCacheSummary(await this.instance.finalizeBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("finalize_block"),err}return this.getStatusSummary()}async removeHistoricalBlocks(toBlockNumber){try{return this.sanitizeAndCacheSummaryFromFull(await this.instance.removeHistoricalBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("prune_historical_block"),err}}async unwindBlocks(toBlockNumber){try{return this.sanitizeAndCacheSummaryFromFull(await this.instance.unwindBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("prune_pending_block"),err}}async getStatusSummary(){return this.cachedStatusSummary!==void 0?{...this.cachedStatusSummary}:this.sanitizeAndCacheSummary(await this.instance.getStatus())}updateLeaf(_treeId,_leaf,_index){return Promise.reject(new Error("Method not implemented"))}async getInitialStateReference(){let state=await this.instance.getInitialStateReference();return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async backupTo(dstPath,compact2=!0){return await this.instance.copyStores(dstPath,compact2),fromEntries(NATIVE_WORLD_STATE_DBS.map(([name,dir])=>[name,join8(dstPath,dir,"data.mdb")]))}},NATIVE_WORLD_STATE_DBS=[["l1-to-l2-message-tree","L1ToL2MessageTree"],["archive-tree","ArchiveTree"],["public-data-tree","PublicDataTree"],["note-hash-tree","NoteHashTree"],["nullifier-tree","NullifierTree"]];var ForkCheckpoint=class _ForkCheckpoint{static{__name(this,"ForkCheckpoint")}fork;depth;completed;constructor(fork,depth){this.fork=fork,this.depth=depth,this.completed=!1}static async new(fork){let depth=await fork.createCheckpoint();return new _ForkCheckpoint(fork,depth)}async commit(){this.completed||(await this.fork.commitCheckpoint(),this.completed=!0)}async revert(){this.completed||(await this.fork.revertCheckpoint(),this.completed=!0)}async revertToCheckpoint(){this.completed||(await this.fork.revertAllCheckpointsTo(this.depth-1),this.completed=!0)}};import{AssertionError}from"assert";import{Buffer as Buffer81}from"buffer";var ExecutorMetrics=class{static{__name(this,"ExecutorMetrics")}tracer;fnCount;fnDuration;manaPerSecond;manaUsed;totalInstructionsExecuted;txHashing;privateEffectsInsertions;constructor(client,name="PublicExecutor"){this.tracer=client.getTracer(name);let meter=client.getMeter(name);this.fnCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_EXECUTOR_SIMULATION_COUNT,{[Attributes.OK]:[!0,!1]}),this.fnDuration=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_DURATION),this.manaPerSecond=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_MANA_PER_SECOND),this.manaUsed=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_MANA_USED),this.totalInstructionsExecuted=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_TOTAL_INSTRUCTIONS),this.txHashing=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_TX_HASHING),this.privateEffectsInsertions=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_PRIVATE_EFFECTS_INSERTION)}startRecordingTxSimulation(_txLabel){}stopRecordingTxSimulation(_txLabel,_gasUsed,_revertedCode,_stats){}recordEnqueuedCallSimulation(fnName,durationMs,manaUsed,totalInstructionsExecuted){if(this.fnCount.add(1,{[Attributes.OK]:!0,[Attributes.APP_CIRCUIT_NAME]:fnName}),this.manaUsed.record(Math.ceil(manaUsed),{[Attributes.APP_CIRCUIT_NAME]:fnName}),this.totalInstructionsExecuted.record(Math.ceil(totalInstructionsExecuted),{[Attributes.APP_CIRCUIT_NAME]:fnName}),this.fnDuration.record(Math.ceil(durationMs),{[Attributes.APP_CIRCUIT_NAME]:fnName}),durationMs>0&&manaUsed>0){let manaPerSecond=Math.round(manaUsed*1e3/durationMs);this.manaPerSecond.record(manaPerSecond,{[Attributes.APP_CIRCUIT_NAME]:fnName})}}recordEnqueuedCallSimulationFailure(_fnName,_durationMs,_manaUsed,_totalInstructionsExecuted){this.fnCount.add(1,{[Attributes.OK]:!1})}recordPrivateEffectsInsertion(durationUs,type){this.privateEffectsInsertions.record(Math.ceil(durationUs),{[Attributes.REVERTIBILITY]:type})}};var PublicTxSimulatorBase=class{static{__name(this,"PublicTxSimulatorBase")}avmSimulator;globalVariables;contractsDB;forkId;protocolContracts;log;config;bindings;constructor(avmSimulator,globalVariables,contractsDB,forkId,config2,protocolContracts=ProtocolContractsList,bindings){this.avmSimulator=avmSimulator,this.globalVariables=globalVariables,this.contractsDB=contractsDB,this.forkId=forkId,this.protocolContracts=protocolContracts,this.config=PublicSimulatorConfig.from(config2??{}),this.bindings=bindings,this.log=createLogger("simulator:public_tx_simulator",bindings)}computeTxHash(tx){return tx.getTxHash()}};var PublicTxSimulator=class extends PublicTxSimulatorBase{static{__name(this,"PublicTxSimulator")}log;abortController;simulationPromise;constructor(avmSimulator,globalVariables,contractsDB,forkId,config2,bindings){super(avmSimulator,globalVariables,contractsDB,forkId,config2,void 0,bindings),this.log=createLogger("simulator:public_tx_simulator",bindings)}async simulate(tx){this.abortController=new AbortController,this.simulationPromise=this.doSimulate(tx,this.abortController.signal);try{return await this.simulationPromise}finally{this.abortController=void 0,this.simulationPromise=void 0}}async doSimulate(tx,signal){let txHash=this.computeTxHash(tx);this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}, forkId=${this.forkId}`,{txHash});let txHint=AvmTxHint.fromTx(tx,this.globalVariables.gasFees),fastSimInputs=new AvmFastSimulationInputs({forkId:this.forkId,blockNumber:WorldStateRevision.LATEST,includeUncommitted:!0},this.config,txHint,this.globalVariables,this.protocolContracts);this.log.trace("Serializing fast simulation inputs to msgpack...");let inputBuffer=fastSimInputs.serializeWithMessagePack();this.log.debug(`Running AVM simulation for tx ${txHash}`);let context2={contractsDB:this.contractsDB,forkId:this.forkId,timestamp:this.globalVariables.timestamp},resultBuffer;try{resultBuffer=await this.avmSimulator.simulate(inputBuffer,context2,signal)}catch(error2){throw error2.message?.includes("cancelled")?new SimulationError("AVM simulation cancelled",[]):new SimulationError(`AVM simulation failed: ${error2.message}`,[])}this.log.trace(`Deserializing simulation result from buffer (size: ${resultBuffer.length})...`);let resultJSON=deserializeFromMessagePack(Buffer81.from(resultBuffer)),result=PublicTxResult.fromPlainObject(resultJSON);return this.log.trace(`AVM simulation completed for tx ${txHash}`,{txHash,reverted:!result.revertCode.isOK(),l2GasUsed:result.gasUsed.totalGas.l2Gas}),result}async cancel(waitTimeoutMs=100){this.abortController&&(this.log.debug("Cancelling AVM simulation"),this.abortController.abort()),this.simulationPromise&&(this.log.debug(`Waiting up to ${waitTimeoutMs}ms for AVM simulation to stop`),await Promise.race([this.simulationPromise.catch(()=>{}),sleep(waitTimeoutMs)]),this.log.debug("AVM simulation stopped or wait timed out"))}},MeasuredPublicTxSimulator=class extends PublicTxSimulator{static{__name(this,"MeasuredPublicTxSimulator")}metrics;constructor(avmSimulator,globalVariables,contractsDB,forkId,metrics2,config2,bindings){super(avmSimulator,globalVariables,contractsDB,forkId,config2,bindings),this.metrics=metrics2}async simulate(tx,txLabel="unlabeledTx"){this.metrics.startRecordingTxSimulation(txLabel);let result;try{result=await super.simulate(tx)}finally{this.metrics.stopRecordingTxSimulation(txLabel,result?.gasUsed,result?.revertCode,result?.stats)}return result}},TelemetryPublicTxSimulator=class extends MeasuredPublicTxSimulator{static{__name(this,"TelemetryPublicTxSimulator")}tracer;constructor(avmSimulator,globalVariables,contractsDB,forkId,telemetryClient=getTelemetryClient(),config2,bindings){let metrics2=new ExecutorMetrics(telemetryClient,"PublicTxSimulator");super(avmSimulator,globalVariables,contractsDB,forkId,metrics2,config2,bindings),this.tracer=metrics2.tracer}};var PublicProcessorMetrics=class{static{__name(this,"PublicProcessorMetrics")}tracer;txDuration;txCount;txPhaseCount;phaseDuration;phaseCount;bytecodeDeployed;totalGas;totalGasHistogram;gasRate;txGas;treeInsertionDuration;silentlySkippedCount;silentlySkippedDuration;constructor(client,name="PublicProcessor"){this.tracer=client.getTracer(name);let meter=client.getMeter(name);this.txDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION),this.txCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_TX_COUNT,{[Attributes.OK]:[!0,!1]}),this.txPhaseCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT),this.phaseDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION),this.phaseCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_PHASE_COUNT,{[Attributes.TX_PHASE_NAME]:[TxExecutionPhase.SETUP,TxExecutionPhase.APP_LOGIC,TxExecutionPhase.TEARDOWN],[Attributes.OK]:[!0,!1]}),this.bytecodeDeployed=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE),this.totalGas=meter.createGauge(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS),this.totalGasHistogram=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM),this.txGas=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS),this.gasRate=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE),this.treeInsertionDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION),this.silentlySkippedCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT),this.silentlySkippedDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION)}recordPhaseDuration(phaseName,durationMs){this.phaseCount.add(1,{[Attributes.TX_PHASE_NAME]:phaseName,[Attributes.OK]:!0}),this.phaseDuration.record(Math.ceil(durationMs),{[Attributes.TX_PHASE_NAME]:phaseName})}recordTx(phaseCount,durationMs,gasUsed){this.txPhaseCount.add(phaseCount),this.txDuration.record(Math.ceil(durationMs)),this.txCount.add(1,{[Attributes.OK]:!0}),this.txGas.record(gasUsed.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.txGas.record(gasUsed.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"})}recordAllTxs(totalGas,gasRate){this.totalGas.record(totalGas.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.totalGas.record(totalGas.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"}),this.gasRate.record(gasRate,{[Attributes.GAS_DIMENSION]:"L2"}),this.totalGasHistogram.record(totalGas.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.totalGasHistogram.record(totalGas.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"})}recordFailedTx(){this.txCount.add(1,{[Attributes.OK]:!1})}recordRevertedPhase(phaseName){this.phaseCount.add(1,{[Attributes.TX_PHASE_NAME]:phaseName,[Attributes.OK]:!1})}recordClassPublication(...events){let totalBytecode=0;for(let event of events)totalBytecode+=event.packedPublicBytecode.length;totalBytecode>0&&this.bytecodeDeployed.record(totalBytecode)}recordTreeInsertions(durationUs){this.treeInsertionDuration.record(Math.ceil(durationUs))}recordSilentlySkipped(durationMs){this.silentlySkippedCount.add(1),this.silentlySkippedDuration.record(Math.ceil(durationMs))}};function applyDecs2203RFactory(){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(applyDecs2203RFactory,"applyDecs2203RFactory");function _apply_decs_2203_r(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r=applyDecs2203RFactory())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r,"_apply_decs_2203_r");var _dec,_dec1,_dec2,_initProto,PublicProcessorFactory=class{static{__name(this,"PublicProcessorFactory")}contractDataSource;avmSimulator;dateProvider;telemetryClient;log;constructor(contractDataSource,avmSimulator,dateProvider=new DateProvider,telemetryClient=getTelemetryClient(),bindings){this.contractDataSource=contractDataSource,this.avmSimulator=avmSimulator,this.dateProvider=dateProvider,this.telemetryClient=telemetryClient,this.log=createLogger("simulator:public-processor-factory",bindings)}create(merkleTree,globalVariables,config2,contractsDB=new PublicContractsDB(this.contractDataSource,this.log.getBindings())){let forkId=merkleTree.getRevision().forkId,guardedFork=new GuardedMerkleTreeOperations(merkleTree),publicTxSimulator=this.createPublicTxSimulator(forkId,globalVariables,contractsDB,config2);return new PublicProcessor(globalVariables,guardedFork,contractsDB,publicTxSimulator,this.dateProvider,this.telemetryClient,createLogger("simulator:public-processor",this.log.getBindings()))}createPublicTxSimulator(forkId,globalVariables,contractsDB,config2){return new TelemetryPublicTxSimulator(this.avmSimulator,globalVariables,contractsDB,forkId,this.telemetryClient,config2,this.log.getBindings())}},PublicProcessorTimeoutError=class extends Error{static{__name(this,"PublicProcessorTimeoutError")}constructor(message="Timed out while processing tx"){super(message),this.name="PublicProcessorTimeoutError"}},PublicProcessorAbortError=class extends Error{static{__name(this,"PublicProcessorAbortError")}constructor(message="Aborted while processing tx"){super(message),this.name="PublicProcessorAbortError"}};_dec=trackSpan("PublicProcessor.processTx",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()})),_dec1=trackSpan("PublicProcessor.processPrivateOnlyTx",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()})),_dec2=trackSpan("PublicProcessor.processTxWithPublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var PublicProcessor=class _PublicProcessor{static{__name(this,"PublicProcessor")}globalVariables;guardedMerkleTree;contractsDB;publicTxSimulator;dateProvider;log;opts;debugLogStore;static{({e:[_initProto]}=_apply_decs_2203_r(this,[[_dec,2,"processTx"],[_dec1,2,"processPrivateOnlyTx"],[_dec2,2,"processTxWithPublicCalls"]],[]))}metrics;constructor(globalVariables,guardedMerkleTree,contractsDB,publicTxSimulator,dateProvider,telemetryClient=getTelemetryClient(),log2,opts={},debugLogStore=new NullDebugLogStore){this.globalVariables=globalVariables,this.guardedMerkleTree=guardedMerkleTree,this.contractsDB=contractsDB,this.publicTxSimulator=publicTxSimulator,this.dateProvider=dateProvider,this.log=log2,this.opts=opts,this.debugLogStore=debugLogStore,_initProto(this),this.metrics=new PublicProcessorMetrics(telemetryClient,"PublicProcessor")}get tracer(){return this.metrics.tracer}async process(txs,limits={},validator={}){let{maxTransactions,deadline,maxBlockGas,maxBlobFields,isBuildingProposal,signal}=limits,{preprocessValidator,nullifierCache}=validator,result=[],usedTxs=[],failed=[],debugLogs=[],timer=new Timer,totalSizeInBytes=0,returns=[],totalPublicGas=new Gas(0,0),totalBlockGas=new Gas(0,0),totalBlobFields=0,blockGasSkippedCount=0,silentlySkippedCount=0,totalSilentlySkippedDurationMs=0;for await(let tx of txs){if(maxTransactions!==void 0&&result.length>=maxTransactions){this.log.debug("Stopping tx processing due to reaching the max tx limit.");break}if(deadline&&this.dateProvider.now()>+deadline){this.log.warn("Stopping tx processing due to timeout.");break}if(signal?.aborted){this.log.warn("Stopping tx processing due to abort signal.");break}let txHash=tx.getTxHash().toString(),txBlobFields=tx.getPrivateTxEffectsSizeInFields();if(isBuildingProposal&&maxBlobFields!==void 0&&totalBlobFields+txBlobFields>maxBlobFields){this.log.warn(`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,{txHash,txBlobFields,totalBlobFields,maxBlobFields});continue}let txGasLimit=tx.data.constants.txContext.gasSettings.gasLimits;if(isBuildingProposal&&maxBlockGas!==void 0&&totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)){this.log.debug(`Skipping processing of tx ${txHash} due to block gas limit`,{txHash,txGasLimit,totalBlockGas,maxBlockGas}),blockGasSkippedCount++;continue}if(preprocessValidator){let result2=await preprocessValidator.validateTx(tx),txHash2=tx.getTxHash();if(result2.result==="invalid"){let reason=result2.reason.join(", ");this.log.debug(`Rejecting tx ${txHash2.toString()} due to pre-process validation fail: ${reason}`),failed.push({tx,error:new Error(`Tx failed preprocess validation: ${reason}`)}),returns.push(new NestedProcessReturnValues([]));continue}else this.log.trace(`Tx ${txHash2.toString()} is valid before processing.`)}let checkpoint=await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork()),startStateReference=await this.guardedMerkleTree.getUnderlyingFork().getStateReference();this.contractsDB.createCheckpoint();try{let[txProcessingTimeMs,[processedTx,returnValues,txDebugLogs]]=await elapsed(()=>this.processTx(tx,deadline,signal)),fakeThrowAfter=this.opts.fakeThrowAfterProcessingTxCount;if(fakeThrowAfter!==void 0&&result.length+failed.length+1>=fakeThrowAfter)throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);let txBlobFields2=processedTx.txEffect.getNumBlobFields(),txSize=txBlobFields2*Fr.SIZE_IN_BYTES;if(maxBlobFields!==void 0&&totalBlobFields+txBlobFields2>maxBlobFields){this.log.debug(`Skipping processed tx ${txHash} with ${txBlobFields2} blob fields due to max blob fields limit.`,{txHash,txBlobFields:txBlobFields2,totalBlobFields,maxBlobFields,txProcessingTimeMs}),silentlySkippedCount+=1,totalSilentlySkippedDurationMs+=txProcessingTimeMs,this.metrics.recordSilentlySkipped(txProcessingTimeMs),await checkpoint.revert(),this.contractsDB.revertCheckpoint();continue}if(!isBuildingProposal&&maxBlockGas!==void 0&&totalBlockGas.add(processedTx.gasUsed.billedGas).gtAny(maxBlockGas)){this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`,{txHash,txGas:processedTx.gasUsed.billedGas,totalBlockGas,maxBlockGas}),await checkpoint.revert(),this.contractsDB.revertCheckpoint();break}nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n=>n.toBuffer())),result.push(processedTx),usedTxs.push(tx),returns=returns.concat(returnValues),debugLogs.push(...txDebugLogs),this.debugLogStore.storeLogs(processedTx.hash.toString(),txDebugLogs),totalPublicGas=totalPublicGas.add(processedTx.gasUsed.publicGas),totalBlockGas=totalBlockGas.add(processedTx.gasUsed.billedGas),totalSizeInBytes+=txSize,totalBlobFields+=txBlobFields2,this.contractsDB.commitCheckpoint()}catch(err){if(err?.name==="PublicProcessorTimeoutError"||err?.name==="PublicProcessorAbortError"){this.log.warn(`Stopping tx processing due to ${err.name==="PublicProcessorTimeoutError"?"timeout":"abort"}.`),await this.publicTxSimulator.cancel?.(),await this.guardedMerkleTree.stop(),await checkpoint.revertToCheckpoint(),this.contractsDB.revertCheckpoint(),await this.checkWorldStateUnchanged(startStateReference,txHash,err);break}await checkpoint.revertToCheckpoint(),this.contractsDB.revertCheckpoint();let errorMessage=err instanceof Error||err instanceof AssertionError?err.message:"Unknown error";this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`),failed.push({tx,error:err instanceof Error?err:new Error(errorMessage)}),returns.push(new NestedProcessReturnValues([])),await this.checkWorldStateUnchanged(startStateReference,txHash,err)}finally{await checkpoint.commit()}}let duration3=timer.s(),rate=duration3>0?totalPublicGas.l2Gas/duration3:0;this.metrics.recordAllTxs(totalPublicGas,rate);let silentlySkippedDurationMs=Math.round(totalSilentlySkippedDurationMs);return this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs (${blockGasSkippedCount} skipped due to block gas limit, ${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) in ${duration3}s`,{blockNumber:this.globalVariables.blockNumber,successfulCount:result.length,failedCount:failed.length,duration:duration3,rate,totalPublicGas,totalBlockGas,totalSizeInBytes,blockGasSkippedCount,silentlySkippedCount,silentlySkippedDurationMs}),[result,failed,usedTxs,returns,debugLogs]}async checkWorldStateUnchanged(startStateReference,txHash,cause){let endStateReference=await this.guardedMerkleTree.getUnderlyingFork().getStateReference();if(!startStateReference.equals(endStateReference))throw this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`,{expected:startStateReference.toInspect(),actual:endStateReference.toInspect(),cause}),new Error(`Fork state reference changed by tx ${txHash} after error in public processor`,{cause})}async processTx(tx,deadline,signal){let[time3,[processedTx,returnValues,debugLogs]]=await elapsed(()=>this.processTxWithinDeadline(tx,deadline,signal));return this.log.verbose(tx.hasPublicCalls()?`Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time3}ms`:`Processed tx ${processedTx.hash} with no public calls in ${time3}ms`,{txHash:processedTx.hash,txFee:processedTx.txEffect.transactionFee.toBigInt(),revertCode:processedTx.txEffect.revertCode.getCode(),revertReason:processedTx.revertReason,gasUsed:processedTx.gasUsed,publicDataWriteCount:processedTx.txEffect.publicDataWrites.length,nullifierCount:processedTx.txEffect.nullifiers.length,noteHashCount:processedTx.txEffect.noteHashes.length,contractClassLogCount:processedTx.txEffect.contractClassLogs.length,publicLogCount:processedTx.txEffect.publicLogs.length,privateLogCount:processedTx.txEffect.privateLogs.length,l2ToL1MessageCount:processedTx.txEffect.l2ToL1Msgs.length,durationMs:time3}),[processedTx,returnValues??[],debugLogs]}async doTreeInsertionsForPrivateOnlyTx(processedTx){let treeInsertionStart=process.hrtime.bigint();await this.guardedMerkleTree.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,padArrayEnd(processedTx.txEffect.noteHashes,Fr.ZERO,64));try{await this.guardedMerkleTree.batchInsert(MerkleTreeId.NULLIFIER_TREE,padArrayEnd(processedTx.txEffect.nullifiers,Fr.ZERO,64).map(n=>n.toBuffer()),6)}catch(cause){throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`,{cause})}let treeInsertionEnd=process.hrtime.bigint();this.metrics.recordTreeInsertions(Number(treeInsertionEnd-treeInsertionStart)/1e3)}async processTxWithinDeadline(tx,deadline,signal){let innerProcessFn=tx.hasPublicCalls()?()=>this.processTxWithPublicCalls(tx):()=>this.processPrivateOnlyTx(tx),fakeDelayPerTxMs=this.opts.fakeProcessingDelayPerTxMs,processFn=fakeDelayPerTxMs&&fakeDelayPerTxMs>0?async()=>{let result=await innerProcessFn();return this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`),await sleep(fakeDelayPerTxMs),result}:innerProcessFn,processingSignal=this.getProcessingSignal(tx,deadline,signal);return processingSignal?await execWithSignal(()=>processFn(),processingSignal,signal2=>signal2.reason?.name==="TimeoutError"?new PublicProcessorTimeoutError:new PublicProcessorAbortError):await processFn()}getProcessingSignal(tx,deadline,signal){if(!deadline)return signal;let timeout=+deadline-this.dateProvider.now();if(timeout<=0)throw new PublicProcessorTimeoutError;let txHash=tx.getTxHash();this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`,{deadline:deadline.toISOString(),now:new Date(this.dateProvider.now()).toISOString(),txHash});let timeoutSignal=AbortSignal.timeout(timeout);return signal?AbortSignal.any([signal,timeoutSignal]):timeoutSignal}async performFeePaymentPublicDataWrite(txFee,feePayer){let feeJuiceAddress=ProtocolContractAddress.FeeJuice,balanceSlot=await computeFeePayerBalanceStorageSlot(feePayer),leafSlot=await computeFeePayerBalanceLeafSlot(feePayer),treesDB=new PublicTreesDB(this.guardedMerkleTree);this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);let balance=await treesDB.storageRead(feeJuiceAddress,balanceSlot);if(balance.lt(txFee))throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance.toBigInt()} needs ${txFee.toBigInt()})`);let updatedBalance=balance.sub(txFee);return await treesDB.storageWrite(feeJuiceAddress,balanceSlot,updatedBalance),new PublicDataWrite(leafSlot,updatedBalance)}async processPrivateOnlyTx(tx){let gasFees=this.globalVariables.gasFees,transactionFee=computeTransactionFee(gasFees,tx.data.constants.txContext.gasSettings,tx.data.gasUsed),feePaymentPublicDataWrite=await this.performFeePaymentPublicDataWrite(transactionFee,tx.data.feePayer),processedTx=makeProcessedTxFromPrivateOnlyTx(tx,transactionFee,feePaymentPublicDataWrite,this.globalVariables);return this.metrics.recordClassPublication(...tx.getContractClassLogs().filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2))),await this.doTreeInsertionsForPrivateOnlyTx(processedTx),this.contractsDB.addNewContracts(tx),[processedTx,void 0,[]]}async processTxWithPublicCalls(tx){let timer=new Timer,result=await this.publicTxSimulator.simulate(tx),{hints,publicInputs,publicTxEffect,gasUsed,revertCode}=result,contractClassLogs=revertCode.isOK()?tx.getContractClassLogs():tx.getSplitContractClassLogs(!1);this.metrics.recordClassPublication(...contractClassLogs.filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2)));let durationMs=timer.ms();this.metrics.recordTx(1,durationMs,gasUsed.publicGas);let appLogicReturnValues=result.getAppLogicReturnValues(),revertReason=result.findRevertReason(),avmProvingRequest=hints&&publicInputs?_PublicProcessor.generateProvingRequest(publicInputs,hints):void 0;return[makeProcessedTxFromTxWithPublicCalls(tx,this.globalVariables,avmProvingRequest,publicTxEffect,gasUsed,revertCode,revertReason),appLogicReturnValues,result.logs??[]]}static generateProvingRequest(publicInputs,hints=AvmExecutionHints.empty()){return{type:ProvingRequestType.PUBLIC_VM,inputs:new AvmCircuitInputs(hints,publicInputs)}}};import{executeCircuit as executeCircuit2}from"@aztec-foundation/noir-acvm_js";import{abiDecode as abiDecode3,abiEncode as abiEncode3}from"@aztec-foundation/noir-noirc_abi";import{decompressWitness}from"@aztec-foundation/noir-acvm_js";import{abiDecode as abiDecode4}from"@aztec-foundation/noir-noirc_abi";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{static{__name(this,"TXEOracleTopLevelContext")}isMisc=!0;isTxe=!0;logger;stateMachine;contractStore;noteStore;keyStore;addressStore;accountStore;senderTaggingStore;recipientTaggingStore;taggingSecretSourcesStore;capsuleStore;factStore;privateEventStore;nextBlockTimestamp;chainId;version;authwits;taggingSecretStrategies;authorizeAllUtilityCallTargets;artifactResolver;rootPath;packageName;constructor(args){this.stateMachine=args.stateMachine,this.contractStore=args.contractStore,this.noteStore=args.noteStore,this.keyStore=args.keyStore,this.addressStore=args.addressStore,this.accountStore=args.accountStore,this.senderTaggingStore=args.senderTaggingStore,this.recipientTaggingStore=args.recipientTaggingStore,this.taggingSecretSourcesStore=args.taggingSecretSourcesStore,this.capsuleStore=args.capsuleStore,this.factStore=args.factStore,this.privateEventStore=args.privateEventStore,this.nextBlockTimestamp=args.nextBlockTimestamp,this.chainId=args.chainId,this.version=args.version,this.authwits=args.authwits,this.taggingSecretStrategies=args.taggingSecretStrategies,this.authorizeAllUtilityCallTargets=args.authorizeAllUtilityCallTargets,this.artifactResolver=args.artifactResolver,this.rootPath=args.rootPath,this.packageName=args.packageName,this.logger=createLogger("txe:top_level_context"),this.logger.debug("Entering Top Level Context")}contractOracleVersion;assertCompatibleOracleVersion(major2,minor){if(major2!==33){let hint=major2>33?"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 ${33}, 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.createChild("debug_log")[levelName](applyStringFormatting(message,fields)),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];return{txHash:txEffects.txHash,noteHashes:txEffects.noteHashes,nullifiers:txEffects.nullifiers,privateLogs:txEffects.privateLogs.map(log2=>log2.getEmittedFields())}}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,immutablesHash){let{artifact,instance}=await this.artifactResolver.resolveDeployArtifact({rootPath:this.rootPath,packageName:this.packageName,contractPath,initializer:initializer3,args,secret,salt,deployer,immutablesHash});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){var _stack=[];try{let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();let 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];let 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();let msgSender=from??AztecAddress.NULL_MSG_SENDER;let callContext=new CallContext(msgSender,targetContractAddress,functionSelector,isStaticCall);let txContext=new TxContext(this.chainId,this.version,gasSettings);let protocolNullifier=await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber));let noteCache=new ExecutionNoteCache(protocolNullifier);let minRevertibleSideEffectCounter=1;await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);let taggingIndexCache=new ExecutionTaggingIndexCache;let simulator=new WASMSimulator;let transientArrayService=new TransientArrayService;let privateExecutionOracle=new PrivateExecutionOracle({argsHash,txContext,protocolNullifier,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});let result;let 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);let globals=makeGlobalVariables();globals.blockNumber=blockNumber;globals.timestamp=this.nextBlockTimestamp;globals.chainId=this.chainId;globals.version=this.version;globals.gasFees=GasFees.empty();let forkedWorldTrees=__using(_stack,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),!0);let bindings=this.logger.getBindings();let contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings);let guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees);let config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0});let forkId=forkedWorldTrees.getRevision().forkId;let processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,new PublicTxSimulator(this.stateMachine.synchronizer.avmSimulator,globals,contractsDB,forkId,config2,bindings),new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings));let tx=await Tx.create({data:publicInputs,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:result.publicFunctionCalldata});let checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]);let[processedTx]=results[0];let failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);else 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(),{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 l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await this.stateMachine.handleL2Block(l2Block);return{returnValues:executionResult.returnValues??[],offchainEffects}}catch(_){var _error=_,_hasError=!0}finally{var _promise2=__callDispose(_stack,_error,_hasError);_promise2&&await _promise2}}async publicCallNewFlow(from,targetContractAddress,calldata,isStaticCall,gasSettings){var _stack=[];try{let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();let 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();let txContext=new TxContext(this.chainId,this.version,gasSettings);let calldataHash=await computeCalldataHash(calldata);let calldataHashedValues=new HashedValues(calldata,calldataHash);let globals=makeGlobalVariables();globals.blockNumber=blockNumber;globals.timestamp=this.nextBlockTimestamp;globals.chainId=this.chainId;globals.version=this.version;globals.gasFees=GasFees.empty();let forkedWorldTrees=__using(_stack,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),!0);let bindings2=this.logger.getBindings();let contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings2);let guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees);let config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0});let forkId2=forkedWorldTrees.getRevision().forkId;let simulator=new PublicTxSimulator(this.stateMachine.synchronizer.avmSimulator,globals,contractsDB,forkId2,config2,bindings2);let processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,simulator,new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings2));let 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());let constantData=new TxConstantData(anchorBlockHeader,txContext,Fr.zero(),Fr.zero());let txData=new PrivateKernelTailCircuitPublicInputs(constantData,new Gas(0,0),AztecAddress.zero(),0n,inputsForPublic,void 0);let tx=await Tx.create({data:txData,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:[calldataHashedValues]});let checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]);let[processedTx]=results[0];let failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);else 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(),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 l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await this.stateMachine.handleL2Block(l2Block);return returnValues??[]}catch(_){var _error=_,_hasError=!0}finally{var _promise2=__callDispose(_stack,_error,_hasError);_promise2&&await _promise2}}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});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})},"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,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook("utility",authorizedUtilityCallTargets)}),utilityExecutor,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,immutablesHash])=>this.handlerAsTxe().deploy(contractPath,initializer3,args,secret,salt,deployer,immutablesHash),"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_tryGetL1ToL2MembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_tryGetL1ToL2MembershipWitness",inputs,handler:__name(([messageHash,nullifier])=>this.handlerAsUtility().tryGetL1ToL2MembershipWitness(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_utl_callUtilityFunction(...inputs){return callTxeHandler({oracle:"aztec_utl_callUtilityFunction",inputs,handler:__name(([contractAddress,functionSelector,args])=>this.handlerAsUtility().callUtilityFunction(contractAddress,functionSelector,args),"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-labs/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,inboxMsgTotal}=input.proposedCheckpointData;builder.withPendingArchive(archive.root),builder.withPendingTempCheckpointLogFields({headerHash:header.hash(),outHash:checkpointOutHash,slotNumber:header.slotNumber,inboxMsgTotal,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}),validateCheckpointLimits(checkpoint,opts),validateCheckpointBlocksLimits(checkpoint,opts)}__name(validateCheckpoint,"validateCheckpoint");function validateCheckpointStructure(checkpoint,opts={}){let{maxBlocksPerCheckpoint=MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT}=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],seenTxHashes=new Set;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){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)}for(let txEffect of block.body.txEffects){let txHash=txEffect.txHash.toString();if(seenTxHashes.has(txHash))throw new CheckpointValidationError(`Tx ${txHash} in block ${block.number} appears more than once in the checkpoint`,number4,slot);seenTxHashes.add(txHash)}}}__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,TreeLeafIndex(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)}getL1ToL2MessageIndex(l1ToL2Message){return this.stores.messages.getL1ToL2MessageIndex(l1ToL2Message)}getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount){return this.stores.messages.getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount)}getMessagePosition(totalMessageCount){return this.stores.messages.getMessagePosition(totalMessageCount)}getSyncedMessagePosition(){return this.stores.messages.getSyncedMessagePosition()}getSyncedMessageL1Block(){return this.stores.messages.getSynchedL1Block()}getL1ToL2MessageRange(startLeafCount,endLeafCount){return this.stores.messages.getL1ToL2MessageRange(startLeafCount,endLeafCount)}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,checkpoint.verbatimAttestations)}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 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"}},DuplicateTxHashError=class extends Error{static{__name(this,"DuplicateTxHashError")}txHash;blockNumber;existingBlockNumber;constructor(txHash,blockNumber,existingBlockNumber){super(`Cannot insert block ${blockNumber}: tx ${txHash} is already included in block ${existingBlockNumber}`),this.txHash=txHash,this.blockNumber=blockNumber,this.existingBlockNumber=existingBlockNumber,this.name="DuplicateTxHashError"}};var 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"}},InboxMessagePrefixChangedError=class extends Error{static{__name(this,"InboxMessagePrefixChangedError")}totalMessageCount;expected;actual;constructor(totalMessageCount,expected,actual){super(`Inbox message prefix at count ${totalMessageCount} changed from ${expected?.toString()??"unavailable"} to ${actual?.toString()??"unavailable"} while a replacement was being prepared`),this.totalMessageCount=totalMessageCount,this.expected=expected,this.actual=actual,this.name="InboxMessagePrefixChangedError"}},InboxMessageRangeNotSyncedError=class extends Error{static{__name(this,"InboxMessageRangeNotSyncedError")}startLeafCount;endLeafCount;constructor(startLeafCount,endLeafCount,detail){super(`Inbox message range [${startLeafCount}, ${endLeafCount}) is not fully synced: ${detail}`),this.startLeafCount=startLeafCount,this.endLeafCount=endLeafCount,this.name="InboxMessageRangeNotSyncedError"}},InboxPrefixNotSyncedError=class extends Error{static{__name(this,"InboxPrefixNotSyncedError")}blockNumber;endTotalMsgCount;constructor(blockNumber,endTotalMsgCount,cause){super(`Cannot confirm the Inbox prefix at message count ${endTotalMsgCount} for proposed block ${blockNumber}`+(cause?`: ${cause}`:"")),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.name="InboxPrefixNotSyncedError"}},InboxPrefixMismatchError=class extends Error{static{__name(this,"InboxPrefixMismatchError")}blockNumber;endTotalMsgCount;expected;actual;constructor(blockNumber,endTotalMsgCount,expected,actual){super(`Proposed block ${blockNumber} references Inbox prefix ${expected.toString()} at message count ${endTotalMsgCount}, but the canonical prefix there is ${actual.toString()}`),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.expected=expected,this.actual=actual,this.name="InboxPrefixMismatchError"}},ProposedBlockParentNotFoundError=class extends Error{static{__name(this,"ProposedBlockParentNotFoundError")}blockNumber;parentBlockNumber;constructor(blockNumber,parentBlockNumber){super(`Cannot resolve parent block ${parentBlockNumber} of proposed block ${blockNumber}`),this.blockNumber=blockNumber,this.parentBlockNumber=parentBlockNumber,this.name="ProposedBlockParentNotFoundError"}},InboxConsumptionRewindsError=class extends Error{static{__name(this,"InboxConsumptionRewindsError")}blockNumber;endTotalMsgCount;parentTotalMsgCount;constructor(blockNumber,endTotalMsgCount,parentTotalMsgCount){super(`Proposed block ${blockNumber} consumes through message count ${endTotalMsgCount}, behind its parent's ${parentTotalMsgCount}`),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.parentTotalMsgCount=parentTotalMsgCount,this.name="InboxConsumptionRewindsError"}};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"}},UndecodableCheckpointAttestationsError=class extends Error{static{__name(this,"UndecodableCheckpointAttestationsError")}checkpointNumber;committeeSize;cause;constructor(checkpointNumber,committeeSize,cause){super(`Cannot store checkpoint ${checkpointNumber}: its attestations tuple does not decode for a committee of ${committeeSize} (${cause instanceof Error?cause.message:String(cause)})`),this.checkpointNumber=checkpointNumber,this.committeeSize=committeeSize,this.cause=cause,this.name="UndecodableCheckpointAttestationsError"}};async function prepareBlockTxEffectsTreeData(blocks){await Promise.all(blocks.flatMap(block=>[block.hash(),block.body.computeTxEffectsTreeData()]))}__name(prepareBlockTxEffectsTreeData,"prepareBlockTxEffectsTreeData");var Operation=(function(Operation2){return Operation2[Operation2.Store=0]="Store",Operation2[Operation2.Delete=1]="Delete",Operation2})(Operation||{});function blockLeafCount(block){return BigInt(block.header.state.l1ToL2MessageTree.nextAvailableLeafIndex)}__name(blockLeafCount,"blockLeafCount");var 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,inboxPrefixRef,pendingChainValidationStatus){await prepareBlockTxEffectsTreeData([block]);let result=await this.stores.db.transactionAsync(async()=>{let outcome=await this.stores.blocks.addProposedBlock(block);return outcome==="already-checkpointed"||(await this.validateProposedBlockInboxPrefix(block,inboxPrefixRef),await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs([block]),this.addContractDataToDb(block)])),outcome});return result==="added"&&await this.l2FrontierCache?.refresh(),result}async validateProposedBlockInboxPrefix(block,inboxPrefixRef){let blockNumber=block.number,endCount=blockLeafCount(block),parentCount=await this.getParentBlockLeafCount(block);if(endCount<parentCount)throw new InboxConsumptionRewindsError(blockNumber,endCount,parentCount);let endRollingHash;try{({end:{rollingHash:endRollingHash}}=await this.stores.messages.getL1ToL2MessageRange(parentCount,endCount))}catch(err){throw new InboxPrefixNotSyncedError(blockNumber,endCount,`${err}`)}if(!endRollingHash.equals(inboxPrefixRef.inboxRollingHash))throw new InboxPrefixMismatchError(blockNumber,endCount,inboxPrefixRef.inboxRollingHash,endRollingHash)}async getParentBlockLeafCount(block){let parentBlockNumber=block.number-1;if(parentBlockNumber<INITIAL_L2_BLOCK_NUM2)return 0n;let parent=await this.stores.blocks.getBlockData({number:BlockNumber(parentBlockNumber)});if(parent===void 0)throw new ProposedBlockParentNotFoundError(block.number,parentBlockNumber);return blockLeafCount(parent)}async addCheckpoints(checkpoints,pendingChainValidationStatus,promoteProposed,evictProposedFrom){let validateOpts={rollupManaLimit:this.opts?.rollupManaLimit};for(let checkpoint of checkpoints)validateCheckpoint(checkpoint.checkpoint,validateOpts);promoteProposed&&validateCheckpoint(promoteProposed.checkpoint,validateOpts),await prepareBlockTxEffectsTreeData(checkpoints.flatMap(published=>published.checkpoint.blocks));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.number,promoteProposed.l1,promoteProposed.attestations,promoteProposed.verbatimAttestations,promoteProposed.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 rollbackMessagesAndPruneProposedBlocks(input){let{keep,syncState}=input,result=await this.stores.db.transactionAsync(async()=>{let currentPrefix=await this.stores.messages.getMessagePosition(keep.totalMessageCount);if(currentPrefix===void 0||!currentPrefix.rollingHash.equals(keep.rollingHash))throw new InboxMessagePrefixChangedError(keep.totalMessageCount,keep.rollingHash,currentPrefix?.rollingHash);await this.stores.messages.removeL1ToL2Messages(keep.totalMessageCount),await this.stores.messages.setMessageSyncState(syncState);let[checkpointedBlockNumber,latestBlockNumber]=await Promise.all([this.stores.blocks.getCheckpointedL2BlockNumber(),this.stores.blocks.getLatestL2BlockNumber()]),checkpointedTipAffected=checkpointedBlockNumber>BlockNumber.ZERO&&await this.getConsumedMessageCount(checkpointedBlockNumber)>keep.totalMessageCount,prunedBlocks=[];if(latestBlockNumber>checkpointedBlockNumber){let firstConsumer=(await this.stores.blocks.getBlocksData({from:BlockNumber.add(checkpointedBlockNumber,1),limit:latestBlockNumber-checkpointedBlockNumber})).find(block=>blockLeafCount(block)>keep.totalMessageCount);if(firstConsumer!==void 0){let firstConsumerNumber=firstConsumer.header.getBlockNumber();this.log.warn(`Pruning proposed blocks from ${firstConsumerNumber} that consumed rolled-back Inbox messages`,{keptMessageCount:keep.totalMessageCount,firstConsumerNumber,latestBlockNumber}),prunedBlocks=await this.removeBlocksAfter(BlockNumber(firstConsumerNumber-1)),await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks)}}return{prunedBlocks,checkpointedTipAffected}});return await this.l2FrontierCache?.refresh(),result}async getConsumedMessageCount(blockNumber){let[block]=await this.stores.blocks.getBlocksData({from:blockNumber,limit:1});if(block===void 0||block.header.getBlockNumber()!==blockNumber)throw new Error(`Block ${blockNumber} is missing from the store`);return blockLeafCount(block)}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),[,logsDeleted,...contractDataRemoved]=await Promise.all([this.stores.blocks.setPendingChainValidationStatus({valid:!0}),this.stores.logs.deleteLogs(blocksRemoved),...blocksRemoved.map(block=>this.removeContractDataFromDb(block))]);return logsDeleted&&contractDataRemoved.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,block.number,operation)])).every(Boolean)}async updatePublishedContractClasses(allLogs,blockNum,operation){let contractClassPublishedEvents=[];for(let log2 of allLogs)if(ContractClassPublishedEvent.isContractClassPublishedEvent(log2))try{contractClassPublishedEvents.push(ContractClassPublishedEvent.fromLog(log2))}catch(err){this.log.warn("Skipping unparseable contract class publication log",{blockNum,error:err instanceof Error?err.message:String(err)})}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;try{contractClass=await event.toContractClassPublicWithBytecodeCommitment()}catch(err){this.log.warn("Skipping contract class with invalid packed bytecode",{blockNum,contractClassId:event.contractClassId.toString(),error:err instanceof Error?err.message:String(err)});continue}let 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,blockNum)}return!0}async updateUpdatedContractInstances(allLogs,timestamp,blockNum,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,blockNum);if(operation==1)return await this.stores.contractInstances.deleteContractInstanceUpdates(contractUpdates,timestamp,blockNum)}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)}};import{Buffer as Buffer82}from"buffer";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;inboxParity;hints;constructor(previousRollups,inboxParity,hints){this.previousRollups=previousRollups,this.inboxParity=inboxParity,this.hints=hints}static from(fields){return new _CheckpointRootRollupPrivateInputs(..._CheckpointRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.inboxParity,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)],ProofData.fromBuffer(reader,ParityPublicInputs),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;inboxParity;hints;constructor(previousRollup,inboxParity,hints){this.previousRollup=previousRollup,this.inboxParity=inboxParity,this.hints=hints}static from(fields){return new _CheckpointRootSingleBlockRollupPrivateInputs(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.inboxParity,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootSingleBlockRollupPrivateInputs(ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,ParityPublicInputs),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 Buffer82.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)}};import{Buffer as Buffer83}from"buffer";var BlockStore=class{static{__name(this,"BlockStore")}db;#blocks;#proposedCheckpoints;#checkpoints;#slotToCheckpoint;#blockTxs;#txEffects;#blockTxEffectLeaves;#blockTxEffectCategoriesHashes;#lastSynchedL1Block;#lastProvenCheckpoint;#lastFinalizedCheckpoint;#pendingChainValidationStatus;#contractIndex;#blockHashIndex;#blockArchiveIndex;#rejectedCheckpoints;#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.#blockTxEffectLeaves=db.openMap("archiver_block_tx_effect_leaves"),this.#blockTxEffectCategoriesHashes=db.openMap("archiver_block_tx_effect_categories_hashes"),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")}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 prepareBlockTxEffectsTreeData([block]),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)});if(existingBlock&&existingBlock.archive.root.equals(block.archive.root))return"already-checkpointed";throw 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),"added"})}async addCheckpoints(checkpoints,opts={}){return checkpoints.length===0?[]:(await prepareBlockTxEffectsTreeData(checkpoints.flatMap(published=>published.checkpoint.blocks)),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++){let block=checkpoint.checkpoint.blocks[i];await this.addBlockToDatabase(block,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(),...this.toAttestationsStorage(checkpoint.checkpoint.number,checkpoint.verbatimAttestations,checkpoint.attestations.length),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(),...this.toAttestationsStorage(incoming.checkpoint.number,incoming.verbatimAttestations,incoming.attestations.length),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(),{leaves,categoriesHashes}=await block.body.computeTxEffectsTreeData();await this.#blockTxEffectLeaves.set(blockHash.toString(),Buffer83.concat(leaves.map(leaf=>leaf.toBuffer()))),await this.#blockTxEffectCategoriesHashes.set(blockHash.toString(),Buffer83.concat(categoriesHashes.map(hash5=>hash5.toBuffer()))),await this.#blocks.set(block.number,{header:block.header.toBuffer(),blockHash:blockHash.toBuffer(),archive:block.archive.toBuffer(),checkpointNumber,indexWithinCheckpoint}),await this.assertTxsNotInAncestors(block.body.txEffects.map(tx=>tx.txHash),block.number);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(),Buffer83.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 assertTxsNotInAncestors(txHashes,blockNumber){let existing=await this.#txEffects.getManyAsync(txHashes.map(txHash=>txHash.toString()));for(let i=0;i<txHashes.length;i++){let stored=existing[i];if(stored===void 0)continue;let owner=readTxLocation(stored).blockNumber;if(owner<blockNumber)throw new DuplicateTxHashError(txHashes[i],blockNumber,owner)}}async deleteBlock(blockNumber,blockStorage){await this.#blocks.delete(blockNumber);let blockHash=bufferToHex(blockStorage.blockHash);await this.#blockTxEffectLeaves.delete(blockHash),await this.#blockTxEffectCategoriesHashes.delete(blockHash);let 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(!Buffer83.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(Buffer83.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}toAttestationsStorage(checkpointNumber,verbatimAttestations,committeeSize){try{CommitteeAttestation.fromPacked(verbatimAttestations,committeeSize)}catch(err){throw new UndecodableCheckpointAttestationsError(checkpointNumber,committeeSize,err)}return{verbatimAttestations:{signatureIndices:hexToBuffer(verbatimAttestations.signatureIndices),signaturesOrAddresses:hexToBuffer(verbatimAttestations.signaturesOrAddresses)},committeeSize}}checkpointDataFromCheckpointStorage(checkpointStorage){let verbatimAttestations={signatureIndices:bufferToHex(checkpointStorage.verbatimAttestations.signatureIndices),signaturesOrAddresses:bufferToHex(checkpointStorage.verbatimAttestations.signaturesOrAddresses)};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:CommitteeAttestation.fromPacked(verbatimAttestations,checkpointStorage.committeeSize),verbatimAttestations}}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,verbatimAttestations,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(),...this.toAttestationsStorage(proposed.checkpointNumber,verbatimAttestations,attestations.length),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),inboxMsgTotal:BigInt(stored.inboxMsgTotal),signer:stored.signer?EthAddress.fromString(stored.signer):void 0}}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 getTxEffectLeaves(blockHash){let buffer=await this.#blockTxEffectLeaves.getAsync(blockHash.toString());if(buffer===void 0)return;let reader=BufferReader.asReader(buffer),leaves=[];for(;!reader.isEmpty();)leaves.push(reader.readObject(Fr));return leaves}async getTxEffectCategoriesHash(blockHash,txIndexInBlock){let buffer=await this.#blockTxEffectCategoriesHashes.getAsync(blockHash.toString()),offset=txIndexInBlock*Fr.SIZE_IN_BYTES;if(!(!buffer||offset<0||offset+Fr.SIZE_IN_BYTES>buffer.length))return Fr.fromBuffer(buffer.subarray(offset,offset+Fr.SIZE_IN_BYTES))}async getTxLocation(txHash){let txEffect=await this.#txEffects.getAsync(txHash.toString());return txEffect?readTxLocation(txEffect):void 0}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 lastBlock=blocks[blocks.length-1],archive=lastBlock.archive,checkpointOutHash=Checkpoint.getCheckpointOutHash(blocks),inboxMsgTotal=BigInt(lastBlock.header.state.l1ToL2MessageTree.nextAvailableLeafIndex);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(),inboxMsgTotal:inboxMsgTotal.toString(),...proposed.signer&&{signer:proposed.signer.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.advanceSynchedL1BlockNumber(entry.l1.blockNumber)}async getRejectedCheckpointByArchiveRoot(archiveRoot){let stored=await this.#rejectedCheckpoints.getAsync(archiveRoot.toString());return stored?this.rejectedCheckpointFromStorage(stored):void 0}async removeRejectedCheckpointByArchiveRoot(archiveRoot){await this.#rejectedCheckpoints.delete(archiveRoot.toString())}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}}};function readTxLocation(txEffect){let view=Buffer83.from(txEffect.buffer,txEffect.byteOffset,txEffect.byteLength);return{blockNumber:BlockNumber(view.readUInt32BE(32)),blockHash:BlockHash.fromBuffer(view.subarray(0,32)),txIndexInBlock:view.readUInt32BE(36)}}__name(readTxLocation,"readTxLocation");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))),!0}async deleteContractClasses(data,blockNumber){return await Promise.all(data.map(c2=>this.deleteContractClass(c2,blockNumber))),!0}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");function encodeTimestamp(timestamp){return timestamp.toString().padStart(20,"0")}__name(encodeTimestamp,"encodeTimestamp");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))),!0}async deleteContractInstances(data,blockNumber){return await Promise.all(data.map(c2=>this.deleteContractInstance(c2,blockNumber))),!0}async addContractInstanceUpdates(data,timestamp,blockNumber){return await Promise.all(data.map((update,logIndex)=>this.addContractInstanceUpdate(update,timestamp,blockNumber,logIndex))),!0}async deleteContractInstanceUpdates(data,timestamp,blockNumber){return await Promise.all(data.map((update,logIndex)=>this.deleteContractInstanceUpdate(update,timestamp,blockNumber,logIndex))),!0}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,blockNumber){return isProtocolContract(contractInstance.address)?Promise.resolve():this.db.transactionAsync(async()=>{let key=contractInstance.address.toString();await this.#contractInstancePublishedAt.getAsync(key)===blockNumber&&(await this.#contractInstances.delete(key),await this.#contractInstancePublishedAt.delete(key))})}getUpdateRangeKey(contractAddress,timestamp){return[contractAddress.toString(),encodeTimestamp(timestamp)]}getUpdateKey(contractAddress,timestamp,blockNumber,logIndex){return[contractAddress.toString(),encodeTimestamp(timestamp),blockNumber,logIndex]}addContractInstanceUpdate(contractInstanceUpdate,timestamp,blockNumber,logIndex){return this.#contractInstanceUpdates.set(this.getUpdateKey(contractInstanceUpdate.address,timestamp,blockNumber,logIndex),new SerializableContractInstanceUpdate(contractInstanceUpdate).toBuffer())}deleteContractInstanceUpdate(contractInstanceUpdate,timestamp,blockNumber,logIndex){return this.#contractInstanceUpdates.delete(this.getUpdateKey(contractInstanceUpdate.address,timestamp,blockNumber,logIndex))}async getCurrentContractInstanceClassId(address,timestamp,originalClassId){let serializedUpdate=await first(this.#contractInstanceUpdates.valuesAsync({reverse:!0,start:this.getUpdateRangeKey(address,0n),end:this.getUpdateRangeKey(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())}};import{Buffer as Buffer84}from"buffer";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=Buffer84.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 Buffer84.concat([head,...fieldBufs])}__name(encodeValue,"encodeValue");function decodeValue(buffer){let buf=Buffer84.isBuffer(buffer)?buffer:Buffer84.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.blockNumber,loc.txIndexInBlock],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!==void 0?mapFn(range.start):void 0,end:range.end!==void 0?mapFn(range.end):void 0,reverse:range.reverse,limit:range.limit}}__name(mapRange,"mapRange");function serializeInboxMessage(message){return serializeToBuffer([bigintToUInt64BE(message.index),message.leaf,bigintToUInt64BE(message.l1BlockNumber),message.inboxRollingHash])}__name(serializeInboxMessage,"serializeInboxMessage");function deserializeInboxMessage(buffer){let reader=BufferReader.asReader(buffer),index=reader.readUInt64(),leaf=reader.readObject(Fr),l1BlockNumber=reader.readUInt64(),inboxRollingHash=reader.readObject(Fr);return{index,leaf,l1BlockNumber,inboxRollingHash}}__name(deserializeInboxMessage,"deserializeInboxMessage");function zeroMessagePosition(){return{totalMessageCount:0n,rollingHash:Fr.ZERO}}__name(zeroMessagePosition,"zeroMessagePosition");async function readL1BlockId(singleton){let buffer=await singleton.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}__name(readL1BlockId,"readL1BlockId");function assertValidLeafCountRange(startLeafCount,endLeafCount){if(startLeafCount<0n||endLeafCount<0n||startLeafCount>endLeafCount)throw new Error(`Invalid Inbox leaf count range [${startLeafCount}, ${endLeafCount})`)}__name(assertValidLeafCountRange,"assertValidLeafCountRange");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;#lastScannedL1Block;#totalMessageCount;#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.#lastScannedL1Block=db.openSingleton("archiver_messages_scanned_l1_block"),this.#totalMessageCount=db.openSingleton("archiver_l1_to_l2_message_count"),this.#messagesFinalizedL1Block=db.openSingleton("archiver_messages_finalized_l1_block")}async getTotalL1ToL2MessageCount(){return await this.#totalMessageCount.getAsync()??0n}async getSynchedL1Block(){return await readL1BlockId(this.#lastSynchedL1Block)}async getScannedL1Block(){return await readL1BlockId(this.#lastScannedL1Block)??await this.getSynchedL1Block()}async setSynchedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastSynchedL1Block.set(buffer)}async setScannedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastScannedL1Block.set(buffer)}async getMessagesFinalizedL1Block(){return await readL1BlockId(this.#messagesFinalizedL1Block)}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)}setMessageSyncState(syncState){return this.db.transactionAsync(()=>this.setSyncState(syncState))}async setSyncState(syncState){if(await this.setScannedL1Block(syncState.l1Block),!syncState.authenticated){await this.#lastSynchedL1Block.delete();return}await this.setSynchedL1Block(syncState.l1Block),syncState.finalizedL1Block!==void 0&&await this.maybeAdvanceFinalizedL1Block(syncState.finalizedL1Block)}addL1ToL2Messages(messages,syncState){return messages.length===0&&syncState===void 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.getL1ToL2Message(message.index);if(existing&&existing.inboxRollingHash.equals(message.inboxRollingHash)){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 expectedIndex=lastMessage===void 0?0n:lastMessage.index+1n;if(message.index!==expectedIndex)throw new MessageStoreError(`Invalid index ${message.index} for incoming L1 to L2 message ${message.leaf.toString()} (expected ${expectedIndex})`,message);let previousInboxRollingHash=lastMessage?.inboxRollingHash??Fr.ZERO,expectedInboxRollingHash=updateInboxRollingHash(previousInboxRollingHash,message.leaf);if(!expectedInboxRollingHash.equals(message.inboxRollingHash))throw new MessageStoreError(`Invalid inbox rolling hash for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index} (expected ${expectedInboxRollingHash.toString()} from previous hash ${previousInboxRollingHash.toString()} but got ${message.inboxRollingHash.toString()})`,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),syncState!==void 0&&await this.setSyncState(syncState)})}getL1ToL2MessageIndex(l1ToL2Message){return this.#l1ToL2MessageIndices.getAsync(this.leafToIndexKey(l1ToL2Message))}async getL1ToL2Message(index){let buffer=await this.#l1ToL2Messages.getAsync(this.indexToKey(index));return buffer===void 0?void 0:deserializeInboxMessage(buffer)}async getLastMessage(){let[msg]=await toArray(this.#l1ToL2Messages.valuesAsync({reverse:!0,limit:1}));return msg?deserializeInboxMessage(msg):void 0}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} from the store`),await this.#l1ToL2Messages.delete(key),await this.#l1ToL2MessageIndices.delete(this.leafToIndexKey(deserializeInboxMessage(msgBuffer).leaf)),deleteCount++;await this.increaseTotalMessageCount(-deleteCount),deleteCount>0&&this.#log.warn(`Deleted ${deleteCount} L1 to L2 messages from index ${startIndex} from the store`)})}async rollbackL1ToL2MessagesAfterL1Block(l1BlockNumber){this.#log.debug(`Deleting L1 to L2 messages observed after L1 block ${l1BlockNumber}`);let removeFromIndex;for await(let message of this.iterateL1ToL2Messages({reverse:!0})){if(message.l1BlockNumber<=l1BlockNumber)break;removeFromIndex=message.index}removeFromIndex!==void 0&&await this.removeL1ToL2Messages(removeFromIndex)}async getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount){return assertValidLeafCountRange(startLeafCount,endLeafCount),await this.db.transactionAsync(async()=>(await this.assertLeafCountRangeSynced(startLeafCount,endLeafCount),(await this.getMessagesInLeafCountRange(startLeafCount,endLeafCount)).map(message=>message.leaf)))}async getMessagePosition(totalMessageCount){if(totalMessageCount<0n)throw new Error(`Invalid Inbox message count ${totalMessageCount}`);if(totalMessageCount===0n)return zeroMessagePosition();let message=await this.getL1ToL2Message(totalMessageCount-1n);return message===void 0?void 0:{totalMessageCount,rollingHash:message.inboxRollingHash}}getSyncedMessagePosition(){return this.db.transactionAsync(async()=>{let syncedTotal=await this.getTotalL1ToL2MessageCount(),position4=await this.getMessagePosition(syncedTotal);if(position4===void 0)throw new Error(`Inbox message store holds ${syncedTotal} messages but is missing index ${syncedTotal-1n}`);return position4})}async getL1ToL2MessageRange(startLeafCount,endLeafCount){return assertValidLeafCountRange(startLeafCount,endLeafCount),await this.db.transactionAsync(async()=>{await this.assertLeafCountRangeSynced(startLeafCount,endLeafCount);let start=await this.getMessagePosition(startLeafCount);if(start===void 0)throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`the store is missing the message at index ${startLeafCount-1n}`);let messages=await this.getMessagesInLeafCountRange(startLeafCount,endLeafCount),lastMessage=messages.at(-1),end=lastMessage===void 0?start:{totalMessageCount:endLeafCount,rollingHash:lastMessage.inboxRollingHash};return{messages:messages.map(message=>message.leaf),start,end}})}async assertLeafCountRangeSynced(startLeafCount,endLeafCount){let syncedTotal=await this.getTotalL1ToL2MessageCount();if(endLeafCount>syncedTotal){let available=syncedTotal>startLeafCount?syncedTotal-startLeafCount:0n;throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`only ${available} of ${endLeafCount-startLeafCount} messages are synced`)}}async getMessagesInLeafCountRange(startLeafCount,endLeafCount){if(startLeafCount===endLeafCount)return[];let messages=await toArray(this.iterateL1ToL2Messages({start:startLeafCount,end:endLeafCount}));if(BigInt(messages.length)!==endLeafCount-startLeafCount)throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`the store holds ${messages.length} of ${endLeafCount-startLeafCount} messages`);return messages}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 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)}getTxEffectMembershipWitness(){return Promise.resolve(void 0)}};var import_config15=__toESM(require_empty_stub(),1);import{l1ContractsConfigMappings as l1ContractsConfigMappings2}from"@aztec-labs/ethereum/config";import{l1ReaderConfigMappings}from"@aztec-labs/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(!1)},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 onchain 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-labs/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);function parseHistoryRetention(value){if(value==="archive")return{type:"archive"};let match=/^(rolling|pinned):([0-9]+)$/.exec(value),count2=Number(match?.[2]);if(!match||!Number.isSafeInteger(count2)||count2<1)throw new Error("Expected rolling:<positive checkpoint count>, pinned:<positive checkpoint number>, or archive");return match[1]==="rolling"?{type:"rolling",checkpoints:count2}:{type:"pinned",checkpoint:CheckpointNumber(count2)}}__name(parseHistoryRetention,"parseHistoryRetention");function migrateLegacyHistoryRetention(value){let checkpoints=Number(value);if(!value.trim()||!Number.isSafeInteger(checkpoints))throw new Error(`Invalid legacy history retention '${value}'; expected a whole number`);return checkpoints<1?"archive":`rolling:${checkpoints}`}__name(migrateLegacyHistoryRetention,"migrateLegacyHistoryRetention");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"},worldStateHistoryRetention:{env:"WS_HISTORY_RETENTION",fallback:["WS_NUM_HISTORIC_CHECKPOINTS","WS_NUM_HISTORIC_BLOCKS"],deprecatedFallback:[{env:"WS_NUM_HISTORIC_CHECKPOINTS",transform:migrateLegacyHistoryRetention},{env:"WS_NUM_HISTORIC_BLOCKS",transform:migrateLegacyHistoryRetention}],description:"World-state history retention: rolling:N retains N finalized checkpoints, pinned:N retains checkpoint N onwards, archive retains all history.",parseEnv:parseHistoryRetention,defaultValue:{type:"rolling",checkpoints:64},printDefault:__name(value=>value.type==="archive"?"archive":value.type==="rolling"?`rolling:${value.checkpoints}`:`pinned:${value.checkpoint}`,"printDefault")}};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-labs/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,pinnedTips=__name(()=>Promise.resolve(new SimulationOverridesBuilder2().withChainTips({pending:checkpointedCheckpointNumber,proven:checkpointedCheckpointNumber}).build()),"pinnedTips");if(!rollup)return pinnedTips();if(proposedCheckpointData&&proposedCheckpointData.checkpointNumber!==checkpointedCheckpointNumber+1)return this.log.debug(`Pricing the next-block boundary on checkpointed tip ${checkpointedCheckpointNumber}: proposed parent ${proposedCheckpointData.checkpointNumber} is more than one checkpoint ahead of it`),pinnedTips();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})}}quoteMinFees(){return this.minFees(QUOTE_MAX_WAIT_MS)}async getNextBlockMinFees(){try{return(await this.minFees(0))?.fees}catch(err){this.log.debug("Failed to resolve the next-block min fee",err);return}}async minFees(maxWaitMs){let{frontier,plan,key}=await this.planFromFrontier();if(!key){let fees=frontier.latestBlockHeader?.globalVariables.gasFees;if(!fees){this.log.debug("Cannot price the next block: 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});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.INBOX_PARITY),inputs:InboxParityPrivateInputs.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_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_ROOT_NO_TXS_ROLLUP),inputs:BlockRootNoTxsRollupPrivateInputs.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(14532)}),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_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_ROOT_NO_TXS_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.INBOX_PARITY),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")}};var QueuedIVCVerifier=class{static{__name(this,"QueuedIVCVerifier")}constructor(..._args){throwStub("QueuedIVCVerifier")}},SelfHealingChonkVerifier=class{static{__name(this,"SelfHealingChonkVerifier")}constructor(..._args){throwStub("SelfHealingChonkVerifier")}};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(resolve4=>{setTimeout(()=>{resolve4({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-labs/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"&&param!==null){let number4="number"in param?param.number:void 0,hash5="hash"in param?param.hash:void 0;if(number4!==void 0&&hash5!==void 0)return{number:number4,hash:hash5};if(number4!==void 0)return{number:number4};if(hash5!==void 0)return{hash:hash5};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"&&param!==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 NodeLogsProvider=class{static{__name(this,"NodeLogsProvider")}logsSource;holdOff;constructor(logsSource,holdOff){this.logsSource=logsSource,this.holdOff=holdOff}async getPrivateLogsByTags(query){return await this.logsSource.getPrivateLogsByTags(await this.#resolveReferenceBlock(query))}async getPublicLogsByTags(query){return await this.logsSource.getPublicLogsByTags(await this.#resolveReferenceBlock(query))}async#resolveReferenceBlock(query){let{referenceBlock,...rest}=query;if(referenceBlock===void 0)return rest;if(BlockHash.isBlockHash(referenceBlock))return await this.holdOff.getBlockData({hash:referenceBlock}),{...rest,referenceBlock};let anchor=await this.holdOff.getBlockData(referenceBlock);if(anchor===void 0)throw new Error(`Reference block ${inspectBlockParameter(referenceBlock)} not found in the node. This might indicate a reorg has occurred.`);return{...rest,referenceBlock:anchor.blockHash}}};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{header}=await this.#resolveBlockData(normalizeBlockParameter(referenceBlock)),referenceBlockNumber=header.getBlockNumber();if(referenceBlockNumber===BlockNumber.ZERO){if(header.lastArchive.nextAvailableLeafIndex!==0)throw new Error(`Initial block header commits to a non-empty archive ${header.lastArchive.root.toString()}`);return}let committedDb=await this.getWorldState(BlockNumber(referenceBlockNumber-1));return await this.#getArchiveMembershipWitness(committedDb,header.lastArchive.root,blockHash)}async getBlockHashMembershipWitnessAtArchive(reference,blockHash){let committedDb=await this.getWorldState({archive:reference.archive});return await this.#getArchiveMembershipWitness(committedDb,reference.archive,blockHash)}async#getArchiveMembershipWitness(db,expectedRoot,blockHash){let actualRoot=Fr.fromBuffer((await db.getTreeInfo(MerkleTreeId.ARCHIVE)).root);if(!actualRoot.equals(expectedRoot))throw new Error(`Archive ${expectedRoot.toString()} is not available: world state holds archive ${actualRoot.toString()} at the block that should have it. A reorg may have occurred.`);let[pathAndIndex]=await db.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]}getL1ToL2MessageIndex(l1ToL2Message){return this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message)}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:path5}=witness,leafPreimage=await db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index);if(leafPreimage)return new NullifierMembershipWitness(index,leafPreimage,path5)}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),path5=await committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);return new PublicDataWitness(lowLeafResult.index,preimage,path5)}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.#resolveBlockData(query,opts);return{blockNumber:blockData.header.getBlockNumber(),blockHash:blockData.blockHash}}async#resolveBlockData(query,opts={}){let blockData=await this.holdOff.getBlockData(query,opts);return blockData===void 0&&this.#throwOnUndefinedBlockData(query),blockData}#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;function blockHashOf(value){return"blockHash"in value?Promise.resolve(value.blockHash):value.hash()}__name(blockHashOf,"blockHashOf");function blockSourceQueryOf(query){return isAnchoredBlockParameter(query)?{hash:query.hash}:query}__name(blockSourceQueryOf,"blockSourceQueryOf");var 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 lookup=blockSourceQueryOf(query),value=await this.#verifiedRead(query,lookup,read2);if(value!==void 0||opts.holdOff===!1)return value;let waitMs=await this.#resolveWaitBudgetMs(query);return await this.#waitForBlock(query,lookup,waitMs)||waitMs===0&&"number"in query?await this.#verifiedRead(query,lookup,read2):void 0}async#verifiedRead(query,lookup,read2){let value=await read2(lookup);return value===void 0?void 0:await this.#verifyAnchor(query,value)}async#verifyAnchor(query,value){if(!isAnchoredBlockParameter(query))return value;if(!(await blockHashOf(value)).equals(query.hash)){this.log.verbose("Block resolved for anchor is on a different fork",{blockParameter:inspectBlockParameter(query),resolvedBlockNumber:value.header.getBlockNumber()});return}let blockNumber=value.header.getBlockNumber();if(blockNumber!==query.number)throw new BadRequestError(`Anchor block ${query.hash.toString()} is block ${blockNumber}, not the requested block ${query.number}`);return value}async#waitForBlock(query,lookup,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 read2=await this.blockSource.getBlockData(lookup),data=read2===void 0?void 0:await this.#verifyAnchor(query,read2);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(isAnchoredBlockParameter(query)){if(this.#isGenesisBlockHash(query.hash))return 0;let tip=await this.blockSource.getBlockNumber();return query.number===tip+1?this.config.byNumberWaitMs:this.config.byHashWaitMs}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")}};var import_sequencer_client=__toESM(require_empty_stub(),1);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;blockSource;l1ToL2MessageSource;contractDataSource;predictor;epochCache;config;avmSimulator;telemetry;log;dateProvider=new DateProvider;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.blockSource=deps.blockSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.contractDataSource=deps.contractDataSource,this.predictor=deps.predictor,this.epochCache=deps.epochCache,this.config=deps.config,this.avmSimulator=deps.avmSimulator,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,frontier}=await this.prepareNextBlock();if(!this.avmSimulator)throw new Error("NodePublicCallsSimulator.simulate requires an AVM simulator, but none was configured");let publicProcessorFactory=new PublicProcessorFactory(this.contractDataSource,this.avmSimulator,this.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);await this.appendPredictedL1ToL2Messages(merkleTreeFork,{checkpointStartBlock:plan.newCheckpoint?void 0:proposedCheckpointLastBlock(frontier)}),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,frontier}=await this.predictor.predict();try{return await this.worldStateSynchronizer.syncImmediate(plan.latestBlockNumber,BlockHash.fromString(plan.latestBlockHash)),{plan,globals,frontier}}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 appendPredictedL1ToL2Messages(fork,opts){try{let cursorCount=(await fork.getTreeInfo(MerkleTreeId.L1_TO_L2_MESSAGE_TREE)).size,checkpointStartCount=opts.checkpointStartBlock===void 0?cursorCount:await this.getConsumedMessageTotal(opts.checkpointStartBlock);if(checkpointStartCount===void 0){this.log.debug(`Block ${opts.checkpointStartBlock} has no header on this node; simulating against the tip`);return}let caps=import_sequencer_client.PROTOCOL_INBOX_CONSUMPTION_CAPS,localSyncedCount=(await this.l1ToL2MessageSource.getSyncedMessagePosition()).totalMessageCount,safeLocalEnd=(0,import_sequencer_client.selectSafeLocalEnd)({cursorCount,localSyncedCount,checkpointStartCount,caps});if(safeLocalEnd<=cursorCount)return;let{messages}=await this.l1ToL2MessageSource.getL1ToL2MessageRange(cursorCount,safeLocalEnd);await appendL1ToL2MessagesToTree(fork,messages),this.log.debug(`Appended ${messages.length} predicted L1-to-L2 messages to the simulation fork`,{cursorCount,safeLocalEnd})}catch(err){this.log.verbose(`Could not predict the next block's L1-to-L2 messages, simulating against the tip: ${err}`)}}async getConsumedMessageTotal(blockNumber){if(blockNumber===BlockNumber.ZERO)return 0n;let block=await this.blockSource.getBlockData({number:blockNumber});return block===void 0?void 0:BigInt(block.header.state.l1ToL2MessageTree.nextAvailableLeafIndex)}};function proposedCheckpointLastBlock(frontier){let proposed=frontier.proposedCheckpoint;return proposed?BlockNumber.add(proposed.startBlock,proposed.blockCount-1):frontier.tips.checkpointed.block.number}__name(proposedCheckpointLastBlock,"proposedCheckpointLastBlock");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 applyDecs2203RFactory2(){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(applyDecs2203RFactory2,"applyDecs2203RFactory");function _apply_decs_2203_r2(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r2=applyDecs2203RFactory2())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r2,"_apply_decs_2203_r");var _dec3,_initProto2;_dec3=trackSpan("AztecNodeService.simulatePublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var AztecNodeService=class{static{__name(this,"AztecNodeService")}static{({e:[_initProto2]}=_apply_decs_2203_r2(this,[[_dec3,2,"simulatePublicCalls"]],[]))}metrics;isUploadingSnapshot=(_initProto2(this),!1);sequencerPausedMinTxsPerBlock;nodePublicCallsSimulator;worldStateQueries;blockProvider;logsProvider;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;avmSimulator;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.avmSimulator=deps.avmSimulator,this.metrics=new NodeMetrics(this.telemetry,"AztecNodeService"),this.tracer=this.telemetry.getTracer("AztecNodeService"),this.nodePublicCallsSimulator=new NodePublicCallsSimulator({worldStateSynchronizer:this.worldStateSynchronizer,blockSource:this.blockSource,l1ToL2MessageSource:this.l1ToL2MessageSource,contractDataSource:this.contractDataSource,predictor:this.nextBlockPredictor,epochCache:this.epochCache,config:this.config,avmSimulator:this.avmSimulator,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.logsProvider=new NodeLogsProvider(this.logsSource,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}getValidatorClient(){return this.validatorClient}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)}getPrivateLogsByTags(query){return this.logsProvider.getPrivateLogsByTags(query)}getPublicLogsByTags(query){return this.logsProvider.getPublicLogsByTags(query)}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 this.avmSimulator?.[Symbol.asyncDispose](),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)}getBlockHashMembershipWitnessAtArchive(reference,blockHash){return this.worldStateQueries.getBlockHashMembershipWitnessAtArchive(reference,blockHash)}getNoteHashMembershipWitness(referenceBlock,noteHash){return this.worldStateQueries.getNoteHashMembershipWitness(referenceBlock,noteHash)}getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message)}getL1ToL2MessageIndex(l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageIndex(l1ToL2Message)}getL2ToL1Messages(epoch){return this.worldStateQueries.getL2ToL1Messages(epoch)}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.worldStateQueries.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}getTxEffectMembershipWitness(txHash){return this.blockSource.getTxEffectMembershipWitness(txHash)}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:skipFeeEnforcement?GasFees.empty():await this.getNextBlockMinFees(),skipFeeEnforcement,isSimulation,txsPermitted:!this.config.disableTransactions,maxTxL2Gas:networkTxGasLimits.l2Gas,maxTxDAGas:networkTxGasLimits.daGas},this.log.getBindings()).validateTx(tx)}async getNextBlockMinFees(){let quote=await this.nextBlockPredictor.quoteMinFees().catch(err=>{this.log.warn("Failed to compute the next-block min fee for tx admission",err)});return quote?quote.fees:(this.log.verbose("Admitting txs against the L1-forward min fee: the next block's fee is unavailable"),await this.feeProvider.getCurrentMinFees())}getConfig(){let keys=AztecNodeAdminConfigSchema.omit({logLevel:!0}).keyof().options;return Promise.resolve({...pick2(this.config,...keys),logLevel:getLogLevel()})}async setConfig({logLevel:logLevel2,...config2}){if(logLevel2!==void 0&&!isValidLogLevelSpec(logLevel2))throw new BadRequestError(`Invalid log level spec: ${logLevel2}`);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 SelfHealingChonkVerifier.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;logLevel2!==void 0&&setLogLevel(logLevel2),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)}getValidatorStatsBatch(validatorAddresses,fromSlot,toSlot){return this.validatorsSentinel?.getValidatorStatsBatch(validatorAddresses,fromSlot,toSlot)??Promise.resolve(validatorAddresses.map(()=>null))}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_cache3=__toESM(require_empty_stub(),1);import{createEthereumChain}from"@aztec-labs/ethereum/chain";import{getPublicClient,makeL1HttpTransport}from"@aztec-labs/ethereum/client";import{InboxContract,RegistryContract,RollupContract as RollupContract2}from"@aztec-labs/ethereum/contracts";import{pickL1ContractAddresses as pickL1ContractAddresses2}from"@aztec-labs/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_client2=__toESM(require_empty_stub(),1),import_automine=__toESM(require_empty_stub(),1);var import_slasher4=__toESM(require_empty_stub(),1);var import_validator_client2=__toESM(require_empty_stub(),1);import{createPublicClient}from"viem";var import_epoch_cache2=__toESM(require_empty_stub(),1);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({state:"none",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)}}lookupProposer(_slot){return Promise.resolve({state:"none"})}lookupMembership(_slot,_validator){return Promise.resolve({state:"none"})}getRegisteredValidators(){return Promise.resolve([])}filterInCommittee(_slot,_validators){return Promise.resolve({state:"none"})}lookupEscapeHatch(_epoch){return Promise.resolve({state:"none",isEscapeHatchOpen:!1})}lookupEscapeHatchAtSlot(_slot){return Promise.resolve({state:"none",isEscapeHatchOpen:!1})}getL1Constants(){return EmptyL1RollupConstants}getLagInEpochsForValidatorSet(){return 0}};var TXESynchronizer=class{constructor(nativeWorldStateService){this.nativeWorldStateService=nativeWorldStateService}static{__name(this,"TXESynchronizer")}blockNumber=BlockNumber.ZERO;avmSimulator;static async create(){let nativeWorldStateService=await NativeWorldStateService.ephemeral(),synchronizer=new this(nativeWorldStateService);return synchronizer.avmSimulator=await AvmSimulatorPool.spawn({wsdbIpcPath:nativeWorldStateService.getIpcPath()}),synchronizer}async handleL2Block(block,l1ToL2Messages=[]){await this.nativeWorldStateService.handleL2BlockAndMessages(block,l1ToL2Messages),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"')}async stop(){await this.closeIpc()}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"')}async closeIpc(){await this.avmSimulator?.[Symbol.asyncDispose]()}};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,inboxRollingHash: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()),[],CommitteeAttestationsAndSigners.packAttestations([]));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:Option.none(),anchorBlockTimestamp:0n}}__name(emptyLastCallState,"emptyLastCallState");var TXESession=class _TXESession{static{__name(this,"TXESession")}state={name:"TOP_LEVEL"};authwits=new Map;taggingSecretStrategies=new Map;authorizeAllUtilityCallTargets=!1;lastCallInfo=emptyLastCallState();txeOracleVersion;disposed=!1;logger;sessionStore;stateMachine;oracleHandler;contractStore;noteStore;keyStore;addressStore;accountStore;senderTaggingStore;recipientTaggingStore;taggingSecretSourcesStore;capsuleStore;factStore;privateEventStore;stagedWriteCoordinator;operationContributors;currentChangeSetId;chainId;version;nextBlockTimestamp;artifactResolver;rootPath;packageName;constructor(args){this.logger=args.logger,this.sessionStore=args.sessionStore,this.stateMachine=args.stateMachine,this.oracleHandler=args.oracleHandler,this.contractStore=args.contractStore,this.noteStore=args.noteStore,this.keyStore=args.keyStore,this.addressStore=args.addressStore,this.accountStore=args.accountStore,this.senderTaggingStore=args.senderTaggingStore,this.recipientTaggingStore=args.recipientTaggingStore,this.taggingSecretSourcesStore=args.taggingSecretSourcesStore,this.capsuleStore=args.capsuleStore,this.factStore=args.factStore,this.privateEventStore=args.privateEventStore,this.stagedWriteCoordinator=args.stagedWriteCoordinator,this.operationContributors=args.operationContributors,this.currentChangeSetId=args.currentChangeSetId,this.chainId=args.chainId,this.version=args.version,this.nextBlockTimestamp=args.nextBlockTimestamp,this.artifactResolver=args.artifactResolver,this.rootPath=args.rootPath,this.packageName=args.packageName}async dispose(){if(!this.disposed){this.disposed=!0;try{await this.stateMachine.synchronizer.closeIpc()}catch(err){this.logger.warn("Error closing AVM simulator during session dispose",err)}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,chainId,version:version2,authwits:new Map,taggingSecretStrategies:new Map,authorizeAllUtilityCallTargets:!1,artifactResolver,rootPath,packageName});return await topLevelOracleHandler.mineDeploymentNullifiers([STANDARD_AUTH_REGISTRY_ADDRESS]),new _TXESession({logger:logger3,sessionStore:store,stateMachine,oracleHandler:topLevelOracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,operationContributors:[stateMachine.contractSyncService],currentChangeSetId:initialChangeSetId,chainId,version:version2,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 ${10}.${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 (${10}.${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?Option.some(txHash):Option.none(),anchorBlockTimestamp),result}getLastCallOffchainEffects(){return this.lastCallInfo.queried=!0,this.lastCallInfo.offchainEffects}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.from(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.from(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!==10){let hint=major2>10?"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 ${10}, 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({stateMachine:this.stateMachine,contractStore:this.contractStore,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,accountStore:this.accountStore,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleStore:this.capsuleStore,factStore:this.factStore,privateEventStore:this.privateEventStore,nextBlockTimestamp:this.nextBlockTimestamp,chainId:this.chainId,version:this.version,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets,artifactResolver:this.artifactResolver,rootPath:this.rootPath,packageName: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.from(gasSettings)),protocolNullifier,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:this.buildExecutionHooks(),transientArrayService}),this.state={name:"PRIVATE",nextBlockGlobalVariables,noteCache,taggingIndexCache},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Option.none(),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(Option.none(),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:this.buildExecutionHooks(),transientArrayService:new TransientArrayService}),this.state={name:"UTILITY"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Option.none(),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),hooks:this.buildExecutionHooks(),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"))}}}buildExecutionHooks(){return composeHooks({resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies),authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0})}};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]))});import{createHash as createHash2}from"crypto";import{createReadStream}from"fs";import{readFile,readdir}from"fs/promises";import{join as join9,parse as parse4}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,immutablesHash}){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}=parse4(contractPath),cacheKey=`${contractDirectory??""}-${contractFilename}-${initializer3}-${args.map(arg=>arg.toString()).join("-")}-${publicKeysHash}-${salt}-${deployer}-${immutablesHash}-${fileHash}`;return this.#deployments.getOrCompute(cacheKey,()=>this.#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer,immutablesHash))}async#resolveArtifactPath(rootPath,packageName,contractPath){let{dir:contractDirectory,base:contractFilename}=parse4(contractPath);if(contractDirectory)if(contractDirectory.includes("@")){let[workspace,pkg]=contractDirectory.split("@"),targetPath=join9(rootPath,workspace,"/target");return this.#logger.debug(`Looking for compiled artifact in workspace ${targetPath}`),join9(targetPath,`${pkg}-${contractFilename}.json`)}else{let targetPath=join9(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 join9(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,immutablesHash){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,immutablesHash});return{artifact,instance}}#fastHashFile(path5){return new Promise(resolve4=>{let fd=createReadStream(path5),hash5=createHash2("sha1");hash5.setEncoding("hex"),fd.on("end",function(){hash5.end(),resolve4(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(join10(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{getEnv,require_inherits,jsonStringify,inspect,createLogger,ZodError,external_exports,Fr,sha256ToField,promiseWithResolvers,schemaHasMethod,getSchemaParameters,parseWithOptionals,Timer,loadContractArtifact,getContractClassFromArtifact,openEphemeralStore,LazyProtocolContractsProvider,ContractStore,getStandardAuthRegistry,getStandardHandshakeRegistry,TXE_REQUIRED_PROTOCOL_CONTRACTS,TXEDispatcher,activeSessionCount,TXEDispatcherApiSchema};
259
+ VALUES (?, ?, ?, ?, ?, ?)`,[this.#slot(resolved),this.#container,this.#encodedKey(),resolved+1,hash4(val),this.#encoder.pack(val)]),!0)})}async*entriesAsync(){let rows=await this.store.allAsync("SELECT key_count, value FROM data WHERE container = ? AND key = ? ORDER BY key_count ASC",[this.#container,this.#encodedKey()]);for(let row of rows){let keyCount=Number(row[0]),raw=row[1];raw instanceof Uint8Array&&(yield[keyCount-1,this.#encoder.unpack(raw)])}}async*valuesAsync(){for await(let[,val]of this.entriesAsync())yield val}[_computedKey41](){return this.valuesAsync()}#encodedKey(){return toBufferKey([this.#name])}#slot(index){return`array:${this.#name}:slot:${index}`}};var HEADER_MAX_PATH_SIZE=512,HEADER_FLAGS_SIZE=4,HEADER_DIGEST_SIZE=8,HEADER_CORPUS_SIZE=HEADER_MAX_PATH_SIZE+HEADER_FLAGS_SIZE,HEADER_SIZE=HEADER_CORPUS_SIZE+HEADER_DIGEST_SIZE;var SQLITE_OPEN_MAIN_DB=256,SQLITE_OPEN_MAIN_JOURNAL=2048,SQLITE_OPEN_SUPER_JOURNAL=16384,SQLITE_OPEN_WAL=524288,PERSISTENT_FILE_TYPES=SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL|SQLITE_OPEN_SUPER_JOURNAL|SQLITE_OPEN_WAL;import{join as join10}from"path";import{addExtension as addExtension5}from"msgpackr";addExtension5({Class:Fr,write:__name(fr=>fr.toBuffer(),"write")});import{BundleArtifactProvider}from"@aztec-labs/noir-protocol-circuits-types/client/bundle";import{abiDecode as abiDecode2,abiEncode as abiEncode2}from"@aztec-foundation/noir-noirc_abi";var AvmProvingRequestSchema=external_exports.object({type:external_exports.literal(ProvingRequestType.PUBLIC_VM),inputs:AvmCircuitInputs.schema});var INBOX_PARITY_SIZES=[4,16,64,256,1024];function pickInboxParitySize(numMessages){let size=INBOX_PARITY_SIZES.find(s2=>numMessages<=s2);if(size===void 0)throw new Error(`Cannot fit ${numMessages} L1-to-L2 messages into any InboxParity size (max ${1024})`);return size}__name(pickInboxParitySize,"pickInboxParitySize");var InboxParityPrivateInputs=class _InboxParityPrivateInputs{static{__name(this,"InboxParityPrivateInputs")}size;messages;numMessages;startRollingHash;proverId;constructor(size,messages,numMessages,startRollingHash,proverId){if(this.size=size,this.messages=messages,this.numMessages=numMessages,this.startRollingHash=startRollingHash,this.proverId=proverId,messages.length!==size)throw new Error(`InboxParity messages length (${messages.length}) must equal size (${size})`)}static fromMessages(messages,startRollingHash,proverId){let size=pickInboxParitySize(messages.length);return new _InboxParityPrivateInputs(size,padArrayEnd(messages,Fr.ZERO,size),messages.length,startRollingHash,proverId)}toBuffer(){return serializeToBuffer(new Fr(this.size),this.messages,new Fr(this.numMessages),this.startRollingHash,this.proverId)}toString(){return bufferToHex(this.toBuffer())}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer),size=Fr.fromBuffer(reader).toNumber(),messages=Array.from({length:size},()=>Fr.fromBuffer(reader));return new _InboxParityPrivateInputs(size,messages,Fr.fromBuffer(reader).toNumber(),Fr.fromBuffer(reader),Fr.fromBuffer(reader))}static fromString(str){return _InboxParityPrivateInputs.fromBuffer(hexToBuffer(str))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_InboxParityPrivateInputs)}};var ParityPublicInputs=class _ParityPublicInputs{static{__name(this,"ParityPublicInputs")}startRollingHash;endRollingHash;endSponge;proverId;constructor(startRollingHash,endRollingHash,endSponge,proverId){this.startRollingHash=startRollingHash,this.endRollingHash=endRollingHash,this.endSponge=endSponge,this.proverId=proverId}toBuffer(){return serializeToBuffer(this.startRollingHash,this.endRollingHash,this.endSponge,this.proverId)}toString(){return bufferToHex(this.toBuffer())}toJSON(){return this.toBuffer()}static from(fields){return new _ParityPublicInputs(..._ParityPublicInputs.getFields(fields))}static getFields(fields){return[fields.startRollingHash,fields.endRollingHash,fields.endSponge,fields.proverId]}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _ParityPublicInputs(reader.readObject(Fr),reader.readObject(Fr),reader.readObject(L1ToL2MessageSponge),Fr.fromBuffer(reader))}static fromString(str){return _ParityPublicInputs.fromBuffer(hexToBuffer(str))}static get schema(){return bufferSchemaFor(_ParityPublicInputs)}};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))}};var _computedKey42;_computedKey42=inspect.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()}}[_computedKey42](){return`CheckpointConstantData ${inspect(this.toInspect())}`}};var BlockRollupPublicInputs=class _BlockRollupPublicInputs{static{__name(this,"BlockRollupPublicInputs")}constants;previousArchive;newArchive;startState;endState;startSpongeBlob;endSpongeBlob;timestamp;blockHeadersHash;startMsgSponge;endMsgSponge;outHash;accumulatedFees;accumulatedManaUsed;constructor(constants,previousArchive,newArchive,startState,endState,startSpongeBlob,endSpongeBlob,timestamp,blockHeadersHash,startMsgSponge,endMsgSponge,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.startMsgSponge=startMsgSponge,this.endMsgSponge=endMsgSponge,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),reader.readObject(L1ToL2MessageSponge),reader.readObject(L1ToL2MessageSponge),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.startMsgSponge,this.endMsgSponge,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(),startMsgSpongeNumAbsorbed:this.startMsgSponge.numAbsorbed,endMsgSpongeNumAbsorbed:this.endMsgSponge.numAbsorbed,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;accumulatedTxEffectsTreeRoot;accumulatedFees;accumulatedManaUsed;constructor(numTxs,constants,startTreeSnapshots,endTreeSnapshots,startSpongeBlob,endSpongeBlob,outHash,accumulatedTxEffectsTreeRoot,accumulatedFees,accumulatedManaUsed){this.numTxs=numTxs,this.constants=constants,this.startTreeSnapshots=startTreeSnapshots,this.endTreeSnapshots=endTreeSnapshots,this.startSpongeBlob=startSpongeBlob,this.endSpongeBlob=endSpongeBlob,this.outHash=outHash,this.accumulatedTxEffectsTreeRoot=accumulatedTxEffectsTreeRoot,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(),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),Fr.fromBuffer(reader))}toBuffer(){return serializeToBuffer(this.numTxs,this.constants,this.startTreeSnapshots,this.endTreeSnapshots,this.startSpongeBlob,this.endSpongeBlob,this.outHash,this.accumulatedTxEffectsTreeRoot,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 BlockRootNoTxsRollupPrivateInputs=class _BlockRootNoTxsRollupPrivateInputs{static{__name(this,"BlockRootNoTxsRollupPrivateInputs")}previousArchive;previousState;constants;timestamp;startSpongeBlob;startMsgSponge;messageBundle;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousArchive,previousState,constants,timestamp,startSpongeBlob,startMsgSponge,messageBundle,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousArchive=previousArchive,this.previousState=previousState,this.constants=constants,this.timestamp=timestamp,this.startSpongeBlob=startSpongeBlob,this.startMsgSponge=startMsgSponge,this.messageBundle=messageBundle,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootNoTxsRollupPrivateInputs(..._BlockRootNoTxsRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousArchive,fields.previousState,fields.constants,fields.timestamp,fields.startSpongeBlob,fields.startMsgSponge,fields.messageBundle,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousArchive,this.previousState,this.constants,bigintToUInt64BE(this.timestamp),this.startSpongeBlob,this.startMsgSponge,this.messageBundle,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootNoTxsRollupPrivateInputs(AppendOnlyTreeSnapshot.fromBuffer(reader),StateReference.fromBuffer(reader),CheckpointConstantData.fromBuffer(reader),reader.readUInt64(),reader.readObject(SpongeBlob),reader.readObject(L1ToL2MessageSponge),reader.readObject(L1ToL2MessageBundle),reader.readArray(36,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootNoTxsRollupPrivateInputs)}},BlockRootRollupPrivateInputs=class _BlockRootRollupPrivateInputs{static{__name(this,"BlockRootRollupPrivateInputs")}previousRollups;messageBundle;previousL1ToL2;startMsgSponge;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousRollups,messageBundle,previousL1ToL2,startMsgSponge,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousRollups=previousRollups,this.messageBundle=messageBundle,this.previousL1ToL2=previousL1ToL2,this.startMsgSponge=startMsgSponge,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootRollupPrivateInputs(..._BlockRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.messageBundle,fields.previousL1ToL2,fields.startMsgSponge,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousRollups,this.messageBundle,this.previousL1ToL2,this.startMsgSponge,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootRollupPrivateInputs([ProofData.fromBuffer(reader,TxRollupPublicInputs),ProofData.fromBuffer(reader,TxRollupPublicInputs)],reader.readObject(L1ToL2MessageBundle),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readObject(L1ToL2MessageSponge),reader.readArray(36,Fr),reader.readArray(30,Fr))}toJSON(){return this.toBuffer()}static get schema(){return bufferSchemaFor(_BlockRootRollupPrivateInputs)}},BlockRootSingleTxRollupPrivateInputs=class _BlockRootSingleTxRollupPrivateInputs{static{__name(this,"BlockRootSingleTxRollupPrivateInputs")}previousRollup;messageBundle;previousL1ToL2;startMsgSponge;l1ToL2MessageFrontierHint;newArchiveSiblingPath;constructor(previousRollup,messageBundle,previousL1ToL2,startMsgSponge,l1ToL2MessageFrontierHint,newArchiveSiblingPath){this.previousRollup=previousRollup,this.messageBundle=messageBundle,this.previousL1ToL2=previousL1ToL2,this.startMsgSponge=startMsgSponge,this.l1ToL2MessageFrontierHint=l1ToL2MessageFrontierHint,this.newArchiveSiblingPath=newArchiveSiblingPath}static from(fields){return new _BlockRootSingleTxRollupPrivateInputs(..._BlockRootSingleTxRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.messageBundle,fields.previousL1ToL2,fields.startMsgSponge,fields.l1ToL2MessageFrontierHint,fields.newArchiveSiblingPath]}toBuffer(){return serializeToBuffer(this.previousRollup,this.messageBundle,this.previousL1ToL2,this.startMsgSponge,this.l1ToL2MessageFrontierHint,this.newArchiveSiblingPath)}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _BlockRootSingleTxRollupPrivateInputs(ProofData.fromBuffer(reader,TxRollupPublicInputs),reader.readObject(L1ToL2MessageBundle),AppendOnlyTreeSnapshot.fromBuffer(reader),reader.readObject(L1ToL2MessageSponge),reader.readArray(36,Fr),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;startInboxRollingHash;endInboxRollingHash;checkpointHeaderHashes;fees;startBlobAccumulator;endBlobAccumulator;finalBlobChallenges;constructor(constants,previousArchive,newArchive,previousOutHash,newOutHash,startInboxRollingHash,endInboxRollingHash,checkpointHeaderHashes,fees,startBlobAccumulator,endBlobAccumulator,finalBlobChallenges){this.constants=constants,this.previousArchive=previousArchive,this.newArchive=newArchive,this.previousOutHash=previousOutHash,this.newOutHash=newOutHash,this.startInboxRollingHash=startInboxRollingHash,this.endInboxRollingHash=endInboxRollingHash,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),Fr.fromBuffer(reader),Fr.fromBuffer(reader),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.startInboxRollingHash,this.endInboxRollingHash,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(),startInboxRollingHash:this.startInboxRollingHash.toString(),endInboxRollingHash:this.endInboxRollingHash.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;previousInboxRollingHash;endInboxRollingHash;checkpointHeaderHashes;fees;constants;blobPublicInputs;constructor(previousArchiveRoot,endArchiveRoot,outHash,previousInboxRollingHash,endInboxRollingHash,checkpointHeaderHashes,fees,constants,blobPublicInputs){this.previousArchiveRoot=previousArchiveRoot,this.endArchiveRoot=endArchiveRoot,this.outHash=outHash,this.previousInboxRollingHash=previousInboxRollingHash,this.endInboxRollingHash=endInboxRollingHash,this.checkpointHeaderHashes=checkpointHeaderHashes,this.fees=fees,this.constants=constants,this.blobPublicInputs=blobPublicInputs}static getFields(fields){return[fields.previousArchiveRoot,fields.endArchiveRoot,fields.outHash,fields.previousInboxRollingHash,fields.endInboxRollingHash,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),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(),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,l1ToL2Messages)}__name(insertTxEffectIntoWorldTrees,"insertTxEffectIntoWorldTrees");async function makeTXEBlockHeader(worldTrees,globalVariables,txEffects){let stateReference=await worldTrees.getStateReference(),archiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE);return BlockHeader.from({lastArchive:new AppendOnlyTreeSnapshot(new Fr(archiveInfo.root),TreeLeafIndex.fromBigInt(BigInt(archiveInfo.size))),spongeBlobHash:Fr.ZERO,txEffectsTreeRoot:await new Body(txEffects).computeTxEffectsTreeRoot(),state:stateReference,globalVariables,totalFees:Fr.ZERO,totalManaUsed:Fr.ZERO})}__name(makeTXEBlockHeader,"makeTXEBlockHeader");async function makeTXEBlock(worldTrees,globalVariables,txEffects){let header=await makeTXEBlockHeader(worldTrees,globalVariables,txEffects);await worldTrees.updateArchive(header);let newArchiveInfo=await worldTrees.getTreeInfo(MerkleTreeId.ARCHIVE),newArchive=new AppendOnlyTreeSnapshot(new Fr(newArchiveInfo.root),TreeLeafIndex.fromBigInt(BigInt(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=STRUCT([{name:"daGas",type:U32},{name:"l2Gas",type:U32}]),GAS_SETTINGS=STRUCT([{name:"gasLimits",type:GAS},{name:"teardownGasLimits",type:GAS},{name:"maxFeesPerGas",type:GAS_FEES},{name:"maxPriorityFeesPerGas",type:GAS_FEES}]),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"]}),CALL_CONTEXT=STRUCT([{name:"msgSender",type:AZTEC_ADDRESS},{name:"contractAddress",type:AZTEC_ADDRESS},{name:"functionSelector",type:FUNCTION_SELECTOR},{name:"isStaticCall",type:BOOL}]),TX_CONTEXT=STRUCT([{name:"chainId",type:FIELD},{name:"version",type:FIELD},{name:"gasSettings",type:GAS_SETTINGS}]),PRIVATE_CONTEXT_INPUTS=STRUCT([{name:"callContext",type:CALL_CONTEXT},{name:"anchorBlockHeader",type:BLOCK_HEADER},{name:"txContext",type:TX_CONTEXT},{name:"startSideEffectCounter",type:U32},{name:"protocolNullifier",type:FIELD}]),COMPLETE_ADDRESS=STRUCT([{name:"address",type:AZTEC_ADDRESS},{name:"publicKeys",type:PUBLIC_KEYS}]),TXE_TX_EFFECTS=STRUCT([{name:"txHash",type:TX_HASH},{name:"noteHashes",type:FIXED_BOUNDED_VEC(FIELD,64)},{name:"nullifiers",type:FIXED_BOUNDED_VEC(FIELD,64)},{name:"privateLogs",type:FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,16),64)}]),TXE_OFFCHAIN_EFFECTS=FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,MAX_OFFCHAIN_EFFECT_LEN),MAX_OFFCHAIN_EFFECTS_PER_TXE_QUERY),TXE_CALL_CONTEXT=STRUCT([{name:"txHash",type:OPTION(FIELD)},{name:"anchorBlockTimestamp",type:U64}]),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=FIXED_BOUNDED_VEC(FIXED_BOUNDED_VEC(FIELD,MAX_PRIVATE_EVENT_LEN),MAX_PRIVATE_EVENTS_PER_TXE_QUERY),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},{name:"immutablesHash",type:FIELD}],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:VECTOR(FIELD)}]}),aztec_avm_returndataSize:makeEntry({returnType:U32}),aztec_avm_returndataCopy:makeEntry({params:[{name:"rdOffset",type:U32},{name:"copySize",type:U32}],returnType:VECTOR(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-foundation/bb.js";import{Buffer as Buffer77}from"buffer";import{Buffer as Buffer76}from"buffer";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=Buffer76.alloc(32),buf2=Buffer76.alloc(32),buf3=Buffer76.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=Buffer76.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(Buffer77.concat([Buffer77.from(response.publicKey.x),Buffer77.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(Buffer77.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 IpcError=class extends Error{static{__name(this,"IpcError")}retry;constructor(message,retry2,options){super(message,options),this.retry=retry2,this.name=new.target.name}},IpcTransportError=class extends IpcError{static{__name(this,"IpcTransportError")}constructor(message,options){super(message,!0,options)}},IpcProcessExitedError=class extends IpcError{static{__name(this,"IpcProcessExitedError")}code;signal;logPath;constructor(message,code,signal,logPath){super(message,!0),this.code=code,this.signal=signal,this.logPath=logPath}},IpcSpawnError=class extends IpcError{static{__name(this,"IpcSpawnError")}};import{spawn}from"node:child_process";import{open,rm as rm3}from"node:fs/promises";import{tmpdir as tmpdir2}from"node:os";import{join as join4}from"node:path";import{threadId}from"node:worker_threads";import{createRequire as createRequire2}from"node:module";import*as fs2 from"node:fs";import*as path from"node:path";import{fileURLToPath}from"node:url";var PLATFORM_TO_BUILD_DIR={"x86_64-linux":"amd64-linux","x86_64-darwin":"amd64-macos","aarch64-linux":"arm64-linux","aarch64-darwin":"arm64-macos"};function detectPlatform(){let arch=process.arch,platform2=process.platform;return arch==="x64"&&platform2==="linux"?"x86_64-linux":arch==="x64"&&platform2==="darwin"?"x86_64-darwin":arch==="arm64"&&platform2==="linux"?"aarch64-linux":arch==="arm64"&&platform2==="darwin"?"aarch64-darwin":null}__name(detectPlatform,"detectPlatform");function findPackageRoot(){let currentDir3=path.dirname(fileURLToPath(import.meta.url)),root=path.parse(currentDir3).root;for(;currentDir3!==root;){let packageJsonPath=path.join(currentDir3,"package.json");if(fs2.existsSync(packageJsonPath)){let buildDir=path.join(currentDir3,"build");if(fs2.existsSync(buildDir))return currentDir3}currentDir3=path.dirname(currentDir3)}return null}__name(findPackageRoot,"findPackageRoot");function findIpcRuntimeNapi(customPath){if(customPath)return fs2.existsSync(customPath)?path.resolve(customPath):null;let platform2=detectPlatform();if(!platform2)return null;let packageRoot=findPackageRoot();if(!packageRoot)return null;let buildDir=PLATFORM_TO_BUILD_DIR[platform2],candidate=path.join(packageRoot,"build",buildDir,"ipc_runtime_napi.node");return fs2.existsSync(candidate)?candidate:null}__name(findIpcRuntimeNapi,"findIpcRuntimeNapi");function loadIpcRuntimeNapi(customPath){let addonPath=findIpcRuntimeNapi(customPath);if(!addonPath)throw new Error("Could not locate ipc_runtime_napi.node. Build with `ipc-runtime/bootstrap.sh` or set the optional `customPath` argument to point at a prebuilt addon.");return createRequire2(import.meta.url)(addonPath)}__name(loadIpcRuntimeNapi,"loadIpcRuntimeNapi");var NapiShmAsyncClient=class{static{__name(this,"NapiShmAsyncClient")}inner;pending=new Map;nextRequestId=(BigInt(Math.floor(Math.random()*4294967295))<<16n)+1n;destroyed=!1;constructor(inner){this.inner=inner,this.inner.setResponseCallback((requestId,response)=>{if(this.destroyed)return;let cb=this.pending.get(requestId);cb?(this.pending.delete(requestId),cb.resolve(new Uint8Array(response)),this.pending.size===0&&this.inner.release()):console.warn(`NapiShmAsyncClient: discarding response for unknown request id ${requestId} (stale frame from a previous ring occupant?)`)})}call(input){if(this.destroyed)return Promise.reject(new Error("NapiShmAsyncClient: call() after destroy()"));let buf=Buffer.isBuffer(input)?input:Buffer.from(input.buffer,input.byteOffset,input.byteLength);return new Promise((resolve4,reject)=>{let requestId=this.nextRequestId++;this.pending.size===0&&this.inner.acquire(),this.pending.set(requestId,{resolve:resolve4,reject});try{this.inner.call(requestId,buf)}catch(err){this.pending.delete(requestId),this.pending.size===0&&this.inner.release(),reject(err instanceof Error?err:new Error(`SHM async call failed: ${String(err)}`))}})}async destroy(){if(this.destroyed)return;this.destroyed=!0;let err=new Error("ipc-runtime SHM client destroyed before response");for(let cb of this.pending.values())cb.reject(err);this.pending.clear(),this.inner.close()}};function createNapiShmAsyncClient(shmName,options={}){let napi=loadIpcRuntimeNapi(options.customAddonPath);return new NapiShmAsyncClient(options.clientId===void 0?new napi.MsgpackClientAsync(shmName):new napi.MsgpackClientAsync(shmName,options.clientId))}__name(createNapiShmAsyncClient,"createNapiShmAsyncClient");import*as net from"node:net";var UdsIpcClient=class _UdsIpcClient{static{__name(this,"UdsIpcClient")}conn;buffer=Buffer.alloc(0);pending=new Map;nextRequestId=(BigInt(Math.floor(Math.random()*4294967295))<<16n)+1n;destroyed=!1;closed=!1;constructor(conn){this.conn=conn,conn.on("data",chunk3=>this.onData(chunk3)),conn.on("error",err=>this.failAll(new IpcTransportError(`UdsIpcClient: socket error: ${err.message}`,{cause:err}))),conn.on("close",()=>this.failAll(new IpcTransportError("socket closed")))}static async connect(socketPath,opts){let conn=await connectWithRetry(socketPath,opts?.connectTimeoutMs??5e3);return conn.setNoDelay(!0),opts?.unref&&conn.unref(),new _UdsIpcClient(conn)}get inflight(){return this.pending.size}get socket(){return this.conn}async call(input){if(this.destroyed)throw new IpcTransportError("UdsIpcClient: call() after destroy()");if(this.closed)throw new IpcTransportError("UdsIpcClient: call() on a closed/errored socket");return new Promise((resolve4,reject)=>{let requestId=this.nextRequestId++;this.pending.set(requestId,{resolve:resolve4,reject});let header=Buffer.allocUnsafe(12);header.writeUInt32LE(input.length+8,0),header.writeBigUInt64LE(requestId,4),this.conn.write(header),this.conn.write(input)})}async destroy(){this.destroyed=!0,this.conn.removeAllListeners(),this.conn.destroy(),this.failAll(new IpcTransportError("UdsIpcClient destroyed"))}onData(chunk3){for(this.buffer=this.buffer.length===0?Buffer.from(chunk3):Buffer.concat([this.buffer,chunk3]);this.buffer.length>=4;){let len=this.buffer.readUInt32LE(0);if(len>268435456){this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: oversized frame (${len} bytes exceeds MAX_FRAME_SIZE)`));return}if(len<8){this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: ${len}-byte frame is shorter than the request-id field \u2014 IPC protocol mismatch (envelope ids); update the peer binary/package`));return}if(this.buffer.length<4+len)return;let requestId=this.buffer.readBigUInt64LE(4),payload=this.buffer.subarray(12,4+len);this.buffer=this.buffer.subarray(4+len);let next=this.pending.get(requestId);if(next)this.pending.delete(requestId),next.resolve(new Uint8Array(payload));else{this.conn.destroy(),this.failAll(new IpcTransportError(`UdsIpcClient: response for unknown request id ${requestId} \u2014 protocol desync`));return}}}failAll(err){this.closed=!0;let pending=[...this.pending.values()];this.pending.clear();for(let p of pending)p.reject(err)}};async function connectWithRetry(socketPath,timeoutMs){let deadline=Date.now()+timeoutMs,attempt=0,lastErr;for(;;)try{let remainingMs=Math.max(1,deadline-Date.now());return await attemptConnect(socketPath,remainingMs)}catch(err){lastErr=err;let code=err.code;if(code!=="ECONNREFUSED"&&code!=="ECONNRESET"&&code!=="ENOENT"&&code!=="ETIMEDOUT"&&code!=="EAGAIN")throw new IpcTransportError(`UdsIpcClient: connect failed: ${lastErr.message}`,{cause:lastErr});if(Date.now()>=deadline)throw new IpcTransportError(`UdsIpcClient: connect timed out: ${lastErr.message}`,{cause:lastErr});let delay=Math.min(50,5*2**attempt++);await new Promise(resolve4=>setTimeout(resolve4,delay))}}__name(connectWithRetry,"connectWithRetry");function attemptConnect(socketPath,timeoutMs){return new Promise((resolve4,reject)=>{let conn=net.createConnection(socketPath),cleanup=__name(()=>{conn.removeListener("connect",onConnect),conn.removeListener("error",onError),clearTimeout(timer)},"cleanup"),onError=__name(err=>{cleanup(),conn.destroy(),reject(err)},"onError"),onConnect=__name(()=>{cleanup(),resolve4(conn)},"onConnect"),timer=setTimeout(()=>{cleanup(),conn.destroy();let err=new Error(`connect attempt timed out after ${timeoutMs}ms`);err.code="ETIMEDOUT",reject(err)},timeoutMs);conn.once("connect",onConnect),conn.once("error",onError)})}__name(attemptConnect,"attemptConnect");var DEFAULT_CONNECT_TIMEOUT_MS=6e4,SIGTERM_GRACE_MS=5e3,EXIT_ATTRIBUTION_GRACE_MS=250,instanceCounter=0,SpawnedProcessBackend=class _SpawnedProcessBackend{static{__name(this,"SpawnedProcessBackend")}options;current;starting;destroying=!1;exitError;respawn;ipcPath;logPath;constructor(options){this.options=options,this.respawn=options.respawn??!1;let instanceId=`${options.instancePrefix}-${process.pid}-${threadId}-${instanceCounter++}`;this.ipcPath=options.transport==="shm"?`${instanceId}.shm`:join4(tmpdir2(),`${instanceId}.sock`),this.logPath=options.logger?void 0:join4(tmpdir2(),`${instanceId}.log`)}static async spawn(options){if(options.respawn&&options.transport==="shm")throw new IpcError("respawn is not supported over the shm transport",!1);let backend=new _SpawnedProcessBackend(options);return backend.current=await backend.spawnIncarnation(),backend}getIpcPath(){return this.ipcPath}async call(input){let incarnation=await this.ensureUp();try{return await incarnation.client.call(input)}catch(err){throw await this.attributeCallError(incarnation,err)}}sendProcessSignal(signal){let child=this.current?.child;child&&child.exitCode===null&&child.signalCode===null&&child.kill(signal)}async destroy(){this.destroying=!0,await this.starting?.then(incarnation2=>{this.current=incarnation2},()=>{});let incarnation=this.current;if(this.current=void 0,!incarnation)return;await incarnation.client.destroy();let{child}=incarnation,killTimer;child.exitCode===null&&child.signalCode===null&&(child.kill("SIGTERM"),killTimer=setTimeout(()=>{child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL")},SIGTERM_GRACE_MS)),await incarnation.exitPromise,killTimer!==void 0&&clearTimeout(killTimer),child.stdout?.destroy(),child.stderr?.destroy(),child.removeAllListeners(),await this.cleanupIpcPath()}async ensureUp(){if(this.destroying)throw new IpcError(`${this.options.binaryName} backend destroyed`,!1);if(this.current)return this.current;if(this.exitError)throw this.exitError;return this.starting??=this.spawnIncarnation().then(incarnation=>(this.destroying||(this.current=incarnation),incarnation)).finally(()=>{this.starting=void 0}),await this.starting}async attributeCallError(incarnation,err){if(!incarnation.exitInfo&&!this.destroying&&await Promise.race([incarnation.exitPromise,new Promise(resolve4=>setTimeout(resolve4,EXIT_ATTRIBUTION_GRACE_MS))]),incarnation.exitInfo&&!this.destroying){let{code,signal}=incarnation.exitInfo;return new IpcProcessExitedError(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal})`+(this.logPath!==void 0?`; see logs: ${this.logPath}`:""),code,signal,this.logPath)}return err}async spawnIncarnation(){let{options}=this;options.transport==="uds"&&await rm3(this.ipcPath,{force:!0});let logFile=this.logPath!==void 0?await open(this.logPath,"a"):void 0,child=spawn(options.binaryPath,[...options.ipcPathArgs.map(arg=>arg==="{path}"?this.ipcPath:arg),...options.extraArgs??[]],{stdio:["ignore",options.logger?"pipe":logFile.fd,options.logger?"pipe":logFile.fd],env:{...process.env,...options.env??{}}});options.logger&&(child.stdout?.on("data",data=>options.logger?.(`[${options.binaryName} stdout] ${data.toString().trimEnd()}`)),child.stderr?.on("data",data=>options.logger?.(`[${options.binaryName} stderr] ${data.toString().trimEnd()}`)));let incarnation={child},exitPromise=new Promise(resolve4=>{child.on("exit",(code,signal)=>{incarnation.exitInfo={code,signal},this.onIncarnationExit(incarnation,code,signal),resolve4()})});incarnation.exitPromise=exitPromise;let childReadyFailure=new Promise((_,reject)=>{child.once("error",err=>{let code=err.code,retry2=code!=="ENOENT"&&code!=="EACCES";reject(new IpcSpawnError(`Failed to spawn ${options.binaryName}: ${err.message}`,retry2,{cause:err}))}),child.once("exit",(code,signal)=>{reject(new IpcSpawnError(`${options.binaryName} exited before IPC connection was ready (code=${code}, signal=${signal})`,!0))})});childReadyFailure.catch(()=>{}),logFile!==void 0&&await logFile.close();try{incarnation.client=await Promise.race([this.connectClient(),childReadyFailure])}catch(err){throw child.pid!==void 0&&(child.exitCode===null&&child.signalCode===null&&child.kill("SIGKILL"),await exitPromise),child.stdout?.destroy(),child.stderr?.destroy(),child.removeAllListeners(),await this.cleanupIpcPath(),this.asSpawnError(err)}return incarnation}onIncarnationExit(incarnation,code,signal){incarnation.client?.destroy(),!(this.destroying||this.current!==incarnation)&&(this.current=void 0,this.respawn?console.error(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal}); will respawn on next call`):(this.exitError=new IpcProcessExitedError(`${this.options.binaryName} exited unexpectedly (code=${code}, signal=${signal})`+(this.logPath!==void 0?`; see logs: ${this.logPath}`:""),code,signal,this.logPath),console.error(this.exitError.message)))}async connectClient(){let{options}=this,timeoutMs=options.connectTimeoutMs??DEFAULT_CONNECT_TIMEOUT_MS;if(options.transport==="uds")return await UdsIpcClient.connect(this.ipcPath,{connectTimeoutMs:timeoutMs});let deadline=Date.now()+timeoutMs,lastError;for(;Date.now()<=deadline;)try{return createNapiShmAsyncClient(this.ipcPath.replace(/\.shm$/,""),{clientId:options.clientId,customAddonPath:options.napiPath})}catch(err){lastError=err,await new Promise(resolve4=>setTimeout(resolve4,50))}let message=lastError instanceof Error?lastError.message:String(lastError);throw new IpcSpawnError(`Timed out connecting to ${this.options.binaryName}: ${message}`,!0,{cause:lastError})}asSpawnError(err){let logHint=this.logPath!==void 0?`; see logs: ${this.logPath}`:"";if(err instanceof IpcSpawnError)return new IpcSpawnError(err.message+logHint,err.retry,{cause:err.cause??err});let message=err instanceof Error?err.message:String(err);return new IpcSpawnError(`Failed to start ${this.options.binaryName}: ${message}${logHint}`,!0,{cause:err})}async cleanupIpcPath(){try{if(this.options.transport==="uds"&&await rm3(this.ipcPath,{force:!0}),this.options.transport==="shm"){let shmName=this.ipcPath.replace(/\.shm$/,"");for(let suffix of["_request","_response"])await rm3(`/dev/shm/${shmName}${suffix}`,{force:!0})}}catch{}}};import*as net2 from"node:net";import*as fs3 from"node:fs";var UdsIpcServer=class _UdsIpcServer{static{__name(this,"UdsIpcServer")}socketPath;server;nextClientId=0;connections=new Set;unlinkOnExit=__name(()=>{try{fs3.unlinkSync(this.socketPath)}catch{}},"unlinkOnExit");constructor(server,socketPath){this.socketPath=socketPath,this.server=server}static async listen(socketPath,handler){try{fs3.unlinkSync(socketPath)}catch{}let server=net2.createServer(),instance=new _UdsIpcServer(server,socketPath);return server.on("connection",conn=>instance.handleConnection(conn,handler)),await new Promise((resolve4,reject)=>{let onError=__name(err=>{server.removeListener("listening",onListening),reject(err)},"onError"),onListening=__name(()=>{server.removeListener("error",onError),resolve4()},"onListening");server.once("error",onError),server.once("listening",onListening),server.listen(socketPath)}),fs3.chmodSync(socketPath,384),process.on("exit",instance.unlinkOnExit),instance}async close(){for(let conn of this.connections)conn.destroy();this.connections.clear(),await new Promise(resolve4=>this.server.close(()=>resolve4())),process.removeListener("exit",this.unlinkOnExit);try{fs3.unlinkSync(this.socketPath)}catch{}}handleConnection(conn,handler){let clientId=this.nextClientId++;this.connections.add(conn),conn.on("close",()=>this.connections.delete(conn));let buffer=Buffer.alloc(0),chain=Promise.resolve();conn.on("data",chunk3=>{for(buffer=buffer.length===0?Buffer.from(chunk3):Buffer.concat([buffer,chunk3]);buffer.length>=4;){let len=buffer.readUInt32LE(0);if(len>268435456){conn.destroy(new Error(`UdsIpcServer: oversized frame (${len} bytes exceeds MAX_FRAME_SIZE)`));return}if(len<8){conn.destroy(new Error(`UdsIpcServer: ${len}-byte frame is shorter than the request-id field \u2014 IPC protocol mismatch (envelope ids); update the peer binary/package`));return}if(buffer.length<4+len)break;let requestId=buffer.readBigUInt64LE(4),payload=Buffer.from(buffer.subarray(12,4+len));buffer=buffer.subarray(4+len);let prev=chain;chain=(async()=>{await prev;try{let resp=await handler(clientId,payload),header=Buffer.allocUnsafe(12);header.writeUInt32LE(resp.length+8,0),header.writeBigUInt64LE(requestId,4),conn.write(header),conn.write(resp)}catch(err){conn.destroy(err)}})(),chain.catch(()=>{})}}),conn.on("error",()=>{})}};import{Decoder as Decoder3,Encoder as Encoder8}from"msgpackr";function toAvmSimulateResponse(o){if(o.result===void 0)throw new Error("Expected result in AvmSimulateResponse deserialization");return{result:o.result}}__name(toAvmSimulateResponse,"toAvmSimulateResponse");function toAvmSimulateWithHintsResponse(o){if(o.result===void 0)throw new Error("Expected result in AvmSimulateWithHintsResponse deserialization");return{result:o.result}}__name(toAvmSimulateWithHintsResponse,"toAvmSimulateWithHintsResponse");function fromAvmSimulate(o){if(o.inputs===void 0)throw new Error("Expected inputs in AvmSimulate serialization");return{inputs:o.inputs}}__name(fromAvmSimulate,"fromAvmSimulate");function fromAvmSimulateWithHints(o){if(o.inputs===void 0)throw new Error("Expected inputs in AvmSimulateWithHints serialization");return{inputs:o.inputs}}__name(fromAvmSimulateWithHints,"fromAvmSimulateWithHints");async function msgpackCall(backend,input){let inputBuffer=new Encoder8({useRecords:!1,variableMapSize:!0}).pack(input),encodedResult=await backend.call(inputBuffer);return new Decoder3({useRecords:!1}).unpack(encodedResult)}__name(msgpackCall,"msgpackCall");var AsyncApi=class{static{__name(this,"AsyncApi")}backend;createError;constructor(backend,createError=message=>new Error(message)){this.backend=backend,this.createError=createError}simulate(command){let msgpackCommand=fromAvmSimulate(command);return msgpackCall(this.backend,[["AvmSimulate",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="AvmErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="AvmSimulateResponse")throw new Error(`Expected variant name 'AvmSimulateResponse' but got '${variantName}'`);return toAvmSimulateResponse(result)})}simulateWithHints(command){let msgpackCommand=fromAvmSimulateWithHints(command);return msgpackCall(this.backend,[["AvmSimulateWithHints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="AvmErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="AvmSimulateWithHintsResponse")throw new Error(`Expected variant name 'AvmSimulateWithHintsResponse' but got '${variantName}'`);return toAvmSimulateWithHintsResponse(result)})}destroy(){return this.backend.destroy()}};import{createRequire as createRequire3}from"node:module";import*as fs4 from"node:fs";import*as path2 from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";var PLATFORM_TO_PACKAGE={"x86_64-linux":"@aztec-foundation/bb-avm-sim-linux-x64","x86_64-darwin":"@aztec-foundation/bb-avm-sim-darwin-x64","aarch64-linux":"@aztec-foundation/bb-avm-sim-linux-arm64","aarch64-darwin":"@aztec-foundation/bb-avm-sim-darwin-arm64"};function currentDir(){return path2.dirname(fileURLToPath2(import.meta.url))}__name(currentDir,"currentDir");function detectPlatform2(){return process.arch==="x64"&&process.platform==="linux"?"x86_64-linux":process.arch==="x64"&&process.platform==="darwin"?"x86_64-darwin":process.arch==="arm64"&&process.platform==="linux"?"aarch64-linux":process.arch==="arm64"&&process.platform==="darwin"?"aarch64-darwin":null}__name(detectPlatform2,"detectPlatform");function findArchPackageDir(platform2){let packageName=PLATFORM_TO_PACKAGE[platform2];try{let require2=createRequire3(import.meta.url);return path2.dirname(require2.resolve(packageName+"/package.json"))}catch{let siblingPackageDir=path2.join(currentDir(),"..","packages",packageName.split("/").pop());return fs4.existsSync(path2.join(siblingPackageDir,"package.json"))?siblingPackageDir:null}}__name(findArchPackageDir,"findArchPackageDir");function findAvmBinary(customPath){if(customPath)return fs4.existsSync(customPath)?path2.resolve(customPath):null;let envPath=process.env.BB_AVM_SIM_PATH;if(envPath)return fs4.existsSync(envPath)?path2.resolve(envPath):null;let platform2=detectPlatform2();if(!platform2)return null;let archDir=findArchPackageDir(platform2);if(archDir){let candidate=path2.join(archDir,"bb-avm-sim");if(fs4.existsSync(candidate))return candidate}return null}__name(findAvmBinary,"findAvmBinary");import{Decoder as Decoder4,Encoder as Encoder9}from"msgpackr";var AvmService=class _AvmService extends AsyncApi{static{__name(this,"AvmService")}spawnedBackend;constructor(spawnedBackend,createError){super(spawnedBackend,createError),this.spawnedBackend=spawnedBackend}static async spawn(options={}){let binaryPath=findAvmBinary(options.binaryPath);if(!binaryPath)throw new IpcSpawnError("bb-avm-sim binary not found",!1);let backend=await SpawnedProcessBackend.spawn({binaryPath,binaryName:"bb-avm-sim",instancePrefix:"avm",ipcPathArgs:["msgpack","run","--input","{path}"],transport:options.transport??"uds",logger:options.logger,connectTimeoutMs:options.connectTimeoutMs,env:options.env,extraArgs:options.extraArgs,respawn:options.respawn});return new _AvmService(backend,options.createError)}getIpcPath(){return this.spawnedBackend.getIpcPath()}sendProcessSignal(signal){this.spawnedBackend.sendProcessSignal(signal)}};function assertU64(value,ctx){if(typeof value=="bigint"){if(value<0n||value>BigInt(Number.MAX_SAFE_INTEGER))throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return Number(value)}if(!Number.isSafeInteger(value)||value<0)throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return value}__name(assertU64,"assertU64");function assertBin32(value,ctx){if(value.length!==32)throw new Error(`${ctx}: expected 32 bytes, got ${value.length}`);return value}__name(assertBin32,"assertBin32");function toCdbGetContractInstance(o){if(o.address===void 0)throw new Error("Expected address in CdbGetContractInstance deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetContractInstance deserialization");return{address:assertBin32(o.address,"o.address"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetContractInstance,"toCdbGetContractInstance");function toCdbGetContractClass(o){if(o.classId===void 0)throw new Error("Expected classId in CdbGetContractClass deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetContractClass deserialization");return{classId:assertBin32(o.classId,"o.classId"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetContractClass,"toCdbGetContractClass");function toCdbGetBytecodeCommitment(o){if(o.classId===void 0)throw new Error("Expected classId in CdbGetBytecodeCommitment deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetBytecodeCommitment deserialization");return{classId:assertBin32(o.classId,"o.classId"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetBytecodeCommitment,"toCdbGetBytecodeCommitment");function toCdbGetDebugFunctionName(o){if(o.address===void 0)throw new Error("Expected address in CdbGetDebugFunctionName deserialization");if(o.selector===void 0)throw new Error("Expected selector in CdbGetDebugFunctionName deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbGetDebugFunctionName deserialization");return{address:assertBin32(o.address,"o.address"),selector:assertBin32(o.selector,"o.selector"),forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbGetDebugFunctionName,"toCdbGetDebugFunctionName");function toCdbAddContracts(o){if(o.contractDeploymentData===void 0)throw new Error("Expected contractDeploymentData in CdbAddContracts deserialization");if(o.forkId===void 0)throw new Error("Expected forkId in CdbAddContracts deserialization");return{contractDeploymentData:o.contractDeploymentData,forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbAddContracts,"toCdbAddContracts");function toCdbCreateCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbCreateCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbCreateCheckpoint,"toCdbCreateCheckpoint");function toCdbCommitCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbCommitCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbCommitCheckpoint,"toCdbCommitCheckpoint");function toCdbRevertCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in CdbRevertCheckpoint deserialization");return{forkId:assertU64(o.forkId,"o.forkId")}}__name(toCdbRevertCheckpoint,"toCdbRevertCheckpoint");function fromCdbGetContractInstanceResponse(o){return{instance:o.instance??null}}__name(fromCdbGetContractInstanceResponse,"fromCdbGetContractInstanceResponse");function fromCdbGetContractClassResponse(o){return{contractClass:o.contractClass??null}}__name(fromCdbGetContractClassResponse,"fromCdbGetContractClassResponse");function fromCdbGetBytecodeCommitmentResponse(o){return{commitment:o.commitment!=null?assertBin32(o.commitment,"o.commitment"):null}}__name(fromCdbGetBytecodeCommitmentResponse,"fromCdbGetBytecodeCommitmentResponse");function fromCdbGetDebugFunctionNameResponse(o){return{name:o.name??null}}__name(fromCdbGetDebugFunctionNameResponse,"fromCdbGetDebugFunctionNameResponse");function fromCdbAddContractsResponse(o){return{}}__name(fromCdbAddContractsResponse,"fromCdbAddContractsResponse");function fromCdbCreateCheckpointResponse(o){return{}}__name(fromCdbCreateCheckpointResponse,"fromCdbCreateCheckpointResponse");function fromCdbCommitCheckpointResponse(o){return{}}__name(fromCdbCommitCheckpointResponse,"fromCdbCommitCheckpointResponse");function fromCdbRevertCheckpointResponse(o){return{}}__name(fromCdbRevertCheckpointResponse,"fromCdbRevertCheckpointResponse");import{Decoder as Decoder5,Encoder as Encoder10}from"msgpackr";async function dispatch(handler,commandName,payload){try{switch(commandName){case"CdbGetContractInstance":{let cmd=toCdbGetContractInstance(payload),result=await handler.getContractInstance(cmd);return["CdbGetContractInstanceResponse",fromCdbGetContractInstanceResponse(result)]}case"CdbGetContractClass":{let cmd=toCdbGetContractClass(payload),result=await handler.getContractClass(cmd);return["CdbGetContractClassResponse",fromCdbGetContractClassResponse(result)]}case"CdbGetBytecodeCommitment":{let cmd=toCdbGetBytecodeCommitment(payload),result=await handler.getBytecodeCommitment(cmd);return["CdbGetBytecodeCommitmentResponse",fromCdbGetBytecodeCommitmentResponse(result)]}case"CdbGetDebugFunctionName":{let cmd=toCdbGetDebugFunctionName(payload),result=await handler.getDebugFunctionName(cmd);return["CdbGetDebugFunctionNameResponse",fromCdbGetDebugFunctionNameResponse(result)]}case"CdbAddContracts":{let cmd=toCdbAddContracts(payload),result=await handler.addContracts(cmd);return["CdbAddContractsResponse",fromCdbAddContractsResponse(result)]}case"CdbCreateCheckpoint":{let cmd=toCdbCreateCheckpoint(payload),result=await handler.createCheckpoint(cmd);return["CdbCreateCheckpointResponse",fromCdbCreateCheckpointResponse(result)]}case"CdbCommitCheckpoint":{let cmd=toCdbCommitCheckpoint(payload),result=await handler.commitCheckpoint(cmd);return["CdbCommitCheckpointResponse",fromCdbCommitCheckpointResponse(result)]}case"CdbRevertCheckpoint":{let cmd=toCdbRevertCheckpoint(payload),result=await handler.revertCheckpoint(cmd);return["CdbRevertCheckpointResponse",fromCdbRevertCheckpointResponse(result)]}default:return["CdbErrorResponse",{message:`Unknown command: ${commandName}`}]}}catch(err){return["CdbErrorResponse",{message:err?.message??String(err)}]}}__name(dispatch,"dispatch");var requestDecoder=new Decoder5({useRecords:!1}),responseEncoder=new Encoder10({useRecords:!1,variableMapSize:!0});async function handleRequest(handler,requestBytes){let commandName,payload;try{if([[commandName,payload]]=requestDecoder.unpack(requestBytes),typeof commandName!="string")throw new Error("expected [name, payload] request framing")}catch(err){return responseEncoder.pack(["CdbErrorResponse",{message:`Malformed request: ${err?.message??String(err)}`}])}let[respName,respPayload]=await dispatch(handler,commandName,payload??{});return responseEncoder.pack([respName,respPayload])}__name(handleRequest,"handleRequest");import{Buffer as Buffer78}from"buffer";import{Decoder as Decoder6,Encoder as Encoder11}from"msgpackr";import*as os from"node:os";import*as path3 from"node:path";import{threadId as threadId2}from"node:worker_threads";var _computedKey43,encoder2=new Encoder11({useRecords:!1}),decoder2=new Decoder6({useRecords:!1}),instanceCounter2=0;function toFieldBuffer(field){return field.toBuffer()}__name(toFieldBuffer,"toFieldBuffer");function serializeContractInstance(instance){return{salt:toFieldBuffer(instance.salt),deployer:toFieldBuffer(instance.deployer),currentContractClassId:toFieldBuffer(instance.currentContractClassId),originalContractClassId:toFieldBuffer(instance.originalContractClassId),initializationHash:toFieldBuffer(instance.initializationHash),immutablesHash:toFieldBuffer(instance.immutablesHash),publicKeys:{npkMHash:toFieldBuffer(instance.publicKeys.npkMHash),ivpkM:{x:toFieldBuffer(instance.publicKeys.ivpkM.x),y:toFieldBuffer(instance.publicKeys.ivpkM.y)},ovpkMHash:toFieldBuffer(instance.publicKeys.ovpkMHash),tpkMHash:toFieldBuffer(instance.publicKeys.tpkMHash),mspkMHash:toFieldBuffer(instance.publicKeys.mspkMHash),fbpkMHash:toFieldBuffer(instance.publicKeys.fbpkMHash)}}}__name(serializeContractInstance,"serializeContractInstance");function serializeContractClass(contractClass){return{id:toFieldBuffer(contractClass.id),artifactHash:toFieldBuffer(contractClass.artifactHash),privateFunctionsRoot:toFieldBuffer(contractClass.privateFunctionsRoot),packedBytecode:contractClass.packedBytecode}}__name(serializeContractClass,"serializeContractClass");_computedKey43=Symbol.asyncDispose;var CdbIpcServer=class{static{__name(this,"CdbIpcServer")}ipcPath;server;log;forks=new Map;constructor(){this.log=createLogger("cdb-ipc-server"),this.ipcPath=path3.join(os.tmpdir(),`cdb-ts-${process.pid}-${threadId2}-${instanceCounter2++}.sock`),this.server=UdsIpcServer.listen(this.ipcPath,(_clientId,request)=>handleRequest(this,request)),this.server.then(()=>this.log.debug(`CDB IPC server listening on ${this.ipcPath}`),err=>this.log.error(`CDB IPC server failed to listen on ${this.ipcPath}`,{err}))}registerFork(forkId,contractsDB,timestamp){this.forks.set(forkId,{db:contractsDB,timestamp})}unregisterFork(forkId){this.forks.delete(forkId)}async close(){await(await this.server.catch(()=>{}))?.close()}async[_computedKey43](){await this.close()}getFork(forkId){let fork=this.forks.get(forkId);if(!fork){let registered=Array.from(this.forks.keys()).sort((a,b)=>a-b);throw new Error(`CDB server: no contracts DB registered for forkId ${forkId} (registered=[${registered.join(",")}])`)}return fork}async getContractInstance(command){let{db,timestamp}=this.getFork(command.forkId),address=AztecAddress.fromBuffer(Buffer78.from(command.address)),instance=await db.getContractInstance(address,timestamp);return{instance:instance?encoder2.encode(serializeContractInstance(instance)):null}}async getContractClass(command){let{db}=this.getFork(command.forkId),classId=Fr.fromBuffer(Buffer78.from(command.classId)),contractClass=await db.getContractClass(classId);return{contractClass:contractClass?encoder2.encode(serializeContractClass(contractClass)):null}}async getBytecodeCommitment(command){let{db}=this.getFork(command.forkId),classId=Fr.fromBuffer(Buffer78.from(command.classId)),commitment=await db.getBytecodeCommitment(classId);return{commitment:commitment?toFieldBuffer(commitment):null}}async getDebugFunctionName(command){let{db}=this.getFork(command.forkId),address=AztecAddress.fromBuffer(Buffer78.from(command.address)),selectorField=Fr.fromBuffer(Buffer78.from(command.selector)),selector=FunctionSelector.fromFieldOrUndefined(selectorField);return{name:(selector?await db.getDebugFunctionName(address,selector):void 0)??null}}addContracts(command){let{db}=this.getFork(command.forkId),contractDeploymentData=ContractDeploymentData.fromPlainObject(decoder2.decode(command.contractDeploymentData));return db.addContractsFromLogs(contractDeploymentData),Promise.resolve({})}createCheckpoint(command){let{db}=this.getFork(command.forkId);return db.createCheckpoint(),Promise.resolve({})}commitCheckpoint(command){let{db}=this.getFork(command.forkId);return db.commitCheckpoint(),Promise.resolve({})}revertCheckpoint(command){let{db}=this.getFork(command.forkId);return db.revertCheckpoint(),Promise.resolve({})}};var _computedKey44;function isProcessFailure(err){return isRetryableError(err)}__name(isProcessFailure,"isProcessFailure");async function abortableSleep(ms,signal){if(!signal)return sleep(ms);let onAbort,aborted2=new Promise(resolve4=>{onAbort=resolve4,signal.addEventListener("abort",onAbort,{once:!0})});try{await Promise.race([sleep(ms),aborted2])}finally{signal.removeEventListener("abort",onAbort)}}__name(abortableSleep,"abortableSleep");var CANCEL_KILL_GRACE_MS=5e3;_computedKey44=Symbol.asyncDispose;var AvmSimulatorPool=class _AvmSimulatorPool{static{__name(this,"AvmSimulatorPool")}options;slots;available;waiters;createdCount;destroyed;log;maxSize;cdbServer;spawnRetryIntervalMs;spawnProcess;constructor(options){this.options=options,this.slots=[],this.available=[],this.waiters=[],this.createdCount=0,this.destroyed=!1,this.log=createLogger("simulator:avm-pool"),this.maxSize=options.maxSize??parseInt(getEnv().AVM_MAX_CONCURRENT_SIMULATIONS??"4",10),this.cdbServer=new CdbIpcServer,this.spawnRetryIntervalMs=options.spawnRetryIntervalMs??1e3,this.spawnProcess=options.spawnProcess??(spawnOptions=>AvmSimulatorProcess.spawn(spawnOptions))}static async spawn(options){let pool=new _AvmSimulatorPool(options);return await pool.prewarm(),pool}async[_computedKey44](){await this.destroy()}async simulate(inputBuffer,context2,signal){this.cdbServer.registerFork(context2.forkId,context2.contractsDB,context2.timestamp);try{return await this.runOnPool(simulator=>simulator.simulate(inputBuffer,signal),signal)}finally{this.cdbServer.unregisterFork(context2.forkId)}}async simulateWithHints(inputBuffer){return await this.runOnPool(simulator=>simulator.simulateWithHints(inputBuffer))}async destroy(){this.destroyed=!0;for(let waiter of this.waiters.splice(0))waiter.reject(new Error("AVM simulator pool destroyed"));await Promise.all(this.slots.map(slot=>slot.destroy())),this.slots=[],this.available=[],this.createdCount=0,await this.cdbServer.close(),this.log.info("AVM simulator pool destroyed")}async prewarm(count2=1){let target2=Math.min(count2,this.maxSize),created=[];for(;this.createdCount<target2;)created.push(await this.checkout());for(let simulator of created)this.return(simulator)}async runOnPool(fn,signal){for(let attempt=0;;attempt++){let simulator=await this.checkout(signal);try{return await fn(simulator)}catch(err){if(!isProcessFailure(err)||signal?.aborted)throw err;if(attempt>0){let message=err instanceof Error?err.message:String(err);throw new Error(`AVM simulator process died twice running this simulation; attributing the failure to the input: ${message}`,{cause:err})}this.log.warn("AVM process died during simulation; re-issuing once on the respawned process",{err})}finally{this.return(simulator)}}}async checkout(signal){if(this.destroyed)throw new Error("AVM simulator pool destroyed");let idx=this.available.pop();return idx!==void 0?this.slots[idx]:this.createdCount<this.maxSize?await this.createSlot(signal):new Promise((resolve4,reject)=>{let waiter={resolve:resolve4,reject};if(signal){let onAbort=__name(()=>{let at=this.waiters.indexOf(waiter);at>=0&&(this.waiters.splice(at,1),reject(new AbortError("AVM checkout aborted")))},"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),waiter.resolve=simulator=>{signal.removeEventListener("abort",onAbort),resolve4(simulator)},waiter.reject=err=>{signal.removeEventListener("abort",onAbort),reject(err)}}this.waiters.push(waiter)})}return(simulator){let waiter=this.waiters.shift();if(waiter)waiter.resolve(simulator);else{let idx=this.slots.indexOf(simulator);idx>=0&&this.available.push(idx)}}async createSlot(signal){this.createdCount++;try{let simulator=await this.spawnUntilUp(signal);return this.slots.push(simulator),this.log.debug(`Created AVM pool slot (${this.createdCount}/${this.maxSize})`),simulator}catch(err){throw this.createdCount--,err}}async spawnUntilUp(signal){for(let failures=0;;failures++){if(this.destroyed)throw new Error("AVM simulator pool destroyed");if(signal?.aborted)throw new AbortError("AVM process spawn aborted");try{return await this.spawnProcess({binaryPath:this.options.avmBinaryPath,wsdbIpcPath:this.options.wsdbIpcPath,cdbIpcPath:this.cdbServer.ipcPath,logger:this.options.logger})}catch(err){if(!isProcessFailure(err))throw err;this.log.warn(`Failed to spawn AVM process (attempt ${failures+1}); retrying in ${this.spawnRetryIntervalMs}ms`,{err}),await abortableSleep(this.spawnRetryIntervalMs,signal)}}}},AvmSimulatorProcess=class _AvmSimulatorProcess{static{__name(this,"AvmSimulatorProcess")}service;constructor(service){this.service=service}static async spawn(options){let service=await AvmService.spawn({binaryPath:options.binaryPath,transport:"uds",logger:options.logger,extraArgs:["--wsdb",options.wsdbIpcPath,"--cdb",options.cdbIpcPath],respawn:!0});return new _AvmSimulatorProcess(service)}async simulate(inputBuffer,signal){let killTimer,onAbort=__name(()=>{this.service.sendProcessSignal("SIGUSR1"),killTimer=setTimeout(()=>this.service.sendProcessSignal("SIGKILL"),CANCEL_KILL_GRACE_MS)},"onAbort");signal?.aborted&&onAbort(),signal?.addEventListener("abort",onAbort,{once:!0});try{return(await this.service.simulate({inputs:inputBuffer})).result}finally{signal?.removeEventListener("abort",onAbort),killTimer!==void 0&&clearTimeout(killTimer)}}async simulateWithHints(inputBuffer){return(await this.service.simulateWithHints({inputs:inputBuffer})).result}async destroy(){await this.service.destroy()}};import{strict as assert3}from"assert";var ContractsDbCheckpoint=class _ContractsDbCheckpoint{static{__name(this,"ContractsDbCheckpoint")}instances=new Map;classes=new Map;bytecodeCommitments=new Map;addInstance(address,instance){this.instances.set(address.toString(),instance)}addClass(classId,contractClass){this.classes.set(classId.toString(),contractClass)}addBytecodeCommitment(classId,commitment){this.bytecodeCommitments.set(classId.toString(),commitment)}getInstance(address){return this.instances.get(address.toString())}getClass(classId){return this.classes.get(classId.toString())}getBytecodeCommitment(classId){return this.bytecodeCommitments.get(classId.toString())}fork(){let copy=new _ContractsDbCheckpoint;return this.instances.forEach((value,key)=>copy.instances.set(key,value)),this.classes.forEach((value,key)=>copy.classes.set(key,value)),this.bytecodeCommitments.forEach((value,key)=>copy.bytecodeCommitments.set(key,value)),copy}};var SideEffectReadError=class extends Error{static{__name(this,"SideEffectReadError")}constructor(message){super(message),this.name="SideEffectReadError"}},IndexOutOfRangeError=class extends SideEffectReadError{static{__name(this,"IndexOutOfRangeError")}constructor(tree,index,limit){super(`Attempting to read index ${index} of ${tree} tree with maximum ${limit} leaves`),this.name="IndexOutOfRangeError"}},NoteHashIndexOutOfRangeError=class extends IndexOutOfRangeError{static{__name(this,"NoteHashIndexOutOfRangeError")}constructor(index){super("note hash",index,4398046511104),this.name="NoteHashIndexOutOfRangeError"}},L1ToL2MessageIndexOutOfRangeError=class extends IndexOutOfRangeError{static{__name(this,"L1ToL2MessageIndexOutOfRangeError")}constructor(index){super("l1 to l2 message",index,68719476736),this.name="L1ToL2MessageIndexOutOfRangeError"}};var PublicContractsDB=class{static{__name(this,"PublicContractsDB")}dataSource;contractStateStack;log;constructor(dataSource,bindings){this.dataSource=dataSource,this.contractStateStack=[new ContractsDbCheckpoint],this.log=createLogger("simulator:contracts-data-source",bindings)}addContractsFromLogs(contractDeploymentData){let currentState=this.getCurrentState();this.addContractClassesFromEvents(ContractClassPublishedEvent.extractContractClassEvents(contractDeploymentData.getContractClassLogs()),currentState),this.addContractInstancesFromEvents(ContractInstancePublishedEvent.extractContractInstanceEvents(contractDeploymentData.getPrivateLogs()),currentState)}addNewContracts(tx){let contractDeploymentData=AllContractDeploymentData.fromTx(tx);this.addContractsFromLogs(contractDeploymentData.getNonRevertibleContractDeploymentData()),this.addContractsFromLogs(contractDeploymentData.getRevertibleContractDeploymentData())}addContracts(contractInstances){let currentState=this.getCurrentState();for(let instance of contractInstances??[])currentState.addInstance(instance.address,instance)}createCheckpoint(){let newState=this.getCurrentState().fork();this.contractStateStack.push(newState)}commitCheckpoint(){if(this.contractStateStack.length<=1)throw new Error("No checkpoint to commit");let topState=this.contractStateStack.pop();this.contractStateStack[this.contractStateStack.length-1]=topState}commitCheckpointOkIfNone(){if(this.contractStateStack.length<=1)return;let topState=this.contractStateStack.pop();this.contractStateStack[this.contractStateStack.length-1]=topState}revertCheckpoint(){if(this.contractStateStack.length<=1)throw new Error("No checkpoint to revert");this.contractStateStack.pop()}getCurrentState(){return this.contractStateStack[this.contractStateStack.length-1]}async getContractInstance(address,timestamp){return this.getCurrentState().getInstance(address)??await this.dataSource.getContract(address,timestamp)}async getContractClass(contractClassId){return this.getCurrentState().getClass(contractClassId)??await this.dataSource.getContractClass(contractClassId)}async getBytecodeCommitment(contractClassId){let currentState=this.getCurrentState(),commitment=currentState.getBytecodeCommitment(contractClassId)??await this.dataSource.getBytecodeCommitment(contractClassId);if(commitment!==void 0)return commitment;let contractClass=await this.getContractClass(contractClassId);if(contractClass===void 0)return;let value=await computePublicBytecodeCommitment(contractClass.packedBytecode);return currentState.addBytecodeCommitment(contractClassId,value),value}async getDebugFunctionName(address,selector){return await this.dataSource.getDebugFunctionName(address,selector)}addContractClassesFromEvents(contractClassEvents,state){for(let event of contractClassEvents){this.log.debug(`Adding class ${event.contractClassId.toString()} to contract state`);let contractClass=event.toContractClassPublic();state.addClass(event.contractClassId,contractClass)}}addContractInstancesFromEvents(contractInstanceEvents,state){contractInstanceEvents.forEach(e2=>{this.log.debug(`Adding instance ${e2.address.toString()} with class ${e2.contractClassId.toString()} to contract state`),state.addInstance(e2.address,e2.toContractInstance())})}},PublicTreesDB=class{static{__name(this,"PublicTreesDB")}db;logger;constructor(db,bindings){this.db=db,this.logger=createLogger("simulator:public-trees-db",bindings)}async storageRead(contract,slot){let timer=new Timer,leafSlot=(await computePublicDataTreeLeafSlot(contract,slot)).toBigInt(),lowLeafResult=await this.db.getPreviousValueIndex(MerkleTreeId.PUBLIC_DATA_TREE,leafSlot);if(!lowLeafResult)throw new Error("Low leaf not found");await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);let preimage=await this.db.getLeafPreimage(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index),result=lowLeafResult.alreadyPresent?preimage.leaf.value:Fr.ZERO;return this.logger.debug(`Storage read (contract=${contract}, slot=${slot}, value=${result})`,{eventName:"public-db-access",duration:timer.ms(),operation:"storage-read"}),result}async storageWrite(contract,slot,newValue){let timer=new Timer,leafSlot=await computePublicDataTreeLeafSlot(contract,slot),publicDataWrite=new PublicDataWrite(leafSlot,newValue);await this.db.sequentialInsert(MerkleTreeId.PUBLIC_DATA_TREE,[publicDataWrite.toBuffer()]),this.logger.debug(`Storage write (contract=${contract}, slot=${slot}, value=${newValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"storage-write"})}async getL1ToL2LeafValue(leafIndex){let timer=new Timer;if(leafIndex>68719476736)throw new L1ToL2MessageIndexOutOfRangeError(Number(leafIndex));let leafValue=await this.db.getLeafValue(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,leafIndex);return assert3(leafValue!==void 0,"Unexpected null response from l1 to l2 message tree"),await this.db.getSiblingPath(MerkleTreeId.L1_TO_L2_MESSAGE_TREE,leafIndex),this.logger.debug(`Fetched L1 to L2 message leaf value (leafIndex=${leafIndex}, value=${leafValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"get-l1-to-l2-message-leaf-value"}),leafValue}async getNoteHash(leafIndex){let timer=new Timer;if(leafIndex>4398046511104)throw new NoteHashIndexOutOfRangeError(Number(leafIndex));let leafValue=await this.db.getLeafValue(MerkleTreeId.NOTE_HASH_TREE,leafIndex);return assert3(leafValue!==void 0,"Unexpected null response from note hash tree"),await this.db.getSiblingPath(MerkleTreeId.NOTE_HASH_TREE,leafIndex),this.logger.debug(`Fetched note hash leaf value (leafIndex=${leafIndex}, value=${leafValue})`,{eventName:"public-db-access",duration:timer.ms(),operation:"get-note-hash"}),leafValue}async writeNoteHash(noteHash){let timer=new Timer;await this.db.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,[noteHash]),this.logger.debug(`Wrote note hash (noteHash=${noteHash})`,{eventName:"public-db-access",duration:timer.ms(),operation:"write-note-hash"})}async checkNullifierExists(nullifier){let timer=new Timer,lowLeafResult=await this.db.getPreviousValueIndex(MerkleTreeId.NULLIFIER_TREE,nullifier.toBigInt());if(!lowLeafResult)throw new Error("Low leaf not found");await this.db.getSiblingPath(MerkleTreeId.NULLIFIER_TREE,lowLeafResult.index),await this.db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,lowLeafResult.index);let exists=lowLeafResult.alreadyPresent;return this.logger.debug(`Checked nullifier exists (nullifier=${nullifier}, exists=${exists})`,{eventName:"public-db-access",duration:timer.ms(),operation:"check-nullifier-exists"}),exists}async writeNullifier(siloedNullifier){let timer=new Timer;await this.db.sequentialInsert(MerkleTreeId.NULLIFIER_TREE,[siloedNullifier.toBuffer()]),this.logger.debug(`Wrote nullifier (nullifier=${siloedNullifier})`,{eventName:"public-db-access",duration:timer.ms(),operation:"write-nullifier"})}async padTree(treeId,leavesToInsert){let timer=new Timer;switch(treeId){case MerkleTreeId.NULLIFIER_TREE:await this.db.batchInsert(treeId,Array(leavesToInsert).fill(NullifierLeaf.empty().toBuffer()),6);break;case MerkleTreeId.PUBLIC_DATA_TREE:await this.db.batchInsert(treeId,Array(leavesToInsert).fill(PublicDataTreeLeaf.empty().toBuffer()),6);break;case MerkleTreeId.L1_TO_L2_MESSAGE_TREE:case MerkleTreeId.NOTE_HASH_TREE:await this.db.appendLeaves(treeId,Array(leavesToInsert).fill(Fr.ZERO));break;default:throw new Error(`Padding not supported for tree ${treeId}`)}this.logger.debug(`Padded tree (tree=${getTreeName(treeId)}, leavesToInsert=${leavesToInsert})`,{eventName:"public-db-access",duration:timer.ms(),operation:"pad-tree"})}async createCheckpoint(){await this.db.createCheckpoint()}async commitCheckpoint(){await this.db.commitCheckpoint()}async revertCheckpoint(){await this.db.revertCheckpoint()}async getTreeSnapshots(){let stateReference=await this.db.getStateReference();return new TreeSnapshots(stateReference.l1ToL2MessageTree,stateReference.partial.noteHashTree,stateReference.partial.nullifierTree,stateReference.partial.publicDataTree)}};var _computedKey45;_computedKey45=Symbol.asyncDispose;var GuardedMerkleTreeOperations=class{static{__name(this,"GuardedMerkleTreeOperations")}target;isStopped;serialQueue;constructor(target2){this.target=target2,this.isStopped=!1,this.serialQueue=new SerialQueue,this.serialQueue.start()}guard(){if(this.isStopped)throw new Error("Merkle tree access has been stopped")}guardAndPush(fn){return this.guard(),this.serialQueue.put(()=>(this.guard(),fn()))}getUnderlyingFork(){return this.target}async stop(){return await this.serialQueue.put(()=>(this.isStopped=!0,Promise.resolve())),this.serialQueue.end()}appendLeaves(treeId,leaves){return this.guardAndPush(()=>this.target.appendLeaves(treeId,leaves))}updateArchive(header){return this.guardAndPush(()=>this.target.updateArchive(header))}batchInsert(treeId,leaves,subtreeHeight){return this.guardAndPush(()=>this.target.batchInsert(treeId,leaves,subtreeHeight))}sequentialInsert(treeId,leaves){return this.guardAndPush(()=>this.target.sequentialInsert(treeId,leaves))}close(){return this.guardAndPush(()=>this.target.close())}async[_computedKey45](){await this.close()}getTreeInfo(treeId){return this.guardAndPush(()=>this.target.getTreeInfo(treeId))}getStateReference(){return this.guardAndPush(()=>this.target.getStateReference())}getInitialHeader(){return this.target.getInitialHeader()}getRevision(){return this.target.getRevision()}getIpcPath(){return this.target.getIpcPath()}getSiblingPath(treeId,index){return this.guardAndPush(()=>this.target.getSiblingPath(treeId,index))}getPreviousValueIndex(treeId,value){return this.guardAndPush(()=>this.target.getPreviousValueIndex(treeId,value))}getLeafPreimage(treeId,index){return this.guardAndPush(()=>this.target.getLeafPreimage(treeId,index))}findLeafIndices(treeId,values){return this.guardAndPush(()=>this.target.findLeafIndices(treeId,values))}findLeafIndicesAfter(treeId,values,startIndex){return this.guardAndPush(()=>this.target.findLeafIndicesAfter(treeId,values,startIndex))}getLeafValue(treeId,index){return this.guardAndPush(()=>this.target.getLeafValue(treeId,index))}getBlockNumbersForLeafIndices(treeId,leafIndices){return this.guardAndPush(()=>this.target.getBlockNumbersForLeafIndices(treeId,leafIndices))}createCheckpoint(){return this.guardAndPush(()=>this.target.createCheckpoint())}commitCheckpoint(){return this.guardAndPush(()=>this.target.commitCheckpoint())}revertCheckpoint(){return this.guardAndPush(()=>this.target.revertCheckpoint())}commitAllCheckpointsTo(depth){return this.guardAndPush(()=>this.target.commitAllCheckpointsTo(depth))}revertAllCheckpointsTo(depth){return this.guardAndPush(()=>this.target.revertAllCheckpointsTo(depth))}findSiblingPaths(treeId,values){return this.guardAndPush(()=>this.target.findSiblingPaths(treeId,values))}};var FeeJuice_default={file_map:{},functions:[{abi:{abi_version:1,error_types:{"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"},"8637882143979902881":{error_kind:"string",string:"Function _increase_public_balance can only be called by the same contract"}},parameters:[{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"}],return_type:null},bytecode:"JwACBAEoAAABBIBGJwAABEYlAAAASicCBAQCJwIFBAAfCgAEAAUARBwARUUGLQhEAi0IRQMlAAAAcCcCAgRGJwIDBAA7DgADAAIsAABDADBkTnLhMaApuFBFtoGBWF0oM+hIeblwkUPh9ZPwAAAAJh4CAAQBCiIEQwUWCgUGHAoGBwAEKgcEBicCBAEACioFBAckAgAHAAAAoycCCAQAPAYIAR4CAAUACioGBQckAgAHAAAAuiUAAAG+JwIFAAEpAgAGAO9SU00rAgAHAAAAAAAAAAADAAAAAAAAAAAtCAEIJwIJBAUACAEJAScDCAQBACIIAgktCgkKLQ4GCgAiCgIKLQ4FCgAiCgIKLQ4CCgAiCgIKLQ4HCi0IAQInAgUEBQAIAQUBJwMCBAEAIggCBQAiAgIGPw8ABQAGJwIFBAEAKgIFBi0LBgYnAgUAAAoqBgUHCioHBAUkAgAFAAABZSUAAAHQHgIABAAvKgAGAAQABRwKBQcGHAoHBAAcCgQFBgAqBQMEDioFBAckAgAHAAABmCUAAAHiLQsIAwAiAwIDLQ4DCC0LAgMAIgMCAy0OAwIcCgQCADAKAAIABiYqAQABBXff7AtjnJehPAQCASYqAQABBbq7IdeCMxhkPAQCASYqAQABBdAH6/TLxmeQPAQCASY=",custom_attributes:["abi_public","abi_only_self"],debug_symbols:"",is_unconstrained:!0,name:"_increase_public_balance"},{abi:{abi_version:1,error_types:{"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"15860392472534760515":{error_kind:"string",string:"Function balance_of_public can only be called statically"}},parameters:[{name:"owner",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"}],return_type:{abi_type:{kind:"integer",sign:"unsigned",width:128},visibility:"public"}},bytecode:"JwACBAEoAAABBIBFJwAABEUnAgMEAScCBAQAHwoAAwAEAEMtCEMCJQAAAEAtAgJEJwIDBEQnAgQEATsOAAQAAx4CAAMJJwIEAQEkAgADAAAAVyUAAAEoKQIAAwDvUlNNJwIEAAErAgAFAAAAAAAAAAADAAAAAAAAAAAtCAEGJwIHBAUACAEHAScDBgQBACIGAgctCgcILQ4DCAAiCAIILQ4ECAAiCAIILQ4CCAAiCAIILQ4FCC0IAQInAgMEBQAIAQMBJwMCBAEAIgYCAwAiAgIEPw8AAwAEJwIDBAEAKgIDBC0LBAQnAgIAAAoqBAIDJwICAQAKKgMCBSQCAAUAAAEHJQAAAToeAgACAC8qAAQAAgADHAoDBAYcCgQCABwKAgMGLQoDAiYqAQABBdwbbuv7trxDPAQCASYqAQABBbq7IdeCMxhkPAQCASY=",custom_attributes:["abi_public","abi_view"],debug_symbols:"",is_unconstrained:!0,name:"balance_of_public"},{abi:{abi_version:1,error_types:{"1080336462466469436":{error_kind:"string",string:"Function check_balance can only be called statically"},"13455385521185560676":{error_kind:"string",string:"Storage slot 0 not allowed. Storage slots must start from 1."},"9543832133280402246":{error_kind:"string",string:"Balance too low"}},parameters:[{name:"fee_limit",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"}],return_type:null},bytecode:"JwACBAEoAAABBIBFJwAABEUlAAAARicCAwQBJwIEBAAfCgADAAQARBwAREQGLQhEAiUAAABsJwICBEUnAgMEADsOAAMAAiwAAEMAMGROcuExoCm4UEW2gYFYXSgz6Eh5uXCRQ+H1k/AAAAAmHgIAAwknAgQBASQCAAMAAACDJQAAAZUeAgADAQoiA0MEFgoEBRwKBQYABCoGAwUnAgMBAAoqBAMGJAIABgAAALYnAgcEADwGBwEpAgAEAO9SU00nAgYAASsCAAcAAAAAAAAAAAMAAAAAAAAAAC0IAQgnAgkEBQAIAQkBJwMIBAEAIggCCS0KCQotDgQKACIKAgotDgYKACIKAgotDgUKACIKAgotDgcKLQgBBCcCBQQFAAgBBQEnAwQEAQAiCAIFACIEAgY/DwAFAAYnAgUEAQAqBAUGLQsGBicCBAAACioGBAUKKgUDBCQCAAQAAAFhJQAAAaceAgAEAC8qAAYABAAFHAoFBgYcCgYEABwKBAUGDCoFAgQKKgQDAiQCAAIAAAGUJQAAAbkmKgEAAQUO/iBJ6zdOPDwEAgEmKgEAAQW6uyHXgjMYZDwEAgEmKgEAAQWEcoDChCMLRjwEAgEm",custom_attributes:["abi_public","abi_view"],debug_symbols:"",is_unconstrained:!0,name:"check_balance"},{abi:{abi_version:1,error_types:{"11019205087382408538":{error_kind:"string",string:"Field failed to decompose into specified 4 limbs"},"12370419938245003393":{error_kind:"string",string:"Field failed to decompose into specified 36 limbs"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"5421095327929394772":{error_kind:"string",string:"attempt to bit-shift with overflow"},"6609888949476313245":{error_kind:"string",string:"Message not in state"}},parameters:[{name:"inputs",type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::context::inputs::PrivateContextInputs"},visibility:"private"},{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"},{name:"secret",type:{kind:"field"},visibility:"private"},{name:"message_leaf_index",type:{kind:"field"},visibility:"private"}],return_type:{abi_type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"min_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"is_fee_payer",type:{kind:"boolean"}},{name:"expiration_timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_non_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"note_hash_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifier_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"key_validation_requests_and_separators",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"request",type:{fields:[{name:"pk_m_hash",type:{kind:"field"}},{name:"sk_app",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{name:"key_type_domain_separator",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:32,type:{fields:[{name:"inner",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_teardown_call_request",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"note_hashes",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifiers",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"note_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::nullifier::Nullifier"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"l2_to_l1_msgs",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"inner",type:{fields:[{name:"recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"content",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_logs",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"log",type:{fields:[{name:"fields",type:{kind:"array",length:16,type:{kind:"field"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log::Log"}},{name:"note_hash_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_log::PrivateLogData"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"contract_class_logs_hashes",type:{fields:[{name:"array",type:{kind:"array",length:1,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log_hash::LogHash"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},visibility:"databus"}},bytecode:"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EI7tUI7tMI7tcI7tCI7tSI7tKI7taI7tGI7tWI7tOI7teI7tBI7tRI7t2xzbdzi2kzi2kzm2Uzi2Uzm273Jsp3Fsp3NsZ3BsZ3JsZ3Fs3+PYvs+x/YBjO5tjO4djO5djO49j+yHHdj7HdgHH9iOO7UKO7SKO7WKO7RKO7VKO7TKO7XKO7ccc2xUc25Uc21Uc2084tp9ybFdzbEm/ovI5x3YNx3Ytx3Ydx3Y9x9bHsRXqX5TSsd3AWe1Gju0mju1mju0Wju1Wju02ju12ju0Oju1Oju0uju1uju0eju1eju0+ju1+ju0Bju1Bju0hju1hju0Rju1Rju0xju1xju0Jju1Jju0XHNsvObZfcWy/5tie4tie5th+w7H9lmN7hmP7Hcf2+2htsZ4QP2QiPSFIDzN+5OzpJ2RPLtK3DH/m2P7Csf2VY/sbx/Z3ju0fHNs/ObZ/cWz/5thyegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsJ2fY8vpAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsM3pAWxzegDbnB7ANqcHsH0N5VNYm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9g+yaO7c0c21s4trdybG/j2Jbm2Jbh2HJ66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euXZtjy+mla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXrp2OseW00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b8y13m9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rU5vXRtTi9dm9NL1+b00rUzObacXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla8/l2HJ66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzWk/Y3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXrq24NhyeunanF66NqeXrs3ppWtv4dhyeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrs3ppWtzeunanF66NqeXrv09x/YHju2PHNufOLac/rc2p/+tzel/a3P639qc/rc2p/+tzel/a3P639qc/rc2p/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/68rPseX0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/ruoZjy+l/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bVxmOLaf/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63rtocW07/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6ou5/m5mp/puN10NTpyNTV2/aqk16pyqtW7QfErfPVfnGm26+5dbbSpe5/Y4777r7nnvvu/+BBx96+JGyj5YrX6FipcpVqlZ7rHqNmrUer12n7hNP1nvq6WfqN3j2uYaN0p5v3KTpC82at3jxpZatWrdp2y795fYdXnm1Y6fXXn/jzbc6+7r4uvq6+br7evh6+nr5evv6+Pr6+vn6+wb4BvoG+Qb7MnxeX6ZviG+ob5hvuG+Eb6RvlG+0b4xvrG+cb7xvgm+i723fO75Jvsm+Kb6pvnd903zTfTN8M32zfO/53vd94Jvtm+Ob65vn+9A337fA95FvoW+Rb7FviW+pb5lvue9j3wrfSt8q3ye+T32rfZ/5Pvet8a31rfOt9/l8wrfBt9G3ybfZt8W31bfNt923w7fTt8u327fHt9e3z7ffd8B30HfId9h3xHfUd8x33HfCd9L3he9L31e+r32nfKd93/i+9Z3xfef73veD70ffT76ffb/4fvX95vvd94fvT99fvr99/wgrTliWsGxhuYQVL6xcwnILK0FYuYWVKKwkYSULK0VYeYTlEVaqsPIKK5+w8gurgLAKCquQsC4R1qXCKiysIsK6TFhFhXW5sK4Q1pXCKias4sK6SlhXC+saYV0rrOuEdb2wSgirpLBKCesGYd0orJuEdbOwbhHWrcK6TVilhVVGWLcL6w5h3Smsu4R1t7DuEda9wrpPWPcL6wFhPSish4T1sLAeEVZZYT0qrHLCKi+sCsKqKKxKwqosrCrCqiqsasJ6TFjVhVVDWDWFVUtYjwurtrDqCKuusJ4Q1pPCqiesp4T1tLCeEVZ9YTUQ1rPCek5YDYXVSFhpwnpeWI2F1URYTYX1grCaCau5sFoI60VhvSSslsJqJazWwmojrLbCaiesdGG9LKz2wuogrFeE9aqwOgqrk7BeE9brwnpDWG8K6y1hdRZWF2F1FVY3YXUXVg9h9RRWL2H1FlYfYfUVVj9h9RfWAGENFNYgYQ0WVoawvMLKFNYQYQ0V1jBhDRfWCGGNFNYoYY0W1hhhjRXWOGGNF9YEYU0U1tvCekdYk4Q1WVhThDVVWO8Ka5qwpgtrhrBmCmuWsN4T1vvC+kBYs4U1R1hzhTVPWB8Ka76wFgjrI2EtFNYiYS0W1hJhLRXWMmEtF9bHwlohrJXCWiWsT4T1qbBWC+szYX0urDXCWiusdcJaLyyfsISwNghro7A2CWuzsLYIa6uwtglru7B2CGunsHYJa7ew9ghrr7D2CWu/sA4I66CwDgnrsLCOCOuosI4J67iwTgjrpLC+ENaXwvpKWF8L65SwTgvrG2F9K6wzwvpOWN8L6wdh/Sisn4T1s7B+EdavwvpNWL8L6w9h/Smsv4T1t7D+EXacsC1h28J2CTte2LmE7RZ2grBzCztR2EnCThZ2irDzCNsj7FRh5xV2PmHnF3YBYRcUdiFhXyLsS4VdWNhFhH2ZsIsK+3JhXyHsK4VdTNjFhX2VsK8W9jXCvlbY1wn7emGXEHZJYZcS9g3CvlHYNwn7ZmHfIuxbhX2bsEsLu4ywbxf2HcK+U9h3CftuYd8j7HuFfZ+w7xf2A8J+UNgPCfthYT8i7LLCflTY5YRdXtgVhF1R2JWEXVnYVYRdVdjVhP2YsKsLu4awawq7lrAfF3ZtYdcRdl1hPyHsJ4VdT9hPCftpYT8j7PrCbiDsZ4X9nLAbCruRsNOE/bywGwu7ibCbCvsFYTcTdnNhtxD2i8J+Sdgthd1K2K2F3UbYbYXdTtjpwn5Z2O2F3UHYrwj7VWF3FHYnYb8m7NeF/Yaw3xT2W8LuLOwuwu4q7G7C7i7sHsLuKexewu4t7D7C7ivsfsLuL+wBwh4o7EHCHizsDGF7hZ0p7CHCHirsYcIeLuwRwh4p7FHCHi3sMcIeK+xxwh4v7AnCnijst4X9jrAnCXuysKcIe6qw3xX2NGFPF/YMYc8U9ixhvyfs94X9gbBnC3uOsOcKe56wPxT2fGEvEPZHwl4o7EXCXizsJcJeKuxlwl4u7I+FvULYK4W9StifCPtTYa8W9mfC/lzYa4S9VtjrhL1e2D5hC2FvEPZGYW8S9mZhbxH2VmFvE/Z2Ye8Q9k5h7xL2bmHvEfZeYe8T9n5hHxD2QWEfEvZhYR8R9lFhHxP2cWGfEPZJYX8h7C+F/ZWwvxb2KWGfFvY3wv5W2GeE/Z2wvxf2D8L+Udg/CftnYf8i7F+F/Zuwfxf2H8L+U9h/CftvYf8jXHHC5f8St3C5hCteuHIJl1u4EoQrt3AlCleScCULV4pw5REuj3ClClde4conXPmFq4BwFRSuQsJ1iXBdKlyFhauIcF0mXEWF63LhukK4rhSuYsJVXLiuEq6rhesa4bpWuK4TruuFq4RwlRSuUsJ1g3DdKD/8lx/Uyw/V5Qfg8sNq+cGy/BBYfmArP1yVH4TKDy3lB4zyw0D5wZ38kE1+ICY/vJIfNMkPheQHOPLDFvnBiPwQQ37gID8ckA/y5UN3+YBcPsyWD57lQ2L5QFc+fJUPSuVDTfkAUj4slA/25EM4+cBMPtySD6LkQyP5gEc+jJEPTuRDDvlAQj48kG/05Zty+QZavtmVb0zlm0j5hk++OZNvpOSbHvkGRb6ZkC/85Yt0+YJavviVL1Tli0r5AlC+WJMvrOQLnBm1m7bvkN66fFr7tH1xN8ZZtis+lzshd2JSckoeT2refPkLFCx0yaWFi1xW9PIrrixW/Kqrr7n2uutLlCx1Q0bGvrhbMrtOLtu4RXrhzI2bEr7+cf1nzTIyzv/ospw/eiBz495Pbqy9o4K7WOBHD+b80UM5fyTLXqgfukL9MD7ED12nMjeOPFVwSsqYPM8Ef/h9qB/+GuqHf4f4YXx8qB8mhfph3lA/vCTUD+8Psfj4B0L9METghNsK9cNQoXOHCl3C56F+uCbUD9eG+GHiwFA/HBTqh4ND/DC5Tqgf1g31wydC/DBPkVA/vCzUD4uG+GHqgyGOI7VcqB9WCfXDmqF++ESoH9YP9cO0UD9sFuqHMp4zZw1u8maXNV0v/DDv05kb6y9J+n14rTXjgj9smPMCirzNHT8cnbm7ZNrZd00NG7dp1TatfYvnWzZt2CY9rbH8/15pmv5yizatG76anta2bdP0CV2nlGvT+uX2Q7pOLd8ivWnj9nbXd6u0bt+0WdP0SU/cXkb9Vir7v7ei+vddymf/93HRzV++6+RyaS1bepMv+Eyr3bSl3PIrTaPcSVxOB1e0DrP8a2kiK265Nm07XdhSeeeaHObnVp7nolde3sDKJ9dp36atNzPMSrOdUbno3N1Tz6Go68yKbdKbtmjW2r/vYbtLp73Wvmnjhm3T27Rv07hNy4atWrzcuOG5vC13IW1rns3aJ88lbUaGt+t7596Ul23SJL3pyy9fWJG369Q6LVq1bdk0y9LOT5y54PkOLVo2adjq5WYNn2/ZpvFLDZs3bSmTf59V67+c/mMvMv3Hnk+iF3KmQK7onCrmdHCbSf+KzjU5zOXKHRuvGBwEZn3niXuyiSoFB+FFlYOD8KIqwUF4UdXgILyoWnAQXvRYcBBeVD04CC+qERyEF9UMDsKLagUH4UWPBwfhRbWDg/CiOsFBeFHd4CC86IngILzoyeAgvKhecBBe9FRwEF70dHAQXvRMcBBeVD84CC9qEByEFz0bHIQXPRcchBc1DA7CixoFB+FFacFBeNHzwUF4UePgILyoSXAQXtQ0OAgveiE4CC9qFhyEFzUPDsKLWgQH4UUvBgfhRS8FB+FFLYOD8KJWwUF4UevgILyoTXAQXtQ2OAgvahcchBelBwfhRS8HB+FF7YOD8KIOwUF40SvBQXjRq8FBeFHH4CC8qFNwEF70WnAQXvR6cBBe9EZwEF70ZnAQXvRWcBBe1Dk4CC/ydXGMIsi6OkYRZN0cowiy7o5RBFkPxyiCrKdjFEHWyzGKIOvtGEWQ9XGMIsj6OkYRZP0cI+fry+y6/o5RFt3Fvl26+Fe65btOqt7mlUzn69rza7VyeidE512h68xHW7RO83/s2L5m22EXjCfJdzxnt39hJscM71Vp3eTsTy/yTYCVbfLgFBemz7ln+3w0zv+fLufBZPkv8c4lZ/kv2d8XyHc0L2aPse2cOtt/czlyKtt/inek0TnnDuE26cq5STu4yRwHGx9dbAdc9Fu0vGED7Qob6Piwgc51IdAX+/RgwEXHJm/O5w8up9nFPX/I8fyifHT/Psf8FaL7949ceP4R6mYnZL/ZruBhZTm73EFBlp8nBo99ctUOrdp607tOfqxNWpMLAnfQYYoMc3rTnP/UHXptubOvLXfwPoT8B4nZ/0Gi4h8kTXtMPsap2zytdchpErpO9W+pygsXlpzUOhDNi39eka1UJESo4rmj884XfRXPHb6KJxiq4rlzFriECAUuMdpLHGbaxJzTJjr3ne0Ykpz/7VxGy1digcwNJXOHmzkp58xJ4RLygiI5a0qGmjAxmJbBf9Y5bNjDGGYpcTkNc8sXb+e33yfnCw4nMM+JRkYR//hgKQsXuvcDi67QrkNay5ez//uIsUjyDThPF2HdEnYGdVhCew8O7Hho+ESv0+H5CMEOFyh0z64Q60r0Dbmw59KBFQ7PfnC5g4EPJ8kVIv+jOdtcQcxpnW0uVfzHOs42R9FIMlSrknMeYaJzljD/LCXi1hRXOMX3tuMIw0a8fItXstomByOeIx7JF/1ZTorj3VTpKD6RuGCQx/l2TOdzME90e8id0yE1OocQMMqr91o51P1357yUDh6ev3Ezw52/W69suX3vn7cW1k3h32ZV79Ayu63qNufPmZAJyn+Ub2qo+5E/conL55t34X7cEdY5THwSslSoEN4LAqFfGdY6FMgcE4QLEFrW84VYV37fYjXK8ofZc74sNSKE97IL3neHP95I70rDJWnOf5TfuazzbxAcVyLn64lPsl8Tt7OkXBCdf2wTap6sL8ijWGsCUOkLRDzVBOcqcka+gG+N+lQLhDlVd+RMLuBbH4jOjrDWETM57OvZgmgmFwixroK+jeo9h6tuBSJnstu3RZ3Jbp1MDnHn3c5lZc/kfFnS/Nwx7MqeyflCZPKunMwpFB1zioc9tjBB9TinCnVg+y4E9b7wmVSnecuwN90T6Xrmg65niAMo4LTTStUCkYtuQd8RoOhGrBupF1038oe82yf060Z+Vd34MpCLP+rVjfykunFan4AFVAQ8818hYAGIgD8jBPz5X1g3fteqG/ki1Y18BrCe5dZfbN0IhfWCwopT52q+CI/Byl102QhVzwoIK169rgT1q8hQdSNBWAkX3lrkj+ITnHjgOAqglSMh9LaTgeNQv2EIVTryCcujrh35dGpHiIKTz7mu7LUjv3MYOImC2YtH/pzFw6/KUT0KGKoe+dTVo0DouBZWl4+EnOXDHal8uJ1x0HzZkQC8Qs5/Mdc0v7Cu1H+J7HgAkDfUS2RhXeXI13Af5eXO/mFTfLSfPATmeDAnvS58sIQXCbfObUlwRiXHk/v8QN0JsRJHkJIiPN1JiPB0xx18uhP+0+XcgQ+Ysn8ec+Ezm+CB3BWh+2Lg+/hdJ9dNT/N/tnnh3wciamiiokubbnp431f76BPlii86qvgHjR6jT3Qsd60K9vwBxegTVbt/1GvdVp2oq54ozEeqrjAf6jofr2X/N3aODzUlwmtk/6D+wkrQTxIv1Avsk1lX8B9kmTkpzMfMycGlBeBVNVtUcgc9sn3QnByUhP4YOPvqkhSfGydn/wfJin+QEvKD5iTH59TZziRFWBXDpVfUX6sJRKxmmFN2KX9T4dR/9zcVut5zcb+pYN1zgUv2RX8R5kjsdxViv6sQ+12F2O8qxH5XIfa7CrHfVYj9rkLsdxViv6tw7j/yf1chhCzUryqEkA1wjCLIBjpGEWSDHKMIssGOUQRZhmMUQeZ1jCLIMh2jCDLnKIJsqGMUQTbMMYogG+4YRZCNcIwiyEY6RhFkoxyjCLLRjlEE2RjHKIJsrGMUQTbOMYogG+8YRZBNcIwiyCY6RhFkbztGEWTvOEYRZJMcowiyyY5RBNkUxyiCbKpjFEH2rmMUQTbNMYogm+4YRZDNcIwiyGY6RhFksxyjCLL3HKMIsvcdowiyDxyjCLLZjlEE2RzHKIJsrmMUQTbPMYog+9AxiiCb7xhFkC1wjCLIPnKMIsgWOkYRZIscowiyxY5RBNkSxyiCbKljFEG2zDGKIFvuGEWQfewYRZCtcIwiyFY6RhFkqxyjCLJPHKMIsk8dowiy1Y5RBNlnjlEE2eeOUQTZGscogmytYxRBts4xiiBb7xhFkPkcowgy4RhFkG1wjCLINjpGEWSbHKMIss2OUQTZFscogmyrYxRBts0xiiDb7hhFkO1wjCLIdjpGEWS7HKMIst2OUQTZHscogmyvYxRBts8xiiDb7xhFkB1wjCLIDjpGEWSHHKMIssOOUQTZEccoguyoYxRBdswxiiA77hhFkJ1wjCLITjpGEWRfOEYRZF86RhFkXzlGEWRfO0YRZKccowiy045RBNk3jlEE2beOUQTZGccoguw7xyiC7HvHKILsB8coguxHxyiC7CfHKILsZ8coguwXxyiC7FfHKILsN8cogux3xyiC7A/HKILsT8coguwvxyiC7G/HKILsH8covMz/PULHMJLQcg4jCW3nMJLQ5RxGEsY7h5GEuZzDSEK3cxhJmOAcRhLmdg4jCROdw0jCJOcwkjDZOYwkTHEOIwnzOIeRhB7nMJIw1TmMJMzrHEYS5nMOIwnzO4eRhAWcw0jCgs5hJGEh5zCS8BLnMJLwUucwkrCwcxhJWMQ5jCS8zDmMJCzqHEYSXu4cRhJe4RxGEl7pHEYSFnMOIwmLO4eRhFc5h5GEVzuHkYTXOIeRhNc6h5GE1zmHkYTXO4cBYYjuRcIq4RxmUf73+xcdIvYvOhzrX3T+e05urQ5G/sQK18LIn0oB93z/lS5GVsl/aRcjf7gvso9RqL3F+hg5/uc/3cfo7C94/B/uZCRfv8Z6GSkm/7/Xy8j/Uu3f38zI/xLVcDsj/8u6QAiuBRoaRegx8V/oaCQkHgKoWWe6pZGwbryw6dv+VU2NhHXrhW2LC2sso2xrFEKTK9RdiOaI2Y2NhONL6uv+j3U28v86WPAc/yutjQ7FWhvF/RtaGwmrkuneRmd/Fei8+Zr/1eZG/t/OCVyRTaa7Gwmr9oUIPfuv6m8krCfVYNNtcCSspy+Yb/23dTgSVkOgwYNfdf7hTqiZ/sU9joTVRH2yuk2OhNXsQoDS/1VtjoT1knrbun2OhNVandD/rUZHwmoPdDryq/51LUuE1fFCXHf8/9XrSFhvAQX4v9HsSFjd9AtIfmUB6XkhITP+Vf2OhNVXn4iqhkfCGvBfIWIBjIiZEBEz/40FZLhWAfk/0fRorDpf/ytNjyaq16Xf9GjShXR8/1/W9Ohd4Di0mx7NUJeP/17To9lQ06PZ/8amRx+qy8f/1aZHi/VfL6ubHi1z5Cu/6dHuWNOj8xENAfdKsa5HGhPFuh7l+PjVWNejr/4Hux6d+D/e9eiI8a5HX6u6Hn3crGn7hi1LN2zfpmHLMg1bNW31fNP0l5u3aNvw1RbtW8sN7Isr9V/+Q80vXeQfan7por8346I1PSrnXJPDPAcsLujDfXmpfNivLlU4T+hCWVOhotM+DBXjQ1Ex/Cf9UYa10kWH9dqwL2viw36hKZfy+2NXXvSXkSpedGyuy/l1phB7yPmq6eK/RXid0W8RuqOtFXqvFLP8dfubs/11+w7tWzaUVe6x0nXbPFam+oUKV+9cgcvM/nftHVGeXrlpWtuy6elpnZzvf6/NDPzF+ykVWzRt2aTrlHMSb9YfXzskrLMd9r+4wv6X+CHZZo30f0X19cdgRP/D3zK7/v/0d8yuDiB293Wt27Rv8UKnho3Tm6a1b9qkYesOLVu2eKFF0/SGbdLTGrds6k/Vjp3G/Zc5W/4iOVv+ov+apXXRhRfgbAhIhOLsORQkX/RXxi8+KnE5UWA7zbIWv1LZit//a+fadRqGoWgeVkrLSsXAAOrCwl8UUSaohMQapcGilkoozYN+RsgEM2JBQkKMfAsfg9M86/iGpA4gVd3t2PE995zj53Tm6RH8+hH6zhLw+f4DTFAMl6VQPrTDvNSJpeM5Nl2H3Fq6aZhjnED5nk5rwlczqY78L5wHgnAeCIMRCbuACnBecgWiYO03YJUhGyoLuz1U35losDNBDTkTreRA5Cr3G7QfD9zvlsg7AicIJ3HtnjBKBr9PaX/jP/bX2n/s8d1c2eROgSx1j6MqNnZODXs8pMVujGvs+wHfLyPY06oB4J1VQH4OPGNCKB1Sy+SOJsSk2hPRY6I7GxO1MVH8f6pjoo44cDdsG8+cyxB/wwX2kjFaxUd9RJpES4QLbzPjisy/6FbKi9Cqn8TW1wSx36qr/XzcSDmSSld0l+5syvxsY/tT8yZJp6KOtLPW36IKi1idT9PXD9XXuN1j4hX+SoFqofDUbUGsSopfuKPC1xEoRaiusjDOQsq6xtc0ruK0YcXZagkHLEnSQmSC9yxjiOXRTHxiG+sKon2nGZaUsv6kH2Y1KSKDCk1AeIx3ezhYZIOiFjZ45Yqtg9kgPefSQM76wAQvfZKgG3zmg7cYYv3OpZNSbDmPbPdq3vVQ2PrbDYexk30YGA+ljB3AUZTz7KBUKM5jBxlIaYUNRrpb1fkGSGoeGCMwCwA=",custom_attributes:["abi_private"],debug_symbols:"",is_unconstrained:!1,name:"claim",verification_key:"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"},{abi:{abi_version:1,error_types:{"11019205087382408538":{error_kind:"string",string:"Field failed to decompose into specified 4 limbs"},"12370419938245003393":{error_kind:"string",string:"Field failed to decompose into specified 36 limbs"},"14990209321349310352":{error_kind:"string",string:"attempt to add with overflow"},"15835548349546956319":{error_kind:"string",string:"Field failed to decompose into specified 32 limbs"},"16431471497789672479":{error_kind:"string",string:"Index out of bounds"},"1998584279744703196":{error_kind:"string",string:"attempt to subtract with overflow"},"361444214588792908":{error_kind:"string",string:"attempt to multiply with overflow"},"5421095327929394772":{error_kind:"string",string:"attempt to bit-shift with overflow"},"6609888949476313245":{error_kind:"string",string:"Message not in state"}},parameters:[{name:"inputs",type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::context::inputs::PrivateContextInputs"},visibility:"private"},{name:"to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"},visibility:"private"},{name:"amount",type:{kind:"integer",sign:"unsigned",width:128},visibility:"private"},{name:"secret",type:{kind:"field"},visibility:"private"},{name:"message_leaf_index",type:{kind:"field"},visibility:"private"}],return_type:{abi_type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"anchor_block_header",type:{fields:[{name:"last_archive",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"state",type:{fields:[{name:"l1_to_l2_message_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"partial",type:{fields:[{name:"note_hash_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"nullifier_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{name:"public_data_tree",type:{fields:[{name:"root",type:{kind:"field"}},{name:"next_available_leaf_index",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],kind:"struct",path:"aztec::protocol_types::abis::partial_state_reference::PartialStateReference"}}],kind:"struct",path:"aztec::protocol_types::abis::state_reference::StateReference"}},{name:"sponge_blob_hash",type:{kind:"field"}},{name:"tx_effects_tree_root",type:{kind:"field"}},{name:"global_variables",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"block_number",type:{kind:"integer",sign:"unsigned",width:32}},{name:"slot_number",type:{kind:"field"}},{name:"timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"coinbase",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"fee_recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"gas_fees",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::global_variables::GlobalVariables"}},{name:"total_fees",type:{kind:"field"}},{name:"total_mana_used",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::block_header::BlockHeader"}},{name:"tx_context",type:{fields:[{name:"chain_id",type:{kind:"field"}},{name:"version",type:{kind:"field"}},{name:"gas_settings",type:{fields:[{name:"gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"teardown_gas_limits",type:{fields:[{name:"da_gas",type:{kind:"integer",sign:"unsigned",width:32}},{name:"l2_gas",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::gas::Gas"}},{name:"max_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}},{name:"max_priority_fees_per_gas",type:{fields:[{name:"fee_per_da_gas",type:{kind:"integer",sign:"unsigned",width:128}},{name:"fee_per_l2_gas",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"aztec::protocol_types::abis::gas_fees::GasFees"}}],kind:"struct",path:"aztec::protocol_types::abis::gas_settings::GasSettings"}}],kind:"struct",path:"aztec::protocol_types::abis::transaction::tx_context::TxContext"}},{name:"min_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"is_fee_payer",type:{kind:"boolean"}},{name:"expiration_timestamp",type:{kind:"integer",sign:"unsigned",width:64}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_non_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"expected_revertible_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"note_hash_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifier_read_requests",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"aztec::protocol_types::side_effect::scoped::Scoped"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"key_validation_requests_and_separators",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"request",type:{fields:[{name:"pk_m_hash",type:{kind:"field"}},{name:"sk_app",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{name:"key_type_domain_separator",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::validation_requests::key_validation_request_and_separator::KeyValidationRequestAndSeparator"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"call_context",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"function_selector",type:{fields:[{name:"inner",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::function_selector::FunctionSelector"}},{name:"is_static_call",type:{kind:"boolean"}}],kind:"struct",path:"aztec::protocol_types::abis::call_context::CallContext"}},{name:"args_hash",type:{kind:"field"}},{name:"returns_hash",type:{kind:"field"}},{name:"start_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}},{name:"end_side_effect_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_call_requests",type:{fields:[{name:"array",type:{kind:"array",length:32,type:{fields:[{name:"inner",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"public_teardown_call_request",type:{fields:[{name:"msg_sender",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"contract_address",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"is_static_call",type:{kind:"boolean"}},{name:"calldata_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{name:"note_hashes",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{kind:"field"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"nullifiers",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"note_hash",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::nullifier::Nullifier"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"l2_to_l1_msgs",type:{fields:[{name:"array",type:{kind:"array",length:8,type:{fields:[{name:"inner",type:{fields:[{name:"recipient",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::eth_address::EthAddress"}},{name:"content",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"private_logs",type:{fields:[{name:"array",type:{kind:"array",length:16,type:{fields:[{name:"inner",type:{fields:[{name:"log",type:{fields:[{name:"fields",type:{kind:"array",length:16,type:{kind:"field"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log::Log"}},{name:"note_hash_counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::private_log::PrivateLogData"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"contract_class_logs_hashes",type:{fields:[{name:"array",type:{kind:"array",length:1,type:{fields:[{name:"inner",type:{fields:[{name:"value",type:{kind:"field"}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::abis::log_hash::LogHash"}},{name:"counter",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::side_effect::counted::Counted"}}},{name:"length",type:{kind:"integer",sign:"unsigned",width:32}}],kind:"struct",path:"aztec::protocol_types::utils::arrays::claimed_length_array::ClaimedLengthArray"}},{name:"protocol_nullifier",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},visibility:"databus"}},bytecode:"H4sIAAAAAAAA/+y9B5yTRdv2vdeVJVvJUhVEAStgBexdepMioKigsAICSl1AwUbvbbP0jlIEsVAEQYqCopQMvfeOBRR713cChFzsJpkjwxz37f28eX7P973zrAfHzJxzzvlPrmTPdWV5R81v2jq9VZvG6W2bNW4u/7+OzTt1br83/6Iec8q3Tm/6fPl2XSp3btu0Qnrr1j2m1y1Xq0qlrB5vNmjVqW3zjh3t4oDIZQGifIhTgYcA0aW+7oCqEKS6AllVUURUDBEVR0RXQiu/ClJdDamugVTXIosvKa1ml89o1bp1qxZ+wYi4zMzhmZmfFo+L/D9Wj7fKdezYPKPTk80z2g3P9GZ9Wrx0s1oZh8pMKbWoTqWFPXo8/lTJW7+o2nVxe2+FQz8NPy3/iXB1jGy77aYjz+vYdgprmyswCBGJ9+u069i8VbN2bcvWaZ7RpnOn9E6t2rXNGnE+MnK558clgvFy/PdOI4Srs3C9IFwvCleXC1c+PEsdwlKARs4AxaCr0iou+gVeDy3wBWiBLwEL1Dmkro7xS47xi45xF3lQLwvXK8L1qnC9dmEcsoA9XgvtsBtwadQXUvoUj36FBaAVdlcYWY90h1bY/aELa0bi8B4z6rVq26J187NXVrXaEkAunDdU16LiUYitOG+P6eUyMtK77o0rLlw9hKuncPUSrt7C1Ue4+gpXP+HqL1wDhGugcA0SrsHCNUS4hgrXMOHKFC6vcGUJ13Dhkhk1UrhGCddo4RojXGOFa5xwjReuCcI1UbgmCddk4ZqCFVIk4j0SIVlPTNYLk/XGZH0wWV9M1g+T9cdkAzDZQEw2CJMNxmRDMNlQTDYMk2ViMi8my8JkwzHZCEw2EpONwmSjMdkYTDYWk43DZOMx2QRMNhGTTcJkkzHZlMQLYTYiPKgyz4FKvqQYEFbVzhtUDQynWtTeoRqEoDFtV7Svn7JtZEEIWzn5yAtUFReGVo1yqmpXCqMaDW1kX7Qb2Rt3BYJs6AVGD4Xq23/+kRvpqVT5t9tLpToTlN6RVVlnQ9cnourHcwHuG0l1MHAM/SKoyp8/rP5hVF0uONLBoVVVLjz4ISFVJ7Klx9BQqrLZk2hYCFWJHKmWmVPVKGdC5nx31iBE2mZlV3UPldzDs6m6h7wCzkv3QZ1wF2VMUFVyUVjV2POqyaXCq8YFVKWnRFCNP6c6WCaSasJZVYdDEVUTz6hqZkRWTfKrmtZSqCZL1S3NVKopyNu8tF2QCik/F7x3SPJG995BLldZYzad8WzTvnVz4Xo9+qcZ3uHQMqR3lrrebfLLEL831AVWb5VveKFVvhHtySVnaZycQrQxqrdyWcFjnhocTjP3tmsqJpuWGP2zlbPXTg3LqRB4pwGRjT553pDTY4/gpvKv/WRltCY6rv101rWX7+unA9d+ol+G+M2gXHu5yhleaJUz+Nd+slI0QffavxkczjR37d/EZDO1rv1k6Nq/CV27mUBkczxLVNtik8/SuF9qV1lzZmRhwIRW+VaU74ew+zVLGnuNzX+RlXGSMqHmOyrjbFZllA89ZwOVcb5fhvi9TamMcpVve6FVvq2ROVB+v2Uyv9+J9v0+VgLehlTvAol0kfCYpBTN04XHe8HhHHPweA+TzdGCxyQIHu9BhzcHiKxG5mCTz6WUoHdkSmJleR4FC3OlMWd+MPjzINV8SvADlQ2ogZDq/WiLS/TknKi8TcMc5FzAIqd8Gb4AIOcwvwzxW0ghp1zlQi+0yoUUckokv2/yFnwQ7ZdcsMkXQqpFfHJOVIqG6pJzcXD4oTlyLsZkH2qRcyJEzsXQ4X0IRFYjc7DJl1BK0AcyJTFyLaWQc4k05swPBn8ppFpGCX6gsqmVWGVbzn/POUF5m4o7yPkRi5wTpDdAzuJ+GeL3MYWccpUfe6FVfkwh5zKZEiZvwQoOOT+GVCv55JygFBXTJecnweGn5sj5CSb7VIucEyByfgId3qdAZDUyB5t8FaUErZApiZHrMwo5V0ljzvxg8D+DVJ9Tgh+obGolVtlW88k5XnmbNjrIuYZFzvHSGyDnRr8M8VtLIadc5VovtMq1FHJ+LlPC5C1YxyHnWkjl45NzvFK0QZecIjhcb46cApOt1yLneIicAjq89UBkNTIHm3wDpQStkymJkWsjhZwbpDFnfjD4GyHVJkrwA5VNrcQq22Y+Occpb1O6g5xbWOQcJ70Bcqb7ZYjfVgo55Sq3eqFVbqWQc5NMCZO3YBuHnFsh1XY+OccpRU10ybkjONxpjpw7MNlOLXKOg8i5Azq8nUBkNTIHm3wXpQRtkymJkWs3hZy7pDFnfjD4uyHVHkrwA5VNrcQq214+Occqb9NOBzn3scg5VnoD5NzplyF++ynklKvc74VWuZ9Czj0yJUzeggMccu6HVAf55ByrFO3QJeeh4PCwOXIewmSHtcg5FiLnIejwDgOR1cgcbPIjlBJ0QKYkRq6jFHIekcac+cHgH4VUxyjBD1Q2tRKrbMf55ByjvE3VHOQ8wSLnGOkNkLOaX4b4fUEhp1zlF15olV9QyHlMpoTJW/Alh5xfQKqv+OQcoxRV1SXn18HhSXPk/BqTndQi5xiInF9Dh3cSiKxG5mCTn6KUoC9lSmLk+oZCzlPSmDM/GPxvINW3lOAHKptaiVW203xyjlbeprkOcn7HIudo6Q2Qc65fhvh9TyGnXOX3XmiV31PI+a1MCZO34AcOOb+HVD/yyTlaKZqjS86fgsOfzZHzJ0z2sxY5R0Pk/Ak6vJ+ByGpkDjb5L5QS9INMSYxcv1LI+Ys05swPBv9XSPUbJfiByqZWYpXtdz45Rylv01IHOf9gkXOU9AbIudQvQ/z+pJBTrvJPL7TKPynk/E2mhMlb8BeHnH9Cqr/55BylFC3RJec/54fxcebI+Q8ki4/TIucoiJz/IIcXHwdEViNzsMktSgn6S6YkRK54m0HOePm/Nmd+LPjxNqRyUYIfqGxqJVTZ4uP55BypvE01guSMz8Ui50jpDZCzhl+GpKGbQk65SrcXWqWbQc54l0wJk7cggULOeDekSuSTc6RSVF2TnPFJwWGyMXLGJ2GyZC1yjkTIGZ8EHV4yEFmNzMEmT2GUoPgEmZIYuVIp5EyRxpz5weCnQqrclOAHKptaiVU2D5+cI5S3qbuDnGksco6Q3gA5u/tlSHzzUMgpV5nHC60yD4WcuWVKmLwFeTnkzAOp8vHJOUIp6qZLzvzBYQFz5MyPyQpokXMERM780OEVACKrkTnY5AUpxTuvTEmMXJdQyFlQGnPmB4N/CaS6lBL8QGVTK7HKVohPzuFRkbMwi5zDpTdGzsJQfC+jkFOu8jKMnJdRyHmpTAmTt6AIh5yXQarL+eQcziPnFcFhUXPkvAKTFdUi53CInFdAh1eUQ05s8mKU4l1EpiRGruIUchaTxpz5weAXh1RXUoIfqGxqJVbZruKTU32bZjnIeTWLnFnSGyDnLL8Mie81FHLKVV7jhVZ5DYWcV8qUMHkLruWQ8xpIdR2fnGrRTF1ylggOS5ojZwlMVlKLnFkQOaE/MhRfEoisRuZgk5eiFO9rZUpi5LqeQs5S0pgzPxj86yHVDZTgByqbWolVthv55PQqb9M0BzlvYpHTK72Bmz3NL0PiezOFnHKVN3uhVd5MIecNMiVM3oJbOOS8GVKV5pPTqxRN1SVnmeCwrDlylsFkZbXI6YXIWQY6vLJAZDUyB5v8VkrxvkWmJEau2yjkvFUac+YHg38bpLqdEvxAZVMrscp2B5+cmcrbtMtBzjtZ5MyU3gA5d/llSHzvopBTrvIuL7TKuyjkvF2mhMlbcDeHnHdBqnv45FTn6k5dct4bHN5njpz3YrL7tMiZCZHzXujw7gMiq5E52OT3U4r33TIlMXI9QCHn/dKYMz8Y/Acg1YOU4Acqm1qJVbaH+OQcprxN6x3kLMci5zDpDZBzvV+GxLc8hZxyleW90CrLU8j5oEwJk7egAoec5SFVRT45hylFQpeclYLDyubIWQmTVdYi5zCInJWgw6sMRFYjc7DJq1CKdwWZkhi5qlLIWUUac+YHg18VUlWjBD9Q2dRKrLJV55NzqPI2FXaQswaLnEOlN0DOwn4ZEt+HKeSUq3zYC63yYQo5q8mUMHkLanLI+TCkqsUn51ClqJAuOWsHh3XMkbM2JqujRc6hEDlrQ4dXB4isRuZgkz9CKd41ZUpi5KpLIecj0pgzPxj8upCqHiX4gcqmVmKVrT6fnEOUt2mxg5yPssg5RHoD5FzslyHxfYxCTrnKx7zQKh+jkLOeTAmTt6ABh5yPQarH+eQcohQt0iXnE8Hhk+bI+QQme1KLnEMgcj4BHd6TQGQ1MgebvCGleDeQKYmRqxGFnA2lMWd+MPiNINVTlOAHKptaiVW2p/nkHKy8Tf0d5GzMIudg6Q2Qs79fhsS3CYWccpVNvNAqm1DI+ZRMCZO3IJ1DziaQ6hk+OQcrRf10ydk0OGxmjpxNMVkzLXIOhsjZFDq8ZkBkNTIHm7w5pXiny5TEyPUshZwyk57lzA8G/1lI1YIS/EBlUyuxytaST85ByttU1UHOVixyDpLeADmr+mVIfJ+jkFOu8jkvtMrnKORsIVPC5C14nkPO5yBVaz45BylFVXTJ2SY4bGuOnG0wWVstcg6CyNkGOry2QGQ1MgebvB2leD8vUxIjV3sKOdtJY878YPDbQ6oOlOAHKptaiVW2DD45Bypvk9dBzo4scg6U3gA5vX4ZEt9OFHLKVXbyQqvsRCFnB5kSJm9BZw45O0GqF/jkHKgUZeqS88XgsIs5cr6IybpokXMgRM4XocPrAkRWI3OwybtSindnmZIYuV6ikLOrNObMDwb/JUj1MiX4gcqmVmKV7RU+OQcob1N7BzlfZZFzgPQGyNneL0Pi+xqFnHKVr3mhVb5GIefLMiVM3oJuHHK+Bqm688k5QClqp0vOHsFhT3Pk7IHJemqRcwBEzh7Q4fUEIquROdjkvSjFu5tMSYxcvSnk7CWNOfODwe8NqfpQgh+obGolVtn68snZX3mbljvI2Y9FTvnRYD+AnMv9MiS+/SnklKvs74VW2Z9Czj4yJUzeggEccvaHVAP55FSfwjJdcg4KDgebI+cgTDZYi5z9IXIOgg5vMBBZjczBJh9CKd7yZfFAjFxDKeQcIo0584PBHwqphlGCH6hsaiVW2TL55OynvE3FHeT0ssjZT3oD5CzulyHxzaKQU64yywutMotCzmEyJUzeguEccmKqEXxy9lOKiumSc2RwOMocOUdislFa5OwHkXMkdHijgMhqZA42+WhK8R4uUxIj1xgKOUdLY878YPDHQKqxlOAHKptaiVW2cXxy9lXeplQHOcezyNlXegPkTPXLkPhOoJBTrnKCF1rlBAo5x8qUMHkLJnLIOQFSTeKTU/3MJkWXnJODwynmyDkZk03RImdfiJyTocObAkRWI3OwyV+nFO+JMiUxcr1BIefr0pgzPxj8NyDVVErwA5VNrcQq2zQ+Ofsob1NbBzmns8gp361PB8jZ1i9D4juDQk65yhleaJUzKOScKlPC5C14k0POGZBqJp+c6s9k2uiSc1Zw+JY5cs7CZG9pkbMPRM5Z0OG9BURWI3OwyWdTivebMiUxcr1NIedsacyZHwz+25DqHUrwA5VNrcQq27t8cvZW3qa8DnK+xyJnb+kNkDOvX4bEdw6FnHKVc7zQKudQyPmOTAmTt2Auh5xzINU8PjnVX6XIo0vO+cHh++bIOR+Tva9Fzt4QOedDh/c+EFmNzMEmX0Ap3nNlSmLkWkgh5wJpzJkfDP5CSPUBJfiByqZWYpVtEZ+c6u+pxTnIuZhFzl7SG/sE80MKE+X8H2ZSaPeBPEaTmbuEQ7sPIdVSjcMHtiSN/wMf6feMKtWXsVK9p/TGUn05JdXl/Mv/N1L9I06qL4dUH1NS/SNp/B9I9R7qtThSfQUr1XtIb+xMVkAXYiXlQshVrsResqz8n7g2n3CuzUpI9SnlhdUn0hg7olWMV7X+FFkVbc0Ew7oKUn1GCWsg89RKLPM+p7yl+EwaY8BcBdSHCypr4vDoKmtJYIP4W/G44lG9b/f2mF4uIyO969644iJ+tYhfI+LXivh1It4n4oWIXy/iN4j4jSJ+k4jfLOK3iPitIn6biN8u4neI+J0ifpeI3y3i94j4vSJ+n4jfL+IPiPiDIv6QiD8s4o+I+KMi/piIPy7iT5h7FrA6EZKtwWRrMdk6TObDZAKTrcdkGzDZRky2CZNtxmRbMNlWTLYNk23HZDsw2U5MtguT7cZkezDZXky2D5Ptx2QHMNlBTHYIkx3GZEcw2VFMdgyTHcdkJ7I9nRwRnoCZ5+AiCbQxrKqdN6jaFE61qL1DtRlhbtoX0b4sybaRBSFs5eR7L1BVXBhatc+pql0pjGo/tJGT0W5kb9wVCLKhVy6roafKa5Qq/3bXqlRngrIusirrbOh8EVU/nguwiKQ6GDiG9RFU5c8f1oYwqi4XHOmW0KoqFx781pCqE9nSY1soVdnsSbQ9hKpEjlTbkVPVKGdC7syhahAibXdlV3UPldy7s6m6h7wCexyqD+qEuygHgqqSi8KqDp5XTS4VXnUooCo9JYLq8DnVwTKRVEfOqjociqg6ekZVMyOy6phf1bSWQnVcqm5pplKdQN4VpH0BqU7Sn8rEn1DWmE2OpzJfkJ7KxJ+Q3sCn1Jv8MsTvS8ZTGf8qv/RCq/wy2pOL+iNY/8kpRBt1P4L9Kjj82tzbrq8w2dc6H8GeuXZqWH4FgfdrILLRJ8+XcnrsedFX/Gt/XBmtiY5rf5J17eX7+pPAtZ/olyF+pyjXXq7ylBda5Sn+tT+uFE3QvfbfBIffmrv232Cyb7Wu/XHo2n8DXbtvgchqPEzFJj9N+WhH1pxT2MPUL6FVfkd5mHpaGnuNzX+RlfGYMqHmOyrj96zKKB96fg9Uxvl+GeL3A6UyylX+4IVW+YPSLk4vv78zmd8/RrlKsAT8AKl+Uu/jYuFxTCmapwuPn4PDX8zB42dM9osWPI5B8PgZOrxfgMhqZA42+a9AtKO/3D/KlMTK8m8al1s9/6/SmDM/GPzfINXvlOAHKhtQAyHVH9EWl+jJeVR5m4Y5yPkni5zyE8M/AXIO88sQv78o5JSr/MsLrfIvCjl/lylh8hb8HeVZglfwL0j1D5+cR5WioZrkzBUXHFrGyJkLlFla5DyKkDNXHHJ4uSwgstFnDji5TSlBf8uUhMiVy8UgZy5bGnPmB4PvglTxlOAHKptaCVW2XLmAEF0kOY8ob5OjsVcuN4ucR6Q31NhLypA0TKCQU64yAWrs5Z9fYadBzlzxMiVM3oJECjlzJUCqJD45jyhFuo29ciUHhynmyJmMyVK0yHkEImcydHgpQGQ1MgebPJVRgnIlypTEyJWbQs5UacyZHwx+bkjloQQ/UNnUSqyypfHJeVh5mzY6yJmHRc7D0hsg50a/DIlvXgo55SrzeqFV5qWQ0yNTwuQtyMchZ15IlZ9PzsNK0QZdchYIDguaI2cBTFZQi5yHIXIWgA6vIBBZjczBJr+EUrzzyZTEyHUphZyXSGPO/GDwL4VUhSjBD1Q2tRKrbIX55DykvE3pDnJexiLnIekNkDPdL0PiW4RCTrnKIl5olUUo5CwkU8LkLbicQ84ikOoKPjkPKUVNdMlZNDgsZo6cRTFZMS1yHoLIWRQ6vGJAZDUyB5u8OKV4Xy5TEiPXlRRyyidVV3LmB4N/JaS6ihL8QGVTK7HKdjWfnAeVt2mng5zXsMh5UHoD5NzplyHxvZZCTrnKa73QKq+lkPMqmRImb8F1HHJeC6lK8Ml5UCnaoUvOksFhKXPkLInJSmmR8yBETujXuXKVAiKrkTnY5NdTivd1MiUxct1AIef10pgzPxj8GyDVjZTgByqbWolVtpv45DygvE3VHOS8mUXOA9IbIGc1vwyJ7y0UcspV3uKFVnkLhZw3ypQweQtKc8h5C6QqwyfnAaWoqi45ywaHt5ojZ1lMdqsWOQ9A5CwLHd6tQGQ1Mgeb/DZK8S4tUxIj1+0Uct4mjTnzg8G/HVLdQQl+oLKplVhlu5NPzv3K2zTXQc67WOTcL70Bcs71y5D43k0hp1zl3V5olXdTyHmHTAmTt+AeDjnvhlT38sm5Xymao0vO+4LD+82R8z5Mdr8WOfdD5LwPOrz7gchqZA42+QOU4n2PTEmMXA9SyPmANObMDwb/QUj1ECX4gcqmVmKVrRyfnPuUt2mpg5zlWeTcJ70Bci71y5D4VqCQU66yghdaZQUKOR+SKWHyFlTkkLMCpKrEJ+c+pWiJLjkrB4dVzJGzMiarokXOfRA5K0OHVwWIrEbmYJNXpRTvijIlMXJVo5CzqjTmzA8Gvxqkqk4JfqCyqZVYZavBJ+de5W2q4SDnwyxy7pXeADlr+GVIfGtSyClXWdMLrbImhZzVZUqYvAW1OOSsCalq88m5VymqrkvOOsHhI+bIWQeTPaJFzr0QOetAh/cIEFmNzMEmr0sp3rVkSmLkqkchZ11pzJkfDH49SFWfEvxAZVMrscr2KJ+ce5S3qbuDnI+xyLlHegPk7O6XIfFtQCGnXGUDL7TKBhRy1pcpYfIWPM4hZwNI9QSfnHuUom665HwyOGxojpxPYrKGWuTcA5HzSejwGgKR1cgcbPJGlOL9uExJjFxPUcjZSBpz5geD/xSkepoS/EBlUyuxytaYT87dUZGzCYucu6U3Rs4mUHzTKeSUq0zHyJlOIefTMiVM3oJnOORMh1RN+eTczSNns+CwuTlyNsNkzbXIuRsiZzPo8JpzyIlN/iyleD8jUxIjVwsKOZ+Vxpz5weC3gFQtKcEPVDa1Eqtsrfjk3KW8TbMc5HyORc5d0hsg5yy/DInv8xRyylU+74VW+TyFnC1lSpi8Ba055HweUrXhk3OXUjRTl5xtg8N25sjZFpO10yLnLoicbaHDawdEViNzsMnbU4p3a5mSGLk6UMjZXhpz5geD3wFSZVCCH6hsaiVW2TryyblTeZumOcjZiUXOndIbIOc0vwyJb2cKOeUqO3uhVXamkDNDpoTJW/ACh5ydIdWLfHLuVIqm6pKzS3DY1Rw5u2Cyrlrk3AmRswt0eF2ByGpkDjb5S5Ti/YJMSYxcL1PI+ZI05swPBv9lSPUKJfiByqZWYpXtVT45dyhv0y4HOV9jkXOH9AbIucsvQ+LbjUJOucpuXmiV3SjkfEWmhMlb0J1Dzm6QqgefnDuUop265OwZHPYyR86emKyXFjl3QOTsCR1eLyCyGpmDTd6bUry7y5TEyNWHQs7e0pgzPxj8PpCqLyX4gcqmVmKVrR+fnNuVt2m9g5z9WeTcLr0Bcq73y5D4DqCQU65ygBda5QAKOfvKlDB5CwZyyDkAUg3ik3O7UiR0yTk4OBxijpyDMdkQLXJuh8g5GDq8IUBkNTIHm3wopXgPlCmJkWsYhZxDpTFnfjD4wyAVpf6fr2xqJVbZvHxyblPepsIOcmaxyLlNegPkLCzAjvrDKeSUqxzuhVY5nELOTJkSJm/BCA45h0OqkXxyblOKCumSc1RwONocOUdhstFa5NwGkXMUdHijgchqZA42+RhK8R4hUxIj11gKOcdIY878YPDHQqpxlOAHKptaiVW28XxyblXepsUOck5gkXOr9AbIudgvQ+I7kUJOucqJXmiVEynkHCdTwuQtmMQh50RINZlPzq1K0SJdck4JDl83R84pmOx1LXJuhcg5BTq814HIamQONvkblOI9SaYkRq6pFHK+IY0584PBnwqpplGCH6hsaiVW2abzyblFeZv6O8g5g0XOLdIbIGd/vwyJ75sUcspVvumFVvkmhZzTZEqYvAUzOeR8E1LN4pNzi1LUT5ecbwWHs82R8y1MNluLnFsgcr4FHd5sILIamYNN/jaleM+UKYmR6x0KOd+Wxpz5weC/A6nepQQ/UNnUSqyyvccn52blbarqIOccFjk3S2+AnFX9MiS+cynklKuc64VWOZdCzndlSpi8BfM45JwLqebzyblZKaqiS873g8MF5sj5PiZboEXOzRA534cObwEQWY3MwSZfSCne82RKYuT6gELOhdKYMz8Y/A8g1SJK8AOVTa3EKttiPjk3KW+T10HOD1nk3CS9AXJ6/TIkvkso5JSrXOKFVrmEQs5FMiVM3oKlHHIugVTL+OTcpBRl6pJzeXD4kTlyLsdkH2mRcxNEzuXQ4X0ERFYjc7DJP6YU76UyJTFyraCQ82NpzJkfDP4KSLWSEvxAZVMrscr2CZ+cG5W3qb2DnJ+yyLlRegPkbO+XIfFdRSGnXOUqL7TKVRRyrpQpYfIWfMYh5ypI9TmfnBuVona65FwdHK4xR87VmGyNFjk3QuRcDR3eGiCyGpmDTb6WUrw/kymJkWsdhZxrpTFnfjD46yCVjxL8QGVTK7HKJvjk3KC8Tcsd5FzPIucG6Q2Qc7lfhsR3A4WccpUbvNAqN1DI6ZMpYfIWbOSQcwOk2sQnp/oUlumSc3NwuMUcOTdjsi1a5NwAkXMzdHhbgMhqZA42+VZK8ZYvizdh5NpGIedWacyZHwz+Nki1nRL8QGVTK7HKtoNPzvXK21TcQc6dLHKul94AOYv7ZUh8d1HIKVe5ywutcheFnNtlSpi8Bbs55NwFqfbwybleKSqmS869weE+c+Tci8n2aZFzPUTOvdDh7QMiq5E52OT7KcV7t0xJjFwHKOTcL40584PBPwCpDlKCH6hsaiVW2Q7xySmUtynVQc7DLHIK6Q2QM9UvQ+J7hEJOucojXmiVRyjkPChTwuQtOMoh5xFIdYxPTvUzmxRdch4PDk+YI+dxTHZCi5wCIudx6PBOAJHVyBxs8i8oxfuoTEmMXF9SyPmFNObMDwb/S0j1FSX4gcqmVmKV7Ws+OX3K29TWQc6TLHLKd+snAXK29cuQ+J6ikFOu8pQXWuUpCjm/kilh8hZ8wyHnKUj1LZ+c6s9k2uiS83Rw+J05cp7GZN9pkdMHkfM0dHjfAZHVyBxs8u8pxfsbmZIYuX6gkPN7acyZHwz+D5DqR0rwA5VNrcQq2098cq5T3qa8DnL+zCLnOukNkDOvX4bE9xcKOeUqf/FCq/yFQs4fZUqYvAW/csj5C6T6jU9O9Vcp8uiS8/fg8A9z5Pwdk/2hRc51EDl/hw7vDyCyGpmDTf4npXj/KlMSI9dfFHL+KY0584PB/wtS/U0JfqCyqZVYZfuHT07199TiguR0x7HIuVZ6Qwt2WxQmyvmtTArt/pbHaDBz3TaFdm4LUrk0Dh/YkjTO5Kf6mqhSPZ6V6mukN5bquSipLufP9b+R6m5OqueCVAmUVHdL4/9Aqq9Wr8WR6omsVF8tvbEzSYQuRBLlQshVJkEvWfzzK+z+DdcmmXNtkiBVCiOR3MnSGDuiVMarWn+KpEZbM8GwpkKq3JTXq4HMUyuxzPMwgu/OLY0xYKYC9eGCymoN7zG9XEZGete9cRWRItgUEf2IiKohopZgvXdNUQcetZpszmqSOauJ5qwmmLMab85qnDmrseasxpizGm3OapQ5q5HmrEaYsxpuzirLnJXXnFWmOath5qyGmrMaYs5qsDmrQeasBpqzGmDOqr85q37mrPqas+pjzqq3Oate5qx6mrPqYcwq/oQ5q+PmrI6ZszpqzuqIOavD5qwOmbM6aM7qgDmr/eas9pmz2mvOao85q93mrHaZs9ppzmqHOavt5qy2mbPaas5qizmrzeasNpmz2mjOaoM5q/XmrIQ5K585q3XmrNaas1pjzmq12iqK76XEVYxGLD++CDy4yyPcacIt//95hTufcOcX7gLCXVC4LxHuS4W7kHAXFu7LhLuIcF8u3FcId1FjX3Rx5ykOyfJisnyYLD8mK4DJCmKySzDZpZisECYrjMkuw2RFMNnlmOwKTFa0+IWfCWDPsdMiP8cenLJw7IW2I5HH8y7V3/Y589Up1ySl6sxjYpXq7HNpaLt5gEKisd2x0HbHQdsdD20X+vtW7rzRbnc4NPkYaPJ8UnX5qSI/zXMVGHmdfXLXgyv/algovtKNP1Wd0bxZZsn3JjRvsVOk7eOciBc6kSzoRLCgjICCkp+z3SHQdodC2x0GbTcT2m4BTgIOhiYvKFXXbP8w4Ze3hsXP23m63Ys/XT98bZUhy2fflyVueqB7vSOjvqkp0nZxTqQPdCJ9oRPpBwUF+jPr7ks42+0BbbcntN1e0HZ7Q9u9lLLd+KPIduOPIduNP45sN/4EtN1CnO0ehLZ7CNruYWi7R6DtFqaUl/gD0OSXQXw7yTmRndCJ7IJOZDcUlD1QUIpwtgv9UULgj/6eecwEbXcHtN3LOQm4BZr8CohvX3BOBPq1QuDX9uOQtjhnnwhBQSka7XaxL3sVi2zb9MdqLXVsi0e2fS7peAsd2ysj2y5p8W4fHdurItve1/aHDB3bqyPbTq/90z06ttdEtn3EU7ebju21kW3H52o5WMf2usi2xXrtmq1jWyKybcODonCIpwtz67VML3v7HRXatWmfIR8utGrXdrh8+uV42FDM+WjK+fzJ+ZDJ+STJ+bjI+UzI+eDH+XTH+QjH+ZzG+TDG+cTF+VjF+ezE+YBkjOP/KO4YX+kYX+UYX+0YX+MYX+sYX+cYlxgj3CWFu5RwXy/cNwj3jcJ9k3DfLNy3xL4KqLCKfRUw9lXA81axrwLGvgp43ir2VcDYVwHPW8W+Chj7KuB5q9hXAWNfBTxvFfsqYOyrgOetYl8FjH0V8LxV7KuAsa8CnreKfRUw9lXAC/4nqq8CPnTBVwFLC3cZ4S4r3LcK923Cfbtw3yHcdwr3XcJ9t3DfI9z3Cvd9wn2/cD8g3A+a+ypg6eI6n9eo/pbc2c9r1kCf16yFPq9ZB31eUxo4T43vtZXh2Jbl2N7Ksb2NY3s7x/YOju2dHNu7OLZ3c2zv4djey7G9j2N7P8f2AY7tgzq26g8EH4ps213TthxnteVVtnZxnY8vSzvGDznG5f7F4/LOjy9LOsalHOPrHeMbHOMbHeObHOObHeNb5MeXFYS7onBXEu7Kwl1FuKsKdzXhrn7hx5eJw6PsEeWuYPY1W3xUPUgDr9lGCHcN4X5YuGsKdy1zr8ZqJEKyhzFZTUxWKzHnS0DVbuQxQFeuBvJC0f0w8kLRXRN5oeiuBaTHRWZgxX9JBtYW7jrC/Yhw1zWXgbWxnKmDyR7BZHW1MrAilIG1oQysA2XgI1AG1uVnYKV/SQbWE+76wv2ocD9mLgPrYTlTH5M9iske08rASlAG1oMysD6UgY9CGfgYPwMr/0sysIFwPy7cTwj3k+YysAGWM49jsicw2ZNaGVgZysAGUAY+DmXgE1AGPsnPwCr/kgxsKNyNhPsp4X7aXAY2xHKmESZ7CpM9rZWBVaAMbAhlYCMoA5+CMvBpfgZW/ZdkYGPhbiLc6cL9jLkMbIzlTBNMlo7JntHKwKpQBjaGMrAJlIHpUAY+w8/Aav+SDGwq3M2Eu7lwP2suA5tiOdMMkzXHZM9qZWA1KAObQhnYDMrA5lAGPsvPwOr/kgxsIdwthbuVcD9nLgNbYDnTEpO1wmTPaWVgdSgDW0AZ2BLKwFZQBj7HeZL7fGTb3x+ZVF3HtnVYW/v8anOe4ft12nVs3qpZu7Zl6zTPaNO5U3on+Yw4a4TjTJ8/Py4V5nlsa5nCbYS7rXC3E+72F3cpi5i9ksW1ruTeuOLC3UG4M4Rbbq+TcHcW7heE+0Xh7iLcXYX7JeF+WbhfEe5Xhfs14e4m3N2Fu4dw9xTuXsLdW7j7CHdf4e4n3P2Fe4BwDxTuQcI9WLiHCPdQ4R4m3JnmLnoH7GpmYLKOmKwTJuuMyV7AZC9isi6YrCsmewmTvYzJXsFkr2Ky1zBZN0zWHZP1wGQ9MVkvTNYbk/XBZH0xWT9M1h+TDcBkAzHZIEw2GJMNwWRDMdkwTJaZ7cXCiPCYyzyHOQnlrmFV7bxB1UvhVIvaO1QvI2DNkxLty4BsG1kQwlZOfmFblIoLQ6suaItSu1IYVT9oI2nRbmRv3BUIsqGXJx2gl28Z0Mu3jtDLt06RVVlnQ9c5ourHcwF+IZLqYOAYXoygKn/+sLqEUXW54EhfCa2qcuHBvxpSdSJberwWSlU2exJ1C6EqkSPVuudUNcqZkDmb4DQIkbY5muB0D5Xc2ZvgdA95BXo7VB/UCXdR+gdVJReFVQ04r5pcKrxqYEBVekoE1aBzqoNlIqkGn1V1OBRRdba3Vc2MyKozva2a1lKo/L2tbmmmUkG9rfKkQKq0aN/QJ0X7J7jcmcoas8nxJ7i8pD/B5c6U3sCfJN7klyF+QIHVW2WWF1plVrQnF/Xf23WrD2Kj5t/bdQ8PDkeYe9s1HJON0Pl7u2eunRqWw4G8kCsAIht98mTJ6bHnEsP5136YMloTHdd+JOvay/f1I4FrP9EvQ/xGUa69XOUoL7TKUfxrr/7t8Qm61350cDjG3LUfjcnGaF37YdC1Hw1duzFAZDX+ch42+ViN+6V2lTVnVBYGTGiVQM8Pjfs1Vhp7jc1/kZVxqDKh5jsq43hWZZQPPccDlXG+X4b4TaBURrnKCV5olRM0MgfK73Em83tilKsES8AESDUJSKSLhIe6X8g8XXhMDg6nmIPHZEw2RQseQyF4TIYObwoQWY3MwSZ/nVKC5OuZSVhZfoOChdelMWd+MPhvQKqplOAHKhtQAyHVtGiLS/TkHKK8TcMc5JzOIqf8xHA6QM5hfhniN4NCTrnKGV5olTMo5JwqU8LkLXgzyrMEr+AMSDWTT051e6yhuuScFRy+ZY6cszDZW1rkhP5kgHsWdHhvAZHVyBxs8tmUEvSmTEmMXG9TyDlbGnPmB4P/NqR6hxL8QGVTK7HK9i7/Pedg5W0q7iDneyxyDpbeADmL+2WI3xwKOeUq53ihVc6hkPMdmRImb8FcDjnnQKp5fHKqu0EW0yXn/ODwfXPknI/J3tci52CInPOhw3sfiKxG5mCTL6CUoLkyJTFyLaSQc4E05swPBn8hpPqAEvxAZVMrscq2iE/OQcrbtNFBzsUscg6S3gA5N/pliN+HFHLKVX7ohVb5IYWcH8iUMHkLlnDI+SGkWsonp7r58QZdci4LDpebI+cyTLZci5yDIHIugw5vORBZjczBJv+IUoKWyJTEyPUxhZwfSWPO/GDwP4ZUKyjBD1Q2tRKrbCv55ByovE3pDnJ+wiLnQOkNkDPdL0P8PqWQU67yUy+0yk8p5FwhU8LkLVjFIeenkOozPjnVvf6b6JLz8+BwtTlyfo7JVmuRcyBEzs+hw1sNRFYjc7DJ11BK0CqZkhi51lLIuUYac+YHg78WUq2jBD9Q2dRKrLL5+OQcoLxNOx3kFCxyDpDeADl3+mWI33oKOeUq13uhVa6nkHOdTAmTt2ADh5zrIdVGPjnVf9pmhy45NwWHm82RcxMm26xFzgEQOTdBh7cZiKxG5mCTb6GUoA0yJTFybaWQc4s05swPBn8rpNpGCX6gsqmVWGXbzidnf+VtquYg5w4WOftLb4Cc1fwyxG8nhZxylTu90Cp3Usi5TaaEyVuwi0POnZBqN5+c6r/kVlWXnHuCw73myLkHk+3VImd/iJx7oMPbC0RWI3OwyfdRStAumZIYufZTyLlPGnPmB4O/H1IdoAQ/UNnUSqyyHeSTs5/yNs11kPMQi5z9pDdAzrl+GeJ3mEJOucrDXmiVhynkPCBTwuQtOMIh52FIdZRPTvUfLp2jS85jweFxc+Q8hsmOa5GzH0TOY9DhHQciq5E52OQnKCXoiExJjFxfUMh5Qhpz5geD/wWk+pIS/EBlUyuxyvYVn5x9lbdpqYOcX7PI2Vd6A+Rc6pchficp5JSrPOmFVnmSQs4vZUqYvAWnOOQ8Cam+4ZNT/Xe6l+iS89vg8LQ5cn6LyU5rkbMvRM5vocM7DURWI3Owyb+jlKBTMiUxcn1PIed30pgzPxj87yHVD5TgByqbWolVth/55OyjvE01HOT8iUXOPtIbIGcNvwzx+5lCTrnKn73QKn+mkPMHmRImb8EvHHL+DKl+5ZOzj1JUXZecvwWHv5sj52+Y7HctcvaByPkbdHi/A5HVyBxs8j8oJegXmZIYuf6kkPMPacyZHwz+n5DqL0rwA5VNrcQq2998cvZW3qbuDnL+wyJnb+kNkLO7Xwb4JcRRyNlbGnuRVfrnV9jpkPMvmRIGb0GCRSFnQhyksvnk7K0UddMkZ4IrOIw3Rs4EFyaL1yJnb4ScCS7o8OKByGpkDjZ5LkYJSpD/a0PkSnAzyJmQSxpz5geD74ZUCZT6H6hsaiVW2RL55OwVDTkTkljk7CW9IXJKGZKGyRRyylUmY+RMZpAzIUGmhMlbkMIhZzKkSuWTsxePnLmDQ485cubGZB4tcvaCyJkbOjwPh5zY5GkUcqbIlMTIlYdCzjRpzJkfDH4eSJWXEvxAZVMrscqWj0/OnsrbNMtBzvwscvaU3gA5Z/llSHwLUMgpV1nAC62yAIWceWVKmLwFBTnkLACpLuGTs6dSNFOXnJcGh4XMkfNSTFZIi5w9IXJeCh1eISCyGpmDTV6YUrwLypTEyHUZhZyFpTFnfjD4l0GqIpTgByqbWolVtsv55OyhvE3THOS8gkXOHtIbIOc0vwyJb1EKOeUqi3qhVRalkLOITAmTt6AYh5xFIVVxPjl7KEVTdcl5ZXB4lTlyXonJrtIiZw+InFdCh3cVEFmNzMEmv5pSvIvJlMTIdQ2FnFdLY878YPCvgVTXUoIfqGxqJVbZruOTs7vyNu1ykLMEi5zyAWcJgJy7/DIkviUp5JSrLOmFVlmSQs5rZUqYvAWlOOQsCamu55Ozu1K0U5ecNwSHN5oj5w2Y7EYtcnaHyHkDdHg3ApHVyBxs8psoxbuUTEmMXDdTyHmTNObMDwb/Zkh1CyX4gcqmVmKVrTSfnN2Ut2m9g5xlWOTsJr0Bcq73y5D4lqWQU66yrBdaZVkKOW+RKWHyFtzKIWdZSHUbn5zdlCKhS87bg8M7zJHzdkx2hxY5u0HkvB06vDuAyGpkDjb5nZTifatMSYxcd1HIeac05swPBv8uSHU3JfiByqZWYpXtHj45X1PepsIOct7LIudr0hsgZ2G/DInvfRRyylXe54VWeR+FnHfLlDB5C+7nkPM+SPUAn5yvKUWFdMn5YHD4kDlyPojJHtIi52sQOR+EDu8hILIamYNNXo5SvO+XKYmRqzyFnOWkMWd+MPjlIVUFSvADlU2txCpbRT45X1XepsUOclZikfNV6Q2Qc7FfhsS3MoWccpWVvdAqK1PIWUGmhMlbUIVDzsqQqiqfnK8qRYt0yVktOKxujpzVMFl1LXK+CpGzGnR41YHIamQONnkNSvGuIlMSI9fDFHLWkMac+cHgPwypalKCH6hsaiVW2WrxyfmK8jb1d5CzNoucr0hvgJz9/TIkvnUo5JSrrOOFVlmHQs6aMiVM3oJHOOSsA6nq8sn5ilLUT5ec9YLD+ubIWQ+T1dci5ysQOetBh1cfiKxG5mCTP0op3o/IlMTI9RiFnI9KY878YPAfg1QNKMEPVDa1Eqtsj/PJ+bLyNlV1kPMJFjlflt4AOav6ZUh8n6SQU67ySS+0yicp5GwgU8LkLWjIIeeTkKoRn5wvK0VVdMn5VHD4tDlyPoXJntYi58sQOZ+CDu9pILIamYNN3phSvBvKlMTI1YRCzsbSmDM/GPwmkCqdEvxAZVMrscr2DJ+cLylvk9dBzqYscr4kvQFyev0yJL7NKOSUq2zmhVbZjELOdJkSJm9Bcw45m0GqZ/nkfEkpytQlZ4vgsKU5crbAZC21yPkSRM4W0OG1BCKrkTnY5K0oxVue5LMYuZ6jkLOVNObMDwb/OUj1PCX4gcqmVmKVrTWfnF2Vt6m9g5xtWOTsKr0Bcrb3y5D4tqWQU66yrRdaZVsKOZ+XKWHyFrTjkLMtpGrPJ2dXpaidLjk7BIcZ5sjZAZNlaJGzK0TODtDhZQCR1cgcbPKOlOLdTqYkRq5OFHLKc+3EmR8MfidI1ZkS/EBlUyuxyvYCn5xdlLdpuYOcL7LI2UV6A+Rc7pch8e1CIadcZRcvtMouFHJ2lilh8hZ05ZCzC6R6iU9O9Sks0yXny8HhK+bI+TIme0WLnF0gcr4MHd4rQGQ1Mgeb/FVK8ZYvi1/CyPUahZyvSmPO/GDwX4NU3SjBD1Q2tRKrbN355HxReZuKO8jZg0XOF6U3QM7ifhkS354UcspV9vRCq+xJIWc3mRImb0EvDjl7QqrefHK+qBQV0yVnn+Cwrzly9sFkfbXI+SJEzj7Q4fUFIquROdjk/SjFu5dMSYxc/Snk7CeNOfODwe8PqQZQgh+obGolVtkG8sn5gvI2pTrIOYhFzhekN0DOVL8Mie9gCjnlKgd7oVUOppBzgEwJk7dgCIecgyHVUD451c9sUnTJOSw4zDRHzmGYLFOLnC9A5BwGHV4mEFmNzMEm91KK9xCZkhi5sijk9Epjzvxg8DHVcErwA5VNrcQq2wg+OTsrb1NbBzlHssgp362PBMjZ1i9D4juKQk65ylFeaJWjKOQcLlPC5C0YzSHnKEg1hk9O9WcybXTJOTY4HGeOnGMx2TgtcnaGyDkWOrxxQGQ1MgebfDyleI+WKYmRawKFnOOlMWd+MPgTINVESvADlU2txPYyiU/OTsrblNdBzskscnaS3gA58/plSHynUMgpVznFC61yCoWcE2VKmLwFr3PIOQVSvcEnp/qrFHl0yTk1OJxmjpxTMdk0LXJ2gsg5FTq8aUBkNTIHm3w6pXi/LlMSI9cMCjmnS2PO/GDwZ0CqNynBD1Q2tRKrbDP55FR/Ty3OQc5ZLHLKcjALWnDCWxQmyvnfyqTQ7k15jCYzdzaHdm9Bqrc1Dh/YkjTO5Kd6RlSp/g4r1TOkN5bq71JSXc7/7v9Gqr/HSfV3IdUcSqq/J43/A6neQb0WR6rPZaV6B+mNnclc6ELMo1wIucp52EuWef8T12Y+59rMg1TvU15YzZfG2BEtYLyq9afIgmhrJhjWBZBqISWsgcxTK7HM+4DylmKhNMaAuQCoDxdU1sTh0VVWC9gg/lY8rnhU79u9PaaXy8hI77o3rrhIWCQSFouED0XCEpGwVCQsEwnLRcJHIuFjkbBCJKwUCZ+IhE9FwiqR8JlI+FwkrBYJa0TCWpGwTiT4RIIQCetFwgaRsFEkbBIJm0XCFpGwVSRsEwnbRcIOc88CFiVCssWY7ENMtgSTLcVkyzDZckz2ESb7GJOtwGQrMdknmOxTTLYKk32GyT7HZKsx2RpMthaTrcNkPkwmMNl6TLYBk23EZJsw2WZMtgWTbcVk2zDZdky2I9vTyRHhCZh5Di6SQB+HVbXzBlUrwqkWtXeoViLMzRP1nxzOtpEFIWzl5L4LVBUXhlYJp6p2pTCq9dBGov3zspl745C/m2tBr1wWQU+VFytV/u1+qFKdCcqSyKqss6FbGlH147kAL4ukOhg4huURVOXPH9ZHYVRdLjjST0Krqlx48J+GVJ3Ilh6rQqnKZk+iz0KoSuRItc9zqhrlTMjVOVQNQqTtmuyq7qGSe202VfeQV2CdQ/VBnXAXZUNQVXJRWNXG86rJpcKrNgVUpadEUG0+pzpYJpJqy1lVh0MRVVvPqGpmRFZt86ua1lKotkvVLc1Uqh3Iu4I8l0GqovSnMgk7lDVmk+OpzE7SU5mEHdIb+JR6k1+G+O1iPJXxr3KXF1rlrmhPLuqPYP0npxBt1P0IdndwuMfc267dmGyPzkewZ66dGpa7IfDuASIbffLsktNjz4t286/9dmW0Jjqu/V7WtZfv6/cC136iX4b47aNce7nKfV5olfv41367UjRB99rvDw4PmLv2+zHZAa1rvx269vuha3cAiKzGw1Rs8oOUj3ZkzdmHPUzdBa3yEOVh6kFp7DU2/0VWxm3KhJrvqIyHWZVRPvQ8DFTG+X4Z4neEUhnlKo94oVUeoXxMJfP7kMn8Psr5POUIpDpG/9qeP7kVonm68DgeHJ4wB4/jmOyEFjy2QfA4Dh3eCSCyGpmDTf4FpQQdlSmJleUvKVj4Qhpz5geD/yWk+ooS/EBlA2ogpPo62uISPTm3Km/TMAc5T7LIKT8xPAmQc5hfhvidopBTrvKUF1rlKQo5v5IpYfIWfMP5gscpSPUtn5xblaKhuuQ8HRx+Z46cpzHZd1rk3AqR8zR0eN8BkdXIHGzy7ykl6BuZkhi5fqCQ83tpzJkfDP4PkOpHSvADlU2txCrbT/z3nFuUt8nZ2OtnFjm3SG+ssdfP0LZ+oZBTrvIXrLHXLxRy/ihTwuQt+JVDzl8g1W98cm5RirQbe/0eHP5hjpy/Y7I/tMi5BSLn79Dh/QFEViNzsMn/pJSgX2VKYuT6i0LOP6UxZ34w+H9Bqr8pwQ9UNrUSq2z/8Mm5WXmbNgbJmRjHIudm6Q2Qc6NfBvglWhRyylVaXmiVFoWcf8uUMHgLEm0KOROhb2cluvjk3KwUbdAkZ2J8cJjLGDkT4zFZLi1ybkbImRgPHV4uILIamYNN7maUoERbpiRErsQEBjkT3dKYMz8Y/ARIlUip/4HKplZilS2JT85NytuU7iBnMoucm6Q3QM50vwxJwxQKOeUqU7zQKlMY5ExMlClh8hakcsiZAqly88m5SSlqoktOT3CYZo6cHkyWpkXOTRA5PdDhpQGR1cgcbPI8FHKmypTEyJWXQs480pgzPxj8vJAqHyX4gcqmVmKVLT+fnBuVt2mng5wFWOSUb9MKAOTc6Zch8S1IIadcZUEvtMqCFHLmkylh8hZcwiFnQUh1KZ+cG5WiHbrkLBQcFjZHzkKYrLAWOTdC5CwEHV5hILIamYNNfhmleF8iUxIjVxEKOS+Txpz5weAXgVSXU4IfqGxqJVbZruCTc4PyNlVzkLMoi5wbpDdAzmp+GRLfYhRyylUW80KrLEYh5+UyJUzeguIcchaDVFfyyblBKaqqS86rgsOrzZHzKkx2tRY5N0DkvAo6vKuByGpkDjb5NZTiXVymJEauaynkvEYac+YHg38tpLqOEvxAZVMrscpWgk/O9crbNNdBzpIscq6X3gA55/plSHxLUcgpV1nKC62yFIWc18mUMHkLrueQsxSkuoFPzvVK0Rxdct4YHN5kjpw3YrKbtMi5HiLnjdDh3QREViNzsMlvphTv62VKYuS6hULOm6UxZ34w+LdAqtKU4Acqm1qJVbYyfHIK5W1a6iBnWRY5hfQGyLnUL0PieyuFnHKVt3qhVd5KIWdpmRImb8FtHHLeCqlu55NTKEVLdMl5R3B4pzly3oHJ7tQip4DIeQd0eHcCkdXIHGzyuyjF+zaZkhi57qaQ8y5pzJkfDP7dkOoeSvADlU2txCrbvXxy+pS3qYaDnPexyOmT3gA5a/hlSHzvp5BTrvJ+L7TK+ynkvEemhMlb8ACHnPdDqgf55PQpRdV1yflQcFjOHDkfwmTltMjpg8j5EHR45YDIamQONnl5SvF+QKYkRq4KFHKWl8ac+cHgV4BUFSnBD1Q2tRKrbJX45FynvE3dHeSszCLnOukNkLO7X4bEtwqFnHKVVbzQKqtQyFlRpoTJW1CVQ84qkKoan5zrlKJuuuSsHhzWMEfO6pishhY510HkrA4dXg0gshqZg03+MKV4V5UpiZGrJoWcD0tjzvxg8GtCqlqU4Acqm1qJVbbafHKujYqcdVjkXCu9MXLWgeL7CIWccpWPYOR8hELOWjIlTN6CuhxyPgKp6vHJuZZHzvrB4aPmyFkfkz2qRc61EDnrQ4f3KIec2OSPUYp3XZmSGLkaUMj5mDTmzA8GvwGkepwS/EBlUyuxyvYEn5xrlLdploOcT7LIuUZ6A+Sc5Zch8W1IIadcZUMvtMqGFHI+LlPC5C1oxCFnQ0j1FJ+ca5SimbrkfDo4bGyOnE9jssZa5FwDkfNp6PAaA5HVyBxs8iaU4t1IpiRGrnQKOZtIY878YPDTIdUzlOAHKptaiVW2pnxyrlbepmkOcjZjkXO19AbIOc0vQ+LbnEJOucrmXmiVzSnkfEamhMlb8CyHnM0hVQs+OVcrRVN1ydkyOGxljpwtMVkrLXKuhsjZEjq8VkBkNTIHm/w5SvF+VqYkRq7nKeR8Thpz5geD/zykak0JfqCyqZVYZWvDJ+fnytu0y0HOtixyfi69AXLu8suQ+LajkFOusp0XWmU7Cjlby5QweQvac8jZDlJ14JPzc6Vopy45M4LDjubImYHJOmqR83OInBnQ4XUEIquROdjknSjFu71MSYxcnSnk7CSNOfODwe8MqV6gBD9Q2dRKrLK9yCfnZ8rbtN5Bzi4scn4mvQFyrvfLkPh2pZBTrrKrF1plVwo5X5ApYfIWvMQhZ1dI9TKfnJ8pRUKXnK8Eh6+aI+crmOxVLXJ+BpHzFejwXgUiq5E52OSvUYr3SzIlMXJ1o5DzNWnMmR8MfjdI1Z0S/EBlUyuxytaDT85VyttU2EHOnixyrpLeADkL+2VIfHtRyClX2csLrbIXhZzdZUqYvAW9OeTsBan68Mm5SikqpEvOvsFhP3Pk7IvJ+mmRcxVEzr7Q4fUDIquROdjk/SnFu7dMSYxcAyjk7C+NOfODwR8AqQZSgh+obGolVtkG8cn5qfI2LXaQczCLnJ9Kb4Cci/0yJL5DKOSUqxzihVY5hELOgTIlTN6CoRxyDoFUw/jk/FQpWqRLzszg0GuOnJmYzKtFzk8hcmZCh+cFIquROdjkWZTiPVSmJEau4RRyZkljzvxg8IdDqhGU4Acqm1qJVbaRfHJ+orxN/R3kHMUi5yfSGyBnf78Mie9oCjnlKkd7oVWOppBzhEwJk7dgDIecoyHVWD45P1GK+umSc1xwON4cOcdhsvFa5PwEIuc46PDGA5HVyBxs8gmU4j1GpiRGrokUck6Qxpz5weBPhFSTKMEPVDa1Eqtsk/nkXKm8TVUd5JzCIudK6Q2Qs6pfhsT3dQo55Spf90KrfJ1CzkkyJUzegjc45HwdUk3lk3OlUlRFl5zTgsPp5sg5DZNN1yLnSoic06DDmw5EViNzsMlnUIr3GzIlMXK9SSHnDGnMmR8M/puQaiYl+IHKplZilW0Wn5wrlLfJ6yDnWyxyrpDeADm9fhkS39kUcspVzvZCq5xNIedMmRImb8HbHHLOhlTv8Mm5QinK1CXnu8Hhe+bI+S4me0+LnCsgcr4LHd57QGQ1MgebfA6leL8tUxIj11wKOedIY878YPDnQqp5lOAHKptaiVW2+Xxyfqy8Te0d5HyfRc6PpTdAzvZ+GRLfBRRyylUu8EKrXEAh5zyZEiZvwUIOORdAqg/45PxYKWqnS85FweFic+RchMkWa5HzY4ici6DDWwxEViNzsMk/pBTvhTIlMXItoZDzQ2nMmR8M/hJItZQS/EBlUyuxyraMT86PlLdpuYOcy1nk/Eh6A+Rc7pch8f2IQk65yo+80Co/opBzqUwJk7fgYw45P4JUK/jkVJ/CMl1yrgwOPzFHzpWY7BMtcn4EkXMldHifAJHVyBxs8k8pxVu+LF6BkWsVhZyfSmPO/GDwV0GqzyjBD1Q2tRKrbJ/zyblceZuKO8i5mkVOCZvVADmL+2VIfNdQyClXucYLrXINhZyfyZQweQvWcsi5BlKt45NzuVJUTJecvuBQmCOnD5MJLXIuh8jpgw5PAJHVyBxs8vWU4r1WpiRGrg0Ucq6Xxpz5weBvgFQbKcEPVDa1Eqtsm/jkXKa8TakOcm5mkXOZ9AbImeqXIfHdQiGnXOUWL7TKLRRybpQpYfIWbOWQcwuk2sYnp/qZTYouObcHhzvMkXM7JtuhRc5lEDm3Q4e3A4isRuZgk++kFO+tMiUxcu2ikHOnNObMDwZ/F6TaTQl+oLKplVhl28Mn51LlbWrrIOdeFjnlu/W9ADnb+mVIfPdRyClXuc8LrXIfhZy7ZUqYvAX7OeTcB6kO8Mmp/kymjS45DwaHh8yR8yAmO6RFzqUQOQ9Ch3cIiKxG5mCTH6YU7/0yJTFyHaGQ87A05swPBv8IpDpKCX6gsqmVWGU7xifnEuVtyusg53EWOZdIb4Ccef0yJL4nKOSUqzzhhVZ5gkLOozIlTN6CLzjkPAGpvuSTU/1Vijy65PwqOPzaHDm/wmRfa5FzCUTOr6DD+xqIrEbmYJOfpBTvL2RKYuQ6RSHnSWnMmR8M/ilI9Q0l+IHKplZile1bPjnV31OLc5DzNIucH0pvaMGJ31GYKOf/LpNCu2/kMZrM3O85tPsOUv2gcfjAlqRxJj/VF0eV6j+yUn2x9MZS/SdKqsv5f/rfSPWfOan+E6T6hZLqP0vj/0CqL1KvxZHqv7JSfZH0xs7kV+hC/Ea5EHKVv2EvWX77n7g2v3OuzW+Q6g/KC6vfpTF2RH8yXtX6U+TPaGsmGNY/IdVflLAGMk+txDLvb8pbir+kMQbMP4H6cEFlTRweXWW9HNgg/lY8rnhU79u9PaaXy8hI77o3rrhI/EckxYkkSyTZIsklkuJFUi6R5BZJCSIpUSQliaRkkZQiklJFUm6R5BFJaSIpj0jKK5LyiaT8IqmASCooki4RSZeKpEIiqbBIukwkFRFJl4ukK0RSUXPPAv5JRGRJcZjMwmQ2JnNhsnhMlguTuTFZAiZLxGRJmCwZk6VgslRMlhuTeTBZGibLg8nyYrJ8mCw/JiuAyQpisksw2aWYrBAmK4zJLsNkRTDZ5ZjsCkxWNNvTyRHhCZh5Di6yGieEVbXzBlWJ4VSL2jtUSQhz85SK9mVJto0sCGErJ89/gariwtCqAk5V7UphVAWhjdwU7Ub2xl2BIBt65fIP8lQ5KU6p8m/XUqnOBMWOrMo6GzpXRNWP5wIcH0l1MHAMuSKoyp8/LHcYVZcLjjQ5tKrKhQefElJ1Ilt6pIZSlc2eRLlDqErkSDVPTlWjnAmZlkPVIETa5smu6h4qufNmU3UPeQXyOVQf1Al3US4JqkouCqu69LxqcqnwqkIBVekpEVSFz6kOlomkuuysqsOhiKoiZ1Q1MyKrztzHprUUKv/NvqWZSlUUeVeQpxSkuon+VCapqLLGbAo+lUkqRnoqk1RUegOfUm/yyxC/4oynMv5VFvdCqywe7clF/RGs/+QUoo2aH8EmXRkcXmXsbVfSlZjsKp2PYM9cOzUsr0TAm3QVENnok6e4nB56XpR0Jf/aX6GM1kTHtb+ade3l+/qrgWs/0S9D/K6hXHu5ymu80Cqv4V/7K5SiCbrX/trg8Dpz1/5aTHad1rW/Arr210LX7jogstE/TAUnL8H4aMdfc67JwoAJrbIk42FqUglp7DU2/0VWxsuVCTXfURlLsSqjfOhZCqiM8/0yxO96SmWUq7zeC63yesbHVP78Lmkyv2+gfJ6SdD2kupH+tb0k9WcF83ThcVNweLM5eNyEyW7WgsflEDxugg7vZiCyGpmDTX4LpQTdIFMSK8ulKVi4RRpz5geDXxpSlaEEP1DZgBoIqcpGW1yiJ2cR5W0a5iDnrSxyyk8MbwXIOcwvQ/xuo5BTrvI2L7TK2yjkLCNTwuQtuJ3yBY+k2yDVHXxyFlGKhuqS887g8C5z5LwTk92lRc4iEDnvhA7vLiCyGpmDTX43pQTdLlMSI9c9FHLeLY0584PBvwdS3UsJfqCyqZVYZbuP/57zMuVtcjT2SrqfRc7LpDfU2EvKEL8HKOSUq3wAauzln19hp0POe2VKmLwFD3LI+QCkeohPzsuUIt3GXknlgsPy5shZDpOV1yLnZRA5y0GHVx6IrEbmYJNXoJSgB2VKYuSqSCFnBWnMmR8MfkVIVYkS/EBlUyuxylaZT87Cytu00UHOKixyFpbeADk3+mWIX1UKOeUqq3qhVValkLOSTAmTt6Aah5xVIVV1PjkLK0UbdMlZIzh82Bw5a2Cyh7XIWRgiZw3o8B4GIquROdjkNSklqJpMSYxctSjkrCmNOfODwa8FqWpTgh+obGolVtnq8MlZSHmb0h3kfIRFzkLSGyBnul+G+NWlkFOusq4XWmVdCjlry5QweQvqcchZF1LV55OzkFLURJecjwaHj5kj56OY7DEtchaCyPkodHiPAZHVyBxs8gaUElRPpiRGrscp5GwgjTnzg8F/HFI9QQl+oLKplVhle5JPzkuVt2mng5wNWeS8VHoD5NzplyF+jSjklKts5IVW2YhCzidkSpi8BU9xyNkIUj3NJ+elStEOXXI2Dg6bmCNnY0zWRIucl0LkbAwdXhMgshqZg02eTilBT8mUxMj1DIWc8vX2M5z5weA/A6maUoIfqGxqJVbZmvHJeYnyNlVzkLM5i5yXSG+AnNX8MsTvWQo55Sqf9UKrfJZCzqYyJUzeghYccj4LqVryyXmJUlRVl5ytgsPnzJGzFSZ7Toucl0DkbAUd3nNAZDUyB5v8eUoJaiFTEiNXawo5n5fGnPnB4LeGVG0owQ9UNrUSq2xt+eQsqLxNcx3kbMciZ0HpDZBzrl+G+LWnkFOusr0XWmV7CjnbyJQweQs6cMjZHlJl8MlZUCmao0vOjsFhJ3Pk7IjJOmmRsyBEzo7Q4XUCIquROdjknSklqINMSYxcL1DI2Vkac+YHg/8CpHqREvxAZVMrscrWhU/OAsrbtNRBzq4schaQ3gA5l/pliN9LFHLKVb7khVb5EoWcL8qUMHkLXuaQ8yVI9QqfnAWUoiW65Hw1OHzNHDlfxWSvaZGzAETOV6HDew2IrEbmYJN3o5Sgl2VKYuTqTiFnN2nMmR8MfndI1YMS/EBlUyuxytaTT878yttUw0HOXixy5pfeADlr+GWIX28KOeUqe3uhVfamkLOHTAmTt6APh5y9IVVfPjnzK0XVdcnZLzjsb46c/TBZfy1y5ofI2Q86vP5AZDUyB5t8AKUE9ZEpiZFrIIWcA6QxZ34w+AMh1SBK8AOVTa3EKttgPjnzKW9Tdwc5h7DImU96A+Ts7pchfkMp5JSrHOqFVjmUQs5BMiVM3oJhHHIOhVSZfHLmU4q66ZLTcSmyzJHTi8mytMiZDyInVryzgMhqZA42+XBKCRomUxKbfwSFnMOlMWd+MPgjINVISvADlU2txCrbKD4580ZFztEscuaV3hg5R0PbGkMhp1zlGIycYyjkHClTwuQtGMsh5xhINY5Pzrw8co4PDieYI+d4TDZBi5x5IXKOhw5vAoec2OQTKSVorExJjFyTKOScKI0584PBnwSpJlOCH6hsaiVW2abwyZlHeZtmOcj5OouceaQ3QM5Zfhni9waFnHKVb3ihVb5BIedkmRImb8FUDjnfgFTT+OTMoxTN1CXn9OBwhjlyTsdkM7TImQci53To8GYAkdXIHGzyNyklaKpMSYxcMynkfFMac+YHgz8TUs2iBD9Q2dRKrLK9xSdnmvI2TXOQczaLnGnSGyDnNL8M8XubQk65yre90CrfppBTIvktk7fgHQ4534ZU7/LJmaYUTdUl53vB4Rxz5HwPk83RImcaRM73oMObA0RWI3OwyedSStA7MiUxcs2jkHOuNObMDwZ/HqSaTwl+oLKplVhle59PTo/yNu1ykHMBi5we6Q2Qc5dfhvgtpJBTrnKhF1rlQgo558uUMHkLPuCQcyGkWsQnp0cp2qlLzsXB4YfmyLkYk32oRU4PRM7F0OF9CERWI3OwyZdQStAHMiUxci2lkHOJNObMDwZ/KaRaRgl+oLKplVhlW84nZ27lbVrvIOdHLHLmlt4AOdf7ZYjfxxRyylV+7IVW+TGFnMtkSpi8BSs45PwYUq3kkzO3UiR0yflJcPipOXJ+gsk+1SJnboicn0CH9ykQWY3MwSZfRSlBK2RKYuT6jELOVdKYMz8Y/M8g1eeU4Acqm1qJVbbVfHKmKm9TYQc517DImSq9AXIW9ssQv7UUcspVrvVCq1xLIefnMiVM3oJ1HHKuhVQ+PjlTlaJCuuQUweF6c+QUmGy9FjlTIXIK6PDWA5HVyBxs8g2UErROpiRGro0Ucm6Qxpz5weBvhFSbKMEPVDa1Eqtsm/nkTFHepsUOcm5hkTNFegPkXOyXIX5bKeSUq9zqhVa5lULOTTIlTN6CbRxyboVU2/nkTFGKFumSc0dwuNMcOXdgsp1a5EyByLkDOrydQGQ1MgebfBelBG2TKYmRazeFnPIznt2c+cHg74ZUeyjBD1Q2tRKrbHv55ExW3qb+DnLuY5EzWXoD5OzvlyF++ynklKvc74VWuZ9Czj0yJUzeggMccu6HVAf55ExWivrpkvNQcHjYHDkPYbLDWuRMhsh5CDq8w0BkNTIHm/wIpQQdkCmJkesohZxHpDFnfjD4RyHVMUrwA5VNrcQq23E+OZOUt6mqg5wnWORMkt4AOav6ZYjfFxRyylV+4YVW+QWFnMdkSpi8BV9yyPkFpPqKT84kpaiKLjm/Dg5PmiPn15jspBY5kyByfg0d3kkgshqZg01+ilKCvpQpiZHrGwo5T0ljzvxg8L+BVN9Sgh+obGolVtlO88mZqLxNXgc5v2ORM1F6A+T0+mWI3/cUcspVfu+FVvk9hZzfypQweQt+4JDze0j1I5+ciUpRpi45fwoOfzZHzp8w2c9a5EyEyPkTdHg/A5HVyBxs8l8oJegHmZIYuX6lkPMXacyZHwz+r5DqN0rwA5VNrcQq2+98ciYob1N7Bzn/YJEzQXoD5GzvlyF+f1LIKVf5pxda5Z8Ucv4mU8LkLfiLQ84/IdXffHImKEXtdMn5z/lhcpw5cv4DyZLjtMiZAJHzH+TwkuOAyGpkDja5RSlBf8mUhMiVbDPImSz/1+bMjwU/2YZULkrwA5VNrYQqW3I8n5xu5W1aHiRnci4WOd3SGyDncr8MSUM3hZxylW4vtEo3g5zJLpkSJm9BAoWcyW5Ilcgnp/oUlmmSMzkpOEw2Rs7kJEyWrEVON0LO5CTo8JKByGpkDjZ5CqMEJSfIlMTIlUohZ4o05swPBj8VUuWmBD9Q2dRKrLJ5+OTMpbxNxR3kTGORM5f0BshZ3C9D4puHQk65yjxeaJV5KOTMLVPC5C3IyyFnHkiVj0/OXEpRMV1y5g8OC5gjZ35MVkCLnLkgcuaHDq8AEFmNzMEmL0gp3nllSmLkuoRCzoLSmDM/GPxLINWllOAHKptaiVW2QnxyxitvU6qDnIVZ5IyX3gA5U/0yJL6XUcgpV3mZF1rlZRRyXipTwuQtKMIh52WQ6nI+OdXPbFJ0yXlFcFjUHDmvwGRFtcgZD5HzCujwigKR1cgcbPJilOJdRKYkRq7iFHIWk8ac+cHgF4dUV1KCH6hsaiVW2a7ik9OlvE1tHeS8mkVO+W79aoCcbf0yJL7XUMgpV3mNF1rlNRRyXilTwuQtuJZDzmsg1XV8cqo/k2mjS84SwWFJc+QsgclKapHTBZGzBHR4JYHIamQONnkpSvG+VqYkRq7rKeQsJY0584PBvx5S3UAJfqCyqZVYZbuRT05beZvyOsh5E4uctvQGyJnXL0PiezOFnHKVN3uhVd5MIecNMiVM3oJbOOS8GVKV5pNT/VWKPLrkLBMcljVHzjKYrKwWOW2InGWgwysLRFYjc7DJb6UU71tkSmLkuo1CzlulMWd+MPi3QarbKcEPVDa1Eqtsd/DJqf6eWpyDnHeyyClDcie04OS7KEz0G2dSaHe7PEaTmXs3h3Z3Qap7NA4f2JI0zuSnelxUqX4vK9Xlhu/FUv0+SqrL+e/730j1+zmpfh+keoCS6vdLY36qJ/6jXosj1R8kpXriP9IbO5MHoQvxEONC+Ff5EPaS5aH/iWtTjnNtHoJU5SkvrMpJY+yIKjBe1fpTpEK0NRMMawVIVZES1kDmqZVY5lWivKWoKI0xYFYA6sMFlTVxeLCy7o0rdm4SK8Iswl3jrCqSSKoePqOKKJKqmn5VZJFU1XJs3gqrqh1UWeG96pxXWRFmfCSgsiKtq262Q7FCqupdqLJCe9W/QGWFmfFRp8oKt67HQiSLlUPVIKfKyun1eA6VFWLGJ7KrrFDrejJMElsXqBqGVlkXejUKqbKyzfhUKJWVfV1PR7hc1nlV4/AqK+jVJKzKcsyYHk5lOdf1jOLSW2dUTSOrrLNezSKqrHMzNo+ksgLrehYpRu6WSpUlvVqpVJZ/xueAwoo/AowrHtXzQm+P6eUyMtK77o0rLpIri+QqIrmqSK4mkquL5Boi+WGRXFMk1xLJtUVyHZH8iEiuK5LrieT6IvlRkfyYSG4gkh8XyU+I5CdFckOR3EgkPyWSnxbJjUVyE5GcLpKfEclNRXIzkdzc3DPIyomQrAomq4rJqmGy6pisBiZ7GJPVxGS1MFltTFYHkz2CyepisnqYrD4mexSTPYbJGmCyxzHZE5jsSUzWEJM1wmRPYbKnMVljTNYEk6VjsmcwWVNM1gyTNc/2qciI8K+8M8+9qJWvfGuFVbXzBlW1w6kWtXeo6iCv9fOUB5AUaSMLQtjKyZ+8QFVxYWhVQ6eqdqUwqkbQRipHu5G9cffG3iicU8XeKARUsTcKAVXsjUJgXf+FNwrQc5rK0GfoVZQqf5GtqlKdKcXVIquyzhbs6hFVP54r6zUiqQ4Giv/DEVTlzyOiZhhVlwtA8khoVZULcVM3pOpENijVC6Uqmx1d9UOoSuQA3KM5VY1yYvCxHKoGIWDZILuqeyikPp5N1T0keJ9wqD6oEw7PTwVVJReFVT19XjW5VHhV44Cq9JQIqibnVAfLRFKln1V1OBRR9cwZVc2MyCp/zSndtJZC5a85tzRTqZoj1SRPeUiFvOi5uM+gkpsra8wmx2dQz5I+g0r2ewPfydvklyF+LRifQflX2cILrbJFtCcX9RfO/CenEG3U/cJZy+CwlbmHPS0xWSudL5yduXZqWLaEwNsKiGz0ydNCTo99OtaSf+2bKaM10XHtn2Nde/k08Tng2k/0yxC/5ynXXq7yeS+0yuf5176ZUjRB99q3Dg7bmLv2rTFZG61r3wy69q2ha9cGiKzGR8fY5G0pX2SRNed57KPjFtAq21E+Om4rjb3G5r/IythUmVDzHZWxPasyyo9a2gOVcb5fhvh1oFRGucoOXmiVHShfypH53c5kfmdwvj3SAVJ1BBLpIuHRVCmapwuPTsFhZ3Pw6ITJOmvBoykEj07Q4XUGIquROdjkL1BKUIZMSawsv0jBwgvSmDM/GPwXIVUXSvADlQ2ogZCqa7TFJXpyPqO8TcMc5HyJRc5npDdAzmF+GeL3MoWccpUve6FVvkwhZxeZEiZvwStRniV4BV+GVK/yyfmMUjRUl5yvBYfdzJHzNUzWTYucz0DkfA06vG5AZDUyB5u8O6UEvSJTEiNXDwo5u0tjzvxg8HtAqp6U4Acqm1qJVbZe/Pec6crb5Gxj2ptFznTpjbUx7Q1tqw+FnHKVfbA2pn0o5OwpU8LkLejLIWcfSNWPT850pUi7jWn/4HCAOXL2x2QDtMiZDpGzP3R4A4DIamQONvlASgnqK1MSI9cgCjkHSmPO/GDwB0GqwZTgByqbWolVtiF8cjZR3qaNDnIOZZGzifQGyLnRL0P8hlHIKVc5zAutchiFnINlSpi8BZkccg6DVF4+OZsoRRt0yekYDjdHzixMNlyLnE0gcmJHPByIrEbmYKoRlBKUKVMSI9dICjlHSGPO/GDwR0KqUZTgByqbWolVttF8cjZW3qZ0BznHsMjZWHoD5Ez3yxC/sRRyylWO9UKrHEsh5yiZEiZvwTgOOcdCqvF8cjZWiproknNCcDjRHDknYLKJWuRsDJFzAnR4E4HIamQONvkkSgkaJ1MSI9dkCjknSWPO/GDwJ0OqKZTgByqbWolVttf55HxaeZt2Osj5BoucT0tvgJw7/TLEbyqFnHKVU73QKqdSyDlFpoTJWzCNQ86pkGo6n5xPK0U7dMk5Izh80xw5Z2CyN7XI+TREzhnQ4b0JRFYjc7DJZ1JK0DSZkhi5ZlHIOVMac+YHgz8LUr1FCX6gsqmVWGWbzSfnU8rbVM1BzrdZ5HxKegPkrOaXIX7vUMgpV/mOF1rlOxRyviVTwuQteJdDzncg1Xt8cj6lFFXVJeec4HCuOXLOwWRztcj5FETOOdDhzQUiq5E52OTzKCXoXZmSGLnmU8g5Txpz5geDPx9SvU8JfqCyqZVYZVvAJ2cj5W2a6yDnQhY5G0lvgJxz/TLE7wMKOeUqP/BCq/yAQs73ZUqYvAWLOOT8AFIt5pOzkVI0R5ecHwaHS8yR80NMtkSLnI0gcn4IHd4SILIamYNNvpRSghbJlMTItYxCzqXSmDM/GPxlkGo5JfiByqZWYpXtIz45Gypv01IHOT9mkbOh9AbIudQvQ/xWUMgpV7nCC61yBYWcy2VKmLwFKznkXAGpPuGTs6FStESXnJ8Gh6vMkfNTTLZKi5wNIXJ+Ch3eKiCyGpmDTf4ZpQStlCmJketzCjk/k8ac+cHgfw6pVlOCH6hsaiVW2dbwyfmk8jbVcJBzLYucT0pvgJw1/DLEbx2FnHKV67zQKtdRyLlapoTJW+DjkHMdpBJ8cj6pFFXXJef64HCDOXKux2QbtMj5JETO9dDhbQAiq5E52OQbKSXIJ1MSI9cmCjk3SmPO/GDwN0GqzZTgByqbWolVti18cj6hvE3dHeTcyiLnE9IbIGd3vwzx20Yhp1zlNi+0ym0Ucm6WKWHyFmznkHMbpNrBJ+cTSlE3XXLuDA53mSPnTky2S4ucT0Dk3Akd3i4gshqZg02+m1KCtsuUxMi1h0LO3dKYMz8Y/D2Qai8l+IHKplZilW0fn5yPR0XO/SxyPi69MXLuh7Z1gEJOucoDGDkPUMi5V6aEyVtwkEPOA5DqEJ+cj/PIeTg4PGKOnIcx2REtcj4OkfMwdHhHOOTEJj9KKUEHZUpi5DpGIedRacyZHwz+MUh1nBL8QGVTK7HKdoJPzgbK2zTLQc4vWORsIL0Bcs7yyxC/LynklKv80gut8ksKOY/LlDB5C77ikPNLSPU1n5wNlKKZuuQ8GRyeMkfOk5jslBY5G0DkPAkd3ikgshqZg03+DaUEfSVTEiPXtxRyfiONOfODwf8WUp2mBD9Q2dRKrLJ9xyfnY8rbNM1Bzu9Z5HxMegPknOaXIX4/UMgpV/mDF1rlDxRynpYpYfIW/Mgh5w+Q6ic+OR9TiqbqkvPn4PAXc+T8GZP9okXOxyBy/gwd3i9AZDUyB5v8V0oJ+lGmJEau3yjk/FUac+YHg/8bpPqdEvxAZVMrscr2B5+cjypv0y4HOf9kkfNR6Q2Qc5dfhvj9RSGnXOVfXmiVf1HI+btMCZO34G8OOf+CVP/wyfmoUrRTk5wpccGhZYycKaDM0iLnowg5U+KQw0uxgMhGnzng5DalBP0tUxIiV4qLQc4UWxpz5geD74JU8ZTgByqbWglVtpRcfHLWV96m9UFyprhZ5KwvvQFyrvfLkDRMoJBTrjLBC60ygUHOlHiZEiZvQSKFnCkJkCqJT876SpHQJWdycJhijpzJmCxFi5z1IXImQ4eXAkRWI3OwyVMZJSglUaYkRq7cFHKmSmPO/GDwc0MqDyX4gcqmVmKVLY1PznrK21TYQc48LHLWk94AOQv7ZUh881LIKVeZ1wutMi+FnB6ZEiZvQT4OOfNCqvx8ctZTigrpkrNAcFjQHDkLYLKCWuSsB5GzAHR4BYHIamQONvkllOKdT6YkRq5LKeS8RBpz5geDfymkKkQJfqCyqZVYZSvMJ2dd5W1a7CDnZSxy1pXeADkX+2VIfItQyClXWcQLrbIIhZyFZEqYvAWXc8hZBFJdwSdnXaVokS45iwaHxcyRsygmK6ZFzroQOYtCh1cMiKxG5mCTF6cU78tlSmLkupJCzuLSmDM/GPwrIdVVlOAHKptaiVW2q/nkfER5m/o7yHkNi5yPSG+AnP39MiS+11LIKVd5rRda5bUUcl4lU8LkLbiOQ85rIVUJPjkfUYr66ZKzZHBYyhw5S2KyUlrkfAQiZ0no8EoBkdXIHGzy6ynF+zqZkhi5bqCQ83ppzJkfDP4NkOpGSvADlU2txCrbTXxy1lHepqoOct7MImcd6Q2Qs6pfhsT3Fgo55Spv8UKrvIVCzhtlSpi8BaU55LwFUpXhk7OOUlRFl5xlg8NbzZGzLCa7VYucdSByloUO71YgshqZg01+G6V4l5YpiZHrdgo5b5PGnPnB4N8Oqe6gBD9Q2dRKrLLdySdnbeVt8jrIeReLnLWlN0BOr1+GxPduCjnlKu/2Qqu8m0LOO2RKmLwF93DIeTekupdPztpKUaYuOe8LDu83R877MNn9WuSsDZHzPujw7gciq5E52OQPUIr3PTIlMXI9SCHnA9KYMz8Y/Ach1UOU4Acqm1qJVbZyfHLWUt6m9g5ylmeRs5b0BsjZ3i9D4luBQk65ygpeaJUVKOR8SKaEyVtQkUPOCpCqEp+ctZSidrrkrBwcVjFHzsqYrIoWOWtB5KwMHV4VILIamYNNXpVSvCvKlMTIVY1CTvmkqhpnfjD41SBVdUrwA5VNrcQqWw0+OWsqb9NyBzkfZpGzpvQGyLncL0PiW5NCTrnKml5olTUp5KwuU8LkLajFIWdNSFWbT071KSzTJWed4PARc+Ssg8ke0SJnTYicdaDDewSIrEbmYJPXpRRv+bK4NkauehRy1pXGnPnB4NeDVPUpwQ9UNrUSq2yP8sn5sPI2FXeQ8zEWOR+W3gA5i/tlSHwbUMgpV9nAC62yAYWc9WVKmLwFj3PI2QBSPcEn58NKUTFdcj4ZHDY0R84nMVlDLXI+DJHzSejwGgKR1cgcbPJGlOL9uExJjFxPUcjZSBpz5geD/xSkepoS/EBlUyuxytaYT84aytuU6iBnExY5a0hvgJypfhkS33QKOeUq073QKtMp5HxapoTJW/AMh5zpkKopn5zqZzYpuuRsFhw2N0fOZpisuRY5a0DkbAYdXnMgshqZg03+LKV4PyNTEiNXCwo5n5XGnPnB4LeAVC0pwQ9UNrUSq2yt+OSsrrxNbR3kfI5FTvlu/TmAnG39MiS+z1PIKVf5vBda5fMUcraUKWHyFrTmkPN5SNWGT071ZzJtdMnZNjhsZ46cbTFZOy1yVofI2RY6vHZAZDUyB5u8PaV4t5YpiZGrA4Wc7aUxZ34w+B0gVQYl+IHKplZila0jn5zVlLcpr4OcnVjkrCa9AXLm9cuQ+HamkFOusrMXWmVnCjkzZEqYvAUvcMjZGVK9yCen+qsUeXTJ2SU47GqOnF0wWVctclaDyNkFOryuQGQ1Mgeb/CVK8X5BpiRGrpcp5HxJGnPmB4P/MqR6hRL8QGVTK7HK9iqfnOrvqcU5yPkai5xVpTe04JRuFCbK+btlUmj3ijxGk5nbnUO7bpCqh8bhA1uSxpn8VK8SVar3ZKV6FemNpXovSqrL+Xv9b6R6b06q94JUfSip3lsa/wdSvbJ6LY5U78tK9crSGzuTvtCF6Ee5EHKV/bCXLP3+J65Nf8616QepBlBeWPWXxtgRDWS8qvWnyMBoayYY1oGQahAlrIHMUyuxzBtMeUsxSBpjwBwI1IcLKmvi8Cgrq7sNsEX8zXhc8ajeuXt7TC+XkZHedW9ccZEyRKQMFSnDREqmSPGKlCyRMlykjBApI0XKKJEyWqSMESljRco4kTJepEwQKRNFyiSRMlmkTBEpr4uUN0TKVJEyTaRMFykzRMqbImWmSJklUt4SKbNFytvmngYMSYRkQzHZMEyWicm8mCwLkw3HZCMw2UhMNgqTjcZkYzDZWEw2DpONx2QTMNlETDYJk03GZFMw2euY7A1MNhWTTcNk0zHZDEz2JiabiclmYbK3MNlsTPZ2tueTI8IzMPMcXiSDRoZVtfMGVaPCqRa1d6hGI9TN81i0L0yybWRBCFs5+esXqCouDK16w6mqXSmMaiq0kSej3cjeuCswaEOvXoZAT5aHKlX+DQ9Tqc6EJTOyKuts8CK/8P3xXIgjvto8GDiI4RFU5c8fV7hM73LBoY4Jrapy4dGPDak6kS1BxoVSlc2eRuNDqErkSLYJOVWNcqbkxByqBiESd1J2VfdQ6T05m6p7yEswxaH6oE64qzItqCq5KKxq+nnV5FLhVTMCqtJTIqjePKc6WCaSauZZVYdDEVWzzqhqZkRWveVXNa2lUM2WqluaqVRvIxUgD/TbMVABurgnMylvK2vMJseTmXdIT2ZS3pbewCfVm/wyxO9dxpMZ/yrf9UKrfDfak4v6Y1j/ySlEG3U/hn0vOJxj7o3Xe5hsjs7HsGeunRqW70HgnQNENvrkeVdOjz0zeo9/7WcrozXRce3nsq69fGc/F7j2E/0yxG8e5drLVc7zQqucx7/2s5WiCbrXfn5w+L65az8fk72vde1nQ9d+PnTt3gciq/FAFZt8AeXjHVlz5mEPVN+FVrmQ8kB1gTT2Gpv/IivjW8qEmu+ojB+wKqN87PkBUBnn+2WI3yJKZZSrXOSFVrmI8lGVzO+FJvN7MeczlUWQ6kP6V/f8ya0QzdOFx5LgcKk5eCzBZEu14PEWBI8l0OEtBSKrkTnY5MsoJWixTEmsLC+nYGGZNObMDwZ/OaT6iBL8QGUDaiCk+jja4hI9OWcpb9MwBzlXsMgpPzNcAZBzmF+G+K2kkFOucqUXWuVKCjk/kilh8hZ8wvmSx0pI9SmfnLOUoqG65FwVHH5mjpyrMNlnWuScBZFzFXR4nwGR1cgcbPLPKSXoE5mSGLlWU8j5uTTmzA8GfzWkWkMJfqCyqZVYZVvLf885U3mbnM291rHIOVN6Y8291kHb8lHIKVfpw5p7+SjkXCNTwuQtEBxy+iDVej45ZypF2s29NgSHG82RcwMm26hFzpkQOTdAh7cRiKxG5mCTb6KUICFTEiPXZgo55Ud3mznzg8HfDKm2UIIfqGxqJVbZtvLJ+abyNm10kHMbi5xvSm+AnBv9MsRvO4WccpXbvdAqt1PIuUWmhMlbsINDzu2QaiefnG8qRRt0ybkrONxtjpy7MNluLXK+CZFzF3R4u4HIamQONvkeSgnaIVMSI9deCjn3SGPO/GDw90KqfZTgByqbWolVtv18cs5Q3qZ0BzkPsMg5Q3oD5Ez3yxC/gxRyylUe9EKrPEgh5z6ZEiZvwSEOOQ9CqsN8cs5QiprokvNIcHjUHDmPYLKjWuScAZHzCHR4R4HIamQONvkxSgk6JFMSI9dxCjmPSWPO/GDwj0OqE5TgByqbWolVti/45JyuvE07HeT8kkXO6dIbIOdOvwzx+4pCTrnKr7zQKr+ikPOETAmTt+BrDjm/glQn+eScrhTt0CXnqeDwG3PkPIXJvtEi53SInKegw/sGiKxG5mCTf0spQV/LlMTIdZpCzm+lMWd+MPinIdV3lOAHKptaiVW27/nknKa8TdUc5PyBRc5p0hsgZzW/DPH7kUJOucofvdAqf6SQ8zuZEiZvwU8ccv4IqX7mk3OaUlRVl5y/BIe/miPnL5jsVy1yToPI+Qt0eL8CkdXIHGzy3ygl6CeZkhi5fqeQ8zdpzJkfDP7vkOoPSvADlU2txCrbn3xyTlXeprkOcv7FIudU6Q2Qc65fhvj9TSGnXOXfXmiVf1PI+YdMCZO34B8OOf9GVKlxfHJOVYrmaJIz1QoObWPkTLUwma1FzqkIOVMt6PBsILLRZw44uYtSgv6RKQmRKzWeQc5UlzTmzA8GPx5S5aIEP1DZ1EqosqW6+eR8Q3mblgbJmZrAIucb0hsg51K/DEnDRAo55SoTvdAqExnkTM0lU8LkLUiikDM1EVIl88n5hlK0RJecKcFhqjlypmCyVC1yvgGRMwU6vFQgshqZg02em1GCUpNkSmLk8lDImVsac+YHg++BVGmU4Acqm1qJVbY8fHK+rrxNNRzkzMsi5+vSGyBnDb8MiW8+CjnlKvN5oVXmo5AzTaaEyVuQn0POfJCqAJ+crytF1XXJWTA4vMQcOQtisku0yPk6RM6C0OFdAkRWI3OwyS+lFO/8MiUxchWikPNSacyZHwx+IUhVmBL8QGVTK7HKdhmfnFOUt6m7g5xFWOScIr0Bcnb3y5D4Xk4hp1zl5V5olZdTyFlYpoTJW3AFh5yXQ6qifHJOUYq66ZKzWHBY3Bw5i2Gy4lrknAKRsxh0eMWByGpkDjb5lZTifYVMSYxcV1HIeaU05swPBv8qSHU1JfiByqZWYpXtGj45J0dFzmtZ5JwsvTFyXgvF9zoKOeUqr8PIeR2FnFfLlDB5C0pwyHkdpCrJJ+dkHjlLBYfXmyNnKUx2vRY5J0PkLAUd3vUccmKT30Ap3iVkSmLkupFCzhukMWd+MPg3QqqbKMEPVDa1EqtsN/PJOUl5m2Y5yHkLi5yTpDdAzll+GRLf0hRyylWW9kKrLE0h500yJUzegjIccpaGVGX55JykFM3UJeetweFt5sh5Kya7TYuckyBy3god3m1AZDUyB5v8dkrxLiNTEiPXHRRy3i6NOfODwb8DUt1JCX6gsqmVWGW7i0/OicrbNM1BzrtZ5JwovQFyTvPLkPjeQyGnXOU9XmiV91DIeadMCZO34F4OOe+BVPfxyTlRKZqqS877g8MHzJHzfkz2gBY5J0LkvB86vAeAyGpkDjb5g5Tifa9MSYxcD1HI+aA05swPBv8hSFWOEvxAZVMrscpWnk/OCcrbtMtBzgosck6Q3gA5d/llSHwrUsgpV1nRC62yIoWc5WRKmLwFlTjkrAipKvPJOUEp2qlLzirBYVVz5KyCyapqkXMCRM4q0OFVBSKrkTnY5NUoxbuSTEmMXNUp5KwmjTnzg8GvDqlqUIIfqGxqJVbZHuaTc7zyNq13kLMmi5zjpTdAzvV+GRLfWhRyylXW8kKrrEUhZw2ZEiZvQW0OOWtBqjp8co5XioQuOR8JDuuaI+cjmKyuFjnHQ+R8BDq8ukBkNTIHm7wepXjXlimJkas+hZz1pDFnfjD49SHVo5TgByqbWolVtsf45BynvE2FHeRswCLnOOkNkLOwX4bE93EKOeUqH/dCq3ycQs5HZUqYvAVPcMj5OKR6kk/OcUpRIV1yNgwOG5kjZ0NM1kiLnOMgcjaEDq8REFmNzMEmf4pSvJ+QKYmR62kKOZ+Sxpz5weA/DakaU4IfqGxqJVbZmvDJOVZ5mxY7yJnOIudY6Q2Qc7FfhsT3GQo55Sqf8UKrfIZCzsYyJUzegqYccj4DqZrxyTlWKVqkS87mweGz5sjZHJM9q0XOsRA5m0OH9ywQWY3MwSZvQSneTWVKYuRqSSFnC2nMmR8MfktI1YoS/EBlUyuxyvYcn5xjlLepv4Ocz7PIOUZ6A+Ts75ch8W1NIadcZWsvtMrWFHK2kilh8ha04ZCzNaRqyyfnGKWony452wWH7c2Rsx0ma69FzjEQOdtBh9ceiKxG5mCTd6AU7zYyJTFyZVDI2UEac+YHg58BqTpSgh+obGolVtk68ck5WnmbqjrI2ZlFztHSGyBnVb8Mie8LFHLKVb7ghVb5AoWcsmh2MnkLXuSQ8wVI1YVPztFKURVdcnYNDl8yR86umOwlLXKOhsjZFTq8l4DIamQONvnLlOL9okxJjFyvUMj5sjTmzA8G/xVI9Sol+IHKplZile01PjlHKW+T10HObixyjpLeADm9fhkS3+4UcspVdvdCq+xOIeerMiVM3oIeHHJ2h1Q9+eQcpRRl6pKzV3DY2xw5e2Gy3lrkHAWRsxd0eL2ByGpkDjZ5H0rx7iFTEiNXXwo5+0hjzvxg8PtCqn6U4Acqm1qJVbb+fHKOVN6m9g5yDmCRc6T0BsjZ3i9D4juQQk65yoFeaJUDKeTsJ1PC5C0YxCHnQEg1mE/OkUpRO11yDgkOh5oj5xBMNlSLnCMhcg6BDm8oEFmNzMEmH0Yp3oNkSmLkyqSQc5g05swPBj8TUnkpwQ9UNrUSq2xZfHKOUN6m5Q5yDmeRc4T0Bsi53C9D4juCQk65yhFeaJUjKOSUb2azTN6CkRxyjoBUo/jkVJ/CMl1yjg4Ox5gj52hMNkaLnCMgco6GDm8MEFmNzMEmH0sp3vJl8SiMXOMo5BwrjTnzg8EfB6nGU4IfqGxqJVbZJvDJOVx5m4o7yDmRRc7h0hsgZ3G/DInvJAo55SoneaFVTqKQc7xMCZO3YDKHnJMg1RQ+OdWHWkyXnK8Hh2+YI+frmOwNLXIOh8j5OnR4bwCR1cgcbPKplOI9WaYkRq5pFHJOlcac+cHgT4NU0ynBD1Q2tRKrbDP45FTfplQHOd9kkTNLegPkTPXLkPjOpJBTrnKmF1rlTAo5p8uUMHkLZnHIORNSvcUnp1qUokvO2cHh2+bIORuTva1FziyInLOhw3sbiKxG5mCTv0Mp3rNkSmLkepdCznekMWd+MPjvQqr3KMEPVDa1Eqtsc/jk9CpvU1sHOeeyyCnfrc8FbnZbvwyJ7zwKOeUq53mhVc6jkPM9mRImb8F8DjnnQar3+eRUfybTRpecC4LDhebIuQCTLdQipxci5wLo8BYCkdXIHGzyDyjFe75MSYxciyjk/EAac+YHg78IUi2mBD9Q2dRKrLJ9yCdnpvI25XWQcwmLnJnSGyBnXr8Mie9SCjnlKpd6oVUupZBzsUwJk7dgGYecSyHVcj451bmaR5ecHwWHH5sj50eY7GMtcmZC5PwIOryPgchqZA42+QpK8V4mUxIj10oKOVdIY878YPBXQqpPKMEPVDa1Eqtsn/LJqf6eWpyDnKtY5BwmvaEFp35GYaKc/7NMCu0+kcdoMnM/59DuM0i1WuPwgS1J40x+qg+NKtXXsFJ9qPTGUn0tJdXl/Gv/N1J9HSfV10IqHyXV10nj/0CqD1GvxZHqgpXqQ6Q3diYCuhDrKRdCrnI99pJl/f/EtdnAuTbrIdVGygurDdIYO6JNjFe1/hTZRPpG+yZItZkS1kDmqZVY5m2hvKXYLI0xYG4C6sMFlTVxeHSV9Xpgg/hb8bjiUb1v9/aYXi4jI73r3rjiInWrSN0mUreL1B0idadI3SVSd4vUPSJ1r0jdJ1L3i9QDIvWgSD0kUg+L1CMi9ahIPSZSj4vUEyL1C5H6pUj9SqR+LVJPitRTIvUbkfqtSD0tUr8Tqd+L1B/MPQvYmgjJtmGy7ZhsBybbicl2YbLdmGwPJtuLyfZhsv2Y7AAmO4jJDmGyw5jsCCY7ismOYbLjmOwEJvsCk32Jyb7CZF9jspOY7BQm+waTfYvJTmOy7zDZ95jsh2xPJyP8fkXmObhIAu0Nq2rnDar2hVMtau9Q7UeYm6d5tC9Lsm1kQQhbOfkXF6gqLgyt+tKpql0pjOoraCOtot3I3rgrEGRDr1y2Qk+VtylV/u1uV6nOBGVHZFXW2dDtjKj68VyAd0VSHQwcw+4IqvLnD2tPGFWXC470QGhVlQsP/mBI1Yls6XEolKps9iQ6HEJVIkeqHcmpapQzIY/mUDUIkbbHsqu6h0ru49lU3UNegRMO1Qd1wl2Ur4OqkovCqk6eV00uFV51KqAqPSWC6ptzqoNlIqm+PavqcCii6vQZVc2MyKrv/KqmtRSq76XqlmYq1Q/Iu4I8zSFVK/pTmdQflDVmk+OpzI+kpzKpP0hv4FPqTX4Z4vcT46mMf5U/eaFV/hTtyUX9Eaz/5BSijbofwf4cHP5i7m3Xz5jsF52PYM9cOzUsf4bA+wsQ2eiT5yc5Pfa86Gf+tf9eGa2Jjmv/K+vay/f1vwLXfqJfhvj9Rrn2cpW/eaFV/sa/9t8rRRN0r/3vweEf5q7975jsD61r/z107X+Hrt0fQGQ1HqZik/9J+WhH1pzfsIepP0Gr/IvyMPVPaew1Nv9FVsbvlAk131EZ/2ZVRvnQ82+gMs73yxC/fyiVUa7yHy+0yn8oH1PJ/P7LYH7njuN8nvIPNLlF/9qeP7kVonma8MhtB4cuY/DIbWMylxY8vkPgkduGDs8FRDb6zAEnj2eUoNz+lITKcu5cDCzkjpfGnPnB4OeCVG5K/Q9UNqAGQqtMiLa4RE/O08rbNCxIztyJLHKelt4AOYf5ZUgaJlHIKVeZ5IVWmcQgZ263TAmTtyCZ8gWP3EmQKoVPztNK0VBdcqYGh7nNkTMVk+XWIudpiJyp0OHlBiKrkTnY5B4KOZNlSmLkSqOQ0yONOfODwU+DVHkowQ9UNrUSq2x5+e85v1XeJkdjr9z5WOT8VnpDjb2kDIlvfgo55SrzQ429/PMr7HTImUemhMlbUIBDzvyQqiCfnN8qRbqNvXJfEhxeao6cl2CyS7XI+S1Ezkugw7sUiKxG5mCTF6IU7wIyJTFyFaaQs5A05swPBr8wpLqMEvxAZVMrscpWhE/Ob5S3aaODnJezyPmN9AbIudEvQ+J7BYWccpVXeKFVXkEh52UyJUzegqIccl4BqYrxyfmNUrRBl5zFg8MrzZGzOCa7Uouc30DkLA4d3pVAZDUyB5v8KkrxLipTEiPX1RRyXiWNOfODwb8aUl1DCX6gsqmVWGW7lk/OU8rblO4g53Uscp6S3gA50/0yJL4lKOSUqyzhhVZZgkLOa2RKmLwFJTnkLAGpSvHJeUopaqJLzuuDwxvMkfN6THaDFjlPQeSEvpSe+wYgshqZg01+I6V4l5QpiZHrJgo5b5TGnPnB4N8EqW6mBD9Q2dRKrLLdwifnSeVt2ukgZ2kWOU9Kb4CcO/0yJL5lKOSUqyzjhVZZhkLOm2VKmLwFZTnkLAOpbuWT86RStEOXnLcFh7ebI+dtmOx2LXKehMh5G3R4twOR1cgcbPI7KMW7rExJjFx3Ush5hzTmzA8G/05IdRcl+IHKplZile1uPjm/Vt6mag5y3sMi59fSGyBnNb8Mie+9FHLKVd7rhVZ5L4Wcd8mUMHkL7uOQ815IdT+fnF8rRVV1yflAcPigOXI+gMke1CLn1xA5H4AO70EgshqZg03+EKV43ydTEiNXOQo5H5LGnPnB4JeDVOUpwQ9UNrUSq2wV+OT8Snmb5jrIWZFFzq+kN0DOuX4ZEt9KFHLKVVbyQqusRCFneZkSJm9BZQ45K0GqKnxyfqUUzdElZ9XgsJo5clbFZNW0yPkVRM6q0OFVAyKrkTnY5NUpxbuyTEmMXDUo5KwujTnzg8GvAakepgQ/UNnUSqyy1eST80vlbVrqIGctFjm/lN4AOZf6ZUh8a1PIKVdZ2wutsjaFnA/LlDB5C+pwyFkbUj3CJ+eXStESXXLWDQ7rmSNnXUxWT4ucX0LkrAsdXj0gshqZg01en1K868iUxMj1KIWc9aUxZ34w+I9CqscowQ9UNrUSq2wN+OT8QnmbajjI+TiLnF9Ib4CcNfwyJL5PUMgpV/mEF1rlExRyPiZTwuQteJJDzicgVUM+Ob9QiqrrkrNRcPiUOXI2wmRPaZHzC4icjaDDewqIrEbmYJM/TSneT8qUxMjVmELOp6UxZ34w+I0hVRNK8AOVTa3EKls6n5wnlLepu4Ocz7DIeUJ6A+Ts7pch8W1KIadcZVMvtMqmFHI2kSlh8hY045CzKaRqzifnCaWomy45nw0OW5gj57OYrIUWOU9A5HwWOrwWQGQ1MgebvCWleDeTKYmRqxWFnC2lMWd+MPitINVzlOAHKptaiVW25/nkPB4VOVuzyHlcemPkbA3Ftw2FnHKVbTBytqGQ8zmZEiZvQVsOOdtAqnZ8ch7nkbN9cNjBHDnbY7IOWuQ8DpGzPXR4HTjkxCbPoBTvtjIlMXJ1pJAzQxpz5geD3xFSdaIEP1DZ1EqssnXmk/OY8jbNcpDzBRY5j0lvgJyz/DIkvi9SyClX+aIXWuWLFHJ2kilh8hZ04ZDzRUjVlU/OY0rRTF1yvhQcvmyOnC9hspe1yHkMIudL0OG9DERWI3OwyV+hFO8uMiUxcr1KIecr0pgzPxj8VyHVa5TgByqbWolVtm58ch5V3qZpDnJ2Z5HzqPQGyDnNL0Pi24NCTrnKHl5olT0o5HxNpoTJW9CTQ84ekKoXn5xHlaKpuuTsHRz2MUfO3pisjxY5j0Lk7A0dXh8gshqZg03el1K8e8qUxMjVj0LOvtKYMz8Y/H6Qqj8l+IHKplZilW0An5xHlLdpl4OcA1nkPCK9AXLu8suQ+A6ikFOucpAXWuUgCjn7y5QweQsGc8g5CFIN4ZPziFK0U5ecQ4PDYebIORSTDdMi5xGInEOhwxsGRFYjc7DJKSUo92CZkhi5vBRyZkpjzvxg8LHJsyjBD1Q2tRKrbMP55DysvE3rHeQcwSLnYekNkHO9X4bEdySFnHKVI73QKkdSyJklU8LkLRjFIedISDWaT87DSpHQJeeY4HCsOXKOwWRjtch5GCLnGOjwxgKR1cgcbPJxlOI9SqYkdm3GU8g5Thpz5geDPx5STaAEP1DZ1EosRBP55DykvE2FHeScxCLnIekNkLOwX4bEdzKFnHKVk73QKidTyDlBpoTJWzCFQ87JkOp1PjkPKUWFdMn5RnA41Rw538BkU7XIeQgi5xvQ4U0FIquROdjk0yjFe4pMSawsT6eQU37GM50zPxj86ZBqBiX4gcqmVmKV7U0+OQ8qb9NiBzlnssh5UHoD5FzslyHxnUUhp1zlLC+0ylkUcs6QKWHyFrzFIecsSDWbT86DStEiXXK+HRy+Y46cb2Oyd7TIeRAi59vQ4b0DRFYjc7DJ36UU77dkSmLkeo9CznelMWd+MPjvQao5lOAHKptaiVW2uXxyHlDepv4Ocs5jkfOA9AbI2d8vQ+I7n0JOucr5XmiV8ynknCNTwuQteJ9DzvmQagGfnAeUon665FwYHH5gjpwLMdkHWuQ8AJFzIXR4HwCR1cgcbPJFlOL9vkxJjFyLKeRcJI0584PBXwypPqQEP1DZ1Eqssi3hk3O/8jZVdZBzKYuc+6U3QM6qfhkS32UUcspVLvNCq1xGIeeHMiVM3oLlHHIug1Qf8cm5XymqokvOj4PDFebI+TEmW6FFzv0QOT+GDm8FEFmNzMEmX0kp3stlSmLk+oRCzpXSmDM/GPxPINWnlOAHKptaiVW2VXxy7lPeJq+DnJ+xyLlPegPk9PplSHw/p5BTrvJzL7TKzynk/FSmhMlbsJpDzs8h1Ro+OfcpRZm65FwbHK4zR861mGydFjn3QeRcCx3eOiCyGpmDTe6jFO/VMiUxcgkKOX3SmDM/GHwBqdZTgh+obGolVtk28Mm5V3mb2jvIuZFFzr3SGyBne78Mie8mCjnlKjd5oVVuopBzvUwJk7dgM4ecmyDVFj459ypF7XTJuTU43GaOnFsx2TYtcu6FyLkVOrxtQGQ1MgebfDuleG+WKYmRaweFnNulMWd+MPg7INVOSvADlU2txCrbLj459yhv03IHOXezyLlHegPkXO6XIfHdQyGnXOUeL7TKPRRy7pQpYfIW7OWQcw+k2scnp/oUlumSc39weMAcOfdjsgNa5NwDkXM/dHgHgMhqZA42+UFK8ZYvi/dh5DpEIedBacyZHwz+IUh1mBL8QGVTK7HKdoRPzt3K21TcQc6jLHLult4AOYv7ZUh8j1HIKVd5zAut8hiFnIdlSpi8Bcc55DwGqU7wyblbKSqmS84vgsMvzZHzC0z2pRY5d0Pk/AI6vC+ByGpkDjb5V5TifVymJEaurynk/Eoac+YHg/81pDpJCX6gsqmVWGU7xSfnLuVtSnWQ8xsWOXdJb4CcqX4ZEt9vKeSUq/zWC63yWwo5T8qUMHkLTnPI+S2k+o5PTvUzmxRdcn4fHP5gjpzfY7IftMi5CyLn99Dh/QBEViNzsMl/pBTv0zIlMXL9RCHnj9KYMz8Y/J8g1c+U4Acqm1qJVbZf+OTcqbxNbR3k/JVFTvlu/VeAnG39MiS+v1HIKVf5mxda5W8Ucv4sU8LkLfidQ87fINUffHKqP5Npo0vOP4PDv8yR809M9pcWOXdC5PwTOry/gMhqZA42+d+U4v27TEmMXP9QyPm3NObMDwb/H0TliaMEP1DZ1EqosnksPjl3KG9T3iA5PTaLnDukN0DOvH4Z4OdxUcgpV+nyQqt0Mcjp8aeEyVsQTyGnxwWpcvHJqf4qRR5NcnrcwWGCMXJ63JgsQYucOxByetzQ4SUAkdXIHGzyREYJ8sTLlITI5UlikNOTKI0584PBT4JUyZTgByqbUglWthQ+OdXfU4tzkDOVRc7t0htasCc3hYlyfqCRtA7tkuUxmsxcD4d2uSFVmsbhA1uSxpn8VN8WVarnYaX6NumNpXpeSqrL+fP+b6R6Pk6q54VU+Smpnk8a/wdSfat6LY5UL8BK9a3SGzuTAtCFKEi5EHKVBbGXLAX/J67NJZxrUxBSXUp5YXWJNMaOqBDjVa0/RQpFWzPBsBaCVIUpYQ1knlqJZd5llLcUhaUxBsxCQH24oLLaw3tML5eRkd51b9xBpAjGxUQxUUwUE/3nRS7wtZ8bmg+zGmbOaqg5qyHmrAabsxpkzmqgOasB5qz6m7PqZ86qrzmrPuasepuz6mXOqqc5qx7mrLqbs+pmzuo1c1avmrN6xZzVy+asXjJn1dWcVRdzVi+as3rBnFVnc1adzFl1NGeVYc6qgzGrhB3mrLabs9pmzmqrOast5qw2m7PaZM5qozmrDeas1puzEuasfOas1pmzWmvOao05q9XmrD43Z/WZOatV5qw+NWf1iTmrleasVpiz+tic1UfmrJabs1pmzmqpOasl5qw+NGe12JzVImNWSUXNWV1hzupyc1ZFzFldZs6qsDmrQuasLjVndYk5q4LmrAqYs8pvziqfOau85qzymLNKM2flMWeV25xVqjmrFHNWyeasksxZJZqzSjBn5TZnlcucVbw5K5c5K9uclWXOKs6YVeI/xqySm5uzambOqqk5q2fMWaWbs2pizqqxOaunzVk9Zc6qkTmrhuasnjRn9YQ5q8fNWTUwZ/WYOatHzVnVN2dVz5xVXXNWj5izqmPOqrY5q1rmrGqas3rYnFUNc1bVzVlVM2dV1ZxVFXNWlY1Zpbxtzmq2Oau3zFnNMmc105zVm+asZpizmm7Oapo5q6nmrN4wZ/W6Oasp5qwmm7OaZM5qojmrCeasxpuzGmfOaqw5qzHmrEabsxplzmqkOasR5qyGm7PKMmflNWdl7jvbKea+s51i7jvbKea+s536gzmr781ZfWfO6rQ5q2/NWX1jzuqUOauT5qy+Nmf1lTmrL81ZfWHO6oQ5q+PmrI6ZszpqzuqIOavD5qwOmbM6aM7qgDmr/eas9pmz2mvOao85q93mrHaZs9ppzsrcd7ZTzX1nO9Xcd7ZTge9sR9EjLO5gNOI47/lfos4jPEWE53LhuUJ4igpPMeEpLjxXCs9VwnO18FwjPNcKz3XCU0J4SgpPKeG53lzTsauLQ7JrMNm1mOw6TFYCk5XEZKUw2fXFL2xHACWSB/hymo7t5RzbKzi2RTm2xTi2xTm2V3Jsr1K27/v7QtuRWUDrCfeQLKAtoHuoUhXn/7Vnlcq/EXcmtN2ro40itt0B0HYHQtsdBG13MLTda6Ld7nBo8v7Q5NdK1eWnivw0z1Vg5HX2yV0PrvyrYaH4Sjf+VHVG82aZJd+b0LzFTpEnjXMiPaAT6QmdSC8oKL2hoFzH2e6r0HZfg7bbDdpud2i7JTgJ+Ao0eUmpumb7hwm/vDUsft7O0+1e/On64WurDFk++74scdMD3esdGfVNTZEnhXMinaETeQE6kRehoHSBglKKs90O0HYzoO12hLbbCdru9TrYVLdWukFp6wrxqnBuvZbpZW+/o0K7Nu0z5IvCVu3aDpcv0oMvEt3lzI89NzhflTtfejtfXztfRDtfKTtfDjtf8zpf2I5xTFzcMb7SMb7KMXYswu1YhNuxCLdjEe4SY4TnRuG5SXhuFp5bhKe08JQRnrLCc2use1RMFBPFRP9zolj3qIBVrHsUbhXrHoVbxbpH4Vax7lG4Vax7FG4V6x6FW8W6R+FWse5RuFWsexRuFesehVvFukfhVrHuUbhVrHsUbhXrHoVbxbpH4Vax7lG4Vax7FG4V6x6FW8W6R+FWse5RuFWsexRuFesehVvFukfBVrHuUVFYxbpH4Vax7lG4Vax7FG4V6x6FW9U1ZxXrHoVbxbpH4Vax7lGwVax7VBRWse5RuFWsexRuFesehVvFukfhVrHuUbhVrHsUbhXrHgVbxbpHRWEV6x6FW8W6R+FWse5RuFWsexRuFesehVvFukfhVrHuUcTuUQ9d0D3qNuG5XXjuEJ47hecu4blbeO4RnnuF5z7huV94HhCeB4XnIeEpJzzlhaeCue5Rt2E9lW7HZHdgsjsx2V2Y7G5Mdg8muxeT3YfJ7sdkD2CyBzHZQ5isHCYrj8kqFNdoZpGwNQtoZpGwLQtoZpGwPQtoZpGwAykMntuAwqCx3Y3QdjdB290MbXcLtN3bo90u1DwmYQM0+R1ZSPeiopwTWQ2dyBroRNZCQVkHBeVOznY/hba7CtruZ9B2P4e2excnAT+BJr87C+ledBnnRJZCJ7IMOpHlUFA+goJyD2e7i6DtLoa2+yG03SXQdu+lbDepCLLdpMuR7SZdgWw3qSi03fs4270U2m4haLuFoe1eBm33fkp5SboEmvwBiG83cU4kDTqRPNCJ5IWCkg8KyoOc7aZA202Ftpsb2q4H2u5DnARMhiYvB/GN064uyQWdSDx0IrmgoLihoJSnbDfxH2i7cdB2LWi7NrTdCsB2o2+j57nN+YzA+SDA+W7f+Zbe+b7d+ebc+Q7c+Tbb+V7a+YbZ+a7Y+dbX+f7W+SbW+U7V0UbPc6NjfJNjfLNjfItjXNoxLuMYl3WMbx0jPBWFp5LwVBaeKsJTVXiqCU914akRa6MXE8VEMdH/nCjWRi9gFWujh1vF2ujhVrE2erhVrI0ebhVro4dbxdro4VaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6uFWsjR5uFWujh1vF2ujhVrE2erhVrI0ebhVro4dbxdro4VaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6sFWsjV4UVrE2erhVrI0ebhVro4dbxdro4VZ1zVnF2ujhVrE2erhVrI0ebBVroxeFVayNHm4Va6OHW8Xa6OFWsTZ6uFWsjR5uFWujh1vF2ujBVrE2elFYxdro4VaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6uFWsjR6xjV73C9roPSw8NYWnlvDUFp46wvOI8NQVnnrCU194HhWex4SngfA8LjxPCM+TwtPQXBu9h7EmaTUxWS1MVhuT1cFkj2CyupisHiarj8kexWSPYbIGmOxxTPYEJnsSkzXUaaOX/EwW0HUiuWkW0HUiuVkW0HUiuTlSGDzARxM6230a2m5jaLtNoO2mQ9utGe12oS4vyU9Bk9fKQtoMVeacyGPQiTSATuRxKChPQEGpzdluXWi79aDt1oe2+yi03TqcBHwEmtyvUrcZ4vTdSa4OnUgN6EQehoJSEwpKXc52K0PbrQJttyq03WrQdutRtpsyC9luylvIdlNmI9tNeRvabn3OdqdD250BbfdNaLszoe0+SikvKdOgyR+D+PYk50QmQicyCTqRyVBQpkBBacDZ7lhou+Og7Y6HtjsB2u7jnAQcA03+BMS3xzgn4oVOJAs6ESwoI6CgkO7bEGi7Q6HtDoO2mwltF/hCp04bvYedzwicDwKc7/adb+md79udb86d78Cdb7Od76Wdb5id74qdb32d72+db2Kd71SdbfQqOsaVHOPKjnEVx7iqY1zNMa7uGNcYIzyNhOcp4XlaeBoLTxPhSReeZ4SnaayNXkwUE8VE/3OiWBu9gFWsjR5uFWujh1vF2ujhVrE2erhVrI0ebhVro4dbxdro4VaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6uFWsjR5uFWujh1vF2ujhVrE2erhVrI0ebhVro4dbxdro4VaxNnq4VayNHm4Va6OHW8Xa6MFWsTZ6UVjF2ujhVrE2erhVrI0ebhVro4db1TVnFWujh1vF2ujhVrE2erBVrI1eFFaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6uFWsjR5uFWujB1vF2uhFYRVro4dbxdro4VaxNnq4VayNHm4Va6OHW8Xa6OFWsTZ6xDZ6H1/QRq+Z8DQXnmeFp4XwtBSeVsLznPA8LzythaeN8LQVnnbC0154OghPhvB0NNdGrxnWJK05JnsWk7XAZC0xWStM9hwme16nHVzq6Syge0Lqd1lA94TU77OA7gmpPyAJ7gE+atbZ7klou6eg7X4DbfdbaLvNo90u1Jgj9Wto8mezkHY5rTgnchQ6kWPQiRyHgnICCkoLznYPQts9BG33MLTdI9B2W3IS8AA0easspF1Oc86J7IROZBd0IruhoOyBgvIcZ7tboe1ug7a7HdruDmi7z0e7XeiFkqc1x7YNx7Ytx7Ydx7Y9x7YDxzaDY9tRx1Z5TT3K39BN0Ooe1cz50tj5+tf5Itf5Stb5ctX5mtT5wjM4dj/kGJczM/Z0cnaPauQYP+UYP+0YN3aMmzjG6Y7xM45x0zHC01l4XhCeF4Wni/B0FZ6XhOdl4Xnlwu5RicODb5Ow5AB+ZTuad17xUYituMDbtBHC86rwvCY83YSnu7k3YK8mQrLXMFk3TNY9MSfzVLuRxwBduVcRMnpeQ8jo6YaQ0QO0wrjYDHzhX5KBPYSnp/D0Ep7e5jKwB5YzPTFZL0zWWysDX4AysAeUgT2hDOwFZWBvfga++C/JwD7C01d4+glPf3MZ2AfLmb6YrB8m66+VgS9CGdgHysC+UAb2gzKwPz8Du/xLMnCA8AwUnkHCM9hcBg7AcmYgJhuEyQZrZWAXKAMHQBk4EMrAQVAGDuZnYNd/SQYOEZ6hwjNMeDLNZeAQLGeGYrJhmCxTKwO7QhkINRT2QA2FPVBDYU8mPwNf+pdkoFd4soRnuPCMMJeBXixnsjDZcEw2QisDX4Iy0AtlINTB2wM9p/WM4Gfgy/+SDBwpPKOEZ7TwjDGXgSOxnBmFyUZjsjFaGfgylIEjoQwcBWXgaCgDx/Az8JV/SQaOFZ5xwjNeeCaYy8CxWM6Mw2TjMdkErQx8BcpA6O9KeKC/K+GB/q6EZ0K0GeiKMgOtaPJvb1yxc5ZWBP3Zp1YKUdzZp1YKUdzZp1YKkVR1d2zVCqvqEVRZ4b16nldZEWbsFVBZkdbVO9sRWCFVfS5UWaG9+l6gssLM2M+pssKtq3+I1LByqAbkVFk5vQbmUFkhZhyUXWWFWtfgMClrXaAaElplXeg1NKTKyjbjsFAqK/u6Iv15Deu8KsKFs4JeWWFVlmPG4eFUlnNdqr9yYsUFyKkQxZ0lp0IUd5acCpFUYX+SZpxSZcWdrZQKURxWKaOqjKXUhll+xzbtWzcXnonnv392jfBMEp7JwjNFeF4XnjeEZ6rwTBOe6cIzQ3jeFJ6ZwjNLeN4SntnC87bwvCM87wrPe8IzR3jmCs884ZkvPO8LzwLhWSg8HwjPIuFZLDwfCs8S4VkqPMuEZ7nwfCQ8HwvPCgzWF/Ua5Xqzr1CuiUZse51hXSk8nwjPp8KzSng+E57PhWe18KwRnrXCs054fMIjhGe98GwQno3Cs0l4NgvPFuHZKjzbhGe78OwQnp3Cs0t4dgvPHuHZKzz7hGe/8BwQnoPCc0h4DgvPEeE5KjzHzL0GWonJPsFkn2KyVZjsM0z2OSZbjcnWYLK1mGwdJvNhMoHJ1mOyDZhsIybbhMk2Y7ItmGwrJtuGybZjsh2YbCcm24XJdmOyPZhsLybbh8n2Y7IDmOwgJjuEyQ5jsiOY7CgmO2Zd+B5vb9y1CMig93gr1e/x/pH1Wq36S5Zrteo3Wa3Vqu9ksVarJMI+V6tWyFKtVsnPxtdA73bXKlV/S9U6pepPqfIpVb9KlVCqTkvVeqXqoFRtUKo+lqqNSlV3qdoEve/frFL97VdtUan+9KuU35v81a9Sfm/ytF+l/N7kQb9qh0r1sV+l/Ppqd79K+fXVM+8RVF9f/eaMao9CdfKMaq9C9cUZ1T6F6uAZ1X6FauMZ1QGFas4ZleoL2O3PqBRfwM46fUal+AK296zqSGTVsLMqxffgB51VAb/yqPNtQ8UvZc79/N70C2y9w8+6Hgzvap351tlKaP4870a5rXPzdzgUcf7X4PnfizasI/4rz+bUG1mvtZH/+CM/9UY26J7If/ZJonojG/U3EnZuwgNK9UY2XeRGQq7B/HNP9UY2X/RG/iOPU9Ub2WLiRPhPadUb2WpmIxfMTXj4q97INoMbOb8G88+U1RvZbnQjtEfV6o3siHIjw8+8sqiZEfmVRTf5ysIvbFpLIex+TnhunR+EFfaAX6vs0trRGdeS4Rfa07nQyRF21MshLB1p673hHe3W39EZ1+4h5+9zYeilcEHohfbNLqwYZkf94B3tuZgd1Q4X0f45dnRGWCKHcEBIYaOcjgPhHe29yDPq0aNBiB0NCrHQ7qG2Pjj01v3CLhcIh8A72nfROzrjWuXChQ4Nt9AT2XY0LIywbPatZ8I72m9mR2dcy5+f3xs+9FKYGVxoViRhO8eOhsM7OmBqR4ucER0RcUeO5yEjlcJzDwJGwTs6aPCMKhz68dyORisWejCw9THqrZ99IjAO3tEhozsKPOocD5zRmWd8E84KFSuwznxQDO7ocLQvfvbGFcI+N4cexkD9CfK8C6neg1TrIdUGSLURUm2CVJsh1RZItRVSbYNU2yEV9HvveXZBqt2QCmoskGcvpNoHqfZDKqgLRJ6DkOoQpIr6Ck+C3plMgi7wF9gzT+zJJPaeAHudjb12xV4PYq+xsNct2GsBjK8YszgcwB62h2/x6Dpvm/OT2ffrtOvYvFWzdm3L1mme0aZzp/ROrdq1zRrh+KT2uGN8wjH+wjH+Ur72+Up4vhaek8JzKscz9TjlDZgsP4/FKPpdlNHzQq9LPpHrx+b/3vSzmLMB+Ao642+gKvUdpCJtZDK0kW+xszZ2Iheb+N84xt9mS/zTwiM/3P9eeH7QSPwpwvMplng/UBL/U7l+bP4fOflyGsqXH6GUhnrAsTYyBdrIT9hZGzuRi038Hx3jn7Il/s/C84vw/Co8v2kk/uvCswpLvJ8oib9Krh+b/2dOvvwM5cvvUEr/BKlIG3kd2sgf2FkbO5GLTfzfHeM/siX+n8Lzl/D8LTz/aCT+G8LzGZZ4v1AS/zO5fmz+Xzn58icyeVoclNK/QCrSRt6ANmJhZ23sRC4y8dPiHGPrwsRPs0WaS6TFi7RcGok/VXg+xxLvN0rify7Xj83/OyVf0mwoX9xQSv8GqTgb8UyFNpKAnbWxE7nYxHc7xgnZEj9RpCWJtGSRlqKR+NOEZzWWeH9QEn+1XD82/5+cxE+E8iUVSuk/IBVnI55p0EZyY2dt7EQuNvFTHePc2RLfI9LSRFoekZZXI/GnC88aLPH+oiT+Grl+bP6/OYnvgfIlH5TSf0EqzkY806GN5MfO2tiJXGzi53OM82dL/AIiraBIu0SkXaqR+DOEZy2WeP9QEn+tXD80f944TuIXgPKlEJTS/yAq0kY8M6CNFMbO2tiJXGziF3KMC2dL/MtEWhGRdrlIu0Ij8d8UnnVY4lmUxF8n14/Nb3MS/zIoX4pCKW1BKs5GPG9CGymGnbWxE7nYxC/qGBfLlvjFRdqVIu0qkXa1RuLPFB4flnguSuL75Pqx+eM5iV8cypdroJR2QSrORjwzoY1ci521sRO52MS/xjG+NlviXyfSSoi0kiKtlEbizxIegSVeLkriC7l+bH43J/Gvg/Lleiilc0EqzkY8s6CN3ICdtbETudjEv94xviFb4t8o0m4SaTeLtFs0Ev8t4VmPJV4CJfHXy/Vj8ydyEv9GKF9KQymdAKk4G/G8BW2kDHbWxk7kYhO/tGNcJlvilxVpt4q020Ta7RqJP1t4NmCJl0RJ/A1y/dj8yZzELwvlyx1QSidBKs5GPLOhjdyJnbWxE7nYxL/DMb4zW+LfJdLuFmn3iLR7NRL/beHZiCVeCiXxN8r1Y/OnchL/Lihf7oNSOgVScTbieRvayP3YWRs7kYtN/Psc4/uzJf4DIu1BkfaQSCunkfjvCM8mLPFyUxJ/k1w/Nr+Hk/gPQPlSHkrp3JCKsxHPO9BGKmBnbexELjbxyzvGFbIlfkWRVkmkVRZpVTQS/13h2YwlXhol8TfL9WPz5+EkfkUoX6pCKZ0GqTgb8UC/FpFWDTtrYydysYlf1TGuli3xq4u0GiLtYZFWUyPx3xOeLVji5aUk/ha5fmz+fJzErw7lSy0opfNCKs5GPNBv+qTVxs7a2IlcbOLXcoxrZ0v8OiLtEZFWV6TV00j8OcKzFUu8/JTE3yrXj81fgJP4daB8qQ+ldH5IxdmIZw60kUexszZ2Iheb+PUd40ezJf5jIq2BSHtcpD2hkfhzhWcblngFKYm/Ta4fm/8STuI/BuXLk1BKF4RUnI145kIbaYidtbETudjEf9Ixbpgt8RuJtKdE2tMirbFG4s8Tnu1Y4l1KSfztcv3Y/IU4id8IypcmUEpfCqk4G/HMgzaSjp21sRO52MR3/KnptPRsif+MSGsq0pqJtOYaiT9feHZgiVeYkvg75Pqx+S/jJP4zUL48C6V0YUjF2YhnPrSRFthZGzuRi018xx+PT2uRLfFbirRWIu05kfa8RuK/Lzw7scQrQkn8nXL92PyXcxK/JZQvraGULgKpOBvxvA9tpA121sZO5GITv7Vj3CZb4rcVae1EWnuR1kEj8RcIzy4s8a6gJP4uuX5s/qKcxG8L5UsGlNJXQCrORjwLoI10xM7a2IlcbOJnOMYdsyV+J5HWWaS9INJe1Ej8hcKzG0u8YpTE3y3Xj81fnJP4naB86QKldDFIxdmIZyG0ka7YWRs7kYtN/C6Ocddsif+SSHtZpL0i0l7VSPwPhGcPlnhXUhJ/j1w/Nv9VnMSH/jJy2mtQSl8JqTgb8XwAbaQbdtbGTuRiE/81x7hbtsTvLtJ6iLSeIq2XRuIvEp69WOJdTUn8vXL92PzXcBK/O5QvvaGUvhpScTbiWQRtpA921sZO5GITv7dj3Cdb4vcVaf1EWn+RNkAj8RcLzz4s8a6lJP4+uX5s/us4id8XypeBUEpfC6k4G/EshjYyCDtrYydysYk/0DEelC3xB4u0ISJtqEgbppH4HwrPfizxSlASf79cPzZ/SU7iD4byJRNK6RKQirMRz4fQRsCzNnYiF5v4mY6xN1viZ4m04SJNDkZqJP4S4TmABaMUJfEPyPVj81/PSfwsKF9GQSldClJxNuJZAm1kNHbWxk7kYhN/lGM8OlvijxFpY0XaOJE2XiPxlwrPQSzxbqAk/kG5fmz+GzmJPwbKlwlQSt8AqTgb8SyFNjIRO2tjJ3KxiT/BMZ6YLfEnibTJIm2KSHtdI/GXCc8hLPFuoiT+Ibl+bP6bOYkPNUxPewNK6ZsgFWcjnmXQRqZiZ23sRC428d9wjKdmS/xpIm26SJsh0t7USPzlwnMYS7xbKIl/WK4fm780J/GxBmQzoZS+BVJxNuJZDm1kFnbWxk7kYhN/pmM8K1vivyXSZou0t0XaOxqJ/5HwHMESrwwl8Y/I9WPzl+UkPvY72tBfr8lbBlJxNuL5CNrIe9hZGzuRi038dx3j97Il/hyRNlekzRNp8zUS/2PhOYol3q2UxD8q14/Nfxsn8bGvsb8PpfStkIqzEc/H0EYWYGdt7EQuNvHfd4wXZEv8hSLtA5G2SKQt1kj8FcJzDEu82ymJf0yuH5v/Dk7iY5/0fwil9O2QirMRzwpoI0uwszZ2Iheb+B86xkuyJf5SkbZMpC0XaR9dGC/kQR3U/jptabRHBaVy2seRbQ+sqVT6QlvlsxX8D/SlrUB2HvujeudVRv+oHufGpH3sGK84Py6V7b6sFGmfiLRPRdqqHrPLZ7Rq3bpVC7//iHhvjxn1WrVt0br52QRW7iNtpXofmcMzM9VWOS+u6l8IF/Tlk7TPgMlzhnp63XK1qlTKcoTzs+I6N/zzyLNP6zdzvI7t6si2J05X+kfHdk1Y2/jAQCstP3eMV58fl3D8dI1My7UibZ1I84k0ceHahwPZUBJK17VQFNaTLud6x3idY+xzjIWMwwaRtlGkbRJpmy+8nrmyekwvl5GR3nW48kr5EwC7w8CH05gR8plmlNVlw3+xuqR9BuXKFkPVZUvxC8/a7f2fCtYWKFhbDQVra3GdNW6F1rjN0Bq3ZTvQhKgPdCvvQFVhQP4YUrSfcUITIy2ob2RMbAMT38SYGOk9fLPOxCpT6Cm262WdNz6qqUszAhkPTFyGMTHSRLcsY2LkreutjImR7qm3MSZOBCa+nTEx0jbzDsbEycDEdzImRvol3sWYGPmzTHczJkYa5d3DmNgDTHwvY2KkQ9p9jInzABPfz5g4LzDxA4yJkb+59CBjYqQn0kOMiQsAE5djTIw0wynPmPgSYOIKjImRLigVGRMjf1CpEmNipP1FZcbElwETV2FMjPQ9qMqY+HJg4mqMiZFfeK/OmBj5a0k1GBMjv+n8MGPi4sDENRkTI7/iWosx8VXAxLUZEyO/21iHMTHyp5AeYTxoqGvo2aDGg4Z6jP3Uhx6cdGecIfL7gY8y9ow1K9zGOMMGDNPHGaZPMEyfZJg2ZJg2Ypg+xTB9mmHamGHahGGazjB9hmHalGHajGHanGH6LMO0BcO0JcO0FcP0OYbp8wzT1gzTNgzTtgzTdgzT9gzTDgzTDIZpR4ZpJ4ZpZ4bpCwzTFxmmXRimXRmmLzFMKZ86v8IwfZVh+hrDtBvD1Ned4tqD4tqT4tqL4tqb4tqH4tqX4tqP4tqf4jqA4jqQ4jqI4jqY4jqE4jqU4jqM4ppJcfVSXLMorsMpriMoriMprqMorqMprmMormMpruMoruMprhMorhMprpMorpMprlMorq9TXN+guE6luE6juE6nuM6guL5JcZ1JcZ1FcX2L4jqb4vo2xfUdiuu7FNf3KK5zKK5zKa7zKK7zKa7vU1wXUFwXUlw/oLguorguprh+SHFdQnFdSnFdRnFdTnH9iOL6McV1BcV1JcX1E4rrpxTXVRTXzyiun1NcV1Nc11Bc11Jc11FcfRRXQXFdT3HdQHHdSHHdRHHdTHHdQnGlfN3XR/kCqm87xXUHxXUnxXUXxXU3xXUPxXUvxXUfxXU/xfUAxfUgxfUQxfUwxfUIxfUoxfUYxfU4xfUExfULiuuXFNevKK5fU1xPUlxPUVy/obh+S3E9TXH9juL6PcX1B4rrjxTXnyiuP1Ncf6G4/kpx/Y3i+jvF9Q+K658U178orn9TXP9huAorjmNrcWxtjq2LYxvPsc3FsXVzbBM4tokc2ySObTLHNoVjm8qxzc2x9XBs0zi2eTi2eTm2+Ti2+Tm2BTi2BTm2l3BsL+XYFuLYFubYXsaxLcKxvZxjewXHtijHthjHtjjH9kqO7VUc26s5ttdwbK/l2F7HsS3BsS3JsS3Fsb2eY3sDx5bSgduCpr7pvzf1zYypXdDUt+hMrbYtnYV0ddrAmbwMNPlnnAwuy7G9lWN7G8f2do7tHRzbOzm2d3Fs7+bY3sOxvZdjex/H9n6O7QMc2wc5tg9xbMtxbMtzbCtwbCtybCtxbCtzbKtwbKtybKtxbKtzbGtwbB/m2Nbk2Nbi2Nbm2Nbh2D7Csa3Lsa3Hsa3PsX2UY/sYx7YBx/Zxju0THNsnObYNObaNOLZPcWyf5tg25tg24dimc2yf4dg25dg249g259g+y7FtwbFtybFtxbF9jmP7PMe2Nce2Dce2Lce2Hce2Pce2A8c2g2PbkWPbiWPbmWP7Asf2RY5tF45tV47tSxzblzm2r3BsX+XYvsax7cax7c6x7cGx7cmx7cWx7c2x7cOx7cux7cex7c+xHcCxHcixHcSxHcyxHcKxHcqxHcaxzeTYejm2WRzb4RzbERzbkRzbURzb0RzbMRzbsRzbcRzb8RzbCRzbiRzbSRzbyRzbKRzb1zm2b3Bsp3Jsp3Fsp3NsZ3Bs3+TYzuTYzuLYvsWxnc2xfZtj+w7H9l2O7Xsc2zkc27kc23kc2/kc2/c5tgs4tgs5th9wbBdxbBdzbD/k2C7h2C7l2C7j2C7n2H7Esf2YY7uCY7uSY/sJx/ZTju0qji3pV1Q+59iu5tiu4diu5diu49j6OLZC/YtSOrbrOavdwLHdyLHdxLHdzLHdwrHdyrHdxrHdzrHdwbHdybHdxbHdzbHdw7Hdy7Hdx7Hdz7E9wLE9yLE9xLE9zLE9wrE9yrE9xrE9zrE9wbH9gmP7Jcf2K47t1xzbkxzbUxzbbzi233JsT3Nsv+PYfh+tLdYT4ocspCcE6WHGj5w9/YTsyUX6luHPHNtfOLa/cmx/49j+zrH9g2P7J8f2L47t3xxbTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALbzcWw5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALY5PYBtTg9gm9MD2Ob0ALavpnwKa3N6ANucHsA2pwewzekBbHN6ANucHsA2pwewzekBbN/Isb2JY3szx/YWjm1pjm0Zjm1Zji2nl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2nU5tpxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrZ3BsOb10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Ob10bU4vXZvTS9fm9NK1Od9ytzm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL12b00vX5vTStTm9dG1OL107i2PL6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeuvY8ji2nl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pz2Mzanl67N6aVrc3rp2pxeujanl67N6aVrc3rp2pxeujanl67N6aVrC44tp5euzemla3N66dqcXrr2Zo4tp5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66dqcXro2p5euzemla3N66drfc2x/4Nj+yLH9iWPL6X9rc/rf2pz+tzan/63N6X9rc/rf2pz+tzan/63N6X9rc/rfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+t658HFtO/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63rqs5tpz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dZXl2HL637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/66rLseX0v3Vx+t+6OP1vXZz+ty5O/1sXp/+ti9P/1sXpf+vi9L91cfrfujj9b12c/rcuTv9bF6f/rYvT/9bF6X/r4vS/dXH637o4/W9dnP63Lk7/Wxen/62L0//Wxel/6+L0v3Vx+t+6OP1vXZz+ty5O/1sXp/+t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",custom_attributes:["abi_private"],debug_symbols:"",is_unconstrained:!1,name:"claim_and_end_setup",verification_key:"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkTY6i/XMfdtzimGiyUiPOF8AAAAAAAAAAAAAAAAAAAAAAAeKe8laCswPoPAfrvAFpAAAAAAAAAAAAAAAAAAAALAakr5QBK2vBeVorD0HBVCCAAAAAAAAAAAAAAAAAAAAAAAuARrkESKfZq5HFVp+X98AAAAAAAAAAAAAAAAAAAAzbpXtYZzahwj1pXYnPw1xdQAAAAAAAAAAAAAAAAAAAAAAAiSZeapcyWzM8r5MhaZEAAAAAAAAAAAAAAAAAAAAX6geZ+eWpZ+UVB05iagXIz4AAAAAAAAAAAAAAAAAAAAAAAnyxTdr+6Da5P2r6NvwOQAAAAAAAAAAAAAAAAAAAEI6nIIUU/A1R+2ZppkfFJzGAAAAAAAAAAAAAAAAAAAAAAAhstvtwbgpqGBH6DdvsvIAAAAAAAAAAAAAAAAAAABOw0l2rT5edpe4f8gNznt5twAAAAAAAAAAAAAAAAAAAAAAHfsdDNUbKfeUEWFX0BbKAAAAAAAAAAAAAAAAAAAArcuLc+e2Q5xV9DAOVbyNasYAAAAAAAAAAAAAAAAAAAAAACizzjabBavr3uwxJiJwzwAAAAAAAAAAAAAAAAAAAN2pn0/VXcgXo4ryFNoUJEt9AAAAAAAAAAAAAAAAAAAAAAAcM8wlZyM3mi7jQ4cLs2IAAAAAAAAAAAAAAAAAAADgkfHmqFYi9Wva38oMSlPPKgAAAAAAAAAAAAAAAAAAAAAABSyW0Gs6voIq/nHjKaszAAAAAAAAAAAAAAAAAAAAdSbxWjOdJa6w0qoe1CzIfygAAAAAAAAAAAAAAAAAAAAAACRmDSKQfTg28oq6sQLR/QAAAAAAAAAAAAAAAAAAAC+AVCsfPcoS++GElEX9H2LRAAAAAAAAAAAAAAAAAAAAAAAQregLgGO/ji29oJDtAX0AAAAAAAAAAAAAAAAAAAC2zpWT6PHL+LBAoYsqox8xfgAAAAAAAAAAAAAAAAAAAAAAE0MZx84zaBLkD/mep39ZAAAAAAAAAAAAAAAAAAAAw2as9HDRPDvl1hHBeegEWoIAAAAAAAAAAAAAAAAAAAAAACEwOdHpfHxznGk+a2878gAAAAAAAAAAAAAAAAAAAF4+1q+FHp6N1Qeo/P1EIkvHAAAAAAAAAAAAAAAAAAAAAAApiVbndw9rHK3KrFUjpkoAAAAAAAAAAAAAAAAAAACMQJsYKoPeb41UBjvs/aWKDQAAAAAAAAAAAAAAAAAAAAAAF+tPMiaO9DTbEpnLrQRPAAAAAAAAAAAAAAAAAAAAhsR6s2kqmcAdOq7bh8R8x0sAAAAAAAAAAAAAAAAAAAAAACqCUHQFTYB+MDMk/Yi/2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAepe2V71xANwrvsigXHgXcmsAAAAAAAAAAAAAAAAAAAAAABVMYQhHfbvP6eqH6NqtRgAAAAAAAAAAAAAAAAAAAJaI8g4bX/EPVWsGvRa9Nfi2AAAAAAAAAAAAAAAAAAAAAAAVpWQHOYCI6yxmwM/HKJgAAAAAAAAAAAAAAAAAAACiTYcTAkvHLurO0LP+GhaytwAAAAAAAAAAAAAAAAAAAAAAHq7l0rCiCK0+WbyCxw2xAAAAAAAAAAAAAAAAAAAAmLo3oyRw3h/ufw08lliXIKMAAAAAAAAAAAAAAAAAAAAAAC/9/yuxLSlhGgVcG8CuJwAAAAAAAAAAAAAAAAAAACSIylyuxL25c5ipCHOrNaKPAAAAAAAAAAAAAAAAAAAAAAABFo+KYdnFzPxJKx0hon8AAAAAAAAAAAAAAAAAAAAVMF+6z5JPgDvj0QwK87gJMQAAAAAAAAAAAAAAAAAAAAAAI0anxAxRJtM6/3vX5+tKAAAAAAAAAAAAAAAAAAAAtOgs3nqavKj5d+n3gSoUJGEAAAAAAAAAAAAAAAAAAAAAABvOHic8Ct/ISMeiySu5cgAAAAAAAAAAAAAAAAAAADU6z78e5JxL8/hfur4Db/TFAAAAAAAAAAAAAAAAAAAAAAAtezhEYLOhhsgHRKfAU/EAAAAAAAAAAAAAAAAAAABq8eWhOMwaVip/RbrbHitCbgAAAAAAAAAAAAAAAAAAAAAAAO3l9eoPbbaMhmoMzD01AAAAAAAAAAAAAAAAAAAAuOd18iKxJIMrZdpBVB+Tb+kAAAAAAAAAAAAAAAAAAAAAAAYVbF9rxjGYL6+/AZYEGQAAAAAAAAAAAAAAAAAAAJVeyO1NEAlZdqZen6mMpOb0AAAAAAAAAAAAAAAAAAAAAAAEncgQb1VqHKveON+nkkoAAAAAAAAAAAAAAAAAAACmBn8vp5xRyXzXjmfSn/pzIAAAAAAAAAAAAAAAAAAAAAAAF9nmqh2AUwzhmcTH3wnsAAAAAAAAAAAAAAAAAAAAlI2jkfxdBQEDYVLZK6Mu+E4AAAAAAAAAAAAAAAAAAAAAAB75CU96nn/nGKNP4MiPSAAAAAAAAAAAAAAAAAAAADPr2Nrbi1wdeENur7KZ2jUfAAAAAAAAAAAAAAAAAAAAAAArxt6fm/4WVSkC6C5WFEwAAAAAAAAAAAAAAAAAAABXdbTGt5JuBQKrUDYbezYedQAAAAAAAAAAAAAAAAAAAAAAHtNY5RJgom+x2pa9J5xqAAAAAAAAAAAAAAAAAAAAD8ZOpsKBv63aZ37hPO1Z5xkAAAAAAAAAAAAAAAAAAAAAACo9mdyi4jxSuacsn5YLZAAAAAAAAAAAAAAAAAAAAL6UzBuFx4wFT0IfZBM37Pi0AAAAAAAAAAAAAAAAAAAAAAAKBCqDDngc6SaY18xSCX0AAAAAAAAAAAAAAAAAAACDDuHVB7pUhsX61t23RwG5YwAAAAAAAAAAAAAAAAAAAAAAG4acFNHAImYIv84EaCbgAAAAAAAAAAAAAAAAAAAAyHgy/AWhhRqwiyhREDhNG1UAAAAAAAAAAAAAAAAAAAAAABmBz0b9VhWBcSMWPKIHIAAAAAAAAAAAAAAAAAAAAIa904+aDRPPfvA3KXs6JEpiAAAAAAAAAAAAAAAAAAAAAAAGmqsCjfE+xCxIJC/dvaYAAAAAAAAAAAAAAAAAAAAoT5HAzCef9b4zEj/ZOZOeKQAAAAAAAAAAAAAAAAAAAAAADqMzY6UAEH2gFg17dQNNAAAAAAAAAAAAAAAAAAAA8SFFTAS5fDyLD/fQJWm32skAAAAAAAAAAAAAAAAAAAAAACfxKJHdsQx2Qq3N96jaDgAAAAAAAAAAAAAAAAAAAExQkd8cKda+WzO6NJIlYpzhAAAAAAAAAAAAAAAAAAAAAAAoF6eRZrDKNI4K3D8H8J4AAAAAAAAAAAAAAAAAAAA2L5LAXfmQvkG/RclXmmPV9AAAAAAAAAAAAAAAAAAAAAAAIwGU2ZAxZOQQD9mvWaOyAAAAAAAAAAAAAAAAAAAAlHYpb5pl09ZpVlgFsz0EeUEAAAAAAAAAAAAAAAAAAAAAAAa5LzRyy/S4dwHyvEq7KgAAAAAAAAAAAAAAAAAAAFzTWFGprQ147aqyXy/ksEDHAAAAAAAAAAAAAAAAAAAAAAAiPTf/YpVj8kPR14ayT30AAAAAAAAAAAAAAAAAAACus1hBs1fENFAdTOkTiQNshwAAAAAAAAAAAAAAAAAAAAAALz5SwWtQ4ABw+F4u6dhCAAAAAAAAAAAAAAAAAAAAg3ZyMTrctFYcuL/vRJGJXXkAAAAAAAAAAAAAAAAAAAAAACJs66oPGk0SOBqu56PfyQAAAAAAAAAAAAAAAAAAAORI3sjdYzMntaHxa3EPCDS/AAAAAAAAAAAAAAAAAAAAAAAn9/7/ChAzsP3UmMK0+VYAAAAAAAAAAAAAAAAAAADePWc1brtfYHVBn1khdNZhmwAAAAAAAAAAAAAAAAAAAAAAKd9SOkJQJxyZktzawRq8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLnUYi3zuqnao50XcOE38F3gAAAAAAAAAAAAAAAAAAAAAAI9DFfjicXLCvg3BZYuZaAAAAAAAAAAAAAAAAAAAAdxqRjg5mSrPiLHvIavnHj6kAAAAAAAAAAAAAAAAAAAAAAAv5gOY9JqX0Y5OftpMPPwAAAAAAAAAAAAAAAAAAALdG1/g+4B48aNs3+LFBiW7IAAAAAAAAAAAAAAAAAAAAAAArhbDfNtb+gEdn2prfTzEAAAAAAAAAAAAAAAAAAAAkb6AQcPk8UnkQssz8m2m/DQAAAAAAAAAAAAAAAAAAAAAAKfIN2dkcBrw8VM7V/IebAAAAAAAAAAAAAAAAAAAAhvSEULac3ruVGjWYaAtJ6eAAAAAAAAAAAAAAAAAAAAAAACqijynomdErCkdRNfU8FgAAAAAAAAAAAAAAAAAAALPe49ZKZWhnGAov9A3//uFLAAAAAAAAAAAAAAAAAAAAAAALvroWbfGsJfNmIIs167sAAAAAAAAAAAAAAAAAAABdIpnboOgk3UyZMd36A7rPRgAAAAAAAAAAAAAAAAAAAAAAFE1+9DILMglKRgCbpXEMAAAAAAAAAAAAAAAAAAAACRnD6/zqqhkpRrBQcssNSXwAAAAAAAAAAAAAAAAAAAAAAByDTjVw4GNoGix9pnLx9AAAAAAAAAAAAAAAAAAAABKZlt9oFxeYMXZbiBSa+Bh8AAAAAAAAAAAAAAAAAAAAAAAXPKAWV84fPLScYBq0oSAAAAAAAAAAAAAAAAAAAAC1T2ZFfqLa/H1aBzhmzFUvGwAAAAAAAAAAAAAAAAAAAAAABoDg8J7IeFK3n0YfiGQDAAAAAAAAAAAAAAAAAAAANhgm/oWJHJec9TSIU5unGJQAAAAAAAAAAAAAAAAAAAAAABlN0RGBgPwANA5YJfTjgwAAAAAAAAAAAAAAAAAAABQbFNBA0hr74Di1thCVou+HAAAAAAAAAAAAAAAAAAAAAAAc9NSeJivgTL0cCVZJmf4AAAAAAAAAAAAAAAAAAABFSbqa73bAHJ7Ic6YfOVDHIwAAAAAAAAAAAAAAAAAAAAAAKBjEdstrGBdFrwJOucjWAAAAAAAAAAAAAAAAAAAAYuXruKi+lYhf30YNHh/5URgAAAAAAAAAAAAAAAAAAAAAABS6DW+eYRi8K9JzArA9qwAAAAAAAAAAAAAAAAAAAAuHZPjUA/0s6bhy15rQ+ctJAAAAAAAAAAAAAAAAAAAAAAAVSpCcS0FpYl140Y5TPwwAAAAAAAAAAAAAAAAAAAAbJb76Z0kvn/eJiVc7U81qRQAAAAAAAAAAAAAAAAAAAAAAJ90XJn+9IB8AjsL9GtwSAAAAAAAAAAAAAAAAAAAAyCC9xZ49NuYzO/Xyirs/2K8AAAAAAAAAAAAAAAAAAAAAABz7jTH1LNe0EZIBfdRdCwAAAAAAAAAAAAAAAAAAACVvpuI2ZAc0tiR1BFZIyaBCAAAAAAAAAAAAAAAAAAAAAAAdjtK/f86AqYaRPmSAhL4="},{abi:{abi_version:1,error_types:{"1080336462466469436":{error_kind:"string",string:"Function check_balance can only be called statically"},"11194752367584870169":{error_kind:"fmtstring",item_types:[{kind:"field"}],length:27},"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"},"15860392472534760515":{error_kind:"string",string:"Function balance_of_public can only be called statically"},"8637882143979902881":{error_kind:"string",string:"Function _increase_public_balance can only be called by the same contract"},"9543832133280402246":{error_kind:"string",string:"Balance too low"}},parameters:[{name:"selector",type:{kind:"field"},visibility:"private"}],return_type:null},bytecode:"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",custom_attributes:["abi_public"],debug_symbols:"",is_unconstrained:!0,name:"public_dispatch"}],name:"FeeJuice",noir_version:"1.0.0-rc.3+5a7ee9bf5ed8973076df7bb0d2b723024db09ae7",outputs:{globals:{storage:[{name:"STORAGE_LAYOUT_FeeJuice",value:{fields:[{name:"contract_name",value:{kind:"string",value:"FeeJuice"}},{name:"fields",value:{fields:[{name:"balances",value:{fields:[{name:"slot",value:{kind:"integer",sign:!1,value:"0000000000000000000000000000000000000000000000000000000000000001"}}],kind:"struct"}}],kind:"struct"}}],kind:"struct"}}]},structs:{functions:[{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::_increase_public_balance_parameters"}}],kind:"struct",path:"FeeJuice::_increase_public_balance_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_owner",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}}],kind:"struct",path:"FeeJuice::balance_of_public_parameters"}},{name:"return_type",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::balance_of_public_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_fee_limit",type:{kind:"integer",sign:"unsigned",width:128}}],kind:"struct",path:"FeeJuice::check_balance_parameters"}}],kind:"struct",path:"FeeJuice::check_balance_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}},{name:"_secret",type:{kind:"field"}},{name:"_message_leaf_index",type:{kind:"field"}}],kind:"struct",path:"FeeJuice::claim_parameters"}}],kind:"struct",path:"FeeJuice::claim_abi"},{fields:[{name:"parameters",type:{fields:[{name:"_to",type:{fields:[{name:"inner",type:{kind:"field"}}],kind:"struct",path:"aztec::protocol_types::address::aztec_address::AztecAddress"}},{name:"_amount",type:{kind:"integer",sign:"unsigned",width:128}},{name:"_secret",type:{kind:"field"}},{name:"_message_leaf_index",type:{kind:"field"}}],kind:"struct",path:"FeeJuice::claim_and_end_setup_parameters"}}],kind:"struct",path:"FeeJuice::claim_and_end_setup_abi"}]}},transpiled:!0,aztec_version:"6.0.0"};var FeeJuiceArtifact=loadContractArtifact(FeeJuice_default);function computeFeePayerBalanceStorageSlot(feePayer){return deriveStorageSlotInMap(FeeJuiceArtifact.storageLayout.balances.slot,feePayer)}__name(computeFeePayerBalanceStorageSlot,"computeFeePayerBalanceStorageSlot");async function computeFeePayerBalanceLeafSlot(feePayer){let balanceSlot=await computeFeePayerBalanceStorageSlot(feePayer);return computePublicDataTreeLeafSlot(ProtocolContractAddress.FeeJuice,balanceSlot)}__name(computeFeePayerBalanceLeafSlot,"computeFeePayerBalanceLeafSlot");init_esm();init_esm();init_esm();var NoopMeter2=class{static{__name(this,"NoopMeter")}otelMeter=createNoopMeter();createGauge(_metric){return this.otelMeter.createGauge("")}createObservableGauge(_metric){return this.otelMeter.createObservableGauge("")}createHistogram(_metric,_extraOptions){return this.otelMeter.createHistogram("")}createUpDownCounter(_metric){return this.otelMeter.createUpDownCounter("")}createObservableUpDownCounter(_metric){return this.otelMeter.createObservableUpDownCounter("")}addBatchObservableCallback(callback,observables){this.otelMeter.addBatchObservableCallback(callback,observables)}removeBatchObservableCallback(callback,observables){this.otelMeter.removeBatchObservableCallback(callback,observables)}},NoopTelemetryClient=class{static{__name(this,"NoopTelemetryClient")}meter=new NoopMeter2;setExportedPublicTelemetry(_prefixes){}setPublicTelemetryCollectFrom(_roles){}getMeter(){return this.meter}getTracer(){return new NoopTracer2}stop(){return Promise.resolve()}flush(){return Promise.resolve()}isEnabled(){return!1}getTraceContext(){}extractPropagatedContext(_traceContext){}},NoopTracer2=class{static{__name(this,"NoopTracer")}startSpan(){return new NoopSpan}startActiveSpan(_name,...args){return args.find(arg=>typeof arg=="function")(new NoopSpan)}},NoopSpan=class{static{__name(this,"NoopSpan")}recording=!0;addEvent(){return this}addLink(){return this}addLinks(){return this}end(){this.recording=!1}isRecording(){return this.recording}recordException(){}setAttribute(){return this}setAttributes(){return this}setStatus(){return this}spanContext(){return{spanId:"",traceId:"",traceFlags:0}}updateName(){return this}};var telemetryClientConfigMappings={metricsCollectorUrl:{env:"OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",description:"The URL of the telemetry collector for metrics",parseEnv:__name(val=>new URL(val),"parseEnv")},tracesCollectorUrl:{env:"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",description:"The URL of the telemetry collector for traces",parseEnv:__name(val=>new URL(val),"parseEnv")},logsCollectorUrl:{env:"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",description:"The URL of the telemetry collector for logs",parseEnv:__name(val=>new URL(val),"parseEnv")},otelCollectIntervalMs:{env:"OTEL_COLLECT_INTERVAL_MS",description:"The interval at which to collect metrics",...numberConfigHelper(6e4)},otelExportTimeoutMs:{env:"OTEL_EXPORT_TIMEOUT_MS",description:"The timeout for exporting metrics",...numberConfigHelper(3e4)},otelExcludeMetrics:{env:"OTEL_EXCLUDE_METRICS",description:"A list of metric prefixes to exclude from export",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},otelMinTraceDurationMs:{env:"OTEL_MIN_TRACE_DURATION_MS",description:"The minimum successful trace duration to export in milliseconds. Set to 0 to export all traces.",...numberConfigHelper(10)},otelBspMaxQueueSize:{env:"OTEL_BSP_MAX_QUEUE_SIZE",description:"The maximum number of completed spans to queue before export.",...numberConfigHelper(65536)},otelBspMaxExportBatchSize:{env:"OTEL_BSP_MAX_EXPORT_BATCH_SIZE",description:"The maximum number of spans to send to the collector in a single export.",...numberConfigHelper(4096)},otelBspScheduleDelayMs:{env:"OTEL_BSP_SCHEDULE_DELAY",description:"How long to wait before exporting a partially filled batch of spans, in milliseconds.",...numberConfigHelper(5e3)},otelIncludeMetrics:{env:"OTEL_INCLUDE_METRICS",description:"A list of metric prefixes to include in export (ignored if OTEL_EXCLUDE_METRICS is set)",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicMetricsCollectorUrl:{env:"PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",description:"A URL to publish a subset of metrics for public consumption",parseEnv:__name(val=>new URL(val),"parseEnv")},publicMetricsCollectFrom:{env:"PUBLIC_OTEL_COLLECT_FROM",description:"The role types to collect metrics from",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicIncludeMetrics:{env:"PUBLIC_OTEL_INCLUDE_METRICS",description:"A list of metric prefixes to publicly export",parseEnv:__name(val=>val?val.split(",").map(s2=>s2.trim()).filter(s2=>s2.length>0):[],"parseEnv"),defaultValue:[]},publicMetricsOptOut:{env:"PUBLIC_OTEL_OPT_OUT",description:"Whether to opt out of sharing optional telemetry",...booleanConfigHelper(!0)}};var noopTelemetry=new NoopTelemetryClient;function getTelemetryClient(){return noopTelemetry}__name(getTelemetryClient,"getTelemetryClient");function expandAttributeCombinations(attrMap){let keys=Object.keys(attrMap);if(keys.length===0)return[{}];let result=[];function generate(index,current){if(index===keys.length){result.push({...current});return}let key=keys[index];for(let value of attrMap[key])current[key]=value,generate(index+1,current)}return __name(generate,"generate"),generate(0,{}),result}__name(expandAttributeCombinations,"expandAttributeCombinations");function createUpDownCounterWithDefault(meter,metric,attributes=void 0){let counter=meter.createUpDownCounter(metric);if(attributes===void 0)counter.add(0);else if(Array.isArray(attributes))for(let attrs of attributes)counter.add(0,attrs);else{let combinations=expandAttributeCombinations(attributes);for(let attrs of combinations)counter.add(0,attrs)}return counter}__name(createUpDownCounterWithDefault,"createUpDownCounterWithDefault");function trackSpan(spanName,attributes,extraAttributes){return(originalMethod,_context)=>__name(async function(...args){let name=typeof spanName=="function"?spanName.call(this,...args):spanName,currentAttrs=typeof attributes=="function"?await attributes.call(this,...args):attributes;return this.tracer.startActiveSpan(name,{attributes:currentAttrs},async span=>{try{let res=await originalMethod.call(this,...args),extraAttrs=extraAttributes?.call(this,res);return span.setAttributes(extraAttrs??{}),span.setStatus({code:SpanStatusCode.OK}),res}catch(err){throw span.setStatus({code:SpanStatusCode.ERROR,message:String(err)}),(typeof err=="string"||err&&err instanceof Error)&&span.recordException(err),err}finally{span.end()}})},"replacementMethod")}__name(trackSpan,"trackSpan");init_esm();var JSON_RPC_SERVER_REQUEST_COUNT={name:"aztec.json_rpc.server.request_count",description:"Number of completed JSON-RPC server requests",valueType:ValueType.INT},JSON_RPC_SERVER_REQUEST_DURATION={name:"aztec.json_rpc.server.request_duration",description:"JSON-RPC server request handler duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_REQUEST_VALIDATION_DURATION={name:"aztec.json_rpc.server.request_validation_duration",description:"JSON-RPC server request parameter validation duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_REJECTED_REQUEST_COUNT={name:"aztec.json_rpc.server.rejected_request_count",description:"Number of JSON-RPC requests rejected before handler dispatch",valueType:ValueType.INT},JSON_RPC_SERVER_BATCH_COUNT={name:"aztec.json_rpc.server.batch_count",description:"Number of JSON-RPC batches received",valueType:ValueType.INT},JSON_RPC_SERVER_BATCH_DURATION={name:"aztec.json_rpc.server.batch_duration",description:"JSON-RPC batch processing duration",unit:"ms",valueType:ValueType.DOUBLE},JSON_RPC_SERVER_BATCH_SIZE={name:"aztec.json_rpc.server.batch_size",description:"Number of requests in a JSON-RPC batch",unit:"requests",valueType:ValueType.INT},BLOB_SINK_STORE_REQUESTS={name:"aztec.blob_sink.store_request_count",description:"Number of blob store requests",valueType:ValueType.INT},BLOB_SINK_RETRIEVE_REQUESTS={name:"aztec.blob_sink.retrieve_request_count",description:"Number of blob retrieve requests",valueType:ValueType.INT},BLOB_SINK_OBJECTS_IN_BLOB_STORE={name:"aztec.blob_sink.objects_in_blob_store",description:"Number of objects in the blob store",valueType:ValueType.INT},BLOB_SINK_BLOB_SIZE={name:"aztec.blob_sink.blob_size",description:"Size of blobs",unit:"By",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOB_REQUEST_COUNT={name:"aztec.blob_sink.archive.block_request_count",description:"Number of archive blob requests",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOCK_REQUEST_COUNT={name:"aztec.blob_sink.archive.blob_request_count",description:"Number of archive block requests",valueType:ValueType.INT},BLOB_SINK_ARCHIVE_BLOB_COUNT={name:"aztec.blob_sink.archive.blob_count",description:"Number of blobs in archive",valueType:ValueType.INT},CIRCUIT_SIMULATION_DURATION={name:"aztec.circuit.simulation.duration",description:"Records how long it takes to simulate a circuit",unit:"ms",valueType:ValueType.INT},CIRCUIT_SIMULATION_INPUT_SIZE={name:"aztec.circuit.simulation.input_size",description:"Size of the input to the circuit simulation",unit:"By",valueType:ValueType.INT},CIRCUIT_SIMULATION_OUTPUT_SIZE={name:"aztec.circuit.simulation.output_size",description:"Size of the output of the circuit simulation",unit:"By",valueType:ValueType.INT},CIRCUIT_WITNESS_GEN_DURATION={name:"aztec.circuit.witness_generation.duration",description:"Records how long it takes to generate the partial witness for a circuit",unit:"s",valueType:ValueType.DOUBLE},CIRCUIT_WITNESS_GEN_INPUT_SIZE={name:"aztec.circuit.witness_generation.input_size",description:"Records the size of the input to the witness generation",unit:"By",valueType:ValueType.INT},CIRCUIT_WITNESS_GEN_OUTPUT_SIZE={name:"aztec.circuit.witness_generation.output_size",description:"Records the size of the output of the witness generation",unit:"By",valueType:ValueType.INT},CIRCUIT_PROVING_DURATION={name:"aztec.circuit.proving.duration",description:"Records how long it takes to prove a circuit",unit:"s",valueType:ValueType.DOUBLE},CIRCUIT_PROVING_INPUT_SIZE={name:"aztec.circuit.proving.input_size",description:"Size of the input to the circuit proving",unit:"By",valueType:ValueType.INT},CIRCUIT_PROVING_PROOF_SIZE={name:"aztec.circuit.proving.proof_size",description:"Records the size of the proof generated for a circuit",unit:"By",valueType:ValueType.INT},CIRCUIT_PUBLIC_INPUTS_COUNT={name:"aztec.circuit.public_inputs_count",description:"Records the number of public inputs in a circuit",valueType:ValueType.INT},CIRCUIT_GATE_COUNT={name:"aztec.circuit.gate_count",description:"Records the gate count of a circuit",valueType:ValueType.INT},CIRCUIT_SIZE={name:"aztec.circuit.size",description:"Records the size of the circuit in gates",valueType:ValueType.INT},MEMPOOL_TX_COUNT={name:"aztec.mempool.tx_count",description:"The current number of transactions in the mempool",valueType:ValueType.INT},MEMPOOL_TX_SIZE={name:"aztec.mempool.tx_size",description:"The size of transactions in the mempool",unit:"By",valueType:ValueType.INT},MEMPOOL_TX_ADDED_COUNT={name:"aztec.mempool.tx_added_count",description:"The number of transactions added to the mempool",valueType:ValueType.INT},MEMPOOL_TX_MINED_DELAY={name:"aztec.mempool.tx_mined_delay",description:"Delay (ms) from a transaction being received into the pool to being mined",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_EVICTED_COUNT={name:"aztec.mempool.tx_pool_v2.evicted_count",description:"The number of transactions evicted from the tx pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_IGNORED_COUNT={name:"aztec.mempool.tx_pool_v2.ignored_count",description:"The number of transactions ignored in addPendingTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_REJECTED_COUNT={name:"aztec.mempool.tx_pool_v2.rejected_count",description:"The number of transactions rejected in addPendingTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_SOFT_DELETED_HITS={name:"aztec.mempool.tx_pool_v2.soft_deleted_hits",description:"The number of transactions found in the soft-deleted pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_MISSING_ON_PROTECT={name:"aztec.mempool.tx_pool_v2.missing_on_protect",description:"The number of truly missing transactions in protectTxs",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_MISSING_PREVIOUSLY_EVICTED={name:"aztec.mempool.tx_pool_v2.missing_previously_evicted",description:"The number of truly missing transactions in protectTxs that were previously evicted",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_METADATA_MEMORY={name:"aztec.mempool.tx_pool_v2.metadata_memory",description:"Estimated total memory consumed by in-memory transaction metadata",unit:"By",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_WAIT={name:"aztec.mempool.tx_pool_v2.queue_wait",description:"Time an operation waits in the tx pool serial queue before executing, keyed by mempool.operation",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_EXECUTION={name:"aztec.mempool.tx_pool_v2.queue_execution",description:"Time an operation spends executing in the tx pool serial queue, keyed by mempool.operation",unit:"ms",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_QUEUE_LENGTH={name:"aztec.mempool.tx_pool_v2.queue_length",description:"Number of operations waiting in the tx pool serial queue",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_DUPLICATE_ADD={name:"aztec.mempool.tx_pool_v2.duplicate_add",description:"Transactions received via addPendingTxs that were already in the pool",valueType:ValueType.INT},MEMPOOL_TX_POOL_V2_ALREADY_PROTECTED_ADD={name:"aztec.mempool.tx_pool_v2.already_protected_add",description:"Transactions received via addPendingTxs that were already pre-protected",valueType:ValueType.INT},DB_NUM_ITEMS={name:"aztec.db.num_items",description:"LMDB Num Items",valueType:ValueType.INT},DB_MAP_SIZE={name:"aztec.db.map_size",description:"LMDB Map Size",unit:"By",valueType:ValueType.INT},DB_PHYSICAL_FILE_SIZE={name:"aztec.db.physical_file_size",description:"LMDB Physical File Size",unit:"By",valueType:ValueType.INT},DB_USED_SIZE={name:"aztec.db.used_size",description:"LMDB Used Size",unit:"By",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_COUNT={name:"aztec.mempool.attestations_count",description:"The current number of attestations in the mempool",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_SIZE={name:"aztec.mempool.attestations_size",description:"The size of attestations in the mempool",unit:"By",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_ADDED_COUNT={name:"aztec.mempool.attestations_added_count",description:"The number of attestations added to the mempool",valueType:ValueType.INT},MEMPOOL_ATTESTATIONS_MINED_DELAY={name:"aztec.mempool.attestations_mined_delay",description:"Delay between attestation added and evicted from the mempool",unit:"ms",valueType:ValueType.INT},ARCHIVER_L1_BLOCK_HEIGHT={name:"aztec.archiver.l1_block_height",description:"The height of the latest L1 block processed by the archiver",valueType:ValueType.INT},ARCHIVER_BLOCK_HEIGHT={name:"aztec.archiver.block_height",description:"The height of the latest block processed by the archiver",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_HEIGHT={name:"aztec.archiver.checkpoint_height",description:"The height of the latest checkpoint processed by the archiver",valueType:ValueType.INT},ARCHIVER_ROLLUP_PROOF_DELAY={name:"aztec.archiver.rollup_proof_delay",description:"Time after a block is submitted until its proof is published",unit:"ms",valueType:ValueType.INT},ARCHIVER_ROLLUP_PROOF_COUNT={name:"aztec.archiver.rollup_proof_count",description:"Number of proofs submitted",valueType:ValueType.INT},ARCHIVER_MANA_PER_BLOCK={name:"aztec.archiver.block.mana_count",description:"The mana consumed by blocks",unit:"Mmana",valueType:ValueType.DOUBLE},ARCHIVER_TXS_PER_BLOCK={name:"aztec.archiver.block.tx_count",description:"The block tx count",unit:"tx",valueType:ValueType.INT},ARCHIVER_SYNC_PER_BLOCK={name:"aztec.archiver.block.sync_per_item_duration",description:"Duration to sync a block",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_PER_CHECKPOINT={name:"aztec.archiver.checkpoint.sync_per_item_duration",description:"Duration to sync a checkpoint",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_BLOCK_COUNT={name:"aztec.archiver.block.sync_count",description:"Number of blocks synced from L1",valueType:ValueType.INT},ARCHIVER_SYNC_PER_MESSAGE={name:"aztec.archiver.message.sync_per_item_duration",description:"Duration to sync a message",unit:"ms",valueType:ValueType.INT},ARCHIVER_SYNC_MESSAGE_COUNT={name:"aztec.archiver.message.sync_count",description:"Number of L1 to L2 messages synced",valueType:ValueType.INT},ARCHIVER_PRUNE_DURATION={name:"aztec.archiver.prune_duration",description:"Duration of a prune operation",unit:"ms",valueType:ValueType.INT},ARCHIVER_PRUNE_COUNT={name:"aztec.archiver.prune_count",description:"Number of prunes detected, dimensioned by prune_type: unproven (epoch prune of checkpoints that will not be proven), uncheckpointed (proposed blocks whose slot ended without a checkpoint), l1_conflict (proposed blocks conflicting with an L1 checkpoint), orphan (proposed blocks whose matching proposed checkpoint never arrived before the deadline), abandoned (proposed blocks this node's own sequencer gave up before proposing their checkpoint), and l1_mismatch (the local checkpointed tip diverged from L1 \u2014 an L1 reorg or a pruned/missed-proof checkpoint \u2014 rewinding already-checkpointed blocks).",valueType:ValueType.INT},ARCHIVER_TOTAL_TXS={name:"aztec.archiver.tx_count",description:"The total number of transactions",valueType:ValueType.INT},ARCHIVER_BLOCK_PROPOSAL_TX_TARGET_COUNT={name:"aztec.archiver.block_proposal_tx_target_count",description:"Number of block proposals by tx target",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_CALLDATA_UNAVAILABLE_COUNT={name:"aztec.archiver.checkpoint_calldata_unavailable_count",description:"Number of attempts to read a checkpoint whose L1 propose calldata could not be extracted because neither trace_transaction nor debug_traceTransaction succeeded. L1 sync retries the checkpoint, so this keeps rising while the archiver is stuck on it.",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_L1_INCLUSION_DELAY={name:"aztec.archiver.checkpoint_l1_inclusion_delay",description:"Seconds into the L2 slot when the checkpoint L1 tx was included",unit:"s",valueType:ValueType.INT},ARCHIVER_CHECKPOINT_PROMOTED_COUNT={name:"aztec.archiver.checkpoint_promoted_count",description:"Number of checkpoints promoted from proposed (blob fetch skipped)",valueType:ValueType.INT},NODE_RECEIVE_TX_DURATION={name:"aztec.node.receive_tx.duration",description:"The duration of the receiveTx method",unit:"ms",valueType:ValueType.INT},NODE_RECEIVE_TX_COUNT={name:"aztec.node.receive_tx.count",description:"Number of transactions received",valueType:ValueType.INT},NODE_SNAPSHOT_DURATION={name:"aztec.node.snapshot_duration",description:"How long taking a snapshot takes",unit:"ms",valueType:ValueType.INT},NODE_SNAPSHOT_ERROR_COUNT={name:"aztec.node.snapshot_error_count",description:"How many snapshot errors have happened",valueType:ValueType.INT},SEQUENCER_STATE_TRANSITION_BUFFER_DURATION={name:"aztec.sequencer.state_transition_buffer.duration",description:"The time difference between when the sequencer needed to transition to a new state and when it actually did",unit:"ms",valueType:ValueType.INT},SEQUENCER_STATE_DURATION={name:"aztec.sequencer.state_duration",description:"Wall-clock time spent in each sequencer state, labelled by the state being left",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_BUILD_DURATION={name:"aztec.sequencer.block.build_duration",description:"Duration to build a block",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND={name:"aztec.sequencer.block.build_mana_per_second",description:"Mana per second when building a block",unit:"mana/s",valueType:ValueType.INT},SEQUENCER_BLOCK_COUNT={name:"aztec.sequencer.block.count",description:"Number of blocks built by this sequencer",valueType:ValueType.INT},SEQUENCER_BLOCK_INTER_BLOCK_TIME={name:"aztec.sequencer.block.inter_block_time",description:"Wall-clock time elapsed between consecutive blocks being built by this sequencer",unit:"ms",valueType:ValueType.INT},SEQUENCER_CURRENT_SLOT_REWARDS={name:"aztec.sequencer.current_slot_rewards",description:"The rewards earned per filled slot",valueType:ValueType.DOUBLE},SEQUENCER_SLOT_COUNT={name:"aztec.sequencer.slot.total_count",description:"The number of slots this sequencer was selected for",valueType:ValueType.INT},SEQUENCER_FILLED_SLOT_COUNT={name:"aztec.sequencer.slot.filled_count",description:"The number of slots this sequencer has filled",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_ATTESTATION_DELAY={name:"aztec.sequencer.checkpoint.attestation_delay",description:"The time difference between checkpoint proposal and minimal attestation count reached",unit:"ms",valueType:ValueType.INT},SEQUENCER_COLLECTED_ATTESTATIONS_COUNT={name:"aztec.sequencer.attestations.collected_count",description:"The number of attestations collected for a checkpoint proposal",valueType:ValueType.INT},SEQUENCER_REQUIRED_ATTESTATIONS_COUNT={name:"aztec.sequencer.attestations.required_count",description:"The minimum number of attestations required to publish a checkpoint",valueType:ValueType.INT},SEQUENCER_COLLECT_ATTESTATIONS_DURATION={name:"aztec.sequencer.attestations.collect_duration",description:"The time spent collecting attestations from committee members",unit:"ms",valueType:ValueType.INT},SEQUENCER_COLLECT_ATTESTATIONS_TIME_ALLOWANCE={name:"aztec.sequencer.attestations.collect_allowance",description:"Maximum amount of time to collect attestations",unit:"ms",valueType:ValueType.INT},SEQUENCER_BLOCK_PROPOSAL_FAILED_COUNT={name:"aztec.sequencer.block.proposal_failed_count",description:"The number of times block proposal failed (including validation builds)",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PROPOSAL_SUCCESS_COUNT={name:"aztec.sequencer.checkpoint.proposal_success_count",description:"The number of times checkpoint proposal succeeded",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PRECHECK_FAILED_COUNT={name:"aztec.sequencer.checkpoint.precheck_failed_count",description:"The number of times checkpoint pre-build checks failed",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_PROPOSAL_FAILED_COUNT={name:"aztec.sequencer.checkpoint.proposal_failed_count",description:"The number of times checkpoint proposal failed",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_BUILD_DURATION={name:"aztec.sequencer.checkpoint.build_duration",description:"Total duration to build all blocks in a checkpoint",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_START_TO_FIRST_BLOCK_DURATION={name:"aztec.sequencer.checkpoint.start_to_first_block_duration",description:"Time from starting checkpoint work to the first block finishing build",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_LAST_BLOCK_TO_BROADCAST_DURATION={name:"aztec.sequencer.checkpoint.last_block_to_broadcast_duration",description:"Time from the final block finishing build to the checkpoint proposal being broadcast",unit:"ms",valueType:ValueType.INT},SEQUENCER_PIPELINED_CHECKPOINT_BUILD_START_OFFSET_FROM_SLOT_BOUNDARY={name:"aztec.sequencer.pipelined_checkpoint.build_start_offset_from_slot_boundary",description:"Absolute offset from the wall-clock slot boundary when a pipelined checkpoint build starts. Use aztec.slot_boundary_side to distinguish before vs after the boundary.",unit:"ms",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_BLOCK_COUNT={name:"aztec.sequencer.checkpoint.block_count",description:"Number of blocks built in a checkpoint",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_TX_COUNT={name:"aztec.sequencer.checkpoint.tx_count",description:"Total number of transactions across all blocks in a checkpoint",unit:"tx",valueType:ValueType.INT},SEQUENCER_CHECKPOINT_TOTAL_MANA={name:"aztec.sequencer.checkpoint.total_mana",description:"Total L2 mana used across all blocks in a checkpoint",unit:"mana",valueType:ValueType.INT},SEQUENCER_SLASHING_ATTEMPTS_COUNT={name:"aztec.sequencer.slashing.attempts_count",description:"The number of slashing action attempts",valueType:ValueType.INT},SLASHER_ROUND_EXECUTED_COUNT={name:"aztec.slasher.round.executed_count",description:"The number of slashing rounds executed",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_TARGETED_COUNT={name:"aztec.slasher.own_validator.targeted_count",description:"The number of times one of the node's own validators was named as a slash target by an onchain vote, counted once per vote per validator. Votes cast while the node is offline or starting up are not counted, and L1 reorgs can cause small drift within a round.",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_CURRENT_ROUND_VOTES_MAX={name:"aztec.slasher.own_validator.current_round_votes_max",description:"Highest number of votes cast against any committee position held by the node's own validators in the current slashing round, to compare against aztec.slasher.quorum_size (the contract tallies quorum per position). Resets to zero when a new round starts. Votes cast while the node is offline or starting up are not counted, and L1 reorgs can cause small drift within a round.",valueType:ValueType.INT},SLASHER_QUORUM_SIZE={name:"aztec.slasher.quorum_size",description:"The number of votes a validator must receive in a round to be slashed",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_SLASHED_COUNT={name:"aztec.slasher.own_validator.slashed_count",description:"The number of times one of the node's own validators was slashed, from executed Slashed events",valueType:ValueType.INT},SLASHER_OWN_VALIDATOR_SLASHED_AMOUNT={name:"aztec.slasher.own_validator.slashed_amount",description:"Cumulative amount slashed from the node's own validators in whole staking-asset tokens, from executed Slashed events",unit:"tokens",valueType:ValueType.DOUBLE},SEQUENCER_CHECKPOINT_SUCCESS_COUNT={name:"aztec.sequencer.checkpoint.success_count",description:"The number of times checkpoint publishing succeeded",valueType:ValueType.INT},SEQUENCER_PIPELINE_DEPTH={name:"aztec.sequencer.pipeline.depth",description:"Current pipeline depth when builder pipelining is enabled",valueType:ValueType.INT},SEQUENCER_PIPELINE_DISCARDS_COUNT={name:"aztec.sequencer.pipeline.discards_count",description:"The number of times a pipeline was discarded",valueType:ValueType.INT},SEQUENCER_PIPELINE_PARENT_CHECKPOINT_MISMATCH_COUNT={name:"aztec.sequencer.pipeline.parent_checkpoint_mismatch_count",description:"The number of times a pipelined checkpoint was discarded because the parent did not match expectations",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_WOULD_BE_INCLUDED={name:"aztec.fisherman.fee_analysis.would_be_included",description:"Whether the transaction would have been included in the block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_TIME_BEFORE_BLOCK={name:"aztec.fisherman.fee_analysis.time_before_block",description:"Time in ms between fee analysis and block being mined",unit:"ms",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_TX_COUNT={name:"aztec.fisherman.fee_analysis.pending_blob_tx_count",description:"Number of blob transactions seen in the pending block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_TX_COUNT={name:"aztec.fisherman.fee_analysis.included_blob_tx_count",description:"Number of blob transactions that got included in the mined block",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_CALCULATED_PRIORITY_FEE={name:"aztec.fisherman.fee_analysis.calculated_priority_fee",description:"Priority fee calculated by each strategy",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_PRIORITY_FEE_DELTA={name:"aztec.fisherman.fee_analysis.priority_fee_delta",description:"Difference between our priority fee and minimum included priority fee",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_ESTIMATED_COST={name:"aztec.fisherman.fee_analysis.estimated_cost",description:"Estimated total cost in ETH for the transaction with this strategy",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_ESTIMATED_OVERPAYMENT={name:"aztec.fisherman.fee_analysis.estimated_overpayment",description:"Estimated overpayment in ETH vs minimum required for inclusion",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_PRIORITY_FEE={name:"aztec.fisherman.fee_analysis.mined_blob_tx_priority_fee",description:"Priority fee per gas for blob transactions in mined blocks",unit:"gwei",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_MINED_BLOB_TX_TOTAL_COST={name:"aztec.fisherman.fee_analysis.mined_blob_tx_total_cost",description:"Total cost in ETH for blob transactions in mined blocks",unit:"eth",valueType:ValueType.DOUBLE},FISHERMAN_FEE_ANALYSIS_PENDING_BLOB_COUNT={name:"aztec.fisherman.fee_analysis.pending_blob_count",description:"Total number of blobs in pending blob transactions",unit:"blobs",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_INCLUDED_BLOB_COUNT={name:"aztec.fisherman.fee_analysis.included_blob_count",description:"Total number of blobs included in the mined block",unit:"blobs",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_BLOCK_BLOBS_FULL={name:"aztec.fisherman.fee_analysis.block_blobs_full",description:"Whether the mined block reached 100% blob capacity",valueType:ValueType.INT},FISHERMAN_FEE_ANALYSIS_MAX_BLOB_CAPACITY={name:"aztec.fisherman.fee_analysis.max_blob_capacity",description:"Maximum blob capacity for the analyzed block based on L1 upgrade schedule",unit:"blobs",valueType:ValueType.INT},VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT={name:"aztec.validator.invalid_attestation_received_count",description:"Number of invalid attestations received",valueType:ValueType.INT},L1_PUBLISHER_LOADED_COUNT={name:"aztec.l1_publisher.loaded_count",description:"Number of L1 publishers loaded by this node",valueType:ValueType.INT},L1_PUBLISHER_GAS_PRICE={name:"aztec.l1_publisher.gas_price",description:"The gas price used for transactions",unit:"gwei",valueType:ValueType.DOUBLE};var L1_PUBLISHER_TX_DURATION={name:"aztec.l1_publisher.tx_duration",description:"The duration of transaction processing",unit:"ms",valueType:ValueType.INT},L1_PUBLISHER_TX_GAS={name:"aztec.l1_publisher.tx_gas",description:"The gas consumed by transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_CALLDATA_SIZE={name:"aztec.l1_publisher.tx_calldata_size",description:"The size of the calldata in transactions",unit:"By",valueType:ValueType.INT},L1_PUBLISHER_TX_CALLDATA_GAS={name:"aztec.l1_publisher.tx_calldata_gas",description:"The gas consumed by the calldata in transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_BLOBDATA_GAS_USED={name:"aztec.l1_publisher.tx_blobdata_gas_used",description:"The amount of blob gas used in transactions",unit:"gas",valueType:ValueType.INT},L1_PUBLISHER_TX_BLOBDATA_GAS_COST={name:"aztec.l1_publisher.tx_blobdata_gas_cost",description:"The gas cost of blobs in transactions",unit:"gwei",valueType:ValueType.INT},L1_PUBLISHER_BLOB_COUNT={name:"aztec.l1_publisher.blob_count",description:"Number of blobs in L1 transactions",unit:"blobs",valueType:ValueType.INT},L1_PUBLISHER_BLOB_INCLUSION_BLOCKS={name:"aztec.l1_publisher.blob_inclusion_blocks",description:"Number of L1 blocks between blob tx submission and inclusion",unit:"blocks",valueType:ValueType.INT};var L1_PUBLISHER_BALANCE={name:"aztec.l1_publisher.balance",description:"ETH balance of a publisher, read every minute",unit:"eth",valueType:ValueType.DOUBLE},L1_PUBLISHER_REQUIRED_BALANCE={name:"aztec.l1_publisher.required_balance",description:"ETH a publisher must hold to afford a reference send at current fees: a first-of-epoch checkpoint proposal without invalidation for sequencers, an epoch proof submission for provers",unit:"eth",valueType:ValueType.DOUBLE},L1_PUBLISHER_SENDS_AFFORDABLE={name:"aztec.l1_publisher.sends_affordable",description:"Number of reference sends (see aztec.l1_publisher.required_balance) a publisher balance covers at current fees, 0 while it is backed off after an insufficient funds rejection",valueType:ValueType.INT},L1_BALANCE_ETH={name:"aztec.l1.balance",description:"Deprecated, use aztec.l1_publisher.balance instead. ETH balance of a publisher, read every minute",unit:"eth",valueType:ValueType.DOUBLE},L1_FUNDER_BALANCE={name:"aztec.l1_publisher.funder_balance",description:"ETH balance of the funding account that tops up publishers, read every minute",unit:"eth",valueType:ValueType.DOUBLE},PROVER_NODE_PROOF_SUBMISSION_UNAFFORDABLE_COUNT={name:"aztec.prover_node.proof_submission_unaffordable_count",description:"Number of finished epoch proofs held back from submission because no publisher could afford sending it",valueType:ValueType.INT},L1_PUBLISHER_TX_TOTAL_FEE={name:"aztec.l1_publisher.tx_total_fee",description:"How much L1 tx costs",unit:"eth",valueType:ValueType.DOUBLE},PROVER_NODE_ESTIMATED_SUBMISSION_GAS={name:"aztec.prover_node.estimated_submission.gas",description:"Estimated gas for a proof submission tx (proof publishing disabled, not actually sent)",unit:"gas",valueType:ValueType.INT},PROVER_NODE_ESTIMATED_SUBMISSION_GAS_PRICE={name:"aztec.prover_node.estimated_submission.gas_price",description:"Estimated effective gas price for a proof submission tx (proof publishing disabled, not actually sent)",unit:"gwei",valueType:ValueType.DOUBLE},PROVER_NODE_ESTIMATED_SUBMISSION_TOTAL_FEE={name:"aztec.prover_node.estimated_submission.total_fee",description:"Estimated total L1 fee for a proof submission tx (proof publishing disabled, not actually sent)",unit:"eth",valueType:ValueType.DOUBLE},L1_BLOCK_HEIGHT={name:"aztec.l1.block_height",description:"The current L1 block height",valueType:ValueType.INT},L1_GAS_PRICE_WEI={name:"aztec.l1.gas_price",description:"Current L1 gas price",unit:"wei",valueType:ValueType.INT},L1_BLOB_BASE_FEE_WEI={name:"aztec.l1.blob_base_fee",description:"Current L1 blob base fee",unit:"wei",valueType:ValueType.INT},L1_TX_MINED_DURATION={name:"aztec.l1_tx.mined_duration",description:"Duration from L1 tx submission to mining",unit:"ms",valueType:ValueType.INT},L1_TX_MINED_COUNT={name:"aztec.l1_tx.mined_count",description:"Number of L1 transactions mined",valueType:ValueType.INT},L1_TX_REVERTED_COUNT={name:"aztec.l1_tx.reverted_count",description:"Number of L1 transactions reverted",valueType:ValueType.INT},L1_TX_CANCELLED_COUNT={name:"aztec.l1_tx.cancelled_count",description:"Number of L1 transactions cancelled",valueType:ValueType.INT},L1_TX_NOT_MINED_COUNT={name:"aztec.l1_tx.not_mined_count",description:"Number of L1 transactions not mined",valueType:ValueType.INT},L1_TX_ATTEMPTS_UNTIL_MINED={name:"aztec.l1_tx.attempts_until_mined",description:"Number of attempts until L1 tx was mined",valueType:ValueType.INT},L1_TX_MAX_PRIORITY_FEE={name:"aztec.l1_tx.max_priority_fee",description:"Max priority fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},L1_TX_MAX_FEE={name:"aztec.l1_tx.max_fee",description:"Max fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},L1_TX_BLOB_FEE={name:"aztec.l1_tx.blob_fee",description:"Blob fee used for L1 tx",unit:"gwei",valueType:ValueType.DOUBLE},PEER_MANAGER_GOODBYES_SENT={name:"aztec.peer_manager.goodbyes_sent",description:"Number of goodbyes sent to peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_GOODBYES_RECEIVED={name:"aztec.peer_manager.goodbyes_received",description:"Number of goodbyes received from peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_PEER_COUNT={name:"aztec.peer_manager.peer_count",description:"Number of peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_HEALTHY_PEER_COUNT={name:"aztec.peer_manager.healthy_peer_count",description:"Number of healthy (non-protected, non-banned) peers",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_LOW_SCORE_DISCONNECTS={name:"aztec.peer_manager.low_score_disconnects",description:"Number of peers disconnected due to low score",unit:"peers",valueType:ValueType.INT},PEER_MANAGER_PEER_CONNECTION_DURATION={name:"aztec.peer_manager.peer_connection_duration",description:"Time duration between peer connection and disconnection",unit:"ms",valueType:ValueType.INT},P2P_PEER_STATE_COUNT={name:"aztec.p2p.peer_state_count",description:"Number of peers in each state",unit:"peers",valueType:ValueType.INT},P2P_REQ_RESP_SENT_REQUESTS={name:"aztec.p2p.req_resp.sent_requests",description:"Number of requests sent to peers",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_RECEIVED_REQUESTS={name:"aztec.p2p.req_resp.received_requests",description:"Number of requests received from peers",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS={name:"aztec.p2p.req_resp.failed_outbound_requests",description:"Number of failed outbound requests - nodes not getting valid responses",unit:"requests",valueType:ValueType.INT},P2P_REQ_RESP_FAILED_INBOUND_REQUESTS={name:"aztec.p2p.req_resp.failed_inbound_requests",description:"Number of failed inbound requests - node failing to respond to requests",unit:"requests",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_VALIDATION_DURATION={name:"aztec.p2p.gossip.message_validation_duration",description:"Duration to validate a gossip message",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT={name:"aztec.p2p.gossip.message_validation_count",description:"Number of gossip messages validated",valueType:ValueType.INT},P2P_GOSSIP_MESSAGE_LATENCY={name:"aztec.p2p.gossip.message_latency",description:"Latency of gossip messages",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_TX_RECEIVED_COUNT={name:"aztec.p2p.gossip.tx_received_count",description:"Number of transactions received via gossip",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN={name:"aztec.p2p.gossip.agg_message_latency_min",description:"Minimum aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX={name:"aztec.p2p.gossip.agg_message_latency_max",description:"Maximum aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50={name:"aztec.p2p.gossip.agg_message_latency_p50",description:"P50 aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90={name:"aztec.p2p.gossip.agg_message_latency_p90",description:"P90 aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG={name:"aztec.p2p.gossip.agg_message_latency_avg",description:"Average aggregated gossip message latency",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN={name:"aztec.p2p.gossip.agg_message_validation_duration_min",description:"Minimum aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX={name:"aztec.p2p.gossip.agg_message_validation_duration_max",description:"Maximum aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50={name:"aztec.p2p.gossip.agg_message_validation_duration_p50",description:"P50 aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90={name:"aztec.p2p.gossip.agg_message_validation_duration_p90",description:"P90 aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG={name:"aztec.p2p.gossip.agg_message_validation_duration_avg",description:"Average aggregated gossip message validation duration",unit:"ms",valueType:ValueType.INT},P2P_GOSSIP_SLOW_VALIDATION_COUNT={name:"aztec.p2p.gossip.slow_validation_count",description:"Number of gossip validations that exceeded 75% of the mcache eviction window",valueType:ValueType.INT},P2P_GOSSIP_TX_VALIDATION_STAGE_DURATION={name:"aztec.p2p.gossip.tx_validation_stage_duration",description:"Duration of each stage of gossiped tx validation, keyed by the tx_validation_stage attribute",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_DURATION={name:"aztec.public_processor.tx_duration",description:"Duration to process a public transaction",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_COUNT={name:"aztec.public_processor.tx_count",description:"Number of public transactions processed",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_PHASE_COUNT={name:"aztec.public_processor.tx_phase_count",description:"Number of phases in public transaction processing",valueType:ValueType.INT},PUBLIC_PROCESSOR_TX_GAS={name:"aztec.public_processor.tx_gas",description:"Gas consumed by public transaction",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_PHASE_DURATION={name:"aztec.public_processor.phase_duration",description:"Duration of public processing phase",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_PHASE_COUNT={name:"aztec.public_processor.phase_count",description:"Number of public processing phases",valueType:ValueType.INT},PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE={name:"aztec.public_processor.deploy_bytecode_size",description:"Size of deployed bytecode",unit:"By",valueType:ValueType.INT},PUBLIC_PROCESSOR_TOTAL_GAS={name:"aztec.public_processor.total_gas",description:"Total gas consumed by public processor",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM={name:"aztec.public_processor.total_gas_histogram",description:"Histogram of total gas consumed by public processor",unit:"gas",valueType:ValueType.INT},PUBLIC_PROCESSOR_GAS_RATE={name:"aztec.public_processor.gas_rate",description:"Gas rate in public processor",unit:"gas/s",valueType:ValueType.DOUBLE},PUBLIC_PROCESSOR_TREE_INSERTION={name:"aztec.public_processor.tree_insertion",description:"Duration of tree insertion in public processor",unit:"ms",valueType:ValueType.INT},PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT={name:"aztec.public_processor.silently_skipped_count",description:"Public txs fully processed then skipped (e.g. blob-field limit); not counted as processed or failed",valueType:ValueType.INT},PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION={name:"aztec.public_processor.silently_skipped_duration",description:"Wall-clock time spent processing txs that were then silently skipped",unit:"ms",valueType:ValueType.INT};var PUBLIC_EXECUTOR_SIMULATION_COUNT={name:"aztec.public_executor.simulation_count",description:"Number of functions executed",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_DURATION={name:"aztec.public_executor.simulation_duration",description:"How long it takes to execute a function",unit:"ms",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_MANA_PER_SECOND={name:"aztec.public_executor.simulation_mana_per_second",description:"Mana used per second",unit:"mana/s",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_MANA_USED={name:"aztec.public_executor.simulation_mana_used",description:"Total mana used",unit:"mana",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_TOTAL_INSTRUCTIONS={name:"aztec.public_executor.simulation_total_instructions",description:"Total number of instructions executed",valueType:ValueType.INT},PUBLIC_EXECUTOR_TX_HASHING={name:"aztec.public_executor.tx_hashing",description:"Tx hashing time",unit:"ms",valueType:ValueType.INT},PUBLIC_EXECUTOR_PRIVATE_EFFECTS_INSERTION={name:"aztec.public_executor.private_effects_insertion",description:"Private effects insertion time",unit:"us",valueType:ValueType.INT},PUBLIC_EXECUTOR_SIMULATION_BYTECODE_SIZE={name:"aztec.public_executor.simulation_bytecode_size",description:"Size of bytecode being executed",unit:"By",valueType:ValueType.INT},PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION={name:"aztec.proving_orchestrator.base_rollup.inputs_duration",description:"Duration to build base rollup inputs",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_JOB_SIZE={name:"aztec.proving_queue.job_size",description:"Size of proving jobs",unit:"By",valueType:ValueType.INT},PROVING_QUEUE_SIZE={name:"aztec.proving_queue.size",description:"Number of jobs in the proving queue",valueType:ValueType.INT},PROVING_QUEUE_TOTAL_JOBS={name:"aztec.proving_queue.enqueued_jobs_count",description:"Total number of jobs enqueued",valueType:ValueType.INT},PROVING_QUEUE_CACHED_JOBS={name:"aztec.proving_queue.cached_jobs_count",description:"Number of cached proving jobs",valueType:ValueType.INT},PROVING_QUEUE_ACTIVE_JOBS={name:"aztec.proving_queue.active_jobs_count",description:"Number of active proving jobs",valueType:ValueType.INT},PROVING_QUEUE_RESOLVED_JOBS={name:"aztec.proving_queue.resolved_jobs_count",description:"Number of resolved proving jobs",valueType:ValueType.INT},PROVING_QUEUE_REJECTED_JOBS={name:"aztec.proving_queue.rejected_jobs_count",description:"Number of rejected proving jobs",valueType:ValueType.INT},PROVING_QUEUE_ABORTED_JOBS={name:"aztec.proving_queue.aborted_jobs_count",description:"Number of aborted proving jobs",valueType:ValueType.INT},PROVING_QUEUE_RETRIED_JOBS={name:"aztec.proving_queue.retried_jobs_count",description:"Number of retried proving jobs",valueType:ValueType.INT},PROVING_QUEUE_TIMED_OUT_JOBS={name:"aztec.proving_queue.timed_out_jobs_count",description:"Number of timed out proving jobs",valueType:ValueType.INT},PROVING_QUEUE_JOB_WAIT={name:"aztec.proving_queue.job_wait",description:"Records how long a job sits in the queue",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_JOB_DURATION={name:"aztec.proving_queue.job_duration",description:"Records how long a job takes to complete",unit:"ms",valueType:ValueType.INT},PROVING_QUEUE_DB_NUM_ITEMS={name:"aztec.proving_queue.db.num_items",description:"Number of items in the proving queue database",valueType:ValueType.INT},PROVING_QUEUE_DB_MAP_SIZE={name:"aztec.proving_queue.db.map_size",description:"Map size of the proving queue database",unit:"By",valueType:ValueType.INT},PROVING_QUEUE_DB_USED_SIZE={name:"aztec.proving_queue.db.used_size",description:"Used size of the proving queue database",unit:"By",valueType:ValueType.INT},PROVING_AGENT_IDLE={name:"aztec.proving_queue.agent.idle",description:"Records how long an agent was idle",unit:"s",valueType:ValueType.DOUBLE},PROVER_NODE_JOB_DURATION={name:"aztec.prover_node.job_duration",description:"Duration of proving job",unit:"s",valueType:ValueType.DOUBLE},PROVER_NODE_JOB_CHECKPOINTS={name:"aztec.prover_node.job_checkpoints",description:"Number of checkpoints in a proven epoch",valueType:ValueType.INT},PROVER_NODE_JOB_BLOCKS={name:"aztec.prover_node.job_blocks",description:"Number of blocks in a proven epoch",valueType:ValueType.INT},PROVER_NODE_JOB_TRANSACTIONS={name:"aztec.prover_node.job_transactions",description:"Number of transactions in a proven epoch",valueType:ValueType.INT},PROVER_NODE_BLOB_PROCESSING_LAST_DURATION={name:"aztec.prover_node.blob_processing.last_duration",description:"Duration of blob processing step in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_BLOCK_PROCESSING_DURATION={name:"aztec.prover_node.block_processing.duration",description:"Duration of processing a single block in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_PROCESSING_DURATION={name:"aztec.prover_node.checkpoint_processing.duration",description:"Duration of processing a single checkpoint in epoch proving job",unit:"ms",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_BLOCKS={name:"aztec.prover_node.checkpoint_blocks",description:"Number of blocks in a proven checkpoint",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_TRANSACTIONS={name:"aztec.prover_node.checkpoint_transactions",description:"Number of transactions in a proven checkpoint",valueType:ValueType.INT},PROVER_NODE_CHECKPOINT_PROVING_DURATION={name:"aztec.prover_node.checkpoint_proving.duration",description:"Duration from the start of checkpoint processing to its block proofs being ready (excludes tx gathering)",unit:"ms",valueType:ValueType.INT},PROVER_NODE_ACTIVE_CHECKPOINTS={name:"aztec.prover_node.active_checkpoints",description:"Current number of canonical CheckpointProvers in the store (i.e. checkpoints currently being proven)",valueType:ValueType.INT},PROVER_NODE_ACTIVE_EPOCH_SESSIONS={name:"aztec.prover_node.active_epoch_sessions",description:"Current number of live EpochSessions, broken down by kind (full|partial)",valueType:ValueType.INT},PROVER_NODE_REWARDS_TOTAL={name:"aztec.prover_node.rewards_total",description:"The rewards earned (total)",valueType:ValueType.DOUBLE},PROVER_NODE_REWARDS_PER_EPOCH={name:"aztec.prover_node.rewards_per_epoch",description:"The rewards earned",valueType:ValueType.DOUBLE},WORLD_STATE_FORK_DURATION={name:"aztec.world_state.fork.duration",description:"Duration to fork world state",unit:"ms",valueType:ValueType.INT},WORLD_STATE_SYNC_DURATION={name:"aztec.world_state.sync.duration",description:"Duration to sync world state",unit:"ms",valueType:ValueType.INT},WORLD_STATE_MERKLE_TREE_SIZE={name:"aztec.world_state.merkle_tree_size",description:"Size of the merkle tree",valueType:ValueType.INT},WORLD_STATE_DB_SIZE={name:"aztec.world_state.db_size",description:"Size of the world state database",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_MAP_SIZE={name:"aztec.world_state.db_map_size",description:"The current configured map size for each merkle tree",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_PHYSICAL_SIZE={name:"aztec.world_state.db_physical_size",description:"The current physical disk space used for each database",unit:"By",valueType:ValueType.INT},WORLD_STATE_TREE_SIZE={name:"aztec.world_state.tree_size",description:"The current number of leaves in each merkle tree",valueType:ValueType.INT},WORLD_STATE_UNFINALIZED_HEIGHT={name:"aztec.world_state.unfinalized_height",description:"The unfinalized block height of each merkle tree",valueType:ValueType.INT},WORLD_STATE_FINALIZED_HEIGHT={name:"aztec.world_state.finalized_height",description:"The finalized block height of each merkle tree",valueType:ValueType.INT},WORLD_STATE_OLDEST_BLOCK={name:"aztec.world_state.oldest_block",description:"The oldest historical block of each merkle tree",valueType:ValueType.INT},WORLD_STATE_DB_USED_SIZE={name:"aztec.world_state.db_used_size",description:"The current used database size for each db of each merkle tree",unit:"By",valueType:ValueType.INT},WORLD_STATE_DB_NUM_ITEMS={name:"aztec.world_state.db_num_items",description:"The current number of items in each database of each merkle tree",valueType:ValueType.INT},WORLD_STATE_REQUEST_TIME={name:"aztec.world_state.request_time",description:"The round trip time of world state requests",unit:"us",valueType:ValueType.INT},WORLD_STATE_CRITICAL_ERROR_COUNT={name:"aztec.world_state.critical_error_count",description:"The number of critical errors in the world state",valueType:ValueType.INT},PROOF_VERIFIER_COUNT={name:"aztec.proof_verifier.count",description:"Number of proofs verified",valueType:ValueType.INT},VALIDATOR_RE_EXECUTION_TIME={name:"aztec.validator.re_execution_time",description:"The time taken to re-execute a transaction",unit:"ms",valueType:ValueType.INT},VALIDATOR_RE_EXECUTION_MANA={name:"aztec.validator.re_execution_mana",description:"The mana consumed by blocks",unit:"Mmana",valueType:ValueType.DOUBLE},VALIDATOR_RE_EXECUTION_TX_COUNT={name:"aztec.validator.re_execution_tx_count",description:"The number of txs in a block proposal",unit:"tx",valueType:ValueType.INT},VALIDATOR_CHECKPOINT_PROPOSAL_TO_PIPELINED_STATE_DURATION={name:"aztec.validator.checkpoint_proposal_to_pipelined_state_duration",description:"Time from receiving a checkpoint proposal to setting proposed checkpoint state for pipelining",unit:"ms",valueType:ValueType.INT},VALIDATOR_CHECKPOINT_PROPOSAL_RECEIVE_OFFSET_FROM_NEXT_SLOT_BOUNDARY={name:"aztec.validator.checkpoint.proposal_receive_offset_from_next_slot_boundary",description:"Absolute offset from the next slot boundary when a foreign checkpoint proposal is received. Use aztec.slot_boundary_side to distinguish before vs after the boundary.",unit:"ms",valueType:ValueType.INT},VALIDATOR_FAILED_REEXECUTION_COUNT={name:"aztec.validator.failed_reexecution_count",description:"The number of failed re-executions",valueType:ValueType.INT},VALIDATOR_ATTESTATION_SUCCESS_COUNT={name:"aztec.validator.attestation_success_count",description:"The number of successful attestations",valueType:ValueType.INT},VALIDATOR_ATTESTATION_FAILED_BAD_PROPOSAL_COUNT={name:"aztec.validator.attestation_failed_bad_proposal_count",description:"The number of failed attestations due to invalid block proposals",valueType:ValueType.INT},VALIDATOR_ATTESTATION_FAILED_NODE_ISSUE_COUNT={name:"aztec.validator.attestation_failed_node_issue_count",description:"The number of failed attestations due to node issues (timeout, missing data, etc.)",valueType:ValueType.INT},VALIDATOR_CURRENT_EPOCH={name:"aztec.validator.current_epoch",description:"The current epoch number, reflecting total epochs elapsed since genesis",valueType:ValueType.INT},VALIDATOR_LOADED_ATTESTERS_COUNT={name:"aztec.validator.loaded_attesters_count",description:"Number of attesters loaded by this validator",valueType:ValueType.INT},VALIDATOR_ATTESTED_EPOCH_COUNT={name:"aztec.validator.attested_epoch_count",description:"The number of epochs in which this node successfully submitted at least one attestation",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MIN={name:"nodejs.eventloop.delay.min",description:"Minimum delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MEAN={name:"nodejs.eventloop.delay.mean",description:"Mean delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_MAX={name:"nodejs.eventloop.delay.max",description:"Max delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_STDDEV={name:"nodejs.eventloop.delay.stddev",description:"Stddev delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P50={name:"nodejs.eventloop.delay.p50",description:"P50 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P90={name:"nodejs.eventloop.delay.p90",description:"P90 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_DELAY_P99={name:"nodejs.eventloop.delay.p99",description:"P99 delay of the event loop",unit:"ns",valueType:ValueType.INT},NODEJS_EVENT_LOOP_UTILIZATION={name:"nodejs.eventloop.utilization",description:"How busy is the event loop",valueType:ValueType.DOUBLE},NODEJS_EVENT_LOOP_TIME={name:"nodejs.eventloop.time",description:"How much time the event loop has spent in a given state",unit:"ms",valueType:ValueType.INT};var TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT={name:"aztec.tx_collector.txs_from_proposal_count",description:"The number of txs taken from block proposals",valueType:ValueType.INT},TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT={name:"aztec.tx_collector.txs_from_mempool_count",description:"The number of txs taken from the local mempool",valueType:ValueType.INT},TX_PROVIDER_TXS_FROM_P2P_COUNT={name:"aztec.tx_collector.txs_from_p2p_count",description:"The number of txs taken from the p2p network",valueType:ValueType.INT},TX_PROVIDER_MISSING_TXS_COUNT={name:"aztec.tx_collector.missing_txs_count",description:"The number of txs not found anywhere",valueType:ValueType.INT},TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION={name:"aztec.tx_collector.txs_requested_fraction",description:"The fraction of transaction requested from peers",valueType:ValueType.DOUBLE},TX_PROVIDER_P2P_TXS_REQUEST_DELAY={name:"aztec.tx_collector.txs_requested_delay",description:"The time it took to request missing transactions from p2p",unit:"ms",valueType:ValueType.INT},TX_COLLECTOR_COUNT={name:"aztec.tx_collector.tx_count",description:"The number of txs collected",valueType:ValueType.INT},TX_COLLECTOR_DURATION_PER_REQUEST={name:"aztec.tx_collector.duration_per_request",description:"Total duration of an individual tx collection request",unit:"ms",valueType:ValueType.INT},TX_COLLECTOR_DURATION_PER_TX={name:"aztec.tx_collector.duration_per_tx",description:"Average duration per tx of an individual tx collection request",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_SUCCESS={name:"aztec.p2p.tx_file_store.uploads_success",description:"Number of successful tx uploads to file storage",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_FAILED={name:"aztec.p2p.tx_file_store.uploads_failed",description:"Number of failed tx uploads to file storage",valueType:ValueType.INT},TX_FILE_STORE_UPLOADS_SKIPPED={name:"aztec.p2p.tx_file_store.uploads_skipped",description:"Number of tx uploads skipped (duplicates)",valueType:ValueType.INT},TX_FILE_STORE_UPLOAD_DURATION={name:"aztec.p2p.tx_file_store.upload_duration",description:"Duration to upload a tx to file storage",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_QUEUE_SIZE={name:"aztec.p2p.tx_file_store.queue_size",description:"Number of txs pending upload",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOADS_SUCCESS={name:"aztec.p2p.tx_file_store.downloads_success",description:"Number of successful tx downloads from file storage",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOADS_FAILED={name:"aztec.p2p.tx_file_store.downloads_failed",description:"Number of failed tx downloads from file storage",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOAD_DURATION={name:"aztec.p2p.tx_file_store.download_duration",description:"Duration to download a tx from file storage",unit:"ms",valueType:ValueType.INT},TX_FILE_STORE_DOWNLOAD_SIZE={name:"aztec.p2p.tx_file_store.download_size",description:"Size of a downloaded tx from file storage",unit:"By",valueType:ValueType.INT},IVC_VERIFIER_TIME={name:"aztec.ivc_verifier.time",description:"Duration to verify chonk proofs",unit:"ms",valueType:ValueType.INT},IVC_VERIFIER_TOTAL_TIME={name:"aztec.ivc_verifier.total_time",description:"Total duration to verify chonk proofs, including serde",unit:"ms",valueType:ValueType.INT},IVC_VERIFIER_FAILURE_COUNT={name:"aztec.ivc_verifier.failure_count",description:"Count of failed IVC proof verifications",valueType:ValueType.INT},IVC_VERIFIER_AGG_DURATION_MIN={name:"aztec.ivc_verifier.agg_duration_min",description:"MIN ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_MAX={name:"aztec.ivc_verifier.agg_duration_max",description:"MAX ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_P50={name:"aztec.ivc_verifier.agg_duration_p50",description:"P50 ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_P90={name:"aztec.ivc_verifier.agg_duration_p90",description:"P90 ivc verification",unit:"ms",valueType:ValueType.DOUBLE},IVC_VERIFIER_AGG_DURATION_AVG={name:"aztec.ivc_verifier.agg_duration_avg",description:"AVG ivc verification",unit:"ms",valueType:ValueType.DOUBLE},HA_SIGNER_SIGNING_DURATION={name:"aztec.ha_signer.signing_duration",description:"End-to-end duration for signing with HA protection (lock + sign + record)",unit:"ms",valueType:ValueType.INT},HA_SIGNER_SIGNING_SUCCESS_COUNT={name:"aztec.ha_signer.signing_success_count",description:"Count of successful signing operations",valueType:ValueType.INT},HA_SIGNER_DUTY_ALREADY_SIGNED_COUNT={name:"aztec.ha_signer.duty_already_signed_count",description:"Count of DutyAlreadySignedError (expected in HA; another node signed first)",valueType:ValueType.INT},HA_SIGNER_SLASHING_PROTECTION_COUNT={name:"aztec.ha_signer.slashing_protection_count",description:"Count of SlashingProtectionError (attempted to sign different data)",valueType:ValueType.INT},HA_SIGNER_SIGNING_ERROR_COUNT={name:"aztec.ha_signer.signing_error_count",description:"Count of signing function failures (lock deleted for retry)",valueType:ValueType.INT},HA_SIGNER_LOCK_ACQUIRED_COUNT={name:"aztec.ha_signer.lock_acquired_count",description:"Count of lock acquisitions (new lock acquired vs existing record found)",valueType:ValueType.INT},HA_SIGNER_CLEANUP_STUCK_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_stuck_duties_count",description:"Number of stuck duties cleaned up per cleanup run",valueType:ValueType.INT},HA_SIGNER_CLEANUP_OLD_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_old_duties_count",description:"Number of old duties cleaned up",valueType:ValueType.INT},HA_SIGNER_CLEANUP_OUTDATED_ROLLUP_DUTIES_COUNT={name:"aztec.ha_signer.cleanup_outdated_rollup_duties_count",description:"Number of duties cleaned due to rollup upgrade",valueType:ValueType.INT},BOT_INBOX_MESSAGE_COUNT={name:"aztec.bot.inbox.message_count",description:"Count of L1\u2192L2 messages reaching each milestone of the inbox bot pipeline",unit:"messages",valueType:ValueType.INT},BOT_INBOX_STAGE_DURATION={name:"aztec.bot.inbox.stage_duration",description:"Bot-observed duration of each stage of the L1\u2192L2 message lifecycle",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_SIMULATION_COUNT={name:"aztec.bot.inbox.simulation_count",description:"Count of L2 consumption simulation attempts by outcome",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_L2_SEND_DURATION={name:"aztec.bot.inbox.l2_send_duration",description:"Duration of the wallet simulate, prove, and submit operation for an Inbox consumption lane",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_L2_ACTIVE_ATTEMPTS={name:"aztec.bot.inbox.l2_active_attempts",description:"Number of Inbox consumption wallet operations currently active in each lane",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_PUBLIC_EXECUTION_COUNT={name:"aztec.bot.inbox.public_execution_count",description:"Count of public consumption executions by outcome",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_PREDICTION_MISMATCH_COUNT={name:"aztec.bot.inbox.prediction_mismatch_count",description:"Count of accepted simulations whose public execution later reverted",unit:"attempts",valueType:ValueType.INT},BOT_INBOX_CHECK_COUNT={name:"aztec.bot.inbox.check_count",description:"Count of node API semantic checks by check and outcome",unit:"checks",valueType:ValueType.INT},BOT_INBOX_FAILURE_COUNT={name:"aztec.bot.inbox.failure_count",description:"Count of inbox bot failures by bounded reason",unit:"failures",valueType:ValueType.INT},BOT_INBOX_PENDING_COUNT={name:"aztec.bot.inbox.pending_count",description:"Number of produced messages not yet completed",unit:"messages",valueType:ValueType.INT},BOT_INBOX_OLDEST_PENDING_AGE={name:"aztec.bot.inbox.oldest_pending_age",description:"Age of the oldest message not yet completed",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_L1_BATCH_COUNT={name:"aztec.bot.inbox.l1_batch_count",description:"Count of L1 Inbox batches submitted by outcome",unit:"batches",valueType:ValueType.INT},BOT_INBOX_L1_BATCH_SIZE={name:"aztec.bot.inbox.l1_batch_size",description:"Number of messages per L1 Inbox batch",unit:"messages",valueType:ValueType.INT},BOT_INBOX_L1_GAS_USED={name:"aztec.bot.inbox.l1_gas_used",description:"L1 gas used by an Inbox batch transaction",unit:"gas",valueType:ValueType.INT},BOT_INBOX_SATURATION_RUN_COUNT={name:"aztec.bot.inbox.saturation_run_count",description:"Count of full-bucket saturation runs by outcome",unit:"runs",valueType:ValueType.INT},BOT_INBOX_SATURATION_LAST_SUCCESS_TIMESTAMP={name:"aztec.bot.inbox.saturation_last_success_timestamp",description:"Unix timestamp of the last fully successful saturation run, or 0 if none",unit:"s",valueType:ValueType.DOUBLE},BOT_INBOX_SATURATION_ENABLED={name:"aztec.bot.inbox.saturation_enabled",description:"Whether the saturation schedule is enabled (1) or disabled (0)",unit:"1",valueType:ValueType.INT},BOT_INBOX_SATURATION_NEXT_DUE_TIMESTAMP={name:"aztec.bot.inbox.saturation_next_due_timestamp",description:"Unix timestamp of the next scheduled saturation run, or 0 when disabled",unit:"s",valueType:ValueType.DOUBLE};var import_prom_client=__toESM(require_prom_client(),1);function makeMetricDefinition(prop){return{name:`aztec.stub.${prop.toLowerCase()}`,description:"TXE stub metric",valueType:ValueType.INT}}__name(makeMetricDefinition,"makeMetricDefinition");var Metrics=new Proxy(Object.create(null),{get:__name((_target,prop)=>typeof prop=="string"?makeMetricDefinition(prop):void 0,"get")}),Attributes=new Proxy(Object.create(null),{get:__name((_target,prop)=>typeof prop=="string"?`aztec.stub.${prop.toLowerCase()}`:void 0,"get")});import assert5 from"assert/strict";import{mkdir as mkdir3,mkdtemp as mkdtemp2,rm as rm4}from"fs/promises";import{tmpdir as tmpdir4}from"os";import{join as join8}from"path";var durationTrackDenylist=new Set(["getInitialStateReference"]),WorldStateInstrumentation=class{static{__name(this,"WorldStateInstrumentation")}telemetry;log;dbMapSize;dbPhysicalSize;treeSize;unfinalizedHeight;finalizedHeight;oldestBlock;dbNumItems;dbUsedSize;requestHistogram;criticalErrors;constructor(telemetry,log2=createLogger("world-state:instrumentation")){this.telemetry=telemetry,this.log=log2;let meter=telemetry.getMeter("World State");this.dbMapSize=meter.createGauge(Metrics.WORLD_STATE_DB_MAP_SIZE),this.dbPhysicalSize=meter.createGauge(Metrics.WORLD_STATE_DB_PHYSICAL_SIZE),this.treeSize=meter.createGauge(Metrics.WORLD_STATE_TREE_SIZE),this.unfinalizedHeight=meter.createGauge(Metrics.WORLD_STATE_UNFINALIZED_HEIGHT),this.finalizedHeight=meter.createGauge(Metrics.WORLD_STATE_FINALIZED_HEIGHT),this.oldestBlock=meter.createGauge(Metrics.WORLD_STATE_OLDEST_BLOCK),this.dbUsedSize=meter.createGauge(Metrics.WORLD_STATE_DB_USED_SIZE),this.dbNumItems=meter.createGauge(Metrics.WORLD_STATE_DB_NUM_ITEMS),this.requestHistogram=meter.createHistogram(Metrics.WORLD_STATE_REQUEST_TIME),this.criticalErrors=createUpDownCounterWithDefault(meter,Metrics.WORLD_STATE_CRITICAL_ERROR_COUNT,{[Attributes.ERROR_TYPE]:["synch_pending_block","finalize_block","prune_pending_block","prune_historical_block"]})}updateTreeStats(treeDbStats,treeMeta,tree){this.dbMapSize.record(Number(treeDbStats.mapSize),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.dbPhysicalSize.record(Number(treeDbStats.physicalFileSize),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.treeSize.record(Number(treeMeta.size),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.unfinalizedHeight.record(Number(treeMeta.unfinalizedBlockHeight),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.finalizedHeight.record(Number(treeMeta.finalizedBlockHeight),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.oldestBlock.record(Number(treeMeta.oldestHistoricBlock),{[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.updateTreeDBStats(treeDbStats.blockIndicesDBStats,"block_indices",tree),this.updateTreeDBStats(treeDbStats.blocksDBStats,"blocks",tree),this.updateTreeDBStats(treeDbStats.leafIndicesDBStats,"leaf_indices",tree),this.updateTreeDBStats(treeDbStats.leafPreimagesDBStats,"leaf_preimage",tree),this.updateTreeDBStats(treeDbStats.nodesDBStats,"nodes",tree)}updateTreeDBStats(dbStats,dbType,tree){this.dbNumItems.record(Number(dbStats.numDataItems),{[Attributes.WS_DB_DATA_TYPE]:dbType,[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]}),this.dbUsedSize.record(Number(dbStats.totalUsedSize),{[Attributes.WS_DB_DATA_TYPE]:dbType,[Attributes.MERKLE_TREE_NAME]:MerkleTreeId[tree]})}updateWorldStateMetrics(worldStateStatus){this.updateTreeStats(worldStateStatus.dbStats.archiveTreeStats,worldStateStatus.meta.archiveTreeMeta,MerkleTreeId.ARCHIVE),this.updateTreeStats(worldStateStatus.dbStats.messageTreeStats,worldStateStatus.meta.messageTreeMeta,MerkleTreeId.L1_TO_L2_MESSAGE_TREE),this.updateTreeStats(worldStateStatus.dbStats.noteHashTreeStats,worldStateStatus.meta.noteHashTreeMeta,MerkleTreeId.NOTE_HASH_TREE),this.updateTreeStats(worldStateStatus.dbStats.nullifierTreeStats,worldStateStatus.meta.nullifierTreeMeta,MerkleTreeId.NULLIFIER_TREE),this.updateTreeStats(worldStateStatus.dbStats.publicDataTreeStats,worldStateStatus.meta.publicDataTreeMeta,MerkleTreeId.PUBLIC_DATA_TREE)}recordRoundTrip(timeUs,operation){durationTrackDenylist.has(operation)||this.requestHistogram.record(Math.ceil(timeUs),{[Attributes.WORLD_STATE_REQUEST_TYPE]:operation})}incCriticalErrors(errorType){this.criticalErrors.add(1,{[Attributes.ERROR_TYPE]:errorType})}};import{Decoder as Decoder7,Encoder as Encoder12}from"msgpackr";function assertU642(value,ctx){if(typeof value=="bigint"){if(value<0n||value>BigInt(Number.MAX_SAFE_INTEGER))throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return Number(value)}if(!Number.isSafeInteger(value)||value<0)throw new Error(`${ctx}: u64 value ${value} is outside JS safe integer range`);return value}__name(assertU642,"assertU64");function toWireU64(value,ctx){let checked=assertU642(value,ctx);return checked>4294967295?BigInt(checked):checked}__name(toWireU64,"toWireU64");function assertBin322(value,ctx){if(value.length!==32)throw new Error(`${ctx}: expected 32 bytes, got ${value.length}`);return value}__name(assertBin322,"assertBin32");function toTreeStateReference(o){if(o.treeId===void 0)throw new Error("Expected treeId in TreeStateReference deserialization");if(o.root===void 0)throw new Error("Expected root in TreeStateReference deserialization");if(o.size===void 0)throw new Error("Expected size in TreeStateReference deserialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:assertU642(o.size,"o.size")}}__name(toTreeStateReference,"toTreeStateReference");function toPublicDataLeafValue(o){if(o.slot===void 0)throw new Error("Expected slot in PublicDataLeafValue deserialization");if(o.value===void 0)throw new Error("Expected value in PublicDataLeafValue deserialization");return{slot:assertBin322(o.slot,"o.slot"),value:assertBin322(o.value,"o.value")}}__name(toPublicDataLeafValue,"toPublicDataLeafValue");function toNullifierLeafValue(o){if(o.nullifier===void 0)throw new Error("Expected nullifier in NullifierLeafValue deserialization");return{nullifier:assertBin322(o.nullifier,"o.nullifier")}}__name(toNullifierLeafValue,"toNullifierLeafValue");function toIndexedPublicDataLeafValue(o){if(o.leaf===void 0)throw new Error("Expected leaf in IndexedPublicDataLeafValue deserialization");if(o.nextIndex===void 0)throw new Error("Expected nextIndex in IndexedPublicDataLeafValue deserialization");if(o.nextKey===void 0)throw new Error("Expected nextKey in IndexedPublicDataLeafValue deserialization");return{leaf:toPublicDataLeafValue(o.leaf),nextIndex:assertU642(o.nextIndex,"o.nextIndex"),nextKey:assertBin322(o.nextKey,"o.nextKey")}}__name(toIndexedPublicDataLeafValue,"toIndexedPublicDataLeafValue");function toIndexedNullifierLeafValue(o){if(o.leaf===void 0)throw new Error("Expected leaf in IndexedNullifierLeafValue deserialization");if(o.nextIndex===void 0)throw new Error("Expected nextIndex in IndexedNullifierLeafValue deserialization");if(o.nextKey===void 0)throw new Error("Expected nextKey in IndexedNullifierLeafValue deserialization");return{leaf:toNullifierLeafValue(o.leaf),nextIndex:assertU642(o.nextIndex,"o.nextIndex"),nextKey:assertBin322(o.nextKey,"o.nextKey")}}__name(toIndexedNullifierLeafValue,"toIndexedNullifierLeafValue");function toSiblingPathAndIndex(o){if(o.index===void 0)throw new Error("Expected index in SiblingPathAndIndex deserialization");if(o.path===void 0)throw new Error("Expected path in SiblingPathAndIndex deserialization");return{index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toSiblingPathAndIndex,"toSiblingPathAndIndex");function toPublicDataLeafUpdateWitnessData(o){if(o.leaf===void 0)throw new Error("Expected leaf in PublicDataLeafUpdateWitnessData deserialization");if(o.index===void 0)throw new Error("Expected index in PublicDataLeafUpdateWitnessData deserialization");if(o.path===void 0)throw new Error("Expected path in PublicDataLeafUpdateWitnessData deserialization");return{leaf:toIndexedPublicDataLeafValue(o.leaf),index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toPublicDataLeafUpdateWitnessData,"toPublicDataLeafUpdateWitnessData");function toSortedPublicDataLeaf(o){if(o.leaf===void 0)throw new Error("Expected leaf in SortedPublicDataLeaf deserialization");if(o.index===void 0)throw new Error("Expected index in SortedPublicDataLeaf deserialization");return{leaf:toPublicDataLeafValue(o.leaf),index:assertU642(o.index,"o.index")}}__name(toSortedPublicDataLeaf,"toSortedPublicDataLeaf");function toBatchInsertionResultPublicData(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in BatchInsertionResultPublicData deserialization");if(o.sortedLeaves===void 0)throw new Error("Expected sortedLeaves in BatchInsertionResultPublicData deserialization");if(o.subtreePath===void 0)throw new Error("Expected subtreePath in BatchInsertionResultPublicData deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v)),sortedLeaves:o.sortedLeaves.map(v=>toSortedPublicDataLeaf(v)),subtreePath:o.subtreePath.map(v=>assertBin322(v,"v"))}}__name(toBatchInsertionResultPublicData,"toBatchInsertionResultPublicData");function toNullifierLeafUpdateWitnessData(o){if(o.leaf===void 0)throw new Error("Expected leaf in NullifierLeafUpdateWitnessData deserialization");if(o.index===void 0)throw new Error("Expected index in NullifierLeafUpdateWitnessData deserialization");if(o.path===void 0)throw new Error("Expected path in NullifierLeafUpdateWitnessData deserialization");return{leaf:toIndexedNullifierLeafValue(o.leaf),index:assertU642(o.index,"o.index"),path:o.path.map(v=>assertBin322(v,"v"))}}__name(toNullifierLeafUpdateWitnessData,"toNullifierLeafUpdateWitnessData");function toSortedNullifierLeaf(o){if(o.leaf===void 0)throw new Error("Expected leaf in SortedNullifierLeaf deserialization");if(o.index===void 0)throw new Error("Expected index in SortedNullifierLeaf deserialization");return{leaf:toNullifierLeafValue(o.leaf),index:assertU642(o.index,"o.index")}}__name(toSortedNullifierLeaf,"toSortedNullifierLeaf");function toBatchInsertionResultNullifier(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in BatchInsertionResultNullifier deserialization");if(o.sortedLeaves===void 0)throw new Error("Expected sortedLeaves in BatchInsertionResultNullifier deserialization");if(o.subtreePath===void 0)throw new Error("Expected subtreePath in BatchInsertionResultNullifier deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v)),sortedLeaves:o.sortedLeaves.map(v=>toSortedNullifierLeaf(v)),subtreePath:o.subtreePath.map(v=>assertBin322(v,"v"))}}__name(toBatchInsertionResultNullifier,"toBatchInsertionResultNullifier");function toSequentialInsertionResultPublicData(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in SequentialInsertionResultPublicData deserialization");if(o.insertionWitnessData===void 0)throw new Error("Expected insertionWitnessData in SequentialInsertionResultPublicData deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v)),insertionWitnessData:o.insertionWitnessData.map(v=>toPublicDataLeafUpdateWitnessData(v))}}__name(toSequentialInsertionResultPublicData,"toSequentialInsertionResultPublicData");function toSequentialInsertionResultNullifier(o){if(o.lowLeafWitnessData===void 0)throw new Error("Expected lowLeafWitnessData in SequentialInsertionResultNullifier deserialization");if(o.insertionWitnessData===void 0)throw new Error("Expected insertionWitnessData in SequentialInsertionResultNullifier deserialization");return{lowLeafWitnessData:o.lowLeafWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v)),insertionWitnessData:o.insertionWitnessData.map(v=>toNullifierLeafUpdateWitnessData(v))}}__name(toSequentialInsertionResultNullifier,"toSequentialInsertionResultNullifier");function toWorldStateStatusSummary(o){if(o.unfinalizedBlockNumber===void 0)throw new Error("Expected unfinalizedBlockNumber in WorldStateStatusSummary deserialization");if(o.finalizedBlockNumber===void 0)throw new Error("Expected finalizedBlockNumber in WorldStateStatusSummary deserialization");if(o.oldestHistoricalBlock===void 0)throw new Error("Expected oldestHistoricalBlock in WorldStateStatusSummary deserialization");if(o.treesAreSynched===void 0)throw new Error("Expected treesAreSynched in WorldStateStatusSummary deserialization");return{unfinalizedBlockNumber:assertU642(o.unfinalizedBlockNumber,"o.unfinalizedBlockNumber"),finalizedBlockNumber:assertU642(o.finalizedBlockNumber,"o.finalizedBlockNumber"),oldestHistoricalBlock:assertU642(o.oldestHistoricalBlock,"o.oldestHistoricalBlock"),treesAreSynched:o.treesAreSynched}}__name(toWorldStateStatusSummary,"toWorldStateStatusSummary");function toDBStats(o){if(o.name===void 0)throw new Error("Expected name in DBStats deserialization");if(o.numDataItems===void 0)throw new Error("Expected numDataItems in DBStats deserialization");if(o.totalUsedSize===void 0)throw new Error("Expected totalUsedSize in DBStats deserialization");return{name:o.name,numDataItems:assertU642(o.numDataItems,"o.numDataItems"),totalUsedSize:assertU642(o.totalUsedSize,"o.totalUsedSize")}}__name(toDBStats,"toDBStats");function toTreeDBStats(o){if(o.mapSize===void 0)throw new Error("Expected mapSize in TreeDBStats deserialization");if(o.physicalFileSize===void 0)throw new Error("Expected physicalFileSize in TreeDBStats deserialization");if(o.blocksDBStats===void 0)throw new Error("Expected blocksDBStats in TreeDBStats deserialization");if(o.nodesDBStats===void 0)throw new Error("Expected nodesDBStats in TreeDBStats deserialization");if(o.leafPreimagesDBStats===void 0)throw new Error("Expected leafPreimagesDBStats in TreeDBStats deserialization");if(o.leafIndicesDBStats===void 0)throw new Error("Expected leafIndicesDBStats in TreeDBStats deserialization");if(o.blockIndicesDBStats===void 0)throw new Error("Expected blockIndicesDBStats in TreeDBStats deserialization");return{mapSize:assertU642(o.mapSize,"o.mapSize"),physicalFileSize:assertU642(o.physicalFileSize,"o.physicalFileSize"),blocksDBStats:toDBStats(o.blocksDBStats),nodesDBStats:toDBStats(o.nodesDBStats),leafPreimagesDBStats:toDBStats(o.leafPreimagesDBStats),leafIndicesDBStats:toDBStats(o.leafIndicesDBStats),blockIndicesDBStats:toDBStats(o.blockIndicesDBStats)}}__name(toTreeDBStats,"toTreeDBStats");function toWorldStateDBStats(o){if(o.noteHashTreeStats===void 0)throw new Error("Expected noteHashTreeStats in WorldStateDBStats deserialization");if(o.messageTreeStats===void 0)throw new Error("Expected messageTreeStats in WorldStateDBStats deserialization");if(o.archiveTreeStats===void 0)throw new Error("Expected archiveTreeStats in WorldStateDBStats deserialization");if(o.publicDataTreeStats===void 0)throw new Error("Expected publicDataTreeStats in WorldStateDBStats deserialization");if(o.nullifierTreeStats===void 0)throw new Error("Expected nullifierTreeStats in WorldStateDBStats deserialization");return{noteHashTreeStats:toTreeDBStats(o.noteHashTreeStats),messageTreeStats:toTreeDBStats(o.messageTreeStats),archiveTreeStats:toTreeDBStats(o.archiveTreeStats),publicDataTreeStats:toTreeDBStats(o.publicDataTreeStats),nullifierTreeStats:toTreeDBStats(o.nullifierTreeStats)}}__name(toWorldStateDBStats,"toWorldStateDBStats");function toTreeMeta(o){if(o.name===void 0)throw new Error("Expected name in TreeMeta deserialization");if(o.depth===void 0)throw new Error("Expected depth in TreeMeta deserialization");if(o.size===void 0)throw new Error("Expected size in TreeMeta deserialization");if(o.committedSize===void 0)throw new Error("Expected committedSize in TreeMeta deserialization");if(o.root===void 0)throw new Error("Expected root in TreeMeta deserialization");if(o.initialSize===void 0)throw new Error("Expected initialSize in TreeMeta deserialization");if(o.initialRoot===void 0)throw new Error("Expected initialRoot in TreeMeta deserialization");if(o.oldestHistoricBlock===void 0)throw new Error("Expected oldestHistoricBlock in TreeMeta deserialization");if(o.unfinalizedBlockHeight===void 0)throw new Error("Expected unfinalizedBlockHeight in TreeMeta deserialization");if(o.finalizedBlockHeight===void 0)throw new Error("Expected finalizedBlockHeight in TreeMeta deserialization");return{name:o.name,depth:o.depth,size:assertU642(o.size,"o.size"),committedSize:assertU642(o.committedSize,"o.committedSize"),root:assertBin322(o.root,"o.root"),initialSize:assertU642(o.initialSize,"o.initialSize"),initialRoot:assertBin322(o.initialRoot,"o.initialRoot"),oldestHistoricBlock:o.oldestHistoricBlock,unfinalizedBlockHeight:o.unfinalizedBlockHeight,finalizedBlockHeight:o.finalizedBlockHeight}}__name(toTreeMeta,"toTreeMeta");function toWorldStateMeta(o){if(o.noteHashTreeMeta===void 0)throw new Error("Expected noteHashTreeMeta in WorldStateMeta deserialization");if(o.messageTreeMeta===void 0)throw new Error("Expected messageTreeMeta in WorldStateMeta deserialization");if(o.archiveTreeMeta===void 0)throw new Error("Expected archiveTreeMeta in WorldStateMeta deserialization");if(o.publicDataTreeMeta===void 0)throw new Error("Expected publicDataTreeMeta in WorldStateMeta deserialization");if(o.nullifierTreeMeta===void 0)throw new Error("Expected nullifierTreeMeta in WorldStateMeta deserialization");return{noteHashTreeMeta:toTreeMeta(o.noteHashTreeMeta),messageTreeMeta:toTreeMeta(o.messageTreeMeta),archiveTreeMeta:toTreeMeta(o.archiveTreeMeta),publicDataTreeMeta:toTreeMeta(o.publicDataTreeMeta),nullifierTreeMeta:toTreeMeta(o.nullifierTreeMeta)}}__name(toWorldStateMeta,"toWorldStateMeta");function toWorldStateStatusFull(o){if(o.summary===void 0)throw new Error("Expected summary in WorldStateStatusFull deserialization");if(o.dbStats===void 0)throw new Error("Expected dbStats in WorldStateStatusFull deserialization");if(o.meta===void 0)throw new Error("Expected meta in WorldStateStatusFull deserialization");return{summary:toWorldStateStatusSummary(o.summary),dbStats:toWorldStateDBStats(o.dbStats),meta:toWorldStateMeta(o.meta)}}__name(toWorldStateStatusFull,"toWorldStateStatusFull");function toWsdbGetTreeInfoResponse(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetTreeInfoResponse deserialization");if(o.root===void 0)throw new Error("Expected root in WsdbGetTreeInfoResponse deserialization");if(o.size===void 0)throw new Error("Expected size in WsdbGetTreeInfoResponse deserialization");if(o.depth===void 0)throw new Error("Expected depth in WsdbGetTreeInfoResponse deserialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:assertU642(o.size,"o.size"),depth:o.depth}}__name(toWsdbGetTreeInfoResponse,"toWsdbGetTreeInfoResponse");function toWsdbGetStateReferenceResponse(o){if(o.state===void 0)throw new Error("Expected state in WsdbGetStateReferenceResponse deserialization");return{state:o.state.map(v=>toTreeStateReference(v))}}__name(toWsdbGetStateReferenceResponse,"toWsdbGetStateReferenceResponse");function toWsdbGetInitialStateReferenceResponse(o){if(o.state===void 0)throw new Error("Expected state in WsdbGetInitialStateReferenceResponse deserialization");return{state:o.state.map(v=>toTreeStateReference(v))}}__name(toWsdbGetInitialStateReferenceResponse,"toWsdbGetInitialStateReferenceResponse");function toWsdbGetLeafValueResponse(o){return{value:o.value!=null?assertBin322(o.value,"o.value"):null}}__name(toWsdbGetLeafValueResponse,"toWsdbGetLeafValueResponse");function toWsdbGetPublicDataLeafValueResponse(o){return{value:o.value!=null?toPublicDataLeafValue(o.value):null}}__name(toWsdbGetPublicDataLeafValueResponse,"toWsdbGetPublicDataLeafValueResponse");function toWsdbGetNullifierLeafValueResponse(o){return{value:o.value!=null?toNullifierLeafValue(o.value):null}}__name(toWsdbGetNullifierLeafValueResponse,"toWsdbGetNullifierLeafValueResponse");function toWsdbGetPublicDataLeafPreimageResponse(o){return{preimage:o.preimage!=null?toIndexedPublicDataLeafValue(o.preimage):null}}__name(toWsdbGetPublicDataLeafPreimageResponse,"toWsdbGetPublicDataLeafPreimageResponse");function toWsdbGetNullifierLeafPreimageResponse(o){return{preimage:o.preimage!=null?toIndexedNullifierLeafValue(o.preimage):null}}__name(toWsdbGetNullifierLeafPreimageResponse,"toWsdbGetNullifierLeafPreimageResponse");function toWsdbGetSiblingPathResponse(o){if(o.path===void 0)throw new Error("Expected path in WsdbGetSiblingPathResponse deserialization");return{path:o.path.map(v=>assertBin322(v,"v"))}}__name(toWsdbGetSiblingPathResponse,"toWsdbGetSiblingPathResponse");function toWsdbGetBlockNumbersForLeafIndicesResponse(o){if(o.blockNumbers===void 0)throw new Error("Expected blockNumbers in WsdbGetBlockNumbersForLeafIndicesResponse deserialization");return{blockNumbers:o.blockNumbers.map(v=>v??null)}}__name(toWsdbGetBlockNumbersForLeafIndicesResponse,"toWsdbGetBlockNumbersForLeafIndicesResponse");function toWsdbFindLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindLeafIndicesResponse,"toWsdbFindLeafIndicesResponse");function toWsdbFindPublicDataLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindPublicDataLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindPublicDataLeafIndicesResponse,"toWsdbFindPublicDataLeafIndicesResponse");function toWsdbFindNullifierLeafIndicesResponse(o){if(o.indices===void 0)throw new Error("Expected indices in WsdbFindNullifierLeafIndicesResponse deserialization");return{indices:o.indices.map(v=>v!=null?assertU642(v,"v"):null)}}__name(toWsdbFindNullifierLeafIndicesResponse,"toWsdbFindNullifierLeafIndicesResponse");function toWsdbFindLowLeafResponse(o){if(o.alreadyPresent===void 0)throw new Error("Expected alreadyPresent in WsdbFindLowLeafResponse deserialization");if(o.index===void 0)throw new Error("Expected index in WsdbFindLowLeafResponse deserialization");return{alreadyPresent:o.alreadyPresent,index:assertU642(o.index,"o.index")}}__name(toWsdbFindLowLeafResponse,"toWsdbFindLowLeafResponse");function toWsdbFindSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindSiblingPathsResponse,"toWsdbFindSiblingPathsResponse");function toWsdbFindPublicDataSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindPublicDataSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindPublicDataSiblingPathsResponse,"toWsdbFindPublicDataSiblingPathsResponse");function toWsdbFindNullifierSiblingPathsResponse(o){if(o.paths===void 0)throw new Error("Expected paths in WsdbFindNullifierSiblingPathsResponse deserialization");return{paths:o.paths.map(v=>v!=null?toSiblingPathAndIndex(v):null)}}__name(toWsdbFindNullifierSiblingPathsResponse,"toWsdbFindNullifierSiblingPathsResponse");function toWsdbAppendLeavesResponse(o){return{}}__name(toWsdbAppendLeavesResponse,"toWsdbAppendLeavesResponse");function toWsdbAppendPublicDataLeavesResponse(o){return{}}__name(toWsdbAppendPublicDataLeavesResponse,"toWsdbAppendPublicDataLeavesResponse");function toWsdbAppendNullifierLeavesResponse(o){return{}}__name(toWsdbAppendNullifierLeavesResponse,"toWsdbAppendNullifierLeavesResponse");function toWsdbBatchInsertPublicDataResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbBatchInsertPublicDataResponse deserialization");return{result:toBatchInsertionResultPublicData(o.result)}}__name(toWsdbBatchInsertPublicDataResponse,"toWsdbBatchInsertPublicDataResponse");function toWsdbBatchInsertNullifierResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbBatchInsertNullifierResponse deserialization");return{result:toBatchInsertionResultNullifier(o.result)}}__name(toWsdbBatchInsertNullifierResponse,"toWsdbBatchInsertNullifierResponse");function toWsdbSequentialInsertPublicDataResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbSequentialInsertPublicDataResponse deserialization");return{result:toSequentialInsertionResultPublicData(o.result)}}__name(toWsdbSequentialInsertPublicDataResponse,"toWsdbSequentialInsertPublicDataResponse");function toWsdbSequentialInsertNullifierResponse(o){if(o.result===void 0)throw new Error("Expected result in WsdbSequentialInsertNullifierResponse deserialization");return{result:toSequentialInsertionResultNullifier(o.result)}}__name(toWsdbSequentialInsertNullifierResponse,"toWsdbSequentialInsertNullifierResponse");function toWsdbUpdateArchiveResponse(o){return{}}__name(toWsdbUpdateArchiveResponse,"toWsdbUpdateArchiveResponse");function toWsdbCommitResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbCommitResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbCommitResponse,"toWsdbCommitResponse");function toWsdbRollbackResponse(o){return{}}__name(toWsdbRollbackResponse,"toWsdbRollbackResponse");function toWsdbSyncBlockResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbSyncBlockResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbSyncBlockResponse,"toWsdbSyncBlockResponse");function toWsdbCreateForkResponse(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCreateForkResponse deserialization");return{forkId:assertU642(o.forkId,"o.forkId")}}__name(toWsdbCreateForkResponse,"toWsdbCreateForkResponse");function toWsdbDeleteForkResponse(o){return{}}__name(toWsdbDeleteForkResponse,"toWsdbDeleteForkResponse");function toWsdbFinalizeBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbFinalizeBlocksResponse deserialization");return{status:toWorldStateStatusSummary(o.status)}}__name(toWsdbFinalizeBlocksResponse,"toWsdbFinalizeBlocksResponse");function toWsdbUnwindBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbUnwindBlocksResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbUnwindBlocksResponse,"toWsdbUnwindBlocksResponse");function toWsdbRemoveHistoricalBlocksResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbRemoveHistoricalBlocksResponse deserialization");return{status:toWorldStateStatusFull(o.status)}}__name(toWsdbRemoveHistoricalBlocksResponse,"toWsdbRemoveHistoricalBlocksResponse");function toWsdbGetStatusResponse(o){if(o.status===void 0)throw new Error("Expected status in WsdbGetStatusResponse deserialization");return{status:toWorldStateStatusSummary(o.status)}}__name(toWsdbGetStatusResponse,"toWsdbGetStatusResponse");function toWsdbCreateCheckpointResponse(o){return{}}__name(toWsdbCreateCheckpointResponse,"toWsdbCreateCheckpointResponse");function toWsdbCommitCheckpointResponse(o){return{}}__name(toWsdbCommitCheckpointResponse,"toWsdbCommitCheckpointResponse");function toWsdbRevertCheckpointResponse(o){return{}}__name(toWsdbRevertCheckpointResponse,"toWsdbRevertCheckpointResponse");function toWsdbCommitAllCheckpointsResponse(o){return{}}__name(toWsdbCommitAllCheckpointsResponse,"toWsdbCommitAllCheckpointsResponse");function toWsdbRevertAllCheckpointsResponse(o){return{}}__name(toWsdbRevertAllCheckpointsResponse,"toWsdbRevertAllCheckpointsResponse");function toWsdbCopyStoresResponse(o){return{}}__name(toWsdbCopyStoresResponse,"toWsdbCopyStoresResponse");function fromTreeStateReference(o){if(o.treeId===void 0)throw new Error("Expected treeId in TreeStateReference serialization");if(o.root===void 0)throw new Error("Expected root in TreeStateReference serialization");if(o.size===void 0)throw new Error("Expected size in TreeStateReference serialization");return{treeId:o.treeId,root:assertBin322(o.root,"o.root"),size:toWireU64(o.size,"o.size")}}__name(fromTreeStateReference,"fromTreeStateReference");function fromPublicDataLeafValue(o){if(o.slot===void 0)throw new Error("Expected slot in PublicDataLeafValue serialization");if(o.value===void 0)throw new Error("Expected value in PublicDataLeafValue serialization");return{slot:assertBin322(o.slot,"o.slot"),value:assertBin322(o.value,"o.value")}}__name(fromPublicDataLeafValue,"fromPublicDataLeafValue");function fromNullifierLeafValue(o){if(o.nullifier===void 0)throw new Error("Expected nullifier in NullifierLeafValue serialization");return{nullifier:assertBin322(o.nullifier,"o.nullifier")}}__name(fromNullifierLeafValue,"fromNullifierLeafValue");function fromWorldStateRevision(o){if(o.forkId===void 0)throw new Error("Expected forkId in WorldStateRevision serialization");if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WorldStateRevision serialization");if(o.includeUncommitted===void 0)throw new Error("Expected includeUncommitted in WorldStateRevision serialization");return{forkId:toWireU64(o.forkId,"o.forkId"),blockNumber:o.blockNumber,includeUncommitted:o.includeUncommitted}}__name(fromWorldStateRevision,"fromWorldStateRevision");function fromWsdbGetTreeInfo(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetTreeInfo serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetTreeInfo serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision)}}__name(fromWsdbGetTreeInfo,"fromWsdbGetTreeInfo");function fromWsdbGetStateReference(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetStateReference serialization");return{revision:fromWorldStateRevision(o.revision)}}__name(fromWsdbGetStateReference,"fromWsdbGetStateReference");function fromWsdbGetInitialStateReference(o){return{}}__name(fromWsdbGetInitialStateReference,"fromWsdbGetInitialStateReference");function fromWsdbGetLeafValue(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetLeafValue serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetLeafValue serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetLeafValue,"fromWsdbGetLeafValue");function fromWsdbGetPublicDataLeafValue(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetPublicDataLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetPublicDataLeafValue serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetPublicDataLeafValue,"fromWsdbGetPublicDataLeafValue");function fromWsdbGetNullifierLeafValue(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetNullifierLeafValue serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetNullifierLeafValue serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetNullifierLeafValue,"fromWsdbGetNullifierLeafValue");function fromWsdbGetPublicDataLeafPreimage(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetPublicDataLeafPreimage serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetPublicDataLeafPreimage serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetPublicDataLeafPreimage,"fromWsdbGetPublicDataLeafPreimage");function fromWsdbGetNullifierLeafPreimage(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbGetNullifierLeafPreimage serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetNullifierLeafPreimage serialization");return{revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetNullifierLeafPreimage,"fromWsdbGetNullifierLeafPreimage");function fromWsdbGetSiblingPath(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetSiblingPath serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetSiblingPath serialization");if(o.leafIndex===void 0)throw new Error("Expected leafIndex in WsdbGetSiblingPath serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndex:toWireU64(o.leafIndex,"o.leafIndex")}}__name(fromWsdbGetSiblingPath,"fromWsdbGetSiblingPath");function fromWsdbGetBlockNumbersForLeafIndices(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbGetBlockNumbersForLeafIndices serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbGetBlockNumbersForLeafIndices serialization");if(o.leafIndices===void 0)throw new Error("Expected leafIndices in WsdbGetBlockNumbersForLeafIndices serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leafIndices:o.leafIndices.map(v=>toWireU64(v,"v"))}}__name(fromWsdbGetBlockNumbersForLeafIndices,"fromWsdbGetBlockNumbersForLeafIndices");function fromWsdbFindLeafIndices(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindLeafIndices serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindLeafIndices serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>assertBin322(v,"v")),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindLeafIndices,"fromWsdbFindLeafIndices");function fromWsdbFindPublicDataLeafIndices(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindPublicDataLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindPublicDataLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindPublicDataLeafIndices serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindPublicDataLeafIndices,"fromWsdbFindPublicDataLeafIndices");function fromWsdbFindNullifierLeafIndices(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindNullifierLeafIndices serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindNullifierLeafIndices serialization");if(o.startIndex===void 0)throw new Error("Expected startIndex in WsdbFindNullifierLeafIndices serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),startIndex:toWireU64(o.startIndex,"o.startIndex")}}__name(fromWsdbFindNullifierLeafIndices,"fromWsdbFindNullifierLeafIndices");function fromWsdbFindLowLeaf(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindLowLeaf serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindLowLeaf serialization");if(o.key===void 0)throw new Error("Expected key in WsdbFindLowLeaf serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),key:assertBin322(o.key,"o.key")}}__name(fromWsdbFindLowLeaf,"fromWsdbFindLowLeaf");function fromWsdbFindSiblingPaths(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbFindSiblingPaths serialization");if(o.revision===void 0)throw new Error("Expected revision in WsdbFindSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindSiblingPaths serialization");return{treeId:o.treeId,revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>assertBin322(v,"v"))}}__name(fromWsdbFindSiblingPaths,"fromWsdbFindSiblingPaths");function fromWsdbFindPublicDataSiblingPaths(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindPublicDataSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindPublicDataSiblingPaths serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromPublicDataLeafValue(v))}}__name(fromWsdbFindPublicDataSiblingPaths,"fromWsdbFindPublicDataSiblingPaths");function fromWsdbFindNullifierSiblingPaths(o){if(o.revision===void 0)throw new Error("Expected revision in WsdbFindNullifierSiblingPaths serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbFindNullifierSiblingPaths serialization");return{revision:fromWorldStateRevision(o.revision),leaves:o.leaves.map(v=>fromNullifierLeafValue(v))}}__name(fromWsdbFindNullifierSiblingPaths,"fromWsdbFindNullifierSiblingPaths");function fromWsdbAppendLeaves(o){if(o.treeId===void 0)throw new Error("Expected treeId in WsdbAppendLeaves serialization");if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendLeaves serialization");return{treeId:o.treeId,leaves:o.leaves.map(v=>assertBin322(v,"v")),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendLeaves,"fromWsdbAppendLeaves");function fromWsdbAppendPublicDataLeaves(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendPublicDataLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendPublicDataLeaves serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendPublicDataLeaves,"fromWsdbAppendPublicDataLeaves");function fromWsdbAppendNullifierLeaves(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbAppendNullifierLeaves serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbAppendNullifierLeaves serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbAppendNullifierLeaves,"fromWsdbAppendNullifierLeaves");function fromWsdbBatchInsertPublicData(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbBatchInsertPublicData serialization");if(o.subtreeDepth===void 0)throw new Error("Expected subtreeDepth in WsdbBatchInsertPublicData serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbBatchInsertPublicData serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),subtreeDepth:o.subtreeDepth,forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbBatchInsertPublicData,"fromWsdbBatchInsertPublicData");function fromWsdbBatchInsertNullifier(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbBatchInsertNullifier serialization");if(o.subtreeDepth===void 0)throw new Error("Expected subtreeDepth in WsdbBatchInsertNullifier serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbBatchInsertNullifier serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),subtreeDepth:o.subtreeDepth,forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbBatchInsertNullifier,"fromWsdbBatchInsertNullifier");function fromWsdbSequentialInsertPublicData(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbSequentialInsertPublicData serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbSequentialInsertPublicData serialization");return{leaves:o.leaves.map(v=>fromPublicDataLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbSequentialInsertPublicData,"fromWsdbSequentialInsertPublicData");function fromWsdbSequentialInsertNullifier(o){if(o.leaves===void 0)throw new Error("Expected leaves in WsdbSequentialInsertNullifier serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbSequentialInsertNullifier serialization");return{leaves:o.leaves.map(v=>fromNullifierLeafValue(v)),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbSequentialInsertNullifier,"fromWsdbSequentialInsertNullifier");function fromWsdbUpdateArchive(o){if(o.blockStateRef===void 0)throw new Error("Expected blockStateRef in WsdbUpdateArchive serialization");if(o.blockHeaderHash===void 0)throw new Error("Expected blockHeaderHash in WsdbUpdateArchive serialization");if(o.forkId===void 0)throw new Error("Expected forkId in WsdbUpdateArchive serialization");return{blockStateRef:o.blockStateRef.map(v=>fromTreeStateReference(v)),blockHeaderHash:assertBin322(o.blockHeaderHash,"o.blockHeaderHash"),forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbUpdateArchive,"fromWsdbUpdateArchive");function fromWsdbCommit(o){return{}}__name(fromWsdbCommit,"fromWsdbCommit");function fromWsdbRollback(o){return{}}__name(fromWsdbRollback,"fromWsdbRollback");function fromWsdbSyncBlock(o){if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WsdbSyncBlock serialization");if(o.blockStateRef===void 0)throw new Error("Expected blockStateRef in WsdbSyncBlock serialization");if(o.blockHeaderHash===void 0)throw new Error("Expected blockHeaderHash in WsdbSyncBlock serialization");if(o.paddedNoteHashes===void 0)throw new Error("Expected paddedNoteHashes in WsdbSyncBlock serialization");if(o.paddedL1ToL2Messages===void 0)throw new Error("Expected paddedL1ToL2Messages in WsdbSyncBlock serialization");if(o.paddedNullifiers===void 0)throw new Error("Expected paddedNullifiers in WsdbSyncBlock serialization");if(o.publicDataWrites===void 0)throw new Error("Expected publicDataWrites in WsdbSyncBlock serialization");return{blockNumber:o.blockNumber,blockStateRef:o.blockStateRef.map(v=>fromTreeStateReference(v)),blockHeaderHash:assertBin322(o.blockHeaderHash,"o.blockHeaderHash"),paddedNoteHashes:o.paddedNoteHashes.map(v=>assertBin322(v,"v")),paddedL1ToL2Messages:o.paddedL1ToL2Messages.map(v=>assertBin322(v,"v")),paddedNullifiers:o.paddedNullifiers.map(v=>fromNullifierLeafValue(v)),publicDataWrites:o.publicDataWrites.map(v=>fromPublicDataLeafValue(v)),expectedArchiveRoot:o.expectedArchiveRoot!=null?assertBin322(o.expectedArchiveRoot,"o.expectedArchiveRoot"):null,expectedPreviousArchiveRoot:o.expectedPreviousArchiveRoot!=null?assertBin322(o.expectedPreviousArchiveRoot,"o.expectedPreviousArchiveRoot"):null}}__name(fromWsdbSyncBlock,"fromWsdbSyncBlock");function fromWsdbCreateFork(o){if(o.latest===void 0)throw new Error("Expected latest in WsdbCreateFork serialization");if(o.blockNumber===void 0)throw new Error("Expected blockNumber in WsdbCreateFork serialization");return{latest:o.latest,blockNumber:o.blockNumber}}__name(fromWsdbCreateFork,"fromWsdbCreateFork");function fromWsdbDeleteFork(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbDeleteFork serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbDeleteFork,"fromWsdbDeleteFork");function fromWsdbFinalizeBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbFinalizeBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbFinalizeBlocks,"fromWsdbFinalizeBlocks");function fromWsdbUnwindBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbUnwindBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbUnwindBlocks,"fromWsdbUnwindBlocks");function fromWsdbRemoveHistoricalBlocks(o){if(o.toBlockNumber===void 0)throw new Error("Expected toBlockNumber in WsdbRemoveHistoricalBlocks serialization");return{toBlockNumber:o.toBlockNumber}}__name(fromWsdbRemoveHistoricalBlocks,"fromWsdbRemoveHistoricalBlocks");function fromWsdbGetStatus(o){return{}}__name(fromWsdbGetStatus,"fromWsdbGetStatus");function fromWsdbCreateCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCreateCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCreateCheckpoint,"fromWsdbCreateCheckpoint");function fromWsdbCommitCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCommitCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCommitCheckpoint,"fromWsdbCommitCheckpoint");function fromWsdbRevertCheckpoint(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbRevertCheckpoint serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbRevertCheckpoint,"fromWsdbRevertCheckpoint");function fromWsdbCommitAllCheckpoints(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbCommitAllCheckpoints serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbCommitAllCheckpoints,"fromWsdbCommitAllCheckpoints");function fromWsdbRevertAllCheckpoints(o){if(o.forkId===void 0)throw new Error("Expected forkId in WsdbRevertAllCheckpoints serialization");return{forkId:toWireU64(o.forkId,"o.forkId")}}__name(fromWsdbRevertAllCheckpoints,"fromWsdbRevertAllCheckpoints");function fromWsdbCopyStores(o){if(o.dstPath===void 0)throw new Error("Expected dstPath in WsdbCopyStores serialization");return{dstPath:o.dstPath,compact:o.compact??null}}__name(fromWsdbCopyStores,"fromWsdbCopyStores");async function msgpackCall2(backend,input){let inputBuffer=new Encoder12({useRecords:!1,variableMapSize:!0}).pack(input),encodedResult=await backend.call(inputBuffer);return new Decoder7({useRecords:!1}).unpack(encodedResult)}__name(msgpackCall2,"msgpackCall");var AsyncApi2=class{static{__name(this,"AsyncApi")}backend;createError;constructor(backend,createError=message=>new Error(message)){this.backend=backend,this.createError=createError}getTreeInfo(command){let msgpackCommand=fromWsdbGetTreeInfo(command);return msgpackCall2(this.backend,[["WsdbGetTreeInfo",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetTreeInfoResponse")throw new Error(`Expected variant name 'WsdbGetTreeInfoResponse' but got '${variantName}'`);return toWsdbGetTreeInfoResponse(result)})}getStateReference(command){let msgpackCommand=fromWsdbGetStateReference(command);return msgpackCall2(this.backend,[["WsdbGetStateReference",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetStateReferenceResponse")throw new Error(`Expected variant name 'WsdbGetStateReferenceResponse' but got '${variantName}'`);return toWsdbGetStateReferenceResponse(result)})}getInitialStateReference(command){let msgpackCommand=fromWsdbGetInitialStateReference(command);return msgpackCall2(this.backend,[["WsdbGetInitialStateReference",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetInitialStateReferenceResponse")throw new Error(`Expected variant name 'WsdbGetInitialStateReferenceResponse' but got '${variantName}'`);return toWsdbGetInitialStateReferenceResponse(result)})}getLeafValue(command){let msgpackCommand=fromWsdbGetLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetLeafValueResponse' but got '${variantName}'`);return toWsdbGetLeafValueResponse(result)})}getPublicDataLeafValue(command){let msgpackCommand=fromWsdbGetPublicDataLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetPublicDataLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetPublicDataLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetPublicDataLeafValueResponse' but got '${variantName}'`);return toWsdbGetPublicDataLeafValueResponse(result)})}getNullifierLeafValue(command){let msgpackCommand=fromWsdbGetNullifierLeafValue(command);return msgpackCall2(this.backend,[["WsdbGetNullifierLeafValue",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetNullifierLeafValueResponse")throw new Error(`Expected variant name 'WsdbGetNullifierLeafValueResponse' but got '${variantName}'`);return toWsdbGetNullifierLeafValueResponse(result)})}getPublicDataLeafPreimage(command){let msgpackCommand=fromWsdbGetPublicDataLeafPreimage(command);return msgpackCall2(this.backend,[["WsdbGetPublicDataLeafPreimage",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetPublicDataLeafPreimageResponse")throw new Error(`Expected variant name 'WsdbGetPublicDataLeafPreimageResponse' but got '${variantName}'`);return toWsdbGetPublicDataLeafPreimageResponse(result)})}getNullifierLeafPreimage(command){let msgpackCommand=fromWsdbGetNullifierLeafPreimage(command);return msgpackCall2(this.backend,[["WsdbGetNullifierLeafPreimage",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetNullifierLeafPreimageResponse")throw new Error(`Expected variant name 'WsdbGetNullifierLeafPreimageResponse' but got '${variantName}'`);return toWsdbGetNullifierLeafPreimageResponse(result)})}getSiblingPath(command){let msgpackCommand=fromWsdbGetSiblingPath(command);return msgpackCall2(this.backend,[["WsdbGetSiblingPath",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetSiblingPathResponse")throw new Error(`Expected variant name 'WsdbGetSiblingPathResponse' but got '${variantName}'`);return toWsdbGetSiblingPathResponse(result)})}getBlockNumbersForLeafIndices(command){let msgpackCommand=fromWsdbGetBlockNumbersForLeafIndices(command);return msgpackCall2(this.backend,[["WsdbGetBlockNumbersForLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetBlockNumbersForLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbGetBlockNumbersForLeafIndicesResponse' but got '${variantName}'`);return toWsdbGetBlockNumbersForLeafIndicesResponse(result)})}findLeafIndices(command){let msgpackCommand=fromWsdbFindLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindLeafIndicesResponse(result)})}findPublicDataLeafIndices(command){let msgpackCommand=fromWsdbFindPublicDataLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindPublicDataLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindPublicDataLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindPublicDataLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindPublicDataLeafIndicesResponse(result)})}findNullifierLeafIndices(command){let msgpackCommand=fromWsdbFindNullifierLeafIndices(command);return msgpackCall2(this.backend,[["WsdbFindNullifierLeafIndices",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindNullifierLeafIndicesResponse")throw new Error(`Expected variant name 'WsdbFindNullifierLeafIndicesResponse' but got '${variantName}'`);return toWsdbFindNullifierLeafIndicesResponse(result)})}findLowLeaf(command){let msgpackCommand=fromWsdbFindLowLeaf(command);return msgpackCall2(this.backend,[["WsdbFindLowLeaf",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindLowLeafResponse")throw new Error(`Expected variant name 'WsdbFindLowLeafResponse' but got '${variantName}'`);return toWsdbFindLowLeafResponse(result)})}findSiblingPaths(command){let msgpackCommand=fromWsdbFindSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindSiblingPathsResponse(result)})}findPublicDataSiblingPaths(command){let msgpackCommand=fromWsdbFindPublicDataSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindPublicDataSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindPublicDataSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindPublicDataSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindPublicDataSiblingPathsResponse(result)})}findNullifierSiblingPaths(command){let msgpackCommand=fromWsdbFindNullifierSiblingPaths(command);return msgpackCall2(this.backend,[["WsdbFindNullifierSiblingPaths",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFindNullifierSiblingPathsResponse")throw new Error(`Expected variant name 'WsdbFindNullifierSiblingPathsResponse' but got '${variantName}'`);return toWsdbFindNullifierSiblingPathsResponse(result)})}appendLeaves(command){let msgpackCommand=fromWsdbAppendLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendLeavesResponse' but got '${variantName}'`);return toWsdbAppendLeavesResponse(result)})}appendPublicDataLeaves(command){let msgpackCommand=fromWsdbAppendPublicDataLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendPublicDataLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendPublicDataLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendPublicDataLeavesResponse' but got '${variantName}'`);return toWsdbAppendPublicDataLeavesResponse(result)})}appendNullifierLeaves(command){let msgpackCommand=fromWsdbAppendNullifierLeaves(command);return msgpackCall2(this.backend,[["WsdbAppendNullifierLeaves",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbAppendNullifierLeavesResponse")throw new Error(`Expected variant name 'WsdbAppendNullifierLeavesResponse' but got '${variantName}'`);return toWsdbAppendNullifierLeavesResponse(result)})}batchInsertPublicData(command){let msgpackCommand=fromWsdbBatchInsertPublicData(command);return msgpackCall2(this.backend,[["WsdbBatchInsertPublicData",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbBatchInsertPublicDataResponse")throw new Error(`Expected variant name 'WsdbBatchInsertPublicDataResponse' but got '${variantName}'`);return toWsdbBatchInsertPublicDataResponse(result)})}batchInsertNullifier(command){let msgpackCommand=fromWsdbBatchInsertNullifier(command);return msgpackCall2(this.backend,[["WsdbBatchInsertNullifier",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbBatchInsertNullifierResponse")throw new Error(`Expected variant name 'WsdbBatchInsertNullifierResponse' but got '${variantName}'`);return toWsdbBatchInsertNullifierResponse(result)})}sequentialInsertPublicData(command){let msgpackCommand=fromWsdbSequentialInsertPublicData(command);return msgpackCall2(this.backend,[["WsdbSequentialInsertPublicData",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSequentialInsertPublicDataResponse")throw new Error(`Expected variant name 'WsdbSequentialInsertPublicDataResponse' but got '${variantName}'`);return toWsdbSequentialInsertPublicDataResponse(result)})}sequentialInsertNullifier(command){let msgpackCommand=fromWsdbSequentialInsertNullifier(command);return msgpackCall2(this.backend,[["WsdbSequentialInsertNullifier",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSequentialInsertNullifierResponse")throw new Error(`Expected variant name 'WsdbSequentialInsertNullifierResponse' but got '${variantName}'`);return toWsdbSequentialInsertNullifierResponse(result)})}updateArchive(command){let msgpackCommand=fromWsdbUpdateArchive(command);return msgpackCall2(this.backend,[["WsdbUpdateArchive",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbUpdateArchiveResponse")throw new Error(`Expected variant name 'WsdbUpdateArchiveResponse' but got '${variantName}'`);return toWsdbUpdateArchiveResponse(result)})}commit(command){let msgpackCommand=fromWsdbCommit(command);return msgpackCall2(this.backend,[["WsdbCommit",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitResponse")throw new Error(`Expected variant name 'WsdbCommitResponse' but got '${variantName}'`);return toWsdbCommitResponse(result)})}rollback(command){let msgpackCommand=fromWsdbRollback(command);return msgpackCall2(this.backend,[["WsdbRollback",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRollbackResponse")throw new Error(`Expected variant name 'WsdbRollbackResponse' but got '${variantName}'`);return toWsdbRollbackResponse(result)})}syncBlock(command){let msgpackCommand=fromWsdbSyncBlock(command);return msgpackCall2(this.backend,[["WsdbSyncBlock",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbSyncBlockResponse")throw new Error(`Expected variant name 'WsdbSyncBlockResponse' but got '${variantName}'`);return toWsdbSyncBlockResponse(result)})}createFork(command){let msgpackCommand=fromWsdbCreateFork(command);return msgpackCall2(this.backend,[["WsdbCreateFork",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCreateForkResponse")throw new Error(`Expected variant name 'WsdbCreateForkResponse' but got '${variantName}'`);return toWsdbCreateForkResponse(result)})}deleteFork(command){let msgpackCommand=fromWsdbDeleteFork(command);return msgpackCall2(this.backend,[["WsdbDeleteFork",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbDeleteForkResponse")throw new Error(`Expected variant name 'WsdbDeleteForkResponse' but got '${variantName}'`);return toWsdbDeleteForkResponse(result)})}finalizeBlocks(command){let msgpackCommand=fromWsdbFinalizeBlocks(command);return msgpackCall2(this.backend,[["WsdbFinalizeBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbFinalizeBlocksResponse")throw new Error(`Expected variant name 'WsdbFinalizeBlocksResponse' but got '${variantName}'`);return toWsdbFinalizeBlocksResponse(result)})}unwindBlocks(command){let msgpackCommand=fromWsdbUnwindBlocks(command);return msgpackCall2(this.backend,[["WsdbUnwindBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbUnwindBlocksResponse")throw new Error(`Expected variant name 'WsdbUnwindBlocksResponse' but got '${variantName}'`);return toWsdbUnwindBlocksResponse(result)})}removeHistoricalBlocks(command){let msgpackCommand=fromWsdbRemoveHistoricalBlocks(command);return msgpackCall2(this.backend,[["WsdbRemoveHistoricalBlocks",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRemoveHistoricalBlocksResponse")throw new Error(`Expected variant name 'WsdbRemoveHistoricalBlocksResponse' but got '${variantName}'`);return toWsdbRemoveHistoricalBlocksResponse(result)})}getStatus(command){let msgpackCommand=fromWsdbGetStatus(command);return msgpackCall2(this.backend,[["WsdbGetStatus",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbGetStatusResponse")throw new Error(`Expected variant name 'WsdbGetStatusResponse' but got '${variantName}'`);return toWsdbGetStatusResponse(result)})}createCheckpoint(command){let msgpackCommand=fromWsdbCreateCheckpoint(command);return msgpackCall2(this.backend,[["WsdbCreateCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCreateCheckpointResponse")throw new Error(`Expected variant name 'WsdbCreateCheckpointResponse' but got '${variantName}'`);return toWsdbCreateCheckpointResponse(result)})}commitCheckpoint(command){let msgpackCommand=fromWsdbCommitCheckpoint(command);return msgpackCall2(this.backend,[["WsdbCommitCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitCheckpointResponse")throw new Error(`Expected variant name 'WsdbCommitCheckpointResponse' but got '${variantName}'`);return toWsdbCommitCheckpointResponse(result)})}revertCheckpoint(command){let msgpackCommand=fromWsdbRevertCheckpoint(command);return msgpackCall2(this.backend,[["WsdbRevertCheckpoint",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRevertCheckpointResponse")throw new Error(`Expected variant name 'WsdbRevertCheckpointResponse' but got '${variantName}'`);return toWsdbRevertCheckpointResponse(result)})}commitAllCheckpoints(command){let msgpackCommand=fromWsdbCommitAllCheckpoints(command);return msgpackCall2(this.backend,[["WsdbCommitAllCheckpoints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCommitAllCheckpointsResponse")throw new Error(`Expected variant name 'WsdbCommitAllCheckpointsResponse' but got '${variantName}'`);return toWsdbCommitAllCheckpointsResponse(result)})}revertAllCheckpoints(command){let msgpackCommand=fromWsdbRevertAllCheckpoints(command);return msgpackCall2(this.backend,[["WsdbRevertAllCheckpoints",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbRevertAllCheckpointsResponse")throw new Error(`Expected variant name 'WsdbRevertAllCheckpointsResponse' but got '${variantName}'`);return toWsdbRevertAllCheckpointsResponse(result)})}copyStores(command){let msgpackCommand=fromWsdbCopyStores(command);return msgpackCall2(this.backend,[["WsdbCopyStores",msgpackCommand]]).then(([variantName,result])=>{if(variantName==="WsdbErrorResponse")throw this.createError(result.message||"Unknown error from server");if(variantName!=="WsdbCopyStoresResponse")throw new Error(`Expected variant name 'WsdbCopyStoresResponse' but got '${variantName}'`);return toWsdbCopyStoresResponse(result)})}destroy(){return this.backend.destroy()}};import{createRequire as createRequire4}from"node:module";import*as fs5 from"node:fs";import*as path4 from"node:path";import{fileURLToPath as fileURLToPath3}from"node:url";var PLATFORM_TO_PACKAGE2={"x86_64-linux":"@aztec-foundation/wsdb-linux-x64","x86_64-darwin":"@aztec-foundation/wsdb-darwin-x64","aarch64-linux":"@aztec-foundation/wsdb-linux-arm64","aarch64-darwin":"@aztec-foundation/wsdb-darwin-arm64"};function currentDir2(){return path4.dirname(fileURLToPath3(import.meta.url))}__name(currentDir2,"currentDir");function detectPlatform3(){return process.arch==="x64"&&process.platform==="linux"?"x86_64-linux":process.arch==="x64"&&process.platform==="darwin"?"x86_64-darwin":process.arch==="arm64"&&process.platform==="linux"?"aarch64-linux":process.arch==="arm64"&&process.platform==="darwin"?"aarch64-darwin":null}__name(detectPlatform3,"detectPlatform");function findArchPackageDir2(platform2){let packageName=PLATFORM_TO_PACKAGE2[platform2];try{let require2=createRequire4(import.meta.url);return path4.dirname(require2.resolve(packageName+"/package.json"))}catch{let siblingPackageDir=path4.join(currentDir2(),"..","packages",packageName.split("/").pop());return fs5.existsSync(path4.join(siblingPackageDir,"package.json"))?siblingPackageDir:null}}__name(findArchPackageDir2,"findArchPackageDir");function findWsdbBinary(customPath){if(customPath)return fs5.existsSync(customPath)?path4.resolve(customPath):null;let envPath=process.env.AZTEC_WSDB_PATH;if(envPath)return fs5.existsSync(envPath)?path4.resolve(envPath):null;let platform2=detectPlatform3();if(!platform2)return null;let archDir=findArchPackageDir2(platform2);if(archDir){let candidate=path4.join(archDir,"aztec-wsdb");if(fs5.existsSync(candidate))return candidate}return null}__name(findWsdbBinary,"findWsdbBinary");import{Decoder as Decoder8,Encoder as Encoder13}from"msgpackr";var WsdbService=class _WsdbService extends AsyncApi2{static{__name(this,"WsdbService")}spawnedBackend;constructor(spawnedBackend,createError){super(spawnedBackend,createError),this.spawnedBackend=spawnedBackend}static async spawn(options={}){let binaryPath=findWsdbBinary(options.binaryPath);if(!binaryPath)throw new IpcSpawnError("aztec-wsdb binary not found",!1);let backend=await SpawnedProcessBackend.spawn({binaryPath,binaryName:"aztec-wsdb",instancePrefix:"wsdb",ipcPathArgs:["msgpack","run","--input","{path}"],transport:options.transport??"uds",logger:options.logger,connectTimeoutMs:options.connectTimeoutMs,env:options.env,extraArgs:options.extraArgs,respawn:options.respawn,clientId:options.clientId,napiPath:options.napiPath});return new _WsdbService(backend,options.createError)}getIpcPath(){return this.spawnedBackend.getIpcPath()}sendProcessSignal(signal){this.spawnedBackend.sendProcessSignal(signal)}};import{Buffer as Buffer79}from"buffer";import{cpus}from"node:os";function toWsdbRevision(rev){return{forkId:rev.forkId,blockNumber:Number(rev.blockNumber),includeUncommitted:rev.includeUncommitted}}__name(toWsdbRevision,"toWsdbRevision");function blockStateRefToMap(ref){return[...ref.entries()].map(([treeId,[root,size]])=>({treeId,root:new Uint8Array(root),size:Number(size)}))}__name(blockStateRefToMap,"blockStateRefToMap");function toPublicDataLeaf(leaf){if(leaf instanceof Buffer79||!("slot"in leaf))throw new Error("Expected public data leaf");return{slot:new Uint8Array(leaf.slot),value:new Uint8Array(leaf.value)}}__name(toPublicDataLeaf,"toPublicDataLeaf");function toNullifierLeaf(leaf){if(leaf instanceof Buffer79||!("nullifier"in leaf))throw new Error("Expected nullifier leaf");return{nullifier:new Uint8Array(leaf.nullifier)}}__name(toNullifierLeaf,"toNullifierLeaf");function fromPublicDataLeaf(leaf){return{slot:Buffer79.from(leaf.slot),value:Buffer79.from(leaf.value)}}__name(fromPublicDataLeaf,"fromPublicDataLeaf");function fromNullifierLeaf(leaf){return{nullifier:Buffer79.from(leaf.nullifier)}}__name(fromNullifierLeaf,"fromNullifierLeaf");function fromIndexedLeaf(leaf,convertLeaf){return{leaf:convertLeaf(leaf.leaf),nextIndex:leaf.nextIndex,nextKey:Buffer79.from(leaf.nextKey)}}__name(fromIndexedLeaf,"fromIndexedLeaf");function fromLeafUpdateWitnessData(data,convertLeaf){return{leaf:fromIndexedLeaf(data.leaf,convertLeaf),index:data.index,path:data.path.map(p=>Buffer79.from(p))}}__name(fromLeafUpdateWitnessData,"fromLeafUpdateWitnessData");function fromBatchInsertionResult(result,convertLeaf){return{lowLeafWitnessData:result.lowLeafWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf)),sortedLeaves:result.sortedLeaves.map(({leaf,index})=>[convertLeaf(leaf),index]),subtreePath:result.subtreePath.map(p=>Buffer79.from(p))}}__name(fromBatchInsertionResult,"fromBatchInsertionResult");function fromSequentialInsertionResult(result,convertLeaf){return{lowLeafWitnessData:result.lowLeafWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf)),insertionWitnessData:result.insertionWitnessData.map(data=>fromLeafUpdateWitnessData(data,convertLeaf))}}__name(fromSequentialInsertionResult,"fromSequentialInsertionResult");function toFrLeaf(leaf){if(!(leaf instanceof Buffer79))throw new Error("Expected field leaf");return new Uint8Array(leaf)}__name(toFrLeaf,"toFrLeaf");function formatMap2(map2){if(!(!map2||Object.keys(map2).length===0))return`{${Object.entries(map2).map(([key,value])=>`${key}:${value}`).join(",")}}`}__name(formatMap2,"formatMap");var WSDB_SHM_RING_SIZE=32*1024*1024;function getWsdbThreadCount(){return Math.min(16,cpus().length)}__name(getWsdbThreadCount,"getWsdbThreadCount");function getWsdbExtraArgs(dataDir,wsTreeMapSizes,genesis,threads){let options=getWsdbOptions(dataDir,wsTreeMapSizes),args=["--data-dir",dataDir,"--threads",threads.toString()];args.push("--request-ring-size",WSDB_SHM_RING_SIZE.toString()),args.push("--response-ring-size",WSDB_SHM_RING_SIZE.toString());let treeHeights=formatMap2(options.treeHeights);treeHeights&&args.push("--tree-heights",treeHeights);let treePrefill=formatMap2(options.treePrefill);treePrefill&&args.push("--tree-prefill",treePrefill);let mapSizes=formatMap2(options.mapSizes);if(mapSizes&&args.push("--map-sizes",mapSizes),args.push("--initial-header-generator-point",options.initialHeaderGeneratorPoint.toString()),genesis.prefilledPublicData.length>0){let pairs=genesis.prefilledPublicData.map(data=>[data.slot.toBuffer().toString("hex"),data.value.toBuffer().toString("hex")]);args.push("--prefilled-public-data",JSON.stringify(pairs))}let prefilledNullifiers=genesis.prefilledNullifiers;for(let i=1;i<prefilledNullifiers.length;i++)if(prefilledNullifiers[i].toBigInt()<=prefilledNullifiers[i-1].toBigInt())throw new Error("Prefilled genesis nullifiers must be unique and strictly increasing");prefilledNullifiers.length>0&&args.push("--prefilled-nullifiers",JSON.stringify(prefilledNullifiers.map(nullifier=>nullifier.toBuffer().toString("hex"))));let genesisTimestamp=Number(genesis.genesisTimestamp);return genesisTimestamp!==0&&args.push("--genesis-timestamp",genesisTimestamp.toString()),args}__name(getWsdbExtraArgs,"getWsdbExtraArgs");function convertUint8ArraysToBuffers(obj){if(obj instanceof Uint8Array)return Buffer79.from(obj);if(Array.isArray(obj))return obj.map(convertUint8ArraysToBuffers);if(obj!==null&&typeof obj=="object"){let result={};for(let[key,value]of Object.entries(obj))result[key]=convertUint8ArraysToBuffers(value);return result}return obj}__name(convertUint8ArraysToBuffers,"convertUint8ArraysToBuffers");function convertStateRef(state){let result={};for(let{treeId,root,size}of state)result[treeId]=[Buffer79.from(root),BigInt(size)];return result}__name(convertStateRef,"convertStateRef");function convertStatusSummary(s2){return{unfinalizedBlockNumber:s2.unfinalizedBlockNumber,finalizedBlockNumber:s2.finalizedBlockNumber,oldestHistoricalBlock:s2.oldestHistoricalBlock,treesAreSynched:s2.treesAreSynched}}__name(convertStatusSummary,"convertStatusSummary");function convertDBStats(s2){return{name:s2.name,numDataItems:s2.numDataItems,totalUsedSize:s2.totalUsedSize}}__name(convertDBStats,"convertDBStats");function convertTreeDBStats(s2){return{mapSize:s2.mapSize,physicalFileSize:s2.physicalFileSize,blocksDBStats:convertDBStats(s2.blocksDBStats),nodesDBStats:convertDBStats(s2.nodesDBStats),leafPreimagesDBStats:convertDBStats(s2.leafPreimagesDBStats),leafIndicesDBStats:convertDBStats(s2.leafIndicesDBStats),blockIndicesDBStats:convertDBStats(s2.blockIndicesDBStats)}}__name(convertTreeDBStats,"convertTreeDBStats");function convertWorldStateDBStats(s2){return{noteHashTreeStats:convertTreeDBStats(s2.noteHashTreeStats),messageTreeStats:convertTreeDBStats(s2.messageTreeStats),archiveTreeStats:convertTreeDBStats(s2.archiveTreeStats),publicDataTreeStats:convertTreeDBStats(s2.publicDataTreeStats),nullifierTreeStats:convertTreeDBStats(s2.nullifierTreeStats)}}__name(convertWorldStateDBStats,"convertWorldStateDBStats");function convertTreeMeta(m){return{name:m.name,depth:m.depth,size:m.size,committedSize:m.committedSize,root:m.root,initialSize:m.initialSize,initialRoot:m.initialRoot,oldestHistoricBlock:m.oldestHistoricBlock,unfinalizedBlockHeight:m.unfinalizedBlockHeight,finalizedBlockHeight:m.finalizedBlockHeight}}__name(convertTreeMeta,"convertTreeMeta");function convertWorldStateMeta(m){return{noteHashTreeMeta:convertTreeMeta(m.noteHashTreeMeta),messageTreeMeta:convertTreeMeta(m.messageTreeMeta),archiveTreeMeta:convertTreeMeta(m.archiveTreeMeta),publicDataTreeMeta:convertTreeMeta(m.publicDataTreeMeta),nullifierTreeMeta:convertTreeMeta(m.nullifierTreeMeta)}}__name(convertWorldStateMeta,"convertWorldStateMeta");function convertStatusFull(s2){return{summary:convertStatusSummary(s2.summary),dbStats:convertWorldStateDBStats(s2.dbStats),meta:convertWorldStateMeta(s2.meta)}}__name(convertStatusFull,"convertStatusFull");function convertSiblingPathAndIndex(s2){if(s2)return{index:BigInt(s2.index),path:s2.path.map(p=>Buffer79.from(p))}}__name(convertSiblingPathAndIndex,"convertSiblingPathAndIndex");var IpcWorldState=class _IpcWorldState{static{__name(this,"IpcWorldState")}wsdb;instrumentation;log;open;api;checkpointDepths;constructor(wsdb,instrumentation,bindings,log2=createLogger("world-state:ipc-database",bindings)){this.wsdb=wsdb,this.instrumentation=instrumentation,this.log=log2,this.open=!0,this.checkpointDepths=new Map,this.api=wsdb,this.log.info("Created IPC-backed world state instance")}static async spawn(dataDir,wsTreeMapSizes,genesis,instrumentation,bindings,threads=getWsdbThreadCount()){let transport=getEnv().WSDB_TRANSPORT==="shm"?"shm":"uds",wsdb=await WsdbService.spawn({transport,extraArgs:getWsdbExtraArgs(dataDir,wsTreeMapSizes,genesis,threads),env:{HARDWARE_CONCURRENCY:threads.toString()}});return new _IpcWorldState(wsdb,instrumentation,bindings)}getIpcPath(){return this.wsdb.getIpcPath()}async close(){this.open&&(this.open=!1,await this.wsdb.destroy())}getTreeInfo(treeId,revision){return this.execute("getTreeInfo",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.getTreeInfo({treeId,revision:toWsdbRevision(revision)});return{treeId:resp.treeId,root:Buffer79.from(resp.root),size:BigInt(resp.size),depth:resp.depth}})}getStateReference(revision){return this.execute("getStateReference",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.getStateReference({revision:toWsdbRevision(revision)});return convertStateRef(resp.state)})}getInitialStateReference(){return this.execute("getInitialStateReference",0,!1,async()=>{let resp=await this.api.getInitialStateReference({});return convertStateRef(resp.state)})}getLeafValue(treeId,revision,leafIndex){return this.execute("getLeafValue",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision),wsdbLeafIndex=Number(leafIndex);if(treeId===MerkleTreeId.PUBLIC_DATA_TREE){let resp2=await this.api.getPublicDataLeafValue({revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp2.value?fromPublicDataLeaf(resp2.value):void 0}if(treeId===MerkleTreeId.NULLIFIER_TREE){let resp2=await this.api.getNullifierLeafValue({revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp2.value?fromNullifierLeaf(resp2.value):void 0}let resp=await this.api.getLeafValue({treeId,revision:wsdbRevision,leafIndex:wsdbLeafIndex});return resp.value?Buffer79.from(resp.value):void 0})}getLeafPreimage(treeId,revision,leafIndex){return this.execute("getLeafPreimage",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.getPublicDataLeafPreimage({revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)}):await this.api.getNullifierLeafPreimage({revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)});return resp.preimage?convertUint8ArraysToBuffers(resp.preimage):void 0})}getSiblingPath(treeId,revision,leafIndex){return this.execute("getSiblingPath",revision.forkId,revision.includeUncommitted===!1,async()=>(await this.api.getSiblingPath({treeId,revision:toWsdbRevision(revision),leafIndex:Number(leafIndex)})).path.map(p=>Buffer79.from(p)))}getBlockNumbersForLeafIndices(treeId,revision,leafIndices){return this.execute("getBlockNumbersForLeafIndices",revision.forkId,revision.includeUncommitted===!1,async()=>(await this.api.getBlockNumbersForLeafIndices({treeId,revision:toWsdbRevision(revision),leafIndices:leafIndices.map(Number)})).blockNumbers.map(n=>n!=null?BigInt(n):void 0))}findLeafIndices(treeId,revision,leaves,startIndex){return this.execute("findLeafIndices",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision),wsdbStartIndex=Number(startIndex);return(treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.findPublicDataLeafIndices({revision:wsdbRevision,leaves:leaves.map(toPublicDataLeaf),startIndex:wsdbStartIndex}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.findNullifierLeafIndices({revision:wsdbRevision,leaves:leaves.map(toNullifierLeaf),startIndex:wsdbStartIndex}):await this.api.findLeafIndices({treeId,revision:wsdbRevision,leaves:leaves.map(toFrLeaf),startIndex:wsdbStartIndex})).indices.map(n=>n!=null?BigInt(n):void 0)})}findLowLeaf(treeId,revision,key){return this.execute("findLowLeaf",revision.forkId,revision.includeUncommitted===!1,async()=>{let resp=await this.api.findLowLeaf({treeId,revision:toWsdbRevision(revision),key:new Uint8Array(key.toBuffer())});return{alreadyPresent:resp.alreadyPresent,index:BigInt(resp.index)}})}findSiblingPaths(treeId,revision,leaves){return this.execute("findSiblingPaths",revision.forkId,revision.includeUncommitted===!1,async()=>{let wsdbRevision=toWsdbRevision(revision);return(treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.findPublicDataSiblingPaths({revision:wsdbRevision,leaves:leaves.map(toPublicDataLeaf)}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.findNullifierSiblingPaths({revision:wsdbRevision,leaves:leaves.map(toNullifierLeaf)}):await this.api.findSiblingPaths({treeId,revision:wsdbRevision,leaves:leaves.map(toFrLeaf)})).paths.map(convertSiblingPathAndIndex)})}updateArchive(forkId,blockStateRef,blockHeaderHash){return this.execute("updateArchive",forkId,!1,async()=>{await this.api.updateArchive({blockStateRef:blockStateRefToMap(blockStateRef),blockHeaderHash:new Uint8Array(blockHeaderHash),forkId})})}appendLeaves(treeId,forkId,leaves){return this.execute("appendLeaves",forkId,!1,async()=>{treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.appendPublicDataLeaves({leaves:leaves.map(toPublicDataLeaf),forkId}):treeId===MerkleTreeId.NULLIFIER_TREE?await this.api.appendNullifierLeaves({leaves:leaves.map(toNullifierLeaf),forkId}):await this.api.appendLeaves({treeId,leaves:leaves.map(toFrLeaf),forkId})})}batchInsert(treeId,forkId,leaves,subtreeDepth){return this.execute("batchInsert",forkId,!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.batchInsertPublicData({leaves:leaves.map(toPublicDataLeaf),subtreeDepth,forkId}):await this.api.batchInsertNullifier({leaves:leaves.map(toNullifierLeaf),subtreeDepth,forkId});return treeId===MerkleTreeId.PUBLIC_DATA_TREE?fromBatchInsertionResult(resp.result,fromPublicDataLeaf):fromBatchInsertionResult(resp.result,fromNullifierLeaf)})}sequentialInsert(treeId,forkId,leaves){return this.execute("sequentialInsert",forkId,!1,async()=>{let resp=treeId===MerkleTreeId.PUBLIC_DATA_TREE?await this.api.sequentialInsertPublicData({leaves:leaves.map(toPublicDataLeaf),forkId}):await this.api.sequentialInsertNullifier({leaves:leaves.map(toNullifierLeaf),forkId});return treeId===MerkleTreeId.PUBLIC_DATA_TREE?fromSequentialInsertionResult(resp.result,fromPublicDataLeaf):fromSequentialInsertionResult(resp.result,fromNullifierLeaf)})}syncBlock(input){return this.execute("syncBlock",0,!1,async()=>{let resp=await this.api.syncBlock({blockNumber:Number(input.blockNumber),blockStateRef:blockStateRefToMap(input.blockStateRef),blockHeaderHash:new Uint8Array(input.blockHeaderHash),expectedArchiveRoot:new Uint8Array(input.expectedArchiveRoot),expectedPreviousArchiveRoot:new Uint8Array(input.expectedPreviousArchiveRoot),paddedNoteHashes:input.paddedNoteHashes.map(toFrLeaf),paddedL1ToL2Messages:input.paddedL1ToL2Messages.map(toFrLeaf),paddedNullifiers:input.paddedNullifiers.map(toNullifierLeaf),publicDataWrites:input.publicDataWrites.map(toPublicDataLeaf)});return convertStatusFull(resp.status)})}createFork(input){return this.execute("createFork",0,!1,async()=>(await this.api.createFork({latest:input.latest,blockNumber:Number(input.blockNumber)})).forkId)}deleteFork(forkId){return this.execute("deleteFork",forkId,!1,async()=>{await this.api.deleteFork({forkId})})}finalizeBlocks(toBlockNumber){return this.execute("finalizeBlocks",0,!1,async()=>{let resp=await this.api.finalizeBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusSummary(resp.status)})}unwindBlocks(toBlockNumber){return this.execute("unwindBlocks",0,!1,async()=>{let resp=await this.api.unwindBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusFull(resp.status)})}removeHistoricalBlocks(toBlockNumber){return this.execute("removeHistoricalBlocks",0,!1,async()=>{let resp=await this.api.removeHistoricalBlocks({toBlockNumber:Number(toBlockNumber)});return convertStatusFull(resp.status)})}getStatus(){return this.execute("getStatus",0,!1,async()=>{let resp=await this.api.getStatus({});return convertStatusSummary(resp.status)})}createCheckpoint(forkId){return this.execute("createCheckpoint",forkId,!1,async()=>{await this.api.createCheckpoint({forkId});let depth=(this.checkpointDepths.get(forkId)??0)+1;return this.checkpointDepths.set(forkId,depth),depth})}commitCheckpoint(forkId){return this.execute("commitCheckpoint",forkId,!1,async()=>{await this.api.commitCheckpoint({forkId});let depth=Math.max(0,(this.checkpointDepths.get(forkId)??0)-1);this.checkpointDepths.set(forkId,depth)})}revertCheckpoint(forkId){return this.execute("revertCheckpoint",forkId,!1,async()=>{await this.api.revertCheckpoint({forkId});let depth=Math.max(0,(this.checkpointDepths.get(forkId)??0)-1);this.checkpointDepths.set(forkId,depth)})}commitAllCheckpoints(forkId,depth){return this.execute("commitAllCheckpoints",forkId,!1,async()=>{let currentDepth=this.checkpointDepths.get(forkId)??0;if(depth===0)await this.api.commitAllCheckpoints({forkId});else for(let d=currentDepth;d>depth;d--)await this.api.commitCheckpoint({forkId});this.checkpointDepths.set(forkId,depth)})}revertAllCheckpoints(forkId,depth){return this.execute("revertAllCheckpoints",forkId,!1,async()=>{let currentDepth=this.checkpointDepths.get(forkId)??0;if(depth===0)await this.api.revertAllCheckpoints({forkId});else for(let d=currentDepth;d>depth;d--)await this.api.revertCheckpoint({forkId});this.checkpointDepths.set(forkId,depth)})}copyStores(dstPath,compact2){return this.execute("copyStores",0,!1,async()=>{await this.api.copyStores({dstPath,compact:compact2})})}async execute(operation,_forkId,_committedOnly,request){if(!this.open)throw new Error("IPC instance is closed");return await this.send(operation,request)}async send(operation,request){let start=performance.now();try{let response=await request(),durationMs=performance.now()-start;return this.log.trace(`Call ${operation} took (ms)`,{duration:durationMs}),this.instrumentation.recordRoundTrip(durationMs*1e3,operation),response}catch(error2){throw error2 instanceof IpcProcessExitedError&&exitOnWsdbDeath(operation,error2,this.log),this.log.error(`Call ${operation} failed: ${error2}`,error2),error2}}};function exitOnWsdbDeath(operation,error2,log2){log2.fatal(`World state database process died during ${operation}; exiting`,error2,{code:error2.code,signal:error2.signal,logPath:error2.logPath}),process.exit(1)}__name(exitOnWsdbDeath,"exitOnWsdbDeath");function getWsdbOptions(dataDir,wsTreeMapSizes){return{treeHeights:{[MerkleTreeId.NULLIFIER_TREE]:42,[MerkleTreeId.NOTE_HASH_TREE]:42,[MerkleTreeId.PUBLIC_DATA_TREE]:40,[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]:36,[MerkleTreeId.ARCHIVE]:30},treePrefill:{[MerkleTreeId.NULLIFIER_TREE]:128,[MerkleTreeId.PUBLIC_DATA_TREE]:128},mapSizes:{[MerkleTreeId.NULLIFIER_TREE]:wsTreeMapSizes.nullifierTreeMapSizeKb,[MerkleTreeId.NOTE_HASH_TREE]:wsTreeMapSizes.noteHashTreeMapSizeKb,[MerkleTreeId.PUBLIC_DATA_TREE]:wsTreeMapSizes.publicDataTreeMapSizeKb,[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]:wsTreeMapSizes.messageTreeMapSizeKb,[MerkleTreeId.ARCHIVE]:wsTreeMapSizes.archiveTreeMapSizeKb},initialHeaderGeneratorPoint:DomainSeparator.BLOCK_HEADER_HASH}}__name(getWsdbOptions,"getWsdbOptions");import assert4 from"assert";import{Buffer as Buffer80}from"buffer";function sanitizeSummary(summary){return summary.finalizedBlockNumber=BlockNumber.fromBigInt(BigInt(summary.finalizedBlockNumber)),summary.unfinalizedBlockNumber=BlockNumber.fromBigInt(BigInt(summary.unfinalizedBlockNumber)),summary.oldestHistoricalBlock=BlockNumber.fromBigInt(BigInt(summary.oldestHistoricalBlock)),summary}__name(sanitizeSummary,"sanitizeSummary");function sanitizeDBStats(stats){return stats.numDataItems=BigInt(stats.numDataItems),stats.totalUsedSize=BigInt(stats.totalUsedSize),stats}__name(sanitizeDBStats,"sanitizeDBStats");function sanitizeMeta(meta3){return meta3.committedSize=BigInt(meta3.committedSize),meta3.finalizedBlockHeight=BlockNumber.fromBigInt(BigInt(meta3.finalizedBlockHeight)),meta3.initialSize=BigInt(meta3.initialSize),meta3.oldestHistoricBlock=BlockNumber.fromBigInt(BigInt(meta3.oldestHistoricBlock)),meta3.size=BigInt(meta3.size),meta3.unfinalizedBlockHeight=BlockNumber.fromBigInt(BigInt(meta3.unfinalizedBlockHeight)),meta3}__name(sanitizeMeta,"sanitizeMeta");function sanitizeTreeDBStats(stats){return stats.blocksDBStats=sanitizeDBStats(stats.blocksDBStats),stats.leafIndicesDBStats=sanitizeDBStats(stats.leafIndicesDBStats),stats.leafPreimagesDBStats=sanitizeDBStats(stats.leafPreimagesDBStats),stats.blockIndicesDBStats=sanitizeDBStats(stats.blockIndicesDBStats),stats.nodesDBStats=sanitizeDBStats(stats.nodesDBStats),stats.mapSize=BigInt(stats.mapSize),stats.physicalFileSize=BigInt(stats.physicalFileSize),stats}__name(sanitizeTreeDBStats,"sanitizeTreeDBStats");function sanitizeWorldStateDBStats(stats){return stats.archiveTreeStats=sanitizeTreeDBStats(stats.archiveTreeStats),stats.messageTreeStats=sanitizeTreeDBStats(stats.messageTreeStats),stats.noteHashTreeStats=sanitizeTreeDBStats(stats.noteHashTreeStats),stats.nullifierTreeStats=sanitizeTreeDBStats(stats.nullifierTreeStats),stats.publicDataTreeStats=sanitizeTreeDBStats(stats.publicDataTreeStats),stats}__name(sanitizeWorldStateDBStats,"sanitizeWorldStateDBStats");function sanitizeWorldStateTreeMeta(meta3){return meta3.archiveTreeMeta=sanitizeMeta(meta3.archiveTreeMeta),meta3.messageTreeMeta=sanitizeMeta(meta3.messageTreeMeta),meta3.noteHashTreeMeta=sanitizeMeta(meta3.noteHashTreeMeta),meta3.nullifierTreeMeta=sanitizeMeta(meta3.nullifierTreeMeta),meta3.publicDataTreeMeta=sanitizeMeta(meta3.publicDataTreeMeta),meta3}__name(sanitizeWorldStateTreeMeta,"sanitizeWorldStateTreeMeta");function sanitizeFullStatus(status){return status.dbStats=sanitizeWorldStateDBStats(status.dbStats),status.summary=sanitizeSummary(status.summary),status.meta=sanitizeWorldStateTreeMeta(status.meta),status}__name(sanitizeFullStatus,"sanitizeFullStatus");function treeStateReferenceToSnapshot([root,size]){return new AppendOnlyTreeSnapshot(Fr.fromBuffer(root),TreeLeafIndex.fromBigInt(BigInt(size)))}__name(treeStateReferenceToSnapshot,"treeStateReferenceToSnapshot");function treeStateReference(snapshot){return[snapshot.root.toBuffer(),BigInt(snapshot.nextAvailableLeafIndex)]}__name(treeStateReference,"treeStateReference");function blockStateReference(state){return new Map([[MerkleTreeId.NULLIFIER_TREE,treeStateReference(state.partial.nullifierTree)],[MerkleTreeId.NOTE_HASH_TREE,treeStateReference(state.partial.noteHashTree)],[MerkleTreeId.PUBLIC_DATA_TREE,treeStateReference(state.partial.publicDataTree)],[MerkleTreeId.L1_TO_L2_MESSAGE_TREE,treeStateReference(state.l1ToL2MessageTree)]])}__name(blockStateReference,"blockStateReference");var _computedKey46,MerkleTreesFacade=class{static{__name(this,"MerkleTreesFacade")}instance;initialHeader;revision;constructor(instance,initialHeader,revision){this.instance=instance,this.initialHeader=initialHeader,this.revision=revision}getInitialHeader(){return this.initialHeader}getRevision(){return this.revision}getIpcPath(){return this.instance.getIpcPath()}findLeafIndices(treeId,values){return this.findLeafIndicesAfter(treeId,values,0n)}async findSiblingPaths(treeId,values){return(await this.instance.findSiblingPaths(treeId,this.revision,values.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))))).map(path5=>{if(path5)return{path:new SiblingPath(path5.path.length,path5.path),index:BigInt(path5.index)}})}async findLeafIndicesAfter(treeId,leaves,startIndex){return(await this.instance.findLeafIndices(treeId,this.revision,leaves.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))),startIndex)).map(index=>{if(typeof index=="number"||typeof index=="bigint")return BigInt(index)})}async getLeafPreimage(treeId,leafIndex){let resp=await this.instance.getLeafPreimage(treeId,this.revision,leafIndex);return resp?deserializeIndexedLeaf(resp):void 0}async getLeafValue(treeId,leafIndex){let resp=await this.instance.getLeafValue(treeId,this.revision,leafIndex);if(!resp)return;let leaf=deserializeLeafValue(resp);return leaf instanceof Fr?treeId===MerkleTreeId.ARCHIVE?new BlockHash(leaf):leaf:leaf.toBuffer()}async getPreviousValueIndex(treeId,value){let resp=await this.instance.findLowLeaf(treeId,this.revision,new Fr(value));return{alreadyPresent:resp.alreadyPresent,index:BigInt(resp.index)}}async getSiblingPath(treeId,leafIndex){let siblingPath=await this.instance.getSiblingPath(treeId,this.revision,leafIndex);return new SiblingPath(siblingPath.length,siblingPath)}async getStateReference(){let state=await this.instance.getStateReference(this.revision);return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async getInitialStateReference(){let state=await this.instance.getInitialStateReference();return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async getTreeInfo(treeId){return await this.instance.getTreeInfo(treeId,this.revision)}async getBlockNumbersForLeafIndices(treeId,leafIndices){return(await this.instance.getBlockNumbersForLeafIndices(treeId,this.revision,leafIndices)).map(x=>x==null?void 0:BlockNumber(Number(x)))}};_computedKey46=Symbol.asyncDispose;var MerkleTreesForkFacade=class extends MerkleTreesFacade{static{__name(this,"MerkleTreesForkFacade")}opts;log;closePromise;constructor(instance,initialHeader,revision,opts){assert4.notEqual(revision.forkId,0,"Fork ID must be set"),assert4.equal(revision.includeUncommitted,!0,"Fork must include uncommitted data"),super(instance,initialHeader,revision),this.opts=opts,this.log=createLogger("world-state:merkle-trees-fork-facade")}async updateArchive(header){await this.instance.updateArchive(this.revision.forkId,blockStateReference(header.state),(await header.hash()).toBuffer())}async appendLeaves(treeId,leaves){await this.instance.appendLeaves(treeId,this.revision.forkId,leaves.map(leaf=>serializeLeaf(hydrateLeaf(treeId,leaf))))}async batchInsert(treeId,rawLeaves,subtreeHeight){let leaves=rawLeaves.map(leaf=>hydrateLeaf(treeId,leaf)).map(serializeLeaf),resp=await this.instance.batchInsert(treeId,this.revision.forkId,leaves,subtreeHeight);return{newSubtreeSiblingPath:new SiblingPath(resp.subtreePath.length,resp.subtreePath),sortedNewLeaves:resp.sortedLeaves.map(([leaf])=>leaf).map(deserializeLeafValue).map(serializeToBuffer),sortedNewLeavesIndexes:resp.sortedLeaves.map(([,index])=>index),lowLeavesWitnessData:resp.lowLeafWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)}))}}async sequentialInsert(treeId,rawLeaves){let leaves=rawLeaves.map(leaf=>hydrateLeaf(treeId,leaf)).map(serializeLeaf),resp=await this.instance.sequentialInsert(treeId,this.revision.forkId,leaves);return{lowLeavesWitnessData:resp.lowLeafWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)})),insertionWitnessData:resp.insertionWitnessData.map(data=>({index:BigInt(data.index),leafPreimage:deserializeIndexedLeaf(data.leaf),siblingPath:new SiblingPath(data.path.length,data.path)}))}}close(){return assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),this.closePromise?this.closePromise:(this.closePromise=this.doClose(),this.closePromise)}async doClose(){try{await this.instance.deleteFork(this.revision.forkId)}catch(err){if(err?.message==="Native instance is closed"||err?.message==="IPC instance is closed"||err?.message==="Fork not found")return;throw err}}async[_computedKey46](){this.opts.closeDelayMs?sleep(this.opts.closeDelayMs).then(()=>this.close()).catch(err=>{this.log.warn("Error closing MerkleTreesForkFacade after delay",{err})}):await this.close()}async createCheckpoint(){return assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.createCheckpoint(this.revision.forkId)}async commitCheckpoint(){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.commitCheckpoint(this.revision.forkId)}async revertCheckpoint(){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.revertCheckpoint(this.revision.forkId)}async commitAllCheckpointsTo(depth){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.commitAllCheckpoints(this.revision.forkId,depth)}async revertAllCheckpointsTo(depth){assert4.notEqual(this.revision.forkId,0,"Fork ID must be set"),await this.instance.revertAllCheckpoints(this.revision.forkId,depth)}};function hydrateLeaf(treeId,leaf){return leaf instanceof Fr?leaf:leaf instanceof BlockHash?leaf.toFr():treeId===MerkleTreeId.NULLIFIER_TREE?NullifierLeaf.fromBuffer(leaf):treeId===MerkleTreeId.PUBLIC_DATA_TREE?PublicDataTreeLeaf.fromBuffer(leaf):Fr.fromBuffer(leaf)}__name(hydrateLeaf,"hydrateLeaf");function serializeLeaf(leaf){return leaf instanceof BlockHash||leaf instanceof Fr?leaf.toBuffer():leaf instanceof NullifierLeaf?{nullifier:leaf.nullifier.toBuffer()}:{value:leaf.value.toBuffer(),slot:leaf.slot.toBuffer()}}__name(serializeLeaf,"serializeLeaf");function deserializeLeafValue(leaf){return Buffer80.isBuffer(leaf)?Fr.fromBuffer(leaf):"slot"in leaf?new PublicDataTreeLeaf(Fr.fromBuffer(leaf.slot),Fr.fromBuffer(leaf.value)):new NullifierLeaf(Fr.fromBuffer(leaf.nullifier))}__name(deserializeLeafValue,"deserializeLeafValue");function deserializeIndexedLeaf(leafPreimage){if("slot"in leafPreimage.leaf)return new PublicDataTreeLeafPreimage(new PublicDataTreeLeaf(Fr.fromBuffer(leafPreimage.leaf.slot),Fr.fromBuffer(leafPreimage.leaf.value)),Fr.fromBuffer(leafPreimage.nextKey),BigInt(leafPreimage.nextIndex));if("nullifier"in leafPreimage.leaf)return new NullifierLeafPreimage(new NullifierLeaf(Fr.fromBuffer(leafPreimage.leaf.nullifier)),Fr.fromBuffer(leafPreimage.nextKey),BigInt(leafPreimage.nextIndex));throw new Error("Invalid leaf type")}__name(deserializeIndexedLeaf,"deserializeIndexedLeaf");var _computedKey47,WORLD_STATE_DB_VERSION=2,WORLD_STATE_DIR="world_state";_computedKey47=Symbol.asyncDispose;var NativeWorldStateService=class{static{__name(this,"NativeWorldStateService")}instance;worldStateInstrumentation;log;genesis;cleanup;recreateInstance;initialHeader;cachedStatusSummary;constructor(instance,worldStateInstrumentation,log2,genesis=DEFAULT_GENESIS_DATA,cleanup=()=>Promise.resolve(),recreateInstance){this.instance=instance,this.worldStateInstrumentation=worldStateInstrumentation,this.log=log2,this.genesis=genesis,this.cleanup=cleanup,this.recreateInstance=recreateInstance}static async new(rollupAddress,dataDir,wsTreeMapSizes,genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,cleanup=()=>Promise.resolve()){for(let[key,value]of Object.entries(wsTreeMapSizes))if(value<=0)throw new Error(`Map size must be a positive number, got ${value} for ${key}`);let log2=createLogger("world-state:database",bindings),worldStateDirectory=join8(dataDir,WORLD_STATE_DIR),versionManager=new DatabaseVersionManager({schemaVersion:WORLD_STATE_DB_VERSION,rollupAddress,dataDirectory:worldStateDirectory,onOpen:__name(dir=>IpcWorldState.spawn(dir,wsTreeMapSizes,genesis,instrumentation,bindings),"onOpen")}),[instance]=await versionManager.open(),recreateInstance=__name(async()=>(await rm4(worldStateDirectory,{recursive:!0,force:!0,maxRetries:3}),await mkdir3(worldStateDirectory,{recursive:!0}),IpcWorldState.spawn(worldStateDirectory,wsTreeMapSizes,genesis,instrumentation,bindings)),"recreateInstance"),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);try{await worldState.init()}catch(e2){throw log2.error(`Error initializing world state: ${e2}`),await instance.close(),e2}return worldState}static async tmp(cleanupTmpDir=!0,genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,threads){let log2=createLogger("world-state:database",bindings),dataDir=await mkdtemp2(join8(tmpdir4(),"aztec-world-state-")),dbMapSizeKb=256*1024,worldStateTreeMapSizes={archiveTreeMapSizeKb:dbMapSizeKb,nullifierTreeMapSizeKb:dbMapSizeKb,noteHashTreeMapSizeKb:dbMapSizeKb,messageTreeMapSizeKb:dbMapSizeKb,publicDataTreeMapSizeKb:dbMapSizeKb};log2.debug(`Created temporary world state database at: ${dataDir} with tree map size: ${dbMapSizeKb}`);let instance=await IpcWorldState.spawn(dataDir,worldStateTreeMapSizes,genesis,instrumentation,bindings,threads),cleanup=__name(async()=>{cleanupTmpDir?(await rm4(dataDir,{recursive:!0,force:!0,maxRetries:3}),log2.debug(`Deleted temporary world state database: ${dataDir}`)):log2.debug(`Leaving temporary world state database: ${dataDir}`)},"cleanup"),recreateInstance=__name(async()=>(await rm4(dataDir,{recursive:!0,force:!0,maxRetries:3}),await mkdir3(dataDir,{recursive:!0}),IpcWorldState.spawn(dataDir,worldStateTreeMapSizes,genesis,instrumentation,bindings,threads)),"recreateInstance"),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);try{await worldState.init()}catch(e2){throw log2.error(`Error initializing tmp world state: ${e2}`),e2}return worldState}static ephemeral(genesis=DEFAULT_GENESIS_DATA,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings){return this.tmp(!0,genesis,instrumentation,bindings,1)}static async fromIpc(wsdbBackend,instrumentation=new WorldStateInstrumentation(getTelemetryClient()),bindings,genesis=DEFAULT_GENESIS_DATA,cleanup=()=>Promise.resolve(),recreateInstance){let log2=createLogger("world-state:database",bindings),instance=new IpcWorldState(wsdbBackend,instrumentation,bindings),worldState=new this(instance,instrumentation,log2,genesis,cleanup,recreateInstance);return await worldState.init(),worldState}async init(){if(!(await this.getStatusSummary()).treesAreSynched)throw new Error("World state trees are out of sync, please delete your data directory and re-sync");this.initialHeader=await this.buildInitialHeader();let committed=this.getCommitted();if((await committed.getTreeInfo(MerkleTreeId.ARCHIVE)).size===0n)throw new Error("Archive tree can't be empty");let initialHeaderIndex=(await committed.findLeafIndices(MerkleTreeId.ARCHIVE,[await this.initialHeader.hash()]))[0];assert5.strictEqual(initialHeaderIndex,0n,"Invalid initial archive state")}async clear(){if(!this.recreateInstance)throw new Error("clear() is not available for externally-managed IPC backends");this.log.warn("Clearing world state: shutting down WSDB, deleting data, and recreating"),await this.instance.close(),this.cachedStatusSummary=void 0,this.instance=await this.recreateInstance(),await this.init(),this.log.info("World state cleared and reinitialized from genesis")}getIpcPath(){if(this.instance instanceof IpcWorldState)return this.instance.getIpcPath();throw new Error("getIpcPath() is only available with IPC world state")}getCommitted(){return new MerkleTreesFacade(this.instance,this.initialHeader,WorldStateRevision.empty())}getSnapshot(blockNumber){return new MerkleTreesFacade(this.instance,this.initialHeader,new WorldStateRevision(0,blockNumber,!1))}async fork(blockNumber,opts={}){let forkId=await this.instance.createFork({latest:blockNumber===void 0,blockNumber:blockNumber??BlockNumber.ZERO});return new MerkleTreesForkFacade(this.instance,this.initialHeader,new WorldStateRevision(forkId,WorldStateRevision.LATEST,!0),opts)}getInitialHeader(){return this.initialHeader}async handleL2BlockAndMessages(l2Block,l1ToL2Messages){let paddedNoteHashes=l2Block.body.txEffects.flatMap(txEffect=>padArrayEnd(txEffect.noteHashes,Fr.ZERO,64)),paddedNullifiers=l2Block.body.txEffects.flatMap(txEffect=>padArrayEnd(txEffect.nullifiers,Fr.ZERO,64)).map(nullifier=>new NullifierLeaf(nullifier)),publicDataWrites=l2Block.body.txEffects.flatMap(txEffect=>txEffect.publicDataWrites.map(write=>{if(write.isEmpty())throw new Error("Public data write must not be empty when syncing");return new PublicDataTreeLeaf(write.leafSlot,write.value)}));try{let status=await this.instance.syncBlock({blockNumber:l2Block.number,blockHeaderHash:(await l2Block.hash()).toBuffer(),expectedArchiveRoot:l2Block.archive.root.toBuffer(),expectedPreviousArchiveRoot:l2Block.header.lastArchive.root.toBuffer(),paddedL1ToL2Messages:l1ToL2Messages.map(serializeLeaf),paddedNoteHashes:paddedNoteHashes.map(serializeLeaf),paddedNullifiers:paddedNullifiers.map(serializeLeaf),publicDataWrites:publicDataWrites.map(serializeLeaf),blockStateRef:blockStateReference(l2Block.header.state)});return this.sanitizeAndCacheSummaryFromFull(status)}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("synch_pending_block"),err}}async close(){try{await this.instance.close()}finally{await this.cleanup()}}async[_computedKey47](){await this.close()}async buildInitialHeader(){let state=await this.getInitialStateReference();return BlockHeader.empty({state,globalVariables:GlobalVariables.empty({timestamp:this.genesis.genesisTimestamp})})}sanitizeAndCacheSummaryFromFull(response){let sanitized=sanitizeFullStatus(response);return this.cachedStatusSummary={...sanitized.summary},sanitized}sanitizeAndCacheSummary(response){let sanitized=sanitizeSummary(response);return this.cachedStatusSummary={...sanitized},sanitized}deleteCachedSummary(){this.cachedStatusSummary=void 0}async setFinalized(toBlockNumber){try{this.sanitizeAndCacheSummary(await this.instance.finalizeBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("finalize_block"),err}return this.getStatusSummary()}async removeHistoricalBlocks(toBlockNumber){try{return this.sanitizeAndCacheSummaryFromFull(await this.instance.removeHistoricalBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("prune_historical_block"),err}}async unwindBlocks(toBlockNumber){try{return this.sanitizeAndCacheSummaryFromFull(await this.instance.unwindBlocks(toBlockNumber))}catch(err){throw this.deleteCachedSummary(),this.worldStateInstrumentation.incCriticalErrors("prune_pending_block"),err}}async getStatusSummary(){return this.cachedStatusSummary!==void 0?{...this.cachedStatusSummary}:this.sanitizeAndCacheSummary(await this.instance.getStatus())}updateLeaf(_treeId,_leaf,_index){return Promise.reject(new Error("Method not implemented"))}async getInitialStateReference(){let state=await this.instance.getInitialStateReference();return new StateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.L1_TO_L2_MESSAGE_TREE]),new PartialStateReference(treeStateReferenceToSnapshot(state[MerkleTreeId.NOTE_HASH_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.NULLIFIER_TREE]),treeStateReferenceToSnapshot(state[MerkleTreeId.PUBLIC_DATA_TREE])))}async backupTo(dstPath,compact2=!0){return await this.instance.copyStores(dstPath,compact2),fromEntries(NATIVE_WORLD_STATE_DBS.map(([name,dir])=>[name,join8(dstPath,dir,"data.mdb")]))}},NATIVE_WORLD_STATE_DBS=[["l1-to-l2-message-tree","L1ToL2MessageTree"],["archive-tree","ArchiveTree"],["public-data-tree","PublicDataTree"],["note-hash-tree","NoteHashTree"],["nullifier-tree","NullifierTree"]];var ForkCheckpoint=class _ForkCheckpoint{static{__name(this,"ForkCheckpoint")}fork;depth;completed;constructor(fork,depth){this.fork=fork,this.depth=depth,this.completed=!1}static async new(fork){let depth=await fork.createCheckpoint();return new _ForkCheckpoint(fork,depth)}async commit(){this.completed||(await this.fork.commitCheckpoint(),this.completed=!0)}async revert(){this.completed||(await this.fork.revertCheckpoint(),this.completed=!0)}async revertToCheckpoint(){this.completed||(await this.fork.revertAllCheckpointsTo(this.depth-1),this.completed=!0)}};import{AssertionError}from"assert";import{Buffer as Buffer81}from"buffer";var ExecutorMetrics=class{static{__name(this,"ExecutorMetrics")}tracer;fnCount;fnDuration;manaPerSecond;manaUsed;totalInstructionsExecuted;txHashing;privateEffectsInsertions;constructor(client,name="PublicExecutor"){this.tracer=client.getTracer(name);let meter=client.getMeter(name);this.fnCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_EXECUTOR_SIMULATION_COUNT,{[Attributes.OK]:[!0,!1]}),this.fnDuration=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_DURATION),this.manaPerSecond=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_MANA_PER_SECOND),this.manaUsed=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_MANA_USED),this.totalInstructionsExecuted=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_SIMULATION_TOTAL_INSTRUCTIONS),this.txHashing=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_TX_HASHING),this.privateEffectsInsertions=meter.createHistogram(Metrics.PUBLIC_EXECUTOR_PRIVATE_EFFECTS_INSERTION)}startRecordingTxSimulation(_txLabel){}stopRecordingTxSimulation(_txLabel,_gasUsed,_revertedCode,_stats){}recordEnqueuedCallSimulation(fnName,durationMs,manaUsed,totalInstructionsExecuted){if(this.fnCount.add(1,{[Attributes.OK]:!0,[Attributes.APP_CIRCUIT_NAME]:fnName}),this.manaUsed.record(Math.ceil(manaUsed),{[Attributes.APP_CIRCUIT_NAME]:fnName}),this.totalInstructionsExecuted.record(Math.ceil(totalInstructionsExecuted),{[Attributes.APP_CIRCUIT_NAME]:fnName}),this.fnDuration.record(Math.ceil(durationMs),{[Attributes.APP_CIRCUIT_NAME]:fnName}),durationMs>0&&manaUsed>0){let manaPerSecond=Math.round(manaUsed*1e3/durationMs);this.manaPerSecond.record(manaPerSecond,{[Attributes.APP_CIRCUIT_NAME]:fnName})}}recordEnqueuedCallSimulationFailure(_fnName,_durationMs,_manaUsed,_totalInstructionsExecuted){this.fnCount.add(1,{[Attributes.OK]:!1})}recordPrivateEffectsInsertion(durationUs,type){this.privateEffectsInsertions.record(Math.ceil(durationUs),{[Attributes.REVERTIBILITY]:type})}};var PublicTxSimulatorBase=class{static{__name(this,"PublicTxSimulatorBase")}avmSimulator;globalVariables;contractsDB;forkId;protocolContracts;log;config;bindings;constructor(avmSimulator,globalVariables,contractsDB,forkId,config2,protocolContracts=ProtocolContractsList,bindings){this.avmSimulator=avmSimulator,this.globalVariables=globalVariables,this.contractsDB=contractsDB,this.forkId=forkId,this.protocolContracts=protocolContracts,this.config=PublicSimulatorConfig.from(config2??{}),this.bindings=bindings,this.log=createLogger("simulator:public_tx_simulator",bindings)}computeTxHash(tx){return tx.getTxHash()}};var PublicTxSimulator=class extends PublicTxSimulatorBase{static{__name(this,"PublicTxSimulator")}log;abortController;simulationPromise;constructor(avmSimulator,globalVariables,contractsDB,forkId,config2,bindings){super(avmSimulator,globalVariables,contractsDB,forkId,config2,void 0,bindings),this.log=createLogger("simulator:public_tx_simulator",bindings)}async simulate(tx){this.abortController=new AbortController,this.simulationPromise=this.doSimulate(tx,this.abortController.signal);try{return await this.simulationPromise}finally{this.abortController=void 0,this.simulationPromise=void 0}}async doSimulate(tx,signal){let txHash=this.computeTxHash(tx);this.log.debug(`Simulating ${tx.publicFunctionCalldata.length} public calls for tx ${txHash}, forkId=${this.forkId}`,{txHash});let txHint=AvmTxHint.fromTx(tx,this.globalVariables.gasFees),fastSimInputs=new AvmFastSimulationInputs({forkId:this.forkId,blockNumber:WorldStateRevision.LATEST,includeUncommitted:!0},this.config,txHint,this.globalVariables,this.protocolContracts);this.log.trace("Serializing fast simulation inputs to msgpack...");let inputBuffer=fastSimInputs.serializeWithMessagePack();this.log.debug(`Running AVM simulation for tx ${txHash}`);let context2={contractsDB:this.contractsDB,forkId:this.forkId,timestamp:this.globalVariables.timestamp},resultBuffer;try{resultBuffer=await this.avmSimulator.simulate(inputBuffer,context2,signal)}catch(error2){throw error2.message?.includes("cancelled")?new SimulationError("AVM simulation cancelled",[]):new SimulationError(`AVM simulation failed: ${error2.message}`,[])}this.log.trace(`Deserializing simulation result from buffer (size: ${resultBuffer.length})...`);let resultJSON=deserializeFromMessagePack(Buffer81.from(resultBuffer)),result=PublicTxResult.fromPlainObject(resultJSON);return this.log.trace(`AVM simulation completed for tx ${txHash}`,{txHash,reverted:!result.revertCode.isOK(),l2GasUsed:result.gasUsed.totalGas.l2Gas}),result}async cancel(waitTimeoutMs=100){this.abortController&&(this.log.debug("Cancelling AVM simulation"),this.abortController.abort()),this.simulationPromise&&(this.log.debug(`Waiting up to ${waitTimeoutMs}ms for AVM simulation to stop`),await Promise.race([this.simulationPromise.catch(()=>{}),sleep(waitTimeoutMs)]),this.log.debug("AVM simulation stopped or wait timed out"))}},MeasuredPublicTxSimulator=class extends PublicTxSimulator{static{__name(this,"MeasuredPublicTxSimulator")}metrics;constructor(avmSimulator,globalVariables,contractsDB,forkId,metrics2,config2,bindings){super(avmSimulator,globalVariables,contractsDB,forkId,config2,bindings),this.metrics=metrics2}async simulate(tx,txLabel="unlabeledTx"){this.metrics.startRecordingTxSimulation(txLabel);let result;try{result=await super.simulate(tx)}finally{this.metrics.stopRecordingTxSimulation(txLabel,result?.gasUsed,result?.revertCode,result?.stats)}return result}},TelemetryPublicTxSimulator=class extends MeasuredPublicTxSimulator{static{__name(this,"TelemetryPublicTxSimulator")}tracer;constructor(avmSimulator,globalVariables,contractsDB,forkId,telemetryClient=getTelemetryClient(),config2,bindings){let metrics2=new ExecutorMetrics(telemetryClient,"PublicTxSimulator");super(avmSimulator,globalVariables,contractsDB,forkId,metrics2,config2,bindings),this.tracer=metrics2.tracer}};var PublicProcessorMetrics=class{static{__name(this,"PublicProcessorMetrics")}tracer;txDuration;txCount;txPhaseCount;phaseDuration;phaseCount;bytecodeDeployed;totalGas;totalGasHistogram;gasRate;txGas;treeInsertionDuration;silentlySkippedCount;silentlySkippedDuration;constructor(client,name="PublicProcessor"){this.tracer=client.getTracer(name);let meter=client.getMeter(name);this.txDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_DURATION),this.txCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_TX_COUNT,{[Attributes.OK]:[!0,!1]}),this.txPhaseCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_TX_PHASE_COUNT),this.phaseDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_PHASE_DURATION),this.phaseCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_PHASE_COUNT,{[Attributes.TX_PHASE_NAME]:[TxExecutionPhase.SETUP,TxExecutionPhase.APP_LOGIC,TxExecutionPhase.TEARDOWN],[Attributes.OK]:[!0,!1]}),this.bytecodeDeployed=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_DEPLOY_BYTECODE_SIZE),this.totalGas=meter.createGauge(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS),this.totalGasHistogram=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM),this.txGas=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TX_GAS),this.gasRate=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_GAS_RATE),this.treeInsertionDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_TREE_INSERTION),this.silentlySkippedCount=createUpDownCounterWithDefault(meter,Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_COUNT),this.silentlySkippedDuration=meter.createHistogram(Metrics.PUBLIC_PROCESSOR_SILENTLY_SKIPPED_DURATION)}recordPhaseDuration(phaseName,durationMs){this.phaseCount.add(1,{[Attributes.TX_PHASE_NAME]:phaseName,[Attributes.OK]:!0}),this.phaseDuration.record(Math.ceil(durationMs),{[Attributes.TX_PHASE_NAME]:phaseName})}recordTx(phaseCount,durationMs,gasUsed){this.txPhaseCount.add(phaseCount),this.txDuration.record(Math.ceil(durationMs)),this.txCount.add(1,{[Attributes.OK]:!0}),this.txGas.record(gasUsed.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.txGas.record(gasUsed.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"})}recordAllTxs(totalGas,gasRate){this.totalGas.record(totalGas.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.totalGas.record(totalGas.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"}),this.gasRate.record(gasRate,{[Attributes.GAS_DIMENSION]:"L2"}),this.totalGasHistogram.record(totalGas.daGas,{[Attributes.GAS_DIMENSION]:"DA"}),this.totalGasHistogram.record(totalGas.l2Gas,{[Attributes.GAS_DIMENSION]:"L2"})}recordFailedTx(){this.txCount.add(1,{[Attributes.OK]:!1})}recordRevertedPhase(phaseName){this.phaseCount.add(1,{[Attributes.TX_PHASE_NAME]:phaseName,[Attributes.OK]:!1})}recordClassPublication(...events){let totalBytecode=0;for(let event of events)totalBytecode+=event.packedPublicBytecode.length;totalBytecode>0&&this.bytecodeDeployed.record(totalBytecode)}recordTreeInsertions(durationUs){this.treeInsertionDuration.record(Math.ceil(durationUs))}recordSilentlySkipped(durationMs){this.silentlySkippedCount.add(1),this.silentlySkippedDuration.record(Math.ceil(durationMs))}};function applyDecs2203RFactory(){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(applyDecs2203RFactory,"applyDecs2203RFactory");function _apply_decs_2203_r(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r=applyDecs2203RFactory())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r,"_apply_decs_2203_r");var _dec,_dec1,_dec2,_initProto,PublicProcessorFactory=class{static{__name(this,"PublicProcessorFactory")}contractDataSource;avmSimulator;dateProvider;telemetryClient;log;constructor(contractDataSource,avmSimulator,dateProvider=new DateProvider,telemetryClient=getTelemetryClient(),bindings){this.contractDataSource=contractDataSource,this.avmSimulator=avmSimulator,this.dateProvider=dateProvider,this.telemetryClient=telemetryClient,this.log=createLogger("simulator:public-processor-factory",bindings)}create(merkleTree,globalVariables,config2,contractsDB=new PublicContractsDB(this.contractDataSource,this.log.getBindings())){let forkId=merkleTree.getRevision().forkId,guardedFork=new GuardedMerkleTreeOperations(merkleTree),publicTxSimulator=this.createPublicTxSimulator(forkId,globalVariables,contractsDB,config2);return new PublicProcessor(globalVariables,guardedFork,contractsDB,publicTxSimulator,this.dateProvider,this.telemetryClient,createLogger("simulator:public-processor",this.log.getBindings()))}createPublicTxSimulator(forkId,globalVariables,contractsDB,config2){return new TelemetryPublicTxSimulator(this.avmSimulator,globalVariables,contractsDB,forkId,this.telemetryClient,config2,this.log.getBindings())}},PublicProcessorTimeoutError=class extends Error{static{__name(this,"PublicProcessorTimeoutError")}constructor(message="Timed out while processing tx"){super(message),this.name="PublicProcessorTimeoutError"}},PublicProcessorAbortError=class extends Error{static{__name(this,"PublicProcessorAbortError")}constructor(message="Aborted while processing tx"){super(message),this.name="PublicProcessorAbortError"}};_dec=trackSpan("PublicProcessor.processTx",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()})),_dec1=trackSpan("PublicProcessor.processPrivateOnlyTx",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()})),_dec2=trackSpan("PublicProcessor.processTxWithPublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var PublicProcessor=class _PublicProcessor{static{__name(this,"PublicProcessor")}globalVariables;guardedMerkleTree;contractsDB;publicTxSimulator;dateProvider;log;opts;debugLogStore;static{({e:[_initProto]}=_apply_decs_2203_r(this,[[_dec,2,"processTx"],[_dec1,2,"processPrivateOnlyTx"],[_dec2,2,"processTxWithPublicCalls"]],[]))}metrics;constructor(globalVariables,guardedMerkleTree,contractsDB,publicTxSimulator,dateProvider,telemetryClient=getTelemetryClient(),log2,opts={},debugLogStore=new NullDebugLogStore){this.globalVariables=globalVariables,this.guardedMerkleTree=guardedMerkleTree,this.contractsDB=contractsDB,this.publicTxSimulator=publicTxSimulator,this.dateProvider=dateProvider,this.log=log2,this.opts=opts,this.debugLogStore=debugLogStore,_initProto(this),this.metrics=new PublicProcessorMetrics(telemetryClient,"PublicProcessor")}get tracer(){return this.metrics.tracer}async process(txs,limits={},validator={}){let{maxTransactions,deadline,maxBlockGas,maxBlobFields,isBuildingProposal,signal}=limits,{preprocessValidator,nullifierCache}=validator,result=[],usedTxs=[],failed=[],debugLogs=[],timer=new Timer,totalSizeInBytes=0,returns=[],totalPublicGas=new Gas(0,0),totalBlockGas=new Gas(0,0),totalBlobFields=0,blockGasSkippedCount=0,silentlySkippedCount=0,totalSilentlySkippedDurationMs=0;for await(let tx of txs){if(maxTransactions!==void 0&&result.length>=maxTransactions){this.log.debug("Stopping tx processing due to reaching the max tx limit.");break}if(deadline&&this.dateProvider.now()>+deadline){this.log.warn("Stopping tx processing due to timeout.");break}if(signal?.aborted){this.log.warn("Stopping tx processing due to abort signal.");break}let txHash=tx.getTxHash().toString(),txBlobFields=tx.getPrivateTxEffectsSizeInFields();if(isBuildingProposal&&maxBlobFields!==void 0&&totalBlobFields+txBlobFields>maxBlobFields){this.log.warn(`Skipping tx ${txHash} with ${txBlobFields} fields from private side effects due to blob fields limit`,{txHash,txBlobFields,totalBlobFields,maxBlobFields});continue}let txGasLimit=tx.data.constants.txContext.gasSettings.gasLimits;if(isBuildingProposal&&maxBlockGas!==void 0&&totalBlockGas.add(txGasLimit).gtAny(maxBlockGas)){this.log.debug(`Skipping processing of tx ${txHash} due to block gas limit`,{txHash,txGasLimit,totalBlockGas,maxBlockGas}),blockGasSkippedCount++;continue}if(preprocessValidator){let result2=await preprocessValidator.validateTx(tx),txHash2=tx.getTxHash();if(result2.result==="invalid"){let reason=result2.reason.join(", ");this.log.debug(`Rejecting tx ${txHash2.toString()} due to pre-process validation fail: ${reason}`),failed.push({tx,error:new Error(`Tx failed preprocess validation: ${reason}`)}),returns.push(new NestedProcessReturnValues([]));continue}else this.log.trace(`Tx ${txHash2.toString()} is valid before processing.`)}let checkpoint=await ForkCheckpoint.new(this.guardedMerkleTree.getUnderlyingFork()),startStateReference=await this.guardedMerkleTree.getUnderlyingFork().getStateReference();this.contractsDB.createCheckpoint();try{let[txProcessingTimeMs,[processedTx,returnValues,txDebugLogs]]=await elapsed(()=>this.processTx(tx,deadline,signal)),fakeThrowAfter=this.opts.fakeThrowAfterProcessingTxCount;if(fakeThrowAfter!==void 0&&result.length+failed.length+1>=fakeThrowAfter)throw new Error(`Fake error after processing ${fakeThrowAfter} txs`);let txBlobFields2=processedTx.txEffect.getNumBlobFields(),txSize=txBlobFields2*Fr.SIZE_IN_BYTES;if(maxBlobFields!==void 0&&totalBlobFields+txBlobFields2>maxBlobFields){this.log.debug(`Skipping processed tx ${txHash} with ${txBlobFields2} blob fields due to max blob fields limit.`,{txHash,txBlobFields:txBlobFields2,totalBlobFields,maxBlobFields,txProcessingTimeMs}),silentlySkippedCount+=1,totalSilentlySkippedDurationMs+=txProcessingTimeMs,this.metrics.recordSilentlySkipped(txProcessingTimeMs),await checkpoint.revert(),this.contractsDB.revertCheckpoint();continue}if(!isBuildingProposal&&maxBlockGas!==void 0&&totalBlockGas.add(processedTx.gasUsed.billedGas).gtAny(maxBlockGas)){this.log.warn(`Stopping re-execution since tx ${txHash} would push block gas over limit`,{txHash,txGas:processedTx.gasUsed.billedGas,totalBlockGas,maxBlockGas}),await checkpoint.revert(),this.contractsDB.revertCheckpoint();break}nullifierCache?.addNullifiers(processedTx.txEffect.nullifiers.map(n=>n.toBuffer())),result.push(processedTx),usedTxs.push(tx),returns=returns.concat(returnValues),debugLogs.push(...txDebugLogs),this.debugLogStore.storeLogs(processedTx.hash.toString(),txDebugLogs),totalPublicGas=totalPublicGas.add(processedTx.gasUsed.publicGas),totalBlockGas=totalBlockGas.add(processedTx.gasUsed.billedGas),totalSizeInBytes+=txSize,totalBlobFields+=txBlobFields2,this.contractsDB.commitCheckpoint()}catch(err){if(err?.name==="PublicProcessorTimeoutError"||err?.name==="PublicProcessorAbortError"){this.log.warn(`Stopping tx processing due to ${err.name==="PublicProcessorTimeoutError"?"timeout":"abort"}.`),await this.publicTxSimulator.cancel?.(),await this.guardedMerkleTree.stop(),await checkpoint.revertToCheckpoint(),this.contractsDB.revertCheckpoint(),await this.checkWorldStateUnchanged(startStateReference,txHash,err);break}await checkpoint.revertToCheckpoint(),this.contractsDB.revertCheckpoint();let errorMessage=err instanceof Error||err instanceof AssertionError?err.message:"Unknown error";this.log.warn(`Failed to process tx ${txHash.toString()}: ${errorMessage} ${err?.stack}`),failed.push({tx,error:err instanceof Error?err:new Error(errorMessage)}),returns.push(new NestedProcessReturnValues([])),await this.checkWorldStateUnchanged(startStateReference,txHash,err)}finally{await checkpoint.commit()}}let duration3=timer.s(),rate=duration3>0?totalPublicGas.l2Gas/duration3:0;this.metrics.recordAllTxs(totalPublicGas,rate);let silentlySkippedDurationMs=Math.round(totalSilentlySkippedDurationMs);return this.log.info(`Processed ${result.length} successful txs and ${failed.length} failed txs (${blockGasSkippedCount} skipped due to block gas limit, ${silentlySkippedCount} silently skipped, ${silentlySkippedDurationMs}ms wasted) in ${duration3}s`,{blockNumber:this.globalVariables.blockNumber,successfulCount:result.length,failedCount:failed.length,duration:duration3,rate,totalPublicGas,totalBlockGas,totalSizeInBytes,blockGasSkippedCount,silentlySkippedCount,silentlySkippedDurationMs}),[result,failed,usedTxs,returns,debugLogs]}async checkWorldStateUnchanged(startStateReference,txHash,cause){let endStateReference=await this.guardedMerkleTree.getUnderlyingFork().getStateReference();if(!startStateReference.equals(endStateReference))throw this.log.warn(`Fork state reference changed by tx ${txHash} after error in public processor`,{expected:startStateReference.toInspect(),actual:endStateReference.toInspect(),cause}),new Error(`Fork state reference changed by tx ${txHash} after error in public processor`,{cause})}async processTx(tx,deadline,signal){let[time3,[processedTx,returnValues,debugLogs]]=await elapsed(()=>this.processTxWithinDeadline(tx,deadline,signal));return this.log.verbose(tx.hasPublicCalls()?`Processed tx ${processedTx.hash} with ${tx.numberOfPublicCalls()} public calls in ${time3}ms`:`Processed tx ${processedTx.hash} with no public calls in ${time3}ms`,{txHash:processedTx.hash,txFee:processedTx.txEffect.transactionFee.toBigInt(),revertCode:processedTx.txEffect.revertCode.getCode(),revertReason:processedTx.revertReason,gasUsed:processedTx.gasUsed,publicDataWriteCount:processedTx.txEffect.publicDataWrites.length,nullifierCount:processedTx.txEffect.nullifiers.length,noteHashCount:processedTx.txEffect.noteHashes.length,contractClassLogCount:processedTx.txEffect.contractClassLogs.length,publicLogCount:processedTx.txEffect.publicLogs.length,privateLogCount:processedTx.txEffect.privateLogs.length,l2ToL1MessageCount:processedTx.txEffect.l2ToL1Msgs.length,durationMs:time3}),[processedTx,returnValues??[],debugLogs]}async doTreeInsertionsForPrivateOnlyTx(processedTx){let treeInsertionStart=process.hrtime.bigint();await this.guardedMerkleTree.appendLeaves(MerkleTreeId.NOTE_HASH_TREE,padArrayEnd(processedTx.txEffect.noteHashes,Fr.ZERO,64));try{await this.guardedMerkleTree.batchInsert(MerkleTreeId.NULLIFIER_TREE,padArrayEnd(processedTx.txEffect.nullifiers,Fr.ZERO,64).map(n=>n.toBuffer()),6)}catch(cause){throw new Error(`Transaction ${processedTx.hash} failed with duplicate nullifiers`,{cause})}let treeInsertionEnd=process.hrtime.bigint();this.metrics.recordTreeInsertions(Number(treeInsertionEnd-treeInsertionStart)/1e3)}async processTxWithinDeadline(tx,deadline,signal){let innerProcessFn=tx.hasPublicCalls()?()=>this.processTxWithPublicCalls(tx):()=>this.processPrivateOnlyTx(tx),fakeDelayPerTxMs=this.opts.fakeProcessingDelayPerTxMs,processFn=fakeDelayPerTxMs&&fakeDelayPerTxMs>0?async()=>{let result=await innerProcessFn();return this.log.warn(`Sleeping ${fakeDelayPerTxMs}ms after processing tx ${tx.getTxHash().toString()}`),await sleep(fakeDelayPerTxMs),result}:innerProcessFn,processingSignal=this.getProcessingSignal(tx,deadline,signal);return processingSignal?await execWithSignal(()=>processFn(),processingSignal,signal2=>signal2.reason?.name==="TimeoutError"?new PublicProcessorTimeoutError:new PublicProcessorAbortError):await processFn()}getProcessingSignal(tx,deadline,signal){if(!deadline)return signal;let timeout=+deadline-this.dateProvider.now();if(timeout<=0)throw new PublicProcessorTimeoutError;let txHash=tx.getTxHash();this.log.debug(`Processing tx ${txHash.toString()} within ${timeout}ms`,{deadline:deadline.toISOString(),now:new Date(this.dateProvider.now()).toISOString(),txHash});let timeoutSignal=AbortSignal.timeout(timeout);return signal?AbortSignal.any([signal,timeoutSignal]):timeoutSignal}async performFeePaymentPublicDataWrite(txFee,feePayer){let feeJuiceAddress=ProtocolContractAddress.FeeJuice,balanceSlot=await computeFeePayerBalanceStorageSlot(feePayer),leafSlot=await computeFeePayerBalanceLeafSlot(feePayer),treesDB=new PublicTreesDB(this.guardedMerkleTree);this.log.debug(`Deducting ${txFee.toBigInt()} balance in Fee Juice for ${feePayer}`);let balance=await treesDB.storageRead(feeJuiceAddress,balanceSlot);if(balance.lt(txFee))throw new Error(`Not enough balance for fee payer to pay for transaction (got ${balance.toBigInt()} needs ${txFee.toBigInt()})`);let updatedBalance=balance.sub(txFee);return await treesDB.storageWrite(feeJuiceAddress,balanceSlot,updatedBalance),new PublicDataWrite(leafSlot,updatedBalance)}async processPrivateOnlyTx(tx){let gasFees=this.globalVariables.gasFees,transactionFee=computeTransactionFee(gasFees,tx.data.constants.txContext.gasSettings,tx.data.gasUsed),feePaymentPublicDataWrite=await this.performFeePaymentPublicDataWrite(transactionFee,tx.data.feePayer),processedTx=makeProcessedTxFromPrivateOnlyTx(tx,transactionFee,feePaymentPublicDataWrite,this.globalVariables);return this.metrics.recordClassPublication(...tx.getContractClassLogs().filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2))),await this.doTreeInsertionsForPrivateOnlyTx(processedTx),this.contractsDB.addNewContracts(tx),[processedTx,void 0,[]]}async processTxWithPublicCalls(tx){let timer=new Timer,result=await this.publicTxSimulator.simulate(tx),{hints,publicInputs,publicTxEffect,gasUsed,revertCode}=result,contractClassLogs=revertCode.isOK()?tx.getContractClassLogs():tx.getSplitContractClassLogs(!1);this.metrics.recordClassPublication(...contractClassLogs.filter(log2=>ContractClassPublishedEvent.isContractClassPublishedEvent(log2)).map(log2=>ContractClassPublishedEvent.fromLog(log2)));let durationMs=timer.ms();this.metrics.recordTx(1,durationMs,gasUsed.publicGas);let appLogicReturnValues=result.getAppLogicReturnValues(),revertReason=result.findRevertReason(),avmProvingRequest=hints&&publicInputs?_PublicProcessor.generateProvingRequest(publicInputs,hints):void 0;return[makeProcessedTxFromTxWithPublicCalls(tx,this.globalVariables,avmProvingRequest,publicTxEffect,gasUsed,revertCode,revertReason),appLogicReturnValues,result.logs??[]]}static generateProvingRequest(publicInputs,hints=AvmExecutionHints.empty()){return{type:ProvingRequestType.PUBLIC_VM,inputs:new AvmCircuitInputs(hints,publicInputs)}}};import{executeCircuit as executeCircuit2}from"@aztec-foundation/noir-acvm_js";import{abiDecode as abiDecode3,abiEncode as abiEncode3}from"@aztec-foundation/noir-noirc_abi";import{decompressWitness}from"@aztec-foundation/noir-acvm_js";import{abiDecode as abiDecode4}from"@aztec-foundation/noir-noirc_abi";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{static{__name(this,"TXEOracleTopLevelContext")}isMisc=!0;isTxe=!0;logger;stateMachine;contractStore;noteStore;keyStore;addressStore;accountStore;senderTaggingStore;recipientTaggingStore;taggingSecretSourcesStore;capsuleStore;factStore;privateEventStore;nextBlockTimestamp;chainId;version;authwits;taggingSecretStrategies;authorizeAllUtilityCallTargets;artifactResolver;rootPath;packageName;constructor(args){this.stateMachine=args.stateMachine,this.contractStore=args.contractStore,this.noteStore=args.noteStore,this.keyStore=args.keyStore,this.addressStore=args.addressStore,this.accountStore=args.accountStore,this.senderTaggingStore=args.senderTaggingStore,this.recipientTaggingStore=args.recipientTaggingStore,this.taggingSecretSourcesStore=args.taggingSecretSourcesStore,this.capsuleStore=args.capsuleStore,this.factStore=args.factStore,this.privateEventStore=args.privateEventStore,this.nextBlockTimestamp=args.nextBlockTimestamp,this.chainId=args.chainId,this.version=args.version,this.authwits=args.authwits,this.taggingSecretStrategies=args.taggingSecretStrategies,this.authorizeAllUtilityCallTargets=args.authorizeAllUtilityCallTargets,this.artifactResolver=args.artifactResolver,this.rootPath=args.rootPath,this.packageName=args.packageName,this.logger=createLogger("txe:top_level_context"),this.logger.debug("Entering Top Level Context")}contractOracleVersion;assertCompatibleOracleVersion(major2,minor){if(major2!==33){let hint=major2>33?"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 ${33}, 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.createChild("debug_log")[levelName](applyStringFormatting(message,fields)),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];return{txHash:txEffects.txHash,noteHashes:txEffects.noteHashes,nullifiers:txEffects.nullifiers,privateLogs:txEffects.privateLogs.map(log2=>log2.getEmittedFields())}}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,immutablesHash){let{artifact,instance}=await this.artifactResolver.resolveDeployArtifact({rootPath:this.rootPath,packageName:this.packageName,contractPath,initializer:initializer3,args,secret,salt,deployer,immutablesHash});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){var _stack=[];try{let blockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();let 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];let 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();let msgSender=from??AztecAddress.NULL_MSG_SENDER;let callContext=new CallContext(msgSender,targetContractAddress,functionSelector,isStaticCall);let txContext=new TxContext(this.chainId,this.version,gasSettings);let protocolNullifier=await computeProtocolNullifier(getSingleTxBlockRequestHash(blockNumber));let noteCache=new ExecutionNoteCache(protocolNullifier);let minRevertibleSideEffectCounter=1;await noteCache.setMinRevertibleSideEffectCounter(minRevertibleSideEffectCounter);let taggingIndexCache=new ExecutionTaggingIndexCache;let simulator=new WASMSimulator;let transientArrayService=new TransientArrayService;let privateExecutionOracle=new PrivateExecutionOracle({argsHash,txContext,protocolNullifier,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});let result;let 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);let globals=makeGlobalVariables();globals.blockNumber=blockNumber;globals.timestamp=this.nextBlockTimestamp;globals.chainId=this.chainId;globals.version=this.version;globals.gasFees=GasFees.empty();let forkedWorldTrees=__using(_stack,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),!0);let bindings=this.logger.getBindings();let contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings);let guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees);let config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0});let forkId=forkedWorldTrees.getRevision().forkId;let processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,new PublicTxSimulator(this.stateMachine.synchronizer.avmSimulator,globals,contractsDB,forkId,config2,bindings),new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings));let tx=await Tx.create({data:publicInputs,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:result.publicFunctionCalldata});let checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]);let[processedTx]=results[0];let failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);else 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(),{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 l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await this.stateMachine.handleL2Block(l2Block);return{returnValues:executionResult.returnValues??[],offchainEffects}}catch(_){var _error=_,_hasError=!0}finally{var _promise2=__callDispose(_stack,_error,_hasError);_promise2&&await _promise2}}async publicCallNewFlow(from,targetContractAddress,calldata,isStaticCall,gasSettings){var _stack=[];try{let anchorBlockHeader=await this.stateMachine.anchorBlockStore.getBlockHeader();let 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();let txContext=new TxContext(this.chainId,this.version,gasSettings);let calldataHash=await computeCalldataHash(calldata);let calldataHashedValues=new HashedValues(calldata,calldataHash);let globals=makeGlobalVariables();globals.blockNumber=blockNumber;globals.timestamp=this.nextBlockTimestamp;globals.chainId=this.chainId;globals.version=this.version;globals.gasFees=GasFees.empty();let forkedWorldTrees=__using(_stack,await this.stateMachine.synchronizer.nativeWorldStateService.fork(),!0);let bindings2=this.logger.getBindings();let contractsDB=new PublicContractsDB(new TXEPublicContractDataSource(blockNumber,this.contractStore),bindings2);let guardedMerkleTrees=new GuardedMerkleTreeOperations(forkedWorldTrees);let config2=PublicSimulatorConfig.from({skipFeeEnforcement:!0,collectDebugLogs:!0,collectHints:!1,collectStatistics:!1,collectCallMetadata:!0});let forkId2=forkedWorldTrees.getRevision().forkId;let simulator=new PublicTxSimulator(this.stateMachine.synchronizer.avmSimulator,globals,contractsDB,forkId2,config2,bindings2);let processor=new PublicProcessor(globals,guardedMerkleTrees,contractsDB,simulator,new TestDateProvider,void 0,createLogger("simulator:public-processor",bindings2));let 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());let constantData=new TxConstantData(anchorBlockHeader,txContext,Fr.zero(),Fr.zero());let txData=new PrivateKernelTailCircuitPublicInputs(constantData,new Gas(0,0),AztecAddress.zero(),0n,inputsForPublic,void 0);let tx=await Tx.create({data:txData,chonkProof:ChonkProof.empty(),contractClassLogFields:[],publicFunctionCalldata:[calldataHashedValues]});let checkpoint;isStaticCall&&(checkpoint=await ForkCheckpoint.new(forkedWorldTrees));let results=await processor.process([tx]);let[processedTx]=results[0];let failedTxs=results[1];if(failedTxs.length!==0)throw new Error(`Public execution has failed: ${failedTxs[0].error}`);else 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(),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 l2Block=await makeTXEBlock(forkedWorldTrees,globals,[txEffect]);await this.stateMachine.handleL2Block(l2Block);return returnValues??[]}catch(_){var _error=_,_hasError=!0}finally{var _promise2=__callDispose(_stack,_error,_hasError);_promise2&&await _promise2}}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});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})},"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,hooks:composeHooks({authorizeUtilityCall:this.buildAuthorizeUtilityCallHook("utility",authorizedUtilityCallTargets)}),utilityExecutor,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,immutablesHash])=>this.handlerAsTxe().deploy(contractPath,initializer3,args,secret,salt,deployer,immutablesHash),"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_tryGetL1ToL2MembershipWitness(...inputs){return callTxeHandler({oracle:"aztec_utl_tryGetL1ToL2MembershipWitness",inputs,handler:__name(([messageHash,nullifier])=>this.handlerAsUtility().tryGetL1ToL2MembershipWitness(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_utl_callUtilityFunction(...inputs){return callTxeHandler({oracle:"aztec_utl_callUtilityFunction",inputs,handler:__name(([contractAddress,functionSelector,args])=>this.handlerAsUtility().callUtilityFunction(contractAddress,functionSelector,args),"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-labs/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,inboxMsgTotal}=input.proposedCheckpointData;builder.withPendingArchive(archive.root),builder.withPendingTempCheckpointLogFields({headerHash:header.hash(),outHash:checkpointOutHash,slotNumber:header.slotNumber,inboxMsgTotal,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}),validateCheckpointLimits(checkpoint,opts),validateCheckpointBlocksLimits(checkpoint,opts)}__name(validateCheckpoint,"validateCheckpoint");function validateCheckpointStructure(checkpoint,opts={}){let{maxBlocksPerCheckpoint=MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT}=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],seenTxHashes=new Set;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){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)}for(let txEffect of block.body.txEffects){let txHash=txEffect.txHash.toString();if(seenTxHashes.has(txHash))throw new CheckpointValidationError(`Tx ${txHash} in block ${block.number} appears more than once in the checkpoint`,number4,slot);seenTxHashes.add(txHash)}}}__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,TreeLeafIndex(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)}getL1ToL2MessageIndex(l1ToL2Message){return this.stores.messages.getL1ToL2MessageIndex(l1ToL2Message)}getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount){return this.stores.messages.getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount)}getMessagePosition(totalMessageCount){return this.stores.messages.getMessagePosition(totalMessageCount)}getSyncedMessagePosition(){return this.stores.messages.getSyncedMessagePosition()}getSyncedMessageL1Block(){return this.stores.messages.getSynchedL1Block()}getL1ToL2MessageRange(startLeafCount,endLeafCount){return this.stores.messages.getL1ToL2MessageRange(startLeafCount,endLeafCount)}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,checkpoint.verbatimAttestations)}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 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"}},DuplicateTxHashError=class extends Error{static{__name(this,"DuplicateTxHashError")}txHash;blockNumber;existingBlockNumber;constructor(txHash,blockNumber,existingBlockNumber){super(`Cannot insert block ${blockNumber}: tx ${txHash} is already included in block ${existingBlockNumber}`),this.txHash=txHash,this.blockNumber=blockNumber,this.existingBlockNumber=existingBlockNumber,this.name="DuplicateTxHashError"}};var 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"}},InboxMessagePrefixChangedError=class extends Error{static{__name(this,"InboxMessagePrefixChangedError")}totalMessageCount;expected;actual;constructor(totalMessageCount,expected,actual){super(`Inbox message prefix at count ${totalMessageCount} changed from ${expected?.toString()??"unavailable"} to ${actual?.toString()??"unavailable"} while a replacement was being prepared`),this.totalMessageCount=totalMessageCount,this.expected=expected,this.actual=actual,this.name="InboxMessagePrefixChangedError"}},InboxMessageRangeNotSyncedError=class extends Error{static{__name(this,"InboxMessageRangeNotSyncedError")}startLeafCount;endLeafCount;constructor(startLeafCount,endLeafCount,detail){super(`Inbox message range [${startLeafCount}, ${endLeafCount}) is not fully synced: ${detail}`),this.startLeafCount=startLeafCount,this.endLeafCount=endLeafCount,this.name="InboxMessageRangeNotSyncedError"}},InboxPrefixNotSyncedError=class extends Error{static{__name(this,"InboxPrefixNotSyncedError")}blockNumber;endTotalMsgCount;constructor(blockNumber,endTotalMsgCount,cause){super(`Cannot confirm the Inbox prefix at message count ${endTotalMsgCount} for proposed block ${blockNumber}`+(cause?`: ${cause}`:"")),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.name="InboxPrefixNotSyncedError"}},InboxPrefixMismatchError=class extends Error{static{__name(this,"InboxPrefixMismatchError")}blockNumber;endTotalMsgCount;expected;actual;constructor(blockNumber,endTotalMsgCount,expected,actual){super(`Proposed block ${blockNumber} references Inbox prefix ${expected.toString()} at message count ${endTotalMsgCount}, but the canonical prefix there is ${actual.toString()}`),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.expected=expected,this.actual=actual,this.name="InboxPrefixMismatchError"}},ProposedBlockParentNotFoundError=class extends Error{static{__name(this,"ProposedBlockParentNotFoundError")}blockNumber;parentBlockNumber;constructor(blockNumber,parentBlockNumber){super(`Cannot resolve parent block ${parentBlockNumber} of proposed block ${blockNumber}`),this.blockNumber=blockNumber,this.parentBlockNumber=parentBlockNumber,this.name="ProposedBlockParentNotFoundError"}},InboxConsumptionRewindsError=class extends Error{static{__name(this,"InboxConsumptionRewindsError")}blockNumber;endTotalMsgCount;parentTotalMsgCount;constructor(blockNumber,endTotalMsgCount,parentTotalMsgCount){super(`Proposed block ${blockNumber} consumes through message count ${endTotalMsgCount}, behind its parent's ${parentTotalMsgCount}`),this.blockNumber=blockNumber,this.endTotalMsgCount=endTotalMsgCount,this.parentTotalMsgCount=parentTotalMsgCount,this.name="InboxConsumptionRewindsError"}};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"}},UndecodableCheckpointAttestationsError=class extends Error{static{__name(this,"UndecodableCheckpointAttestationsError")}checkpointNumber;committeeSize;cause;constructor(checkpointNumber,committeeSize,cause){super(`Cannot store checkpoint ${checkpointNumber}: its attestations tuple does not decode for a committee of ${committeeSize} (${cause instanceof Error?cause.message:String(cause)})`),this.checkpointNumber=checkpointNumber,this.committeeSize=committeeSize,this.cause=cause,this.name="UndecodableCheckpointAttestationsError"}};async function prepareBlockTxEffectsTreeData(blocks){await Promise.all(blocks.flatMap(block=>[block.hash(),block.body.computeTxEffectsTreeData()]))}__name(prepareBlockTxEffectsTreeData,"prepareBlockTxEffectsTreeData");var Operation=(function(Operation2){return Operation2[Operation2.Store=0]="Store",Operation2[Operation2.Delete=1]="Delete",Operation2})(Operation||{});function blockLeafCount(block){return BigInt(block.header.state.l1ToL2MessageTree.nextAvailableLeafIndex)}__name(blockLeafCount,"blockLeafCount");var 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,inboxPrefixRef,pendingChainValidationStatus){await prepareBlockTxEffectsTreeData([block]);let result=await this.stores.db.transactionAsync(async()=>{let outcome=await this.stores.blocks.addProposedBlock(block);return outcome==="already-checkpointed"||(await this.validateProposedBlockInboxPrefix(block,inboxPrefixRef),await Promise.all([pendingChainValidationStatus&&this.stores.blocks.setPendingChainValidationStatus(pendingChainValidationStatus),this.stores.logs.addLogs([block]),this.addContractDataToDb(block)])),outcome});return result==="added"&&await this.l2FrontierCache?.refresh(),result}async validateProposedBlockInboxPrefix(block,inboxPrefixRef){let blockNumber=block.number,endCount=blockLeafCount(block),parentCount=await this.getParentBlockLeafCount(block);if(endCount<parentCount)throw new InboxConsumptionRewindsError(blockNumber,endCount,parentCount);let endRollingHash;try{({end:{rollingHash:endRollingHash}}=await this.stores.messages.getL1ToL2MessageRange(parentCount,endCount))}catch(err){throw new InboxPrefixNotSyncedError(blockNumber,endCount,`${err}`)}if(!endRollingHash.equals(inboxPrefixRef.inboxRollingHash))throw new InboxPrefixMismatchError(blockNumber,endCount,inboxPrefixRef.inboxRollingHash,endRollingHash)}async getParentBlockLeafCount(block){let parentBlockNumber=block.number-1;if(parentBlockNumber<INITIAL_L2_BLOCK_NUM2)return 0n;let parent=await this.stores.blocks.getBlockData({number:BlockNumber(parentBlockNumber)});if(parent===void 0)throw new ProposedBlockParentNotFoundError(block.number,parentBlockNumber);return blockLeafCount(parent)}async addCheckpoints(checkpoints,pendingChainValidationStatus,promoteProposed,evictProposedFrom){let validateOpts={rollupManaLimit:this.opts?.rollupManaLimit};for(let checkpoint of checkpoints)validateCheckpoint(checkpoint.checkpoint,validateOpts);promoteProposed&&validateCheckpoint(promoteProposed.checkpoint,validateOpts),await prepareBlockTxEffectsTreeData(checkpoints.flatMap(published=>published.checkpoint.blocks));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.number,promoteProposed.l1,promoteProposed.attestations,promoteProposed.verbatimAttestations,promoteProposed.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 rollbackMessagesAndPruneProposedBlocks(input){let{keep,syncState}=input,result=await this.stores.db.transactionAsync(async()=>{let currentPrefix=await this.stores.messages.getMessagePosition(keep.totalMessageCount);if(currentPrefix===void 0||!currentPrefix.rollingHash.equals(keep.rollingHash))throw new InboxMessagePrefixChangedError(keep.totalMessageCount,keep.rollingHash,currentPrefix?.rollingHash);await this.stores.messages.removeL1ToL2Messages(keep.totalMessageCount),await this.stores.messages.setMessageSyncState(syncState);let[checkpointedBlockNumber,latestBlockNumber]=await Promise.all([this.stores.blocks.getCheckpointedL2BlockNumber(),this.stores.blocks.getLatestL2BlockNumber()]),checkpointedTipAffected=checkpointedBlockNumber>BlockNumber.ZERO&&await this.getConsumedMessageCount(checkpointedBlockNumber)>keep.totalMessageCount,prunedBlocks=[];if(latestBlockNumber>checkpointedBlockNumber){let firstConsumer=(await this.stores.blocks.getBlocksData({from:BlockNumber.add(checkpointedBlockNumber,1),limit:latestBlockNumber-checkpointedBlockNumber})).find(block=>blockLeafCount(block)>keep.totalMessageCount);if(firstConsumer!==void 0){let firstConsumerNumber=firstConsumer.header.getBlockNumber();this.log.warn(`Pruning proposed blocks from ${firstConsumerNumber} that consumed rolled-back Inbox messages`,{keptMessageCount:keep.totalMessageCount,firstConsumerNumber,latestBlockNumber}),prunedBlocks=await this.removeBlocksAfter(BlockNumber(firstConsumerNumber-1)),await this.evictProposedCheckpointsForPrunedBlocks(prunedBlocks)}}return{prunedBlocks,checkpointedTipAffected}});return await this.l2FrontierCache?.refresh(),result}async getConsumedMessageCount(blockNumber){let[block]=await this.stores.blocks.getBlocksData({from:blockNumber,limit:1});if(block===void 0||block.header.getBlockNumber()!==blockNumber)throw new Error(`Block ${blockNumber} is missing from the store`);return blockLeafCount(block)}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),[,logsDeleted,...contractDataRemoved]=await Promise.all([this.stores.blocks.setPendingChainValidationStatus({valid:!0}),this.stores.logs.deleteLogs(blocksRemoved),...blocksRemoved.map(block=>this.removeContractDataFromDb(block))]);return logsDeleted&&contractDataRemoved.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,block.number,operation)])).every(Boolean)}async updatePublishedContractClasses(allLogs,blockNum,operation){let contractClassPublishedEvents=[];for(let log2 of allLogs)if(ContractClassPublishedEvent.isContractClassPublishedEvent(log2))try{contractClassPublishedEvents.push(ContractClassPublishedEvent.fromLog(log2))}catch(err){this.log.warn("Skipping unparseable contract class publication log",{blockNum,error:err instanceof Error?err.message:String(err)})}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;try{contractClass=await event.toContractClassPublicWithBytecodeCommitment()}catch(err){this.log.warn("Skipping contract class with invalid packed bytecode",{blockNum,contractClassId:event.contractClassId.toString(),error:err instanceof Error?err.message:String(err)});continue}let 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,blockNum)}return!0}async updateUpdatedContractInstances(allLogs,timestamp,blockNum,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,blockNum);if(operation==1)return await this.stores.contractInstances.deleteContractInstanceUpdates(contractUpdates,timestamp,blockNum)}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)}};import{Buffer as Buffer82}from"buffer";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;inboxParity;hints;constructor(previousRollups,inboxParity,hints){this.previousRollups=previousRollups,this.inboxParity=inboxParity,this.hints=hints}static from(fields){return new _CheckpointRootRollupPrivateInputs(..._CheckpointRootRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollups,fields.inboxParity,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)],ProofData.fromBuffer(reader,ParityPublicInputs),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;inboxParity;hints;constructor(previousRollup,inboxParity,hints){this.previousRollup=previousRollup,this.inboxParity=inboxParity,this.hints=hints}static from(fields){return new _CheckpointRootSingleBlockRollupPrivateInputs(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(fields))}static getFields(fields){return[fields.previousRollup,fields.inboxParity,fields.hints]}toBuffer(){return serializeToBuffer(..._CheckpointRootSingleBlockRollupPrivateInputs.getFields(this))}static fromBuffer(buffer){let reader=BufferReader.asReader(buffer);return new _CheckpointRootSingleBlockRollupPrivateInputs(ProofData.fromBuffer(reader,BlockRollupPublicInputs),ProofData.fromBuffer(reader,ParityPublicInputs),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 Buffer82.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)}};import{Buffer as Buffer83}from"buffer";var BlockStore=class{static{__name(this,"BlockStore")}db;#blocks;#proposedCheckpoints;#checkpoints;#slotToCheckpoint;#blockTxs;#txEffects;#blockTxEffectLeaves;#blockTxEffectCategoriesHashes;#lastSynchedL1Block;#lastProvenCheckpoint;#lastFinalizedCheckpoint;#pendingChainValidationStatus;#contractIndex;#blockHashIndex;#blockArchiveIndex;#rejectedCheckpoints;#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.#blockTxEffectLeaves=db.openMap("archiver_block_tx_effect_leaves"),this.#blockTxEffectCategoriesHashes=db.openMap("archiver_block_tx_effect_categories_hashes"),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")}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 prepareBlockTxEffectsTreeData([block]),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)});if(existingBlock&&existingBlock.archive.root.equals(block.archive.root))return"already-checkpointed";throw 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),"added"})}async addCheckpoints(checkpoints,opts={}){return checkpoints.length===0?[]:(await prepareBlockTxEffectsTreeData(checkpoints.flatMap(published=>published.checkpoint.blocks)),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++){let block=checkpoint.checkpoint.blocks[i];await this.addBlockToDatabase(block,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(),...this.toAttestationsStorage(checkpoint.checkpoint.number,checkpoint.verbatimAttestations,checkpoint.attestations.length),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(),...this.toAttestationsStorage(incoming.checkpoint.number,incoming.verbatimAttestations,incoming.attestations.length),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(),{leaves,categoriesHashes}=await block.body.computeTxEffectsTreeData();await this.#blockTxEffectLeaves.set(blockHash.toString(),Buffer83.concat(leaves.map(leaf=>leaf.toBuffer()))),await this.#blockTxEffectCategoriesHashes.set(blockHash.toString(),Buffer83.concat(categoriesHashes.map(hash5=>hash5.toBuffer()))),await this.#blocks.set(block.number,{header:block.header.toBuffer(),blockHash:blockHash.toBuffer(),archive:block.archive.toBuffer(),checkpointNumber,indexWithinCheckpoint}),await this.assertTxsNotInAncestors(block.body.txEffects.map(tx=>tx.txHash),block.number);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(),Buffer83.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 assertTxsNotInAncestors(txHashes,blockNumber){let existing=await this.#txEffects.getManyAsync(txHashes.map(txHash=>txHash.toString()));for(let i=0;i<txHashes.length;i++){let stored=existing[i];if(stored===void 0)continue;let owner=readTxLocation(stored).blockNumber;if(owner<blockNumber)throw new DuplicateTxHashError(txHashes[i],blockNumber,owner)}}async deleteBlock(blockNumber,blockStorage){await this.#blocks.delete(blockNumber);let blockHash=bufferToHex(blockStorage.blockHash);await this.#blockTxEffectLeaves.delete(blockHash),await this.#blockTxEffectCategoriesHashes.delete(blockHash);let 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(!Buffer83.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(Buffer83.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}toAttestationsStorage(checkpointNumber,verbatimAttestations,committeeSize){try{CommitteeAttestation.fromPacked(verbatimAttestations,committeeSize)}catch(err){throw new UndecodableCheckpointAttestationsError(checkpointNumber,committeeSize,err)}return{verbatimAttestations:{signatureIndices:hexToBuffer(verbatimAttestations.signatureIndices),signaturesOrAddresses:hexToBuffer(verbatimAttestations.signaturesOrAddresses)},committeeSize}}checkpointDataFromCheckpointStorage(checkpointStorage){let verbatimAttestations={signatureIndices:bufferToHex(checkpointStorage.verbatimAttestations.signatureIndices),signaturesOrAddresses:bufferToHex(checkpointStorage.verbatimAttestations.signaturesOrAddresses)};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:CommitteeAttestation.fromPacked(verbatimAttestations,checkpointStorage.committeeSize),verbatimAttestations}}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,verbatimAttestations,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(),...this.toAttestationsStorage(proposed.checkpointNumber,verbatimAttestations,attestations.length),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),inboxMsgTotal:BigInt(stored.inboxMsgTotal),signer:stored.signer?EthAddress.fromString(stored.signer):void 0}}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 getTxEffectLeaves(blockHash){let buffer=await this.#blockTxEffectLeaves.getAsync(blockHash.toString());if(buffer===void 0)return;let reader=BufferReader.asReader(buffer),leaves=[];for(;!reader.isEmpty();)leaves.push(reader.readObject(Fr));return leaves}async getTxEffectCategoriesHash(blockHash,txIndexInBlock){let buffer=await this.#blockTxEffectCategoriesHashes.getAsync(blockHash.toString()),offset=txIndexInBlock*Fr.SIZE_IN_BYTES;if(!(!buffer||offset<0||offset+Fr.SIZE_IN_BYTES>buffer.length))return Fr.fromBuffer(buffer.subarray(offset,offset+Fr.SIZE_IN_BYTES))}async getTxLocation(txHash){let txEffect=await this.#txEffects.getAsync(txHash.toString());return txEffect?readTxLocation(txEffect):void 0}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 lastBlock=blocks[blocks.length-1],archive=lastBlock.archive,checkpointOutHash=Checkpoint.getCheckpointOutHash(blocks),inboxMsgTotal=BigInt(lastBlock.header.state.l1ToL2MessageTree.nextAvailableLeafIndex);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(),inboxMsgTotal:inboxMsgTotal.toString(),...proposed.signer&&{signer:proposed.signer.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.advanceSynchedL1BlockNumber(entry.l1.blockNumber)}async getRejectedCheckpointByArchiveRoot(archiveRoot){let stored=await this.#rejectedCheckpoints.getAsync(archiveRoot.toString());return stored?this.rejectedCheckpointFromStorage(stored):void 0}async removeRejectedCheckpointByArchiveRoot(archiveRoot){await this.#rejectedCheckpoints.delete(archiveRoot.toString())}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}}};function readTxLocation(txEffect){let view=Buffer83.from(txEffect.buffer,txEffect.byteOffset,txEffect.byteLength);return{blockNumber:BlockNumber(view.readUInt32BE(32)),blockHash:BlockHash.fromBuffer(view.subarray(0,32)),txIndexInBlock:view.readUInt32BE(36)}}__name(readTxLocation,"readTxLocation");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))),!0}async deleteContractClasses(data,blockNumber){return await Promise.all(data.map(c2=>this.deleteContractClass(c2,blockNumber))),!0}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");function encodeTimestamp(timestamp){return timestamp.toString().padStart(20,"0")}__name(encodeTimestamp,"encodeTimestamp");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))),!0}async deleteContractInstances(data,blockNumber){return await Promise.all(data.map(c2=>this.deleteContractInstance(c2,blockNumber))),!0}async addContractInstanceUpdates(data,timestamp,blockNumber){return await Promise.all(data.map((update,logIndex)=>this.addContractInstanceUpdate(update,timestamp,blockNumber,logIndex))),!0}async deleteContractInstanceUpdates(data,timestamp,blockNumber){return await Promise.all(data.map((update,logIndex)=>this.deleteContractInstanceUpdate(update,timestamp,blockNumber,logIndex))),!0}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,blockNumber){return isProtocolContract(contractInstance.address)?Promise.resolve():this.db.transactionAsync(async()=>{let key=contractInstance.address.toString();await this.#contractInstancePublishedAt.getAsync(key)===blockNumber&&(await this.#contractInstances.delete(key),await this.#contractInstancePublishedAt.delete(key))})}getUpdateRangeKey(contractAddress,timestamp){return[contractAddress.toString(),encodeTimestamp(timestamp)]}getUpdateKey(contractAddress,timestamp,blockNumber,logIndex){return[contractAddress.toString(),encodeTimestamp(timestamp),blockNumber,logIndex]}addContractInstanceUpdate(contractInstanceUpdate,timestamp,blockNumber,logIndex){return this.#contractInstanceUpdates.set(this.getUpdateKey(contractInstanceUpdate.address,timestamp,blockNumber,logIndex),new SerializableContractInstanceUpdate(contractInstanceUpdate).toBuffer())}deleteContractInstanceUpdate(contractInstanceUpdate,timestamp,blockNumber,logIndex){return this.#contractInstanceUpdates.delete(this.getUpdateKey(contractInstanceUpdate.address,timestamp,blockNumber,logIndex))}async getCurrentContractInstanceClassId(address,timestamp,originalClassId){let serializedUpdate=await first(this.#contractInstanceUpdates.valuesAsync({reverse:!0,start:this.getUpdateRangeKey(address,0n),end:this.getUpdateRangeKey(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())}};import{Buffer as Buffer84}from"buffer";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=Buffer84.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 Buffer84.concat([head,...fieldBufs])}__name(encodeValue,"encodeValue");function decodeValue(buffer){let buf=Buffer84.isBuffer(buffer)?buffer:Buffer84.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.blockNumber,loc.txIndexInBlock],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!==void 0?mapFn(range.start):void 0,end:range.end!==void 0?mapFn(range.end):void 0,reverse:range.reverse,limit:range.limit}}__name(mapRange,"mapRange");function serializeInboxMessage(message){return serializeToBuffer([bigintToUInt64BE(message.index),message.leaf,bigintToUInt64BE(message.l1BlockNumber),message.inboxRollingHash])}__name(serializeInboxMessage,"serializeInboxMessage");function deserializeInboxMessage(buffer){let reader=BufferReader.asReader(buffer),index=reader.readUInt64(),leaf=reader.readObject(Fr),l1BlockNumber=reader.readUInt64(),inboxRollingHash=reader.readObject(Fr);return{index,leaf,l1BlockNumber,inboxRollingHash}}__name(deserializeInboxMessage,"deserializeInboxMessage");function zeroMessagePosition(){return{totalMessageCount:0n,rollingHash:Fr.ZERO}}__name(zeroMessagePosition,"zeroMessagePosition");async function readL1BlockId(singleton){let buffer=await singleton.getAsync();if(!buffer)return;let reader=BufferReader.asReader(buffer);return{l1BlockNumber:reader.readUInt256(),l1BlockHash:Buffer32.fromBuffer(reader.readBytes(Buffer32.SIZE))}}__name(readL1BlockId,"readL1BlockId");function assertValidLeafCountRange(startLeafCount,endLeafCount){if(startLeafCount<0n||endLeafCount<0n||startLeafCount>endLeafCount)throw new Error(`Invalid Inbox leaf count range [${startLeafCount}, ${endLeafCount})`)}__name(assertValidLeafCountRange,"assertValidLeafCountRange");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;#lastScannedL1Block;#totalMessageCount;#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.#lastScannedL1Block=db.openSingleton("archiver_messages_scanned_l1_block"),this.#totalMessageCount=db.openSingleton("archiver_l1_to_l2_message_count"),this.#messagesFinalizedL1Block=db.openSingleton("archiver_messages_finalized_l1_block")}async getTotalL1ToL2MessageCount(){return await this.#totalMessageCount.getAsync()??0n}async getSynchedL1Block(){return await readL1BlockId(this.#lastSynchedL1Block)}async getScannedL1Block(){return await readL1BlockId(this.#lastScannedL1Block)??await this.getSynchedL1Block()}async setSynchedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastSynchedL1Block.set(buffer)}async setScannedL1Block(l1Block){let buffer=serializeToBuffer([l1Block.l1BlockNumber,l1Block.l1BlockHash]);await this.#lastScannedL1Block.set(buffer)}async getMessagesFinalizedL1Block(){return await readL1BlockId(this.#messagesFinalizedL1Block)}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)}setMessageSyncState(syncState){return this.db.transactionAsync(()=>this.setSyncState(syncState))}async setSyncState(syncState){if(await this.setScannedL1Block(syncState.l1Block),!syncState.authenticated){await this.#lastSynchedL1Block.delete();return}await this.setSynchedL1Block(syncState.l1Block),syncState.finalizedL1Block!==void 0&&await this.maybeAdvanceFinalizedL1Block(syncState.finalizedL1Block)}addL1ToL2Messages(messages,syncState){return messages.length===0&&syncState===void 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.getL1ToL2Message(message.index);if(existing&&existing.inboxRollingHash.equals(message.inboxRollingHash)){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 expectedIndex=lastMessage===void 0?0n:lastMessage.index+1n;if(message.index!==expectedIndex)throw new MessageStoreError(`Invalid index ${message.index} for incoming L1 to L2 message ${message.leaf.toString()} (expected ${expectedIndex})`,message);let previousInboxRollingHash=lastMessage?.inboxRollingHash??Fr.ZERO,expectedInboxRollingHash=updateInboxRollingHash(previousInboxRollingHash,message.leaf);if(!expectedInboxRollingHash.equals(message.inboxRollingHash))throw new MessageStoreError(`Invalid inbox rolling hash for incoming L1 to L2 message ${message.leaf.toString()} with index ${message.index} (expected ${expectedInboxRollingHash.toString()} from previous hash ${previousInboxRollingHash.toString()} but got ${message.inboxRollingHash.toString()})`,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),syncState!==void 0&&await this.setSyncState(syncState)})}getL1ToL2MessageIndex(l1ToL2Message){return this.#l1ToL2MessageIndices.getAsync(this.leafToIndexKey(l1ToL2Message))}async getL1ToL2Message(index){let buffer=await this.#l1ToL2Messages.getAsync(this.indexToKey(index));return buffer===void 0?void 0:deserializeInboxMessage(buffer)}async getLastMessage(){let[msg]=await toArray(this.#l1ToL2Messages.valuesAsync({reverse:!0,limit:1}));return msg?deserializeInboxMessage(msg):void 0}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} from the store`),await this.#l1ToL2Messages.delete(key),await this.#l1ToL2MessageIndices.delete(this.leafToIndexKey(deserializeInboxMessage(msgBuffer).leaf)),deleteCount++;await this.increaseTotalMessageCount(-deleteCount),deleteCount>0&&this.#log.warn(`Deleted ${deleteCount} L1 to L2 messages from index ${startIndex} from the store`)})}async rollbackL1ToL2MessagesAfterL1Block(l1BlockNumber){this.#log.debug(`Deleting L1 to L2 messages observed after L1 block ${l1BlockNumber}`);let removeFromIndex;for await(let message of this.iterateL1ToL2Messages({reverse:!0})){if(message.l1BlockNumber<=l1BlockNumber)break;removeFromIndex=message.index}removeFromIndex!==void 0&&await this.removeL1ToL2Messages(removeFromIndex)}async getL1ToL2MessagesBetweenLeafCounts(startLeafCount,endLeafCount){return assertValidLeafCountRange(startLeafCount,endLeafCount),await this.db.transactionAsync(async()=>(await this.assertLeafCountRangeSynced(startLeafCount,endLeafCount),(await this.getMessagesInLeafCountRange(startLeafCount,endLeafCount)).map(message=>message.leaf)))}async getMessagePosition(totalMessageCount){if(totalMessageCount<0n)throw new Error(`Invalid Inbox message count ${totalMessageCount}`);if(totalMessageCount===0n)return zeroMessagePosition();let message=await this.getL1ToL2Message(totalMessageCount-1n);return message===void 0?void 0:{totalMessageCount,rollingHash:message.inboxRollingHash}}getSyncedMessagePosition(){return this.db.transactionAsync(async()=>{let syncedTotal=await this.getTotalL1ToL2MessageCount(),position4=await this.getMessagePosition(syncedTotal);if(position4===void 0)throw new Error(`Inbox message store holds ${syncedTotal} messages but is missing index ${syncedTotal-1n}`);return position4})}async getL1ToL2MessageRange(startLeafCount,endLeafCount){return assertValidLeafCountRange(startLeafCount,endLeafCount),await this.db.transactionAsync(async()=>{await this.assertLeafCountRangeSynced(startLeafCount,endLeafCount);let start=await this.getMessagePosition(startLeafCount);if(start===void 0)throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`the store is missing the message at index ${startLeafCount-1n}`);let messages=await this.getMessagesInLeafCountRange(startLeafCount,endLeafCount),lastMessage=messages.at(-1),end=lastMessage===void 0?start:{totalMessageCount:endLeafCount,rollingHash:lastMessage.inboxRollingHash};return{messages:messages.map(message=>message.leaf),start,end}})}async assertLeafCountRangeSynced(startLeafCount,endLeafCount){let syncedTotal=await this.getTotalL1ToL2MessageCount();if(endLeafCount>syncedTotal){let available=syncedTotal>startLeafCount?syncedTotal-startLeafCount:0n;throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`only ${available} of ${endLeafCount-startLeafCount} messages are synced`)}}async getMessagesInLeafCountRange(startLeafCount,endLeafCount){if(startLeafCount===endLeafCount)return[];let messages=await toArray(this.iterateL1ToL2Messages({start:startLeafCount,end:endLeafCount}));if(BigInt(messages.length)!==endLeafCount-startLeafCount)throw new InboxMessageRangeNotSyncedError(startLeafCount,endLeafCount,`the store holds ${messages.length} of ${endLeafCount-startLeafCount} messages`);return messages}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 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)}getTxEffectMembershipWitness(){return Promise.resolve(void 0)}};var import_config15=__toESM(require_empty_stub(),1);import{l1ContractsConfigMappings as l1ContractsConfigMappings2}from"@aztec-labs/ethereum/config";import{l1ReaderConfigMappings}from"@aztec-labs/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(!1)},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 onchain 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-labs/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);function parseHistoryRetention(value){if(value==="archive")return{type:"archive"};let match=/^(rolling|pinned):([0-9]+)$/.exec(value),count2=Number(match?.[2]);if(!match||!Number.isSafeInteger(count2)||count2<1)throw new Error("Expected rolling:<positive checkpoint count>, pinned:<positive checkpoint number>, or archive");return match[1]==="rolling"?{type:"rolling",checkpoints:count2}:{type:"pinned",checkpoint:CheckpointNumber(count2)}}__name(parseHistoryRetention,"parseHistoryRetention");function migrateLegacyHistoryRetention(value){let checkpoints=Number(value);if(!value.trim()||!Number.isSafeInteger(checkpoints))throw new Error(`Invalid legacy history retention '${value}'; expected a whole number`);return checkpoints<1?"archive":`rolling:${checkpoints}`}__name(migrateLegacyHistoryRetention,"migrateLegacyHistoryRetention");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"},worldStateHistoryRetention:{env:"WS_HISTORY_RETENTION",fallback:["WS_NUM_HISTORIC_CHECKPOINTS","WS_NUM_HISTORIC_BLOCKS"],deprecatedFallback:[{env:"WS_NUM_HISTORIC_CHECKPOINTS",transform:migrateLegacyHistoryRetention},{env:"WS_NUM_HISTORIC_BLOCKS",transform:migrateLegacyHistoryRetention}],description:"World-state history retention: rolling:N retains N finalized checkpoints, pinned:N retains checkpoint N onwards, archive retains all history.",parseEnv:parseHistoryRetention,defaultValue:{type:"rolling",checkpoints:64},printDefault:__name(value=>value.type==="archive"?"archive":value.type==="rolling"?`rolling:${value.checkpoints}`:`pinned:${value.checkpoint}`,"printDefault")}};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-labs/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,pinnedTips=__name(()=>Promise.resolve(new SimulationOverridesBuilder2().withChainTips({pending:checkpointedCheckpointNumber,proven:checkpointedCheckpointNumber}).build()),"pinnedTips");if(!rollup)return pinnedTips();if(proposedCheckpointData&&proposedCheckpointData.checkpointNumber!==checkpointedCheckpointNumber+1)return this.log.debug(`Pricing the next-block boundary on checkpointed tip ${checkpointedCheckpointNumber}: proposed parent ${proposedCheckpointData.checkpointNumber} is more than one checkpoint ahead of it`),pinnedTips();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})}}quoteMinFees(){return this.minFees(QUOTE_MAX_WAIT_MS)}async getNextBlockMinFees(){try{return(await this.minFees(0))?.fees}catch(err){this.log.debug("Failed to resolve the next-block min fee",err);return}}async minFees(maxWaitMs){let{frontier,plan,key}=await this.planFromFrontier();if(!key){let fees=frontier.latestBlockHeader?.globalVariables.gasFees;if(!fees){this.log.debug("Cannot price the next block: 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});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.INBOX_PARITY),inputs:InboxParityPrivateInputs.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_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_ROOT_NO_TXS_ROLLUP),inputs:BlockRootNoTxsRollupPrivateInputs.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(14532)}),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_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_ROOT_NO_TXS_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.INBOX_PARITY),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")}};var QueuedIVCVerifier=class{static{__name(this,"QueuedIVCVerifier")}constructor(..._args){throwStub("QueuedIVCVerifier")}},SelfHealingChonkVerifier=class{static{__name(this,"SelfHealingChonkVerifier")}constructor(..._args){throwStub("SelfHealingChonkVerifier")}};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(resolve4=>{setTimeout(()=>{resolve4({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-labs/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"&&param!==null){let number4="number"in param?param.number:void 0,hash5="hash"in param?param.hash:void 0;if(number4!==void 0&&hash5!==void 0)return{number:number4,hash:hash5};if(number4!==void 0)return{number:number4};if(hash5!==void 0)return{hash:hash5};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"&&param!==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 NodeLogsProvider=class{static{__name(this,"NodeLogsProvider")}logsSource;holdOff;constructor(logsSource,holdOff){this.logsSource=logsSource,this.holdOff=holdOff}async getPrivateLogsByTags(query){return await this.logsSource.getPrivateLogsByTags(await this.#resolveReferenceBlock(query))}async getPublicLogsByTags(query){return await this.logsSource.getPublicLogsByTags(await this.#resolveReferenceBlock(query))}async#resolveReferenceBlock(query){let{referenceBlock,...rest}=query;if(referenceBlock===void 0)return rest;if(BlockHash.isBlockHash(referenceBlock))return await this.holdOff.getBlockData({hash:referenceBlock}),{...rest,referenceBlock};let anchor=await this.holdOff.getBlockData(referenceBlock);if(anchor===void 0)throw new Error(`Reference block ${inspectBlockParameter(referenceBlock)} not found in the node. This might indicate a reorg has occurred.`);return{...rest,referenceBlock:anchor.blockHash}}};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{header}=await this.#resolveBlockData(normalizeBlockParameter(referenceBlock)),referenceBlockNumber=header.getBlockNumber();if(referenceBlockNumber===BlockNumber.ZERO){if(header.lastArchive.nextAvailableLeafIndex!==0)throw new Error(`Initial block header commits to a non-empty archive ${header.lastArchive.root.toString()}`);return}let committedDb=await this.getWorldState(BlockNumber(referenceBlockNumber-1));return await this.#getArchiveMembershipWitness(committedDb,header.lastArchive.root,blockHash)}async getBlockHashMembershipWitnessAtArchive(reference,blockHash){let committedDb=await this.getWorldState({archive:reference.archive});return await this.#getArchiveMembershipWitness(committedDb,reference.archive,blockHash)}async#getArchiveMembershipWitness(db,expectedRoot,blockHash){let actualRoot=Fr.fromBuffer((await db.getTreeInfo(MerkleTreeId.ARCHIVE)).root);if(!actualRoot.equals(expectedRoot))throw new Error(`Archive ${expectedRoot.toString()} is not available: world state holds archive ${actualRoot.toString()} at the block that should have it. A reorg may have occurred.`);let[pathAndIndex]=await db.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]}getL1ToL2MessageIndex(l1ToL2Message){return this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message)}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:path5}=witness,leafPreimage=await db.getLeafPreimage(MerkleTreeId.NULLIFIER_TREE,index);if(leafPreimage)return new NullifierMembershipWitness(index,leafPreimage,path5)}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),path5=await committedDb.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE,lowLeafResult.index);return new PublicDataWitness(lowLeafResult.index,preimage,path5)}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.#resolveBlockData(query,opts);return{blockNumber:blockData.header.getBlockNumber(),blockHash:blockData.blockHash}}async#resolveBlockData(query,opts={}){let blockData=await this.holdOff.getBlockData(query,opts);return blockData===void 0&&this.#throwOnUndefinedBlockData(query),blockData}#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;function blockHashOf(value){return"blockHash"in value?Promise.resolve(value.blockHash):value.hash()}__name(blockHashOf,"blockHashOf");function blockSourceQueryOf(query){return isAnchoredBlockParameter(query)?{hash:query.hash}:query}__name(blockSourceQueryOf,"blockSourceQueryOf");var 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 lookup=blockSourceQueryOf(query),value=await this.#verifiedRead(query,lookup,read2);if(value!==void 0||opts.holdOff===!1)return value;let waitMs=await this.#resolveWaitBudgetMs(query);return await this.#waitForBlock(query,lookup,waitMs)||waitMs===0&&"number"in query?await this.#verifiedRead(query,lookup,read2):void 0}async#verifiedRead(query,lookup,read2){let value=await read2(lookup);return value===void 0?void 0:await this.#verifyAnchor(query,value)}async#verifyAnchor(query,value){if(!isAnchoredBlockParameter(query))return value;if(!(await blockHashOf(value)).equals(query.hash)){this.log.verbose("Block resolved for anchor is on a different fork",{blockParameter:inspectBlockParameter(query),resolvedBlockNumber:value.header.getBlockNumber()});return}let blockNumber=value.header.getBlockNumber();if(blockNumber!==query.number)throw new BadRequestError(`Anchor block ${query.hash.toString()} is block ${blockNumber}, not the requested block ${query.number}`);return value}async#waitForBlock(query,lookup,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 read2=await this.blockSource.getBlockData(lookup),data=read2===void 0?void 0:await this.#verifyAnchor(query,read2);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(isAnchoredBlockParameter(query)){if(this.#isGenesisBlockHash(query.hash))return 0;let tip=await this.blockSource.getBlockNumber();return query.number===tip+1?this.config.byNumberWaitMs:this.config.byHashWaitMs}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")}};var import_sequencer_client=__toESM(require_empty_stub(),1);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;blockSource;l1ToL2MessageSource;contractDataSource;predictor;epochCache;config;avmSimulator;telemetry;log;dateProvider=new DateProvider;constructor(deps){this.worldStateSynchronizer=deps.worldStateSynchronizer,this.blockSource=deps.blockSource,this.l1ToL2MessageSource=deps.l1ToL2MessageSource,this.contractDataSource=deps.contractDataSource,this.predictor=deps.predictor,this.epochCache=deps.epochCache,this.config=deps.config,this.avmSimulator=deps.avmSimulator,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,frontier}=await this.prepareNextBlock();if(!this.avmSimulator)throw new Error("NodePublicCallsSimulator.simulate requires an AVM simulator, but none was configured");let publicProcessorFactory=new PublicProcessorFactory(this.contractDataSource,this.avmSimulator,this.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);await this.appendPredictedL1ToL2Messages(merkleTreeFork,{checkpointStartBlock:plan.newCheckpoint?void 0:proposedCheckpointLastBlock(frontier)}),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,frontier}=await this.predictor.predict();try{return await this.worldStateSynchronizer.syncImmediate(plan.latestBlockNumber,BlockHash.fromString(plan.latestBlockHash)),{plan,globals,frontier}}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 appendPredictedL1ToL2Messages(fork,opts){try{let cursorCount=(await fork.getTreeInfo(MerkleTreeId.L1_TO_L2_MESSAGE_TREE)).size,checkpointStartCount=opts.checkpointStartBlock===void 0?cursorCount:await this.getConsumedMessageTotal(opts.checkpointStartBlock);if(checkpointStartCount===void 0){this.log.debug(`Block ${opts.checkpointStartBlock} has no header on this node; simulating against the tip`);return}let caps=import_sequencer_client.PROTOCOL_INBOX_CONSUMPTION_CAPS,localSyncedCount=(await this.l1ToL2MessageSource.getSyncedMessagePosition()).totalMessageCount,safeLocalEnd=(0,import_sequencer_client.selectSafeLocalEnd)({cursorCount,localSyncedCount,checkpointStartCount,caps});if(safeLocalEnd<=cursorCount)return;let{messages}=await this.l1ToL2MessageSource.getL1ToL2MessageRange(cursorCount,safeLocalEnd);await appendL1ToL2MessagesToTree(fork,messages),this.log.debug(`Appended ${messages.length} predicted L1-to-L2 messages to the simulation fork`,{cursorCount,safeLocalEnd})}catch(err){this.log.verbose(`Could not predict the next block's L1-to-L2 messages, simulating against the tip: ${err}`)}}async getConsumedMessageTotal(blockNumber){if(blockNumber===BlockNumber.ZERO)return 0n;let block=await this.blockSource.getBlockData({number:blockNumber});return block===void 0?void 0:BigInt(block.header.state.l1ToL2MessageTree.nextAvailableLeafIndex)}};function proposedCheckpointLastBlock(frontier){let proposed=frontier.proposedCheckpoint;return proposed?BlockNumber.add(proposed.startBlock,proposed.blockCount-1):frontier.tips.checkpointed.block.number}__name(proposedCheckpointLastBlock,"proposedCheckpointLastBlock");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 applyDecs2203RFactory2(){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(applyDecs2203RFactory2,"applyDecs2203RFactory");function _apply_decs_2203_r2(targetClass,memberDecs,classDecs,parentClass){return(_apply_decs_2203_r2=applyDecs2203RFactory2())(targetClass,memberDecs,classDecs,parentClass)}__name(_apply_decs_2203_r2,"_apply_decs_2203_r");var _dec3,_initProto2;_dec3=trackSpan("AztecNodeService.simulatePublicCalls",tx=>({[Attributes.TX_HASH]:tx.getTxHash().toString()}));var AztecNodeService=class{static{__name(this,"AztecNodeService")}static{({e:[_initProto2]}=_apply_decs_2203_r2(this,[[_dec3,2,"simulatePublicCalls"]],[]))}metrics;isUploadingSnapshot=(_initProto2(this),!1);sequencerPausedMinTxsPerBlock;nodePublicCallsSimulator;worldStateQueries;blockProvider;logsProvider;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;avmSimulator;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.avmSimulator=deps.avmSimulator,this.metrics=new NodeMetrics(this.telemetry,"AztecNodeService"),this.tracer=this.telemetry.getTracer("AztecNodeService"),this.nodePublicCallsSimulator=new NodePublicCallsSimulator({worldStateSynchronizer:this.worldStateSynchronizer,blockSource:this.blockSource,l1ToL2MessageSource:this.l1ToL2MessageSource,contractDataSource:this.contractDataSource,predictor:this.nextBlockPredictor,epochCache:this.epochCache,config:this.config,avmSimulator:this.avmSimulator,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.logsProvider=new NodeLogsProvider(this.logsSource,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}getValidatorClient(){return this.validatorClient}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)}getPrivateLogsByTags(query){return this.logsProvider.getPrivateLogsByTags(query)}getPublicLogsByTags(query){return this.logsProvider.getPublicLogsByTags(query)}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 this.avmSimulator?.[Symbol.asyncDispose](),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)}getBlockHashMembershipWitnessAtArchive(reference,blockHash){return this.worldStateQueries.getBlockHashMembershipWitnessAtArchive(reference,blockHash)}getNoteHashMembershipWitness(referenceBlock,noteHash){return this.worldStateQueries.getNoteHashMembershipWitness(referenceBlock,noteHash)}getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageMembershipWitness(referenceBlock,l1ToL2Message)}getL1ToL2MessageIndex(l1ToL2Message){return this.worldStateQueries.getL1ToL2MessageIndex(l1ToL2Message)}getL2ToL1Messages(epoch){return this.worldStateQueries.getL2ToL1Messages(epoch)}getL2ToL1MembershipWitness(txHash,message,messageIndexInTx){return this.worldStateQueries.getL2ToL1MembershipWitness(txHash,message,messageIndexInTx)}getTxEffectMembershipWitness(txHash){return this.blockSource.getTxEffectMembershipWitness(txHash)}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:skipFeeEnforcement?GasFees.empty():await this.getNextBlockMinFees(),skipFeeEnforcement,isSimulation,txsPermitted:!this.config.disableTransactions,maxTxL2Gas:networkTxGasLimits.l2Gas,maxTxDAGas:networkTxGasLimits.daGas},this.log.getBindings()).validateTx(tx)}async getNextBlockMinFees(){let quote=await this.nextBlockPredictor.quoteMinFees().catch(err=>{this.log.warn("Failed to compute the next-block min fee for tx admission",err)});return quote?quote.fees:(this.log.verbose("Admitting txs against the L1-forward min fee: the next block's fee is unavailable"),await this.feeProvider.getCurrentMinFees())}getConfig(){let keys=AztecNodeAdminConfigSchema.omit({logLevel:!0}).keyof().options;return Promise.resolve({...pick2(this.config,...keys),logLevel:getLogLevel()})}async setConfig({logLevel:logLevel2,...config2}){if(logLevel2!==void 0&&!isValidLogLevelSpec(logLevel2))throw new BadRequestError(`Invalid log level spec: ${logLevel2}`);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 SelfHealingChonkVerifier.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;logLevel2!==void 0&&setLogLevel(logLevel2),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)}getValidatorStatsBatch(validatorAddresses,fromSlot,toSlot){return this.validatorsSentinel?.getValidatorStatsBatch(validatorAddresses,fromSlot,toSlot)??Promise.resolve(validatorAddresses.map(()=>null))}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_cache3=__toESM(require_empty_stub(),1);import{createEthereumChain}from"@aztec-labs/ethereum/chain";import{getPublicClient,makeL1HttpTransport}from"@aztec-labs/ethereum/client";import{InboxContract,RegistryContract,RollupContract as RollupContract2}from"@aztec-labs/ethereum/contracts";import{pickL1ContractAddresses as pickL1ContractAddresses2}from"@aztec-labs/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_client2=__toESM(require_empty_stub(),1),import_automine=__toESM(require_empty_stub(),1);var import_slasher4=__toESM(require_empty_stub(),1);var import_validator_client2=__toESM(require_empty_stub(),1);import{createPublicClient}from"viem";var import_epoch_cache2=__toESM(require_empty_stub(),1);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({state:"none",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)}}lookupProposer(_slot){return Promise.resolve({state:"none"})}lookupMembership(_slot,_validator){return Promise.resolve({state:"none"})}getRegisteredValidators(){return Promise.resolve([])}filterInCommittee(_slot,_validators){return Promise.resolve({state:"none"})}lookupEscapeHatch(_epoch){return Promise.resolve({state:"none",isEscapeHatchOpen:!1})}lookupEscapeHatchAtSlot(_slot){return Promise.resolve({state:"none",isEscapeHatchOpen:!1})}getL1Constants(){return EmptyL1RollupConstants}getLagInEpochsForValidatorSet(){return 0}};var TXESynchronizer=class{constructor(nativeWorldStateService){this.nativeWorldStateService=nativeWorldStateService}static{__name(this,"TXESynchronizer")}blockNumber=BlockNumber.ZERO;avmSimulator;static async create(){let nativeWorldStateService=await NativeWorldStateService.ephemeral(),synchronizer=new this(nativeWorldStateService);return synchronizer.avmSimulator=await AvmSimulatorPool.spawn({wsdbIpcPath:nativeWorldStateService.getIpcPath()}),synchronizer}async handleL2Block(block,l1ToL2Messages=[]){await this.nativeWorldStateService.handleL2BlockAndMessages(block,l1ToL2Messages),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"')}async stop(){await this.closeIpc()}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"')}async closeIpc(){await this.avmSimulator?.[Symbol.asyncDispose]()}};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,inboxRollingHash: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()),[],CommitteeAttestationsAndSigners.packAttestations([]));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:Option.none(),anchorBlockTimestamp:0n}}__name(emptyLastCallState,"emptyLastCallState");var TXESession=class _TXESession{static{__name(this,"TXESession")}state={name:"TOP_LEVEL"};authwits=new Map;taggingSecretStrategies=new Map;authorizeAllUtilityCallTargets=!1;lastCallInfo=emptyLastCallState();txeOracleVersion;disposed=!1;logger;sessionStore;stateMachine;oracleHandler;contractStore;noteStore;keyStore;addressStore;accountStore;senderTaggingStore;recipientTaggingStore;taggingSecretSourcesStore;capsuleStore;factStore;privateEventStore;stagedWriteCoordinator;operationContributors;currentChangeSetId;chainId;version;nextBlockTimestamp;artifactResolver;rootPath;packageName;constructor(args){this.logger=args.logger,this.sessionStore=args.sessionStore,this.stateMachine=args.stateMachine,this.oracleHandler=args.oracleHandler,this.contractStore=args.contractStore,this.noteStore=args.noteStore,this.keyStore=args.keyStore,this.addressStore=args.addressStore,this.accountStore=args.accountStore,this.senderTaggingStore=args.senderTaggingStore,this.recipientTaggingStore=args.recipientTaggingStore,this.taggingSecretSourcesStore=args.taggingSecretSourcesStore,this.capsuleStore=args.capsuleStore,this.factStore=args.factStore,this.privateEventStore=args.privateEventStore,this.stagedWriteCoordinator=args.stagedWriteCoordinator,this.operationContributors=args.operationContributors,this.currentChangeSetId=args.currentChangeSetId,this.chainId=args.chainId,this.version=args.version,this.nextBlockTimestamp=args.nextBlockTimestamp,this.artifactResolver=args.artifactResolver,this.rootPath=args.rootPath,this.packageName=args.packageName}async dispose(){if(!this.disposed){this.disposed=!0;try{await this.stateMachine.synchronizer.closeIpc()}catch(err){this.logger.warn("Error closing AVM simulator during session dispose",err)}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,chainId,version:version2,authwits:new Map,taggingSecretStrategies:new Map,authorizeAllUtilityCallTargets:!1,artifactResolver,rootPath,packageName});return await topLevelOracleHandler.mineDeploymentNullifiers([STANDARD_AUTH_REGISTRY_ADDRESS]),new _TXESession({logger:logger3,sessionStore:store,stateMachine,oracleHandler:topLevelOracleHandler,contractStore,noteStore,keyStore,addressStore,accountStore,senderTaggingStore,recipientTaggingStore,taggingSecretSourcesStore,capsuleStore,factStore,privateEventStore,stagedWriteCoordinator,operationContributors:[stateMachine.contractSyncService],currentChangeSetId:initialChangeSetId,chainId,version:version2,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 ${10}.${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 (${10}.${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?Option.some(txHash):Option.none(),anchorBlockTimestamp),result}getLastCallOffchainEffects(){return this.lastCallInfo.queried=!0,this.lastCallInfo.offchainEffects}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.from(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.from(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!==10){let hint=major2>10?"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 ${10}, 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({stateMachine:this.stateMachine,contractStore:this.contractStore,noteStore:this.noteStore,keyStore:this.keyStore,addressStore:this.addressStore,accountStore:this.accountStore,senderTaggingStore:this.senderTaggingStore,recipientTaggingStore:this.recipientTaggingStore,taggingSecretSourcesStore:this.taggingSecretSourcesStore,capsuleStore:this.capsuleStore,factStore:this.factStore,privateEventStore:this.privateEventStore,nextBlockTimestamp:this.nextBlockTimestamp,chainId:this.chainId,version:this.version,authwits:this.authwits,taggingSecretStrategies:this.taggingSecretStrategies,authorizeAllUtilityCallTargets:this.authorizeAllUtilityCallTargets,artifactResolver:this.artifactResolver,rootPath:this.rootPath,packageName: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.from(gasSettings)),protocolNullifier,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:this.buildExecutionHooks(),transientArrayService}),this.state={name:"PRIVATE",nextBlockGlobalVariables,noteCache,taggingIndexCache},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Option.none(),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(Option.none(),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:this.buildExecutionHooks(),transientArrayService:new TransientArrayService}),this.state={name:"UTILITY"},this.logger.debug(`Entered state ${this.state.name}`),this.setLastCallContext(Option.none(),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),hooks:this.buildExecutionHooks(),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"))}}}buildExecutionHooks(){return composeHooks({resolveTaggingSecretStrategy:makeResolveTaggingSecretStrategyHook(this.taggingSecretStrategies),authorizeUtilityCall:this.authorizeAllUtilityCallTargets?authorizeAllUtilityCallsHook:void 0})}};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]))});import{createHash as createHash2}from"crypto";import{createReadStream}from"fs";import{readFile,readdir}from"fs/promises";import{join as join9,parse as parse4}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,immutablesHash}){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}=parse4(contractPath),cacheKey=`${contractDirectory??""}-${contractFilename}-${initializer3}-${args.map(arg=>arg.toString()).join("-")}-${publicKeysHash}-${salt}-${deployer}-${immutablesHash}-${fileHash}`;return this.#deployments.getOrCompute(cacheKey,()=>this.#computeDeployArtifact(artifactPath,fileHash,initializer3,args,salt,publicKeys,publicKeysHash,deployer,immutablesHash))}async#resolveArtifactPath(rootPath,packageName,contractPath){let{dir:contractDirectory,base:contractFilename}=parse4(contractPath);if(contractDirectory)if(contractDirectory.includes("@")){let[workspace,pkg]=contractDirectory.split("@"),targetPath=join9(rootPath,workspace,"/target");return this.#logger.debug(`Looking for compiled artifact in workspace ${targetPath}`),join9(targetPath,`${pkg}-${contractFilename}.json`)}else{let targetPath=join9(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 join9(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,immutablesHash){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,immutablesHash});return{artifact,instance}}#fastHashFile(path5){return new Promise(resolve4=>{let fd=createReadStream(path5),hash5=createHash2("sha1");hash5.setEncoding("hex"),fd.on("end",function(){hash5.end(),resolve4(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(join10(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{getEnv,require_inherits,jsonStringify,inspect,createLogger,ZodError,external_exports,Fr,sha256ToField,promiseWithResolvers,schemaHasMethod,getSchemaParameters,parseWithOptionals,Timer,loadContractArtifact,getContractClassFromArtifact,openEphemeralStore,LazyProtocolContractsProvider,ContractStore,getStandardAuthRegistry,getStandardHandshakeRegistry,TXE_REQUIRED_PROTOCOL_CONTRACTS,TXEDispatcher,activeSessionCount,TXEDispatcherApiSchema};