@aztec/txe 0.0.1-commit.2f68f620 → 0.0.1-commit.3100065

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.
Files changed (131) hide show
  1. package/dest/AuthRegistry-FSRZIMX6.js +3 -0
  2. package/dest/AuthRegistry-FSRZIMX6.js.map +7 -0
  3. package/dest/ContractClassRegistry-N6NA3SFA.js +3 -0
  4. package/dest/ContractClassRegistry-N6NA3SFA.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-NADDSLGL.js +3 -0
  6. package/dest/ContractInstanceRegistry-NADDSLGL.js.map +7 -0
  7. package/dest/FeeJuice-QBH5JWJV.js +3 -0
  8. package/dest/FeeJuice-QBH5JWJV.js.map +7 -0
  9. package/dest/HandshakeRegistry-KKUEU7XW.js +3 -0
  10. package/dest/HandshakeRegistry-KKUEU7XW.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-TGICA67H.js +3 -0
  12. package/dest/MultiCallEntrypoint-TGICA67H.js.map +7 -0
  13. package/dest/SchnorrAccount-J5T6OKR3.js +3 -0
  14. package/dest/SchnorrAccount-J5T6OKR3.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-OOES6Q4F.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-OOES6Q4F.js.map +7 -0
  17. package/dest/bin/index.js +1 -1
  18. package/dest/bin/oracle_test_server.js +2 -2
  19. package/dest/{chunk-W2NSX64C.js → chunk-PDOEF22H.js} +2 -2
  20. package/dest/{chunk-W2NSX64C.js.map → chunk-PDOEF22H.js.map} +3 -3
  21. package/dest/chunk-YP4ODNMQ.js +268 -0
  22. package/dest/chunk-YP4ODNMQ.js.map +7 -0
  23. package/dest/constants.d.ts +1 -1
  24. package/dest/constants.d.ts.map +1 -1
  25. package/dest/constants.js +1 -1
  26. package/dest/dispatcher_pool.d.ts +2 -2
  27. package/dest/dispatcher_pool.d.ts.map +1 -1
  28. package/dest/dispatcher_pool.js +5 -3
  29. package/dest/index.d.ts +2 -136
  30. package/dest/index.d.ts.map +1 -1
  31. package/dest/index.js +5 -3
  32. package/dest/metafile.json +10346 -7008
  33. package/dest/oracle/interfaces.d.ts +19 -10
  34. package/dest/oracle/interfaces.d.ts.map +1 -1
  35. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  36. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  37. package/dest/oracle/tagging_secret_strategy.js +12 -0
  38. package/dest/oracle/test-resolver/default_fixtures.d.ts +9 -0
  39. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  40. package/dest/oracle/test-resolver/default_fixtures.js +207 -0
  41. package/dest/oracle/test-resolver/index.d.ts +1 -1
  42. package/dest/oracle/test-resolver/index.d.ts.map +1 -1
  43. package/dest/oracle/test-resolver/index.js +1 -2
  44. package/dest/oracle/test-resolver/resolver.d.ts +21 -7
  45. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -1
  46. package/dest/oracle/test-resolver/resolver.js +100 -33
  47. package/dest/oracle/txe_oracle_public_context.d.ts +9 -9
  48. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  49. package/dest/oracle/txe_oracle_public_context.js +15 -9
  50. package/dest/oracle/txe_oracle_registry.d.ts +47 -24
  51. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -1
  52. package/dest/oracle/txe_oracle_registry.js +221 -34
  53. package/dest/oracle/txe_oracle_top_level_context.d.ts +16 -8
  54. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  55. package/dest/oracle/txe_oracle_top_level_context.js +116 -54
  56. package/dest/oracle/txe_oracle_version.d.ts +3 -3
  57. package/dest/oracle/txe_oracle_version.js +3 -3
  58. package/dest/rpc_translator.d.ts +21 -4
  59. package/dest/rpc_translator.d.ts.map +1 -1
  60. package/dest/rpc_translator.js +150 -80
  61. package/dest/server.bundle.js +1 -1
  62. package/dest/state_machine/archiver.d.ts +1 -1
  63. package/dest/state_machine/archiver.d.ts.map +1 -1
  64. package/dest/state_machine/archiver.js +1 -2
  65. package/dest/state_machine/dummy_p2p_client.d.ts +5 -2
  66. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  67. package/dest/state_machine/dummy_p2p_client.js +9 -0
  68. package/dest/state_machine/global_variable_builder.d.ts +3 -4
  69. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  70. package/dest/state_machine/global_variable_builder.js +0 -3
  71. package/dest/state_machine/index.d.ts +8 -6
  72. package/dest/state_machine/index.d.ts.map +1 -1
  73. package/dest/state_machine/index.js +41 -19
  74. package/dest/state_machine/synchronizer.d.ts +5 -2
  75. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  76. package/dest/state_machine/synchronizer.js +6 -2
  77. package/dest/txe_session.d.ts +26 -18
  78. package/dest/txe_session.d.ts.map +1 -1
  79. package/dest/txe_session.js +148 -38
  80. package/dest/utils/block_creation.d.ts +2 -2
  81. package/dest/utils/block_creation.d.ts.map +1 -1
  82. package/dest/utils/block_creation.js +2 -2
  83. package/dest/utils/encoding.d.ts +4 -3
  84. package/dest/utils/encoding.d.ts.map +1 -1
  85. package/dest/utils/tx_effect_creation.d.ts +1 -1
  86. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  87. package/dest/utils/tx_effect_creation.js +0 -1
  88. package/dest/utils/txe_public_contract_data_source.d.ts +1 -1
  89. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -1
  90. package/dest/utils/txe_public_contract_data_source.js +7 -4
  91. package/dest/worker.bundle.js +1 -1
  92. package/package.json +17 -17
  93. package/src/bin/oracle_test_server.ts +2 -2
  94. package/src/constants.ts +1 -1
  95. package/src/dispatcher_pool.ts +4 -3
  96. package/src/index.ts +6 -4
  97. package/src/oracle/interfaces.ts +21 -8
  98. package/src/oracle/tagging_secret_strategy.ts +25 -0
  99. package/src/oracle/test-resolver/default_fixtures.ts +282 -0
  100. package/src/oracle/test-resolver/index.ts +1 -2
  101. package/src/oracle/test-resolver/resolver.ts +121 -41
  102. package/src/oracle/txe_oracle_public_context.ts +16 -14
  103. package/src/oracle/txe_oracle_registry.ts +154 -16
  104. package/src/oracle/txe_oracle_top_level_context.ts +157 -55
  105. package/src/oracle/txe_oracle_version.ts +3 -3
  106. package/src/rpc_translator.ts +205 -107
  107. package/src/state_machine/archiver.ts +0 -1
  108. package/src/state_machine/dummy_p2p_client.ts +13 -0
  109. package/src/state_machine/global_variable_builder.ts +2 -16
  110. package/src/state_machine/index.ts +50 -34
  111. package/src/state_machine/synchronizer.ts +8 -2
  112. package/src/txe_session.ts +263 -42
  113. package/src/utils/block_creation.ts +2 -1
  114. package/src/utils/tx_effect_creation.ts +0 -2
  115. package/src/utils/txe_public_contract_data_source.ts +6 -4
  116. package/dest/ContractClassRegistry-PII7Q556.js +0 -3
  117. package/dest/ContractClassRegistry-PII7Q556.js.map +0 -7
  118. package/dest/ContractInstanceRegistry-3MHLGFNZ.js +0 -3
  119. package/dest/ContractInstanceRegistry-3MHLGFNZ.js.map +0 -7
  120. package/dest/FeeJuice-TQV5AQK7.js +0 -3
  121. package/dest/FeeJuice-TQV5AQK7.js.map +0 -7
  122. package/dest/MultiCallEntrypoint-SBJUIJY7.js +0 -3
  123. package/dest/MultiCallEntrypoint-SBJUIJY7.js.map +0 -7
  124. package/dest/SchnorrAccount-MQXPIZ44.js +0 -3
  125. package/dest/SchnorrAccount-MQXPIZ44.js.map +0 -7
  126. package/dest/chunk-CDITIZHX.js +0 -257
  127. package/dest/chunk-CDITIZHX.js.map +0 -7
  128. package/dest/oracle/test-resolver/fixtures.d.ts +0 -43
  129. package/dest/oracle/test-resolver/fixtures.d.ts.map +0 -1
  130. package/dest/oracle/test-resolver/fixtures.js +0 -39
  131. package/src/oracle/test-resolver/fixtures.ts +0 -84
@@ -210,6 +210,26 @@ export class RPCTranslator {
210
210
  });
211
211
  }
212
212
 
213
+ // eslint-disable-next-line camelcase
214
+ aztec_txe_sendL1ToL2Message(...inputs: ForeignCallArgs) {
215
+ return callTxeHandler({
216
+ oracle: 'aztec_txe_sendL1ToL2Message',
217
+ inputs,
218
+ handler: ([content, secretHash, sender, recipient]) =>
219
+ this.handlerAsTxe().sendL1ToL2Message(content, secretHash, sender, recipient),
220
+ });
221
+ }
222
+
223
+ // eslint-disable-next-line camelcase
224
+ aztec_txe_setTaggingSecretStrategies(...inputs: ForeignCallArgs) {
225
+ return callTxeHandler({
226
+ oracle: 'aztec_txe_setTaggingSecretStrategies',
227
+ inputs,
228
+ handler: ([unconstrainedStrategy, constrainedStrategy]) =>
229
+ this.handlerAsTxe().setTaggingSecretStrategies(unconstrainedStrategy, constrainedStrategy),
230
+ });
231
+ }
232
+
213
233
  // PXE oracles
214
234
 
215
235
  // eslint-disable-next-line camelcase
@@ -271,20 +291,8 @@ export class RPCTranslator {
271
291
  return callTxeHandler({
272
292
  oracle: 'aztec_txe_getPrivateEvents',
273
293
  inputs,
274
- handler: async ([selector, contractAddress, scope]) => {
275
- // TODO(F-335): Avoid doing the following 2 calls here.
276
- {
277
- await this.handlerAsTxe().syncContractNonOracleMethod(
278
- contractAddress,
279
- scope,
280
- this.stateHandler.getCurrentJob(),
281
- );
282
- // We cycle job to commit the stores after the contract sync.
283
- await this.stateHandler.cycleJob();
284
- }
285
-
286
- return this.handlerAsTxe().getPrivateEvents(selector, contractAddress, scope);
287
- },
294
+ handler: ([selector, contractAddress, scope]) =>
295
+ this.stateHandler.getPrivateEvents(selector, contractAddress, scope),
288
296
  });
289
297
  }
290
298
 
@@ -451,7 +459,7 @@ export class RPCTranslator {
451
459
  return callTxeHandler({
452
460
  oracle: 'aztec_utl_getKeyValidationRequest',
453
461
  inputs,
454
- handler: ([pkMHash]) => this.handlerAsUtility().getKeyValidationRequest(pkMHash),
462
+ handler: ([pkMHash, keyIndex]) => this.handlerAsUtility().getKeyValidationRequest(pkMHash, keyIndex),
455
463
  });
456
464
  }
457
465
 
@@ -480,6 +488,16 @@ export class RPCTranslator {
480
488
  });
481
489
  }
482
490
 
491
+ // eslint-disable-next-line camelcase
492
+ aztec_utl_getL1ToL2MembershipWitnessV2(...inputs: ForeignCallArgs) {
493
+ return callTxeHandler({
494
+ oracle: 'aztec_utl_getL1ToL2MembershipWitnessV2',
495
+ inputs,
496
+ handler: ([messageHash, nullifier]) =>
497
+ this.handlerAsUtility().getL1ToL2MembershipWitnessV2(messageHash, nullifier),
498
+ });
499
+ }
500
+
483
501
  // eslint-disable-next-line camelcase
484
502
  aztec_utl_getAuthWitness(...inputs: ForeignCallArgs) {
485
503
  return callTxeHandler({
@@ -554,6 +572,16 @@ export class RPCTranslator {
554
572
  });
555
573
  }
556
574
 
575
+ // eslint-disable-next-line camelcase
576
+ aztec_utl_areBlockHashesInArchive(...inputs: ForeignCallArgs) {
577
+ return callTxeHandler({
578
+ oracle: 'aztec_utl_areBlockHashesInArchive',
579
+ inputs,
580
+ handler: ([anchorBlockHash, blockHashes]) =>
581
+ this.handlerAsUtility().areBlockHashesInArchive(anchorBlockHash, blockHashes),
582
+ });
583
+ }
584
+
557
585
  // eslint-disable-next-line camelcase
558
586
  aztec_utl_getLowNullifierMembershipWitness(...inputs: ForeignCallArgs) {
559
587
  return callTxeHandler({
@@ -565,11 +593,11 @@ export class RPCTranslator {
565
593
  }
566
594
 
567
595
  // eslint-disable-next-line camelcase
568
- aztec_utl_getPendingTaggedLogs(...inputs: ForeignCallArgs) {
596
+ aztec_utl_getPendingTaggedLogsV2(...inputs: ForeignCallArgs) {
569
597
  return callTxeHandler({
570
- oracle: 'aztec_utl_getPendingTaggedLogs',
598
+ oracle: 'aztec_utl_getPendingTaggedLogsV2',
571
599
  inputs,
572
- handler: ([scope, providedSecrets]) => this.handlerAsUtility().getPendingTaggedLogs(scope, providedSecrets),
600
+ handler: ([scope, providedSecrets]) => this.handlerAsUtility().getPendingTaggedLogsV2(scope, providedSecrets),
573
601
  });
574
602
  }
575
603
 
@@ -588,20 +616,20 @@ export class RPCTranslator {
588
616
  }
589
617
 
590
618
  // eslint-disable-next-line camelcase
591
- aztec_utl_getLogsByTag(...inputs: ForeignCallArgs) {
619
+ aztec_utl_getLogsByTagV2(...inputs: ForeignCallArgs) {
592
620
  return callTxeHandler({
593
- oracle: 'aztec_utl_getLogsByTag',
621
+ oracle: 'aztec_utl_getLogsByTagV2',
594
622
  inputs,
595
- handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getLogsByTag(requestArrayBaseSlot),
623
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot),
596
624
  });
597
625
  }
598
626
 
599
627
  // eslint-disable-next-line camelcase
600
- aztec_utl_getMessageContextsByTxHash(...inputs: ForeignCallArgs) {
628
+ aztec_utl_getResolvedTxs(...inputs: ForeignCallArgs) {
601
629
  return callTxeHandler({
602
- oracle: 'aztec_utl_getMessageContextsByTxHash',
630
+ oracle: 'aztec_utl_getResolvedTxs',
603
631
  inputs,
604
- handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getMessageContextsByTxHash(requestArrayBaseSlot),
632
+ handler: ([requestArrayBaseSlot]) => this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot),
605
633
  });
606
634
  }
607
635
 
@@ -707,6 +735,69 @@ export class RPCTranslator {
707
735
  });
708
736
  }
709
737
 
738
+ // eslint-disable-next-line camelcase
739
+ aztec_utl_pushTransient(...inputs: ForeignCallArgs) {
740
+ return callTxeHandler({
741
+ oracle: 'aztec_utl_pushTransient',
742
+ inputs,
743
+ handler: ([slot, elements]) => this.handlerAsUtility().pushTransient(slot, elements),
744
+ });
745
+ }
746
+
747
+ // eslint-disable-next-line camelcase
748
+ aztec_utl_popTransient(...inputs: ForeignCallArgs) {
749
+ return callTxeHandler({
750
+ oracle: 'aztec_utl_popTransient',
751
+ inputs,
752
+ handler: ([slot]) => this.handlerAsUtility().popTransient(slot),
753
+ });
754
+ }
755
+
756
+ // eslint-disable-next-line camelcase
757
+ aztec_utl_getTransient(...inputs: ForeignCallArgs) {
758
+ return callTxeHandler({
759
+ oracle: 'aztec_utl_getTransient',
760
+ inputs,
761
+ handler: ([slot, index]) => this.handlerAsUtility().getTransient(slot, index),
762
+ });
763
+ }
764
+
765
+ // eslint-disable-next-line camelcase
766
+ aztec_utl_setTransient(...inputs: ForeignCallArgs) {
767
+ return callTxeHandler({
768
+ oracle: 'aztec_utl_setTransient',
769
+ inputs,
770
+ handler: ([slot, index, elements]) => this.handlerAsUtility().setTransient(slot, index, elements),
771
+ });
772
+ }
773
+
774
+ // eslint-disable-next-line camelcase
775
+ aztec_utl_getTransientLen(...inputs: ForeignCallArgs) {
776
+ return callTxeHandler({
777
+ oracle: 'aztec_utl_getTransientLen',
778
+ inputs,
779
+ handler: ([slot]) => this.handlerAsUtility().getTransientLen(slot),
780
+ });
781
+ }
782
+
783
+ // eslint-disable-next-line camelcase
784
+ aztec_utl_removeTransient(...inputs: ForeignCallArgs) {
785
+ return callTxeHandler({
786
+ oracle: 'aztec_utl_removeTransient',
787
+ inputs,
788
+ handler: ([slot, index]) => this.handlerAsUtility().removeTransient(slot, index),
789
+ });
790
+ }
791
+
792
+ // eslint-disable-next-line camelcase
793
+ aztec_utl_clearTransient(...inputs: ForeignCallArgs) {
794
+ return callTxeHandler({
795
+ oracle: 'aztec_utl_clearTransient',
796
+ inputs,
797
+ handler: ([slot]) => this.handlerAsUtility().clearTransient(slot),
798
+ });
799
+ }
800
+
710
801
  // TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
711
802
  // The compiler didn't throw an error, so it took me a while to learn of the existence of this file, and that I need
712
803
  // to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
@@ -755,6 +846,54 @@ export class RPCTranslator {
755
846
  });
756
847
  }
757
848
 
849
+ // eslint-disable-next-line camelcase
850
+ aztec_utl_recordFact(...inputs: ForeignCallArgs) {
851
+ return callTxeHandler({
852
+ oracle: 'aztec_utl_recordFact',
853
+ inputs,
854
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock]) =>
855
+ this.handlerAsUtility().recordFact(
856
+ contractAddress,
857
+ scope,
858
+ factCollectionTypeId,
859
+ factCollectionId,
860
+ factTypeId,
861
+ payload,
862
+ originBlock,
863
+ ),
864
+ });
865
+ }
866
+
867
+ // eslint-disable-next-line camelcase
868
+ aztec_utl_deleteFactCollection(...inputs: ForeignCallArgs) {
869
+ return callTxeHandler({
870
+ oracle: 'aztec_utl_deleteFactCollection',
871
+ inputs,
872
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId]) =>
873
+ this.handlerAsUtility().deleteFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId),
874
+ });
875
+ }
876
+
877
+ // eslint-disable-next-line camelcase
878
+ aztec_utl_getFactCollection(...inputs: ForeignCallArgs) {
879
+ return callTxeHandler({
880
+ oracle: 'aztec_utl_getFactCollection',
881
+ inputs,
882
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId]) =>
883
+ this.handlerAsUtility().getFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId),
884
+ });
885
+ }
886
+
887
+ // eslint-disable-next-line camelcase
888
+ aztec_utl_getFactCollectionsByType(...inputs: ForeignCallArgs) {
889
+ return callTxeHandler({
890
+ oracle: 'aztec_utl_getFactCollectionsByType',
891
+ inputs,
892
+ handler: ([contractAddress, scope, factCollectionTypeId]) =>
893
+ this.handlerAsUtility().getFactCollectionsByType(contractAddress, scope, factCollectionTypeId),
894
+ });
895
+ }
896
+
758
897
  // AVM opcodes
759
898
 
760
899
  // eslint-disable-next-line camelcase
@@ -958,13 +1097,12 @@ export class RPCTranslator {
958
1097
  });
959
1098
  }
960
1099
 
961
- // TODO(F-674): Move orchestration logic into the handler so the transport layer is pure serialize->delegate->deserialize.
962
1100
  // eslint-disable-next-line camelcase
963
1101
  aztec_txe_privateCallNewFlow(...inputs: ForeignCallArgs) {
964
1102
  return callTxeHandler({
965
1103
  oracle: 'aztec_txe_privateCallNewFlow',
966
1104
  inputs,
967
- handler: async ([
1105
+ handler: ([
968
1106
  from,
969
1107
  targetContractAddress,
970
1108
  functionSelector,
@@ -974,103 +1112,44 @@ export class RPCTranslator {
974
1112
  additionalScopes,
975
1113
  authorizedUtilityCallTargets,
976
1114
  gasSettings,
977
- ]) => {
978
- const returnValues = await this.stateHandler.withTopLevelCallTracking(async () => {
979
- const { returnValues, offchainEffects } = await this.handlerAsTxe().privateCallNewFlow(
980
- from?.value,
981
- targetContractAddress,
982
- functionSelector,
983
- args,
984
- argsHash,
985
- isStaticCall,
986
- additionalScopes,
987
- this.stateHandler.getCurrentJob(),
988
- authorizedUtilityCallTargets,
989
- gasSettings,
990
- );
991
-
992
- // Private execution collects offchain effects inside PXE's PrivateExecutionOracle rather than
993
- // round-tripping them through `aztec_utl_emitOffchainEffect`, so the session buffer is empty
994
- // at this point. Drain the effects from the execution tree into the session buffer so the
995
- // next `env.offchain_messages()` call in the test sees them.
996
- for (const data of offchainEffects) {
997
- this.stateHandler.recordOffchainEffect(data);
998
- }
999
-
1000
- // TODO(F-335): Avoid doing the following call here.
1001
- await this.stateHandler.cycleJob();
1002
-
1003
- if (isStaticCall) {
1004
- // Static calls revert their checkpoint and mine no block, so there is no tx hash to tag
1005
- // offchain effects with. Querying `getLastTxEffects()` here would return an unrelated
1006
- // predecessor tx.
1007
- return { result: returnValues };
1008
- }
1009
- const { txHash } = await this.handlerAsTxe().getLastTxEffects();
1010
- return { result: returnValues, txHash: txHash.hash };
1011
- });
1012
-
1013
- return returnValues;
1014
- },
1115
+ ]) =>
1116
+ this.stateHandler.executePrivateCall(
1117
+ from,
1118
+ targetContractAddress,
1119
+ functionSelector,
1120
+ args,
1121
+ argsHash,
1122
+ isStaticCall,
1123
+ additionalScopes,
1124
+ authorizedUtilityCallTargets,
1125
+ gasSettings,
1126
+ ),
1015
1127
  });
1016
1128
  }
1017
1129
 
1018
- // TODO(F-674): Move orchestration logic into the handler so the transport layer is pure serialize->delegate->deserialize.
1019
1130
  // eslint-disable-next-line camelcase
1020
1131
  aztec_txe_executeUtilityFunction(...inputs: ForeignCallArgs) {
1021
1132
  return callTxeHandler({
1022
1133
  oracle: 'aztec_txe_executeUtilityFunction',
1023
1134
  inputs,
1024
- handler: async ([targetContractAddress, functionSelector, args, authorizedUtilityCallTargets]) => {
1025
- const returnValues = await this.stateHandler.withTopLevelCallTracking(async () => {
1026
- const returnValues = await this.handlerAsTxe().executeUtilityFunction(
1027
- targetContractAddress,
1028
- functionSelector,
1029
- args,
1030
- this.stateHandler.getCurrentJob(),
1031
- authorizedUtilityCallTargets,
1032
- );
1033
-
1034
- // TODO(F-335): Avoid doing the following call here.
1035
- await this.stateHandler.cycleJob();
1036
-
1037
- return { result: returnValues };
1038
- });
1039
-
1040
- return returnValues;
1041
- },
1135
+ handler: ([from, targetContractAddress, functionSelector, args, authorizedUtilityCallTargets]) =>
1136
+ this.stateHandler.executeUtilityFunction(
1137
+ from,
1138
+ targetContractAddress,
1139
+ functionSelector,
1140
+ args,
1141
+ authorizedUtilityCallTargets,
1142
+ ),
1042
1143
  });
1043
1144
  }
1044
1145
 
1045
- // TODO(F-674): Move orchestration logic into the handler so the transport layer is pure serialize->delegate->deserialize.
1046
1146
  // eslint-disable-next-line camelcase
1047
1147
  aztec_txe_publicCallNewFlow(...inputs: ForeignCallArgs) {
1048
1148
  return callTxeHandler({
1049
1149
  oracle: 'aztec_txe_publicCallNewFlow',
1050
1150
  inputs,
1051
- handler: async ([from, address, calldata, isStaticCall, gasSettings]) => {
1052
- const returnValues = await this.stateHandler.withTopLevelCallTracking(async () => {
1053
- const returnValues = await this.handlerAsTxe().publicCallNewFlow(
1054
- from?.value,
1055
- address,
1056
- calldata,
1057
- isStaticCall,
1058
- gasSettings,
1059
- );
1060
-
1061
- // TODO(F-335): Avoid doing the following call here.
1062
- await this.stateHandler.cycleJob();
1063
-
1064
- if (isStaticCall) {
1065
- // See equivalent branch in `aztec_txe_privateCallNewFlow`.
1066
- return { result: returnValues };
1067
- }
1068
- const { txHash } = await this.handlerAsTxe().getLastTxEffects();
1069
- return { result: returnValues, txHash: txHash.hash };
1070
- });
1071
-
1072
- return returnValues;
1073
- },
1151
+ handler: ([from, address, calldata, isStaticCall, gasSettings]) =>
1152
+ this.stateHandler.executePublicCall(from, address, calldata, isStaticCall, gasSettings),
1074
1153
  });
1075
1154
  }
1076
1155
 
@@ -1083,6 +1162,25 @@ export class RPCTranslator {
1083
1162
  });
1084
1163
  }
1085
1164
 
1165
+ // eslint-disable-next-line camelcase
1166
+ aztec_prv_resolveTaggingStrategy(...inputs: ForeignCallArgs) {
1167
+ return callTxeHandler({
1168
+ oracle: 'aztec_prv_resolveTaggingStrategy',
1169
+ inputs,
1170
+ handler: ([sender, recipient, deliveryMode]) =>
1171
+ this.handlerAsPrivate().resolveTaggingStrategy(sender, recipient, deliveryMode),
1172
+ });
1173
+ }
1174
+
1175
+ // eslint-disable-next-line camelcase
1176
+ aztec_prv_resolveCustomRequest(...inputs: ForeignCallArgs) {
1177
+ return callTxeHandler({
1178
+ oracle: 'aztec_prv_resolveCustomRequest',
1179
+ inputs,
1180
+ handler: ([kind, payload]) => this.handlerAsPrivate().resolveCustomRequest(kind, payload),
1181
+ });
1182
+ }
1183
+
1086
1184
  // eslint-disable-next-line camelcase
1087
1185
  aztec_prv_getAppTaggingSecret(...inputs: ForeignCallArgs) {
1088
1186
  return callTxeHandler({
@@ -92,7 +92,6 @@ export class TXEArchiver extends ArchiverDataSourceBase {
92
92
  proven: tipId,
93
93
  finalized: tipId,
94
94
  checkpointed: tipId,
95
- proposedCheckpoint: tipId,
96
95
  };
97
96
  }
98
97
 
@@ -9,6 +9,7 @@ import type {
9
9
  P2PConfig,
10
10
  P2PDuplicateAttestationCallback,
11
11
  P2PDuplicateProposalCallback,
12
+ P2POversizedProposalCallback,
12
13
  P2PSyncState,
13
14
  PeerId,
14
15
  ReqRespSubProtocol,
@@ -121,6 +122,10 @@ export class DummyP2P implements P2P {
121
122
  throw new Error('DummyP2P does not implement "getPendingTxCount"');
122
123
  }
123
124
 
125
+ public hasEligiblePendingTxs(_minCount: number): Promise<boolean> {
126
+ throw new Error('DummyP2P does not implement "hasEligiblePendingTxs"');
127
+ }
128
+
124
129
  public start(): Promise<void> {
125
130
  throw new Error('DummyP2P does not implement "start"');
126
131
  }
@@ -171,6 +176,10 @@ export class DummyP2P implements P2P {
171
176
  return Promise.resolve({ blockProposals: [], checkpointProposals: [] });
172
177
  }
173
178
 
179
+ public hasCheckpointProposalForSlot(_slot: SlotNumber): Promise<boolean> {
180
+ return Promise.resolve(false);
181
+ }
182
+
174
183
  public getL2BlockHash(_number: number): Promise<string | undefined> {
175
184
  throw new Error('DummyP2P does not implement "getL2BlockHash"');
176
185
  }
@@ -233,6 +242,10 @@ export class DummyP2P implements P2P {
233
242
  throw new Error('DummyP2P does not implement "registerDuplicateProposalCallback"');
234
243
  }
235
244
 
245
+ public registerOversizedProposalCallback(_callback: P2POversizedProposalCallback): void {
246
+ throw new Error('DummyP2P does not implement "registerOversizedProposalCallback"');
247
+ }
248
+
236
249
  public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {
237
250
  throw new Error('DummyP2P does not implement "registerDuplicateAttestationCallback"');
238
251
  }
@@ -1,16 +1,11 @@
1
1
  import type { SimulationOverridesPlan } from '@aztec/ethereum/contracts';
2
- import { BlockNumber, type SlotNumber } from '@aztec/foundation/branded-types';
2
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
3
3
  import { times } from '@aztec/foundation/collection';
4
4
  import type { EthAddress } from '@aztec/foundation/eth-address';
5
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
6
  import { FEE_ORACLE_LAG, GasFees } from '@aztec/stdlib/gas';
7
7
  import { makeGlobalVariables } from '@aztec/stdlib/testing';
8
- import {
9
- type CheckpointGlobalVariables,
10
- type FeeProvider,
11
- type GlobalVariableBuilder,
12
- GlobalVariables,
13
- } from '@aztec/stdlib/tx';
8
+ import type { CheckpointGlobalVariables, FeeProvider, GlobalVariableBuilder } from '@aztec/stdlib/tx';
14
9
 
15
10
  /** Simple FeeProvider for TXE that returns zero fees. */
16
11
  export class TXEFeeProvider implements FeeProvider {
@@ -24,15 +19,6 @@ export class TXEFeeProvider implements FeeProvider {
24
19
  }
25
20
 
26
21
  export class TXEGlobalVariablesBuilder implements GlobalVariableBuilder {
27
- public buildGlobalVariables(
28
- _blockNumber: BlockNumber,
29
- _coinbase: EthAddress,
30
- _feeRecipient: AztecAddress,
31
- _slotNumber?: SlotNumber,
32
- ): Promise<GlobalVariables> {
33
- return Promise.resolve(makeGlobalVariables());
34
- }
35
-
36
22
  public buildCheckpointGlobalVariables(
37
23
  _coinbase: EthAddress,
38
24
  _feeRecipient: AztecAddress,
@@ -3,8 +3,14 @@ import { TestCircuitVerifier } from '@aztec/bb-prover/test';
3
3
  import { CheckpointNumber } from '@aztec/foundation/branded-types';
4
4
  import { Fr } from '@aztec/foundation/curves/bn254';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
- import { type AnchorBlockStore, type ContractStore, ContractSyncService, type NoteStore } from '@aztec/pxe/server';
7
- import { MessageContextService } from '@aztec/pxe/simulator';
6
+ import {
7
+ type AnchorBlockStore,
8
+ ContractClassService,
9
+ type ContractStore,
10
+ ContractSyncService,
11
+ type NoteStore,
12
+ } from '@aztec/pxe/server';
13
+ import { TxResolverService } from '@aztec/pxe/simulator';
8
14
  import { L2Block, type L2TipsProvider } from '@aztec/stdlib/block';
9
15
  import { Checkpoint, L1PublishedData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
10
16
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
@@ -29,7 +35,8 @@ export class TXEStateMachine {
29
35
  public archiver: TXEArchiver,
30
36
  public anchorBlockStore: AnchorBlockStore,
31
37
  public contractSyncService: ContractSyncService,
32
- public messageContextService: MessageContextService,
38
+ public contractClassService: ContractClassService,
39
+ public txResolver: TxResolverService,
33
40
  ) {}
34
41
 
35
42
  public static async create(
@@ -42,55 +49,63 @@ export class TXEStateMachine {
42
49
  const aztecNodeConfig = {} as AztecNodeConfig;
43
50
 
44
51
  const log = createLogger('txe_node');
45
- const node = new AztecNodeService(
46
- aztecNodeConfig,
47
- new DummyP2P(),
48
- archiver,
49
- archiver,
50
- archiver,
51
- archiver,
52
- synchronizer,
53
- undefined,
54
- undefined,
55
- undefined,
56
- undefined,
57
- async () => {},
58
- VERSION,
59
- CHAIN_ID,
60
- new TXEGlobalVariablesBuilder(),
61
- new TXEFeeProvider(),
62
- new MockEpochCache(),
63
- PACKAGE_VERSION,
64
- new TestCircuitVerifier(),
65
- new TestCircuitVerifier(),
66
- undefined,
52
+ const node = new AztecNodeService({
53
+ config: aztecNodeConfig,
54
+ p2pClient: new DummyP2P(),
55
+ blockSource: archiver,
56
+ logsSource: archiver,
57
+ contractDataSource: archiver,
58
+ l1ToL2MessageSource: archiver,
59
+ worldStateSynchronizer: synchronizer,
60
+ sequencer: undefined,
61
+ proverNode: undefined,
62
+ slasherClient: undefined,
63
+ validatorsSentinel: undefined,
64
+ stopStartedWatchers: async () => {},
65
+ l1ChainId: CHAIN_ID,
66
+ version: VERSION,
67
+ globalVariableBuilder: new TXEGlobalVariablesBuilder(),
68
+ rollupContract: undefined,
69
+ feeProvider: new TXEFeeProvider(),
70
+ epochCache: new MockEpochCache(),
71
+ packageVersion: PACKAGE_VERSION,
72
+ peerProofVerifier: new TestCircuitVerifier(),
73
+ rpcProofVerifier: new TestCircuitVerifier(),
74
+ telemetry: undefined,
67
75
  log,
68
- );
76
+ });
69
77
 
78
+ const contractClassService = new ContractClassService(node, contractStore);
70
79
  const contractSyncService = new ContractSyncService(
71
80
  node,
72
81
  contractStore,
82
+ contractClassService,
73
83
  noteStore,
74
84
  createLogger('txe:contract_sync'),
75
85
  );
76
86
 
77
- const messageContextService = new MessageContextService(node);
87
+ const txResolver = new TxResolverService(node);
78
88
 
79
- return new this(node, synchronizer, archiver, anchorBlockStore, contractSyncService, messageContextService);
89
+ return new this(
90
+ node,
91
+ synchronizer,
92
+ archiver,
93
+ anchorBlockStore,
94
+ contractSyncService,
95
+ contractClassService,
96
+ txResolver,
97
+ );
80
98
  }
81
99
 
82
100
  /** Returns an {@link L2TipsProvider} backed by this node's chain tips. */
83
101
  public get l2TipsProvider(): L2TipsProvider {
84
102
  const node = this.node;
85
103
  return {
86
- getL2Tips: async () => {
87
- const tips = await node.getChainTips();
88
- return { ...tips, proposedCheckpoint: tips.checkpointed };
89
- },
104
+ getL2Tips: () => node.getChainTips(),
90
105
  };
91
106
  }
92
107
 
93
- public async handleL2Block(block: L2Block) {
108
+ public async handleL2Block(block: L2Block, l1ToL2Messages: Fr[] = []) {
94
109
  // Create a checkpoint from the block manually.
95
110
  // TXE uses 1-block-per-checkpoint for testing simplicity, so we can use block number as checkpoint number.
96
111
  // This uses the deprecated fromBlockNumber method intentionally for the TXE testing environment.
@@ -109,6 +124,7 @@ export class TXEStateMachine {
109
124
  feeRecipient: block.header.globalVariables.feeRecipient,
110
125
  gasFees: block.header.globalVariables.gasFees,
111
126
  totalManaUsed: block.header.totalManaUsed,
127
+ accumulatedFees: block.header.totalFees,
112
128
  }),
113
129
  [block],
114
130
  checkpointNumber,
@@ -127,7 +143,7 @@ export class TXEStateMachine {
127
143
  this.contractSyncService.wipe();
128
144
 
129
145
  await Promise.all([
130
- this.synchronizer.handleL2Block(block),
146
+ this.synchronizer.handleL2Block(block, l1ToL2Messages),
131
147
  this.archiver.addCheckpoints([publishedCheckpoint], undefined),
132
148
  this.anchorBlockStore.setHeader(block.header),
133
149
  ]);
@@ -1,5 +1,6 @@
1
1
  import { NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP } from '@aztec/constants';
2
2
  import { BlockNumber } from '@aztec/foundation/branded-types';
3
+ import { padArrayEnd } from '@aztec/foundation/collection';
3
4
  import { Fr } from '@aztec/foundation/curves/bn254';
4
5
  import type { BlockHash, L2Block } from '@aztec/stdlib/block';
5
6
  import type {
@@ -23,10 +24,10 @@ export class TXESynchronizer implements WorldStateSynchronizer {
23
24
  return new this(nativeWorldStateService);
24
25
  }
25
26
 
26
- public async handleL2Block(block: L2Block) {
27
+ public async handleL2Block(block: L2Block, l1ToL2Messages: Fr[] = []) {
27
28
  await this.nativeWorldStateService.handleL2BlockAndMessages(
28
29
  block,
29
- Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(0).map(Fr.zero),
30
+ padArrayEnd<Fr, number>(l1ToL2Messages, Fr.ZERO, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP),
30
31
  );
31
32
 
32
33
  this.blockNumber = block.header.globalVariables.blockNumber;
@@ -57,6 +58,11 @@ export class TXESynchronizer implements WorldStateSynchronizer {
57
58
  return this.nativeWorldStateService.getSnapshot(BlockNumber(blockNumber));
58
59
  }
59
60
 
61
+ /** Gets a snapshot at the given block number. The TXE has no reorgs, so the fork hash is not verified. */
62
+ public getVerifiedSnapshot(blockNumber: number, _blockHash: BlockHash): Promise<MerkleTreeReadOperations> {
63
+ return Promise.resolve(this.getSnapshot(blockNumber));
64
+ }
65
+
60
66
  /** Backups the db to the target path. */
61
67
  public backupTo(dstPath: string, compact?: boolean): Promise<Record<Exclude<SnapshotDataKeys, 'archiver'>, string>> {
62
68
  return this.nativeWorldStateService.backupTo(dstPath, compact);