@aztec/txe 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0

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 (174) hide show
  1. package/dest/AuthRegistry-QVGDDH5X.js +3 -0
  2. package/dest/AuthRegistry-QVGDDH5X.js.map +7 -0
  3. package/dest/ContractClassRegistry-VWR3F42P.js +3 -0
  4. package/dest/ContractClassRegistry-VWR3F42P.js.map +7 -0
  5. package/dest/ContractInstanceRegistry-FHIWE33X.js +3 -0
  6. package/dest/ContractInstanceRegistry-FHIWE33X.js.map +7 -0
  7. package/dest/FeeJuice-SAOWVGG7.js +3 -0
  8. package/dest/FeeJuice-SAOWVGG7.js.map +7 -0
  9. package/dest/HandshakeRegistry-GY5CPEPS.js +3 -0
  10. package/dest/HandshakeRegistry-GY5CPEPS.js.map +7 -0
  11. package/dest/MultiCallEntrypoint-QG5H33ZZ.js +3 -0
  12. package/dest/MultiCallEntrypoint-QG5H33ZZ.js.map +7 -0
  13. package/dest/SchnorrAccount-NME3E45O.js +3 -0
  14. package/dest/SchnorrAccount-NME3E45O.js.map +7 -0
  15. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js +3 -0
  16. package/dest/SchnorrInitializerlessAccount-WTGXU6SW.js.map +7 -0
  17. package/dest/bin/check_txe_oracle_version.d.ts +2 -0
  18. package/dest/bin/check_txe_oracle_version.d.ts.map +1 -0
  19. package/dest/bin/check_txe_oracle_version.js +53 -0
  20. package/dest/bin/index.js +3 -30
  21. package/dest/bin/index.js.map +7 -0
  22. package/dest/bin/oracle_test_server.d.ts +3 -0
  23. package/dest/bin/oracle_test_server.d.ts.map +1 -0
  24. package/dest/bin/oracle_test_server.js +41 -0
  25. package/dest/chunk-32UHX7YY.js +3 -0
  26. package/dest/chunk-32UHX7YY.js.map +7 -0
  27. package/dest/chunk-GSUKUCKV.js +260 -0
  28. package/dest/chunk-GSUKUCKV.js.map +7 -0
  29. package/dest/chunk-UP4KKUVA.js +304 -0
  30. package/dest/chunk-UP4KKUVA.js.map +7 -0
  31. package/dest/constants.d.ts +5 -1
  32. package/dest/constants.d.ts.map +1 -1
  33. package/dest/constants.js +9 -1
  34. package/dest/dispatcher_pool.d.ts +67 -0
  35. package/dest/dispatcher_pool.d.ts.map +1 -0
  36. package/dest/dispatcher_pool.js +286 -0
  37. package/dest/index.d.ts +51 -7
  38. package/dest/index.d.ts.map +1 -1
  39. package/dest/index.js +73 -157
  40. package/dest/metafile.json +38759 -0
  41. package/dest/msgpackr_fr_extension.d.ts +2 -0
  42. package/dest/msgpackr_fr_extension.d.ts.map +1 -0
  43. package/dest/msgpackr_fr_extension.js +21 -0
  44. package/dest/oracle/interfaces.d.ts +69 -30
  45. package/dest/oracle/interfaces.d.ts.map +1 -1
  46. package/dest/oracle/tagging_secret_strategy.d.ts +12 -0
  47. package/dest/oracle/tagging_secret_strategy.d.ts.map +1 -0
  48. package/dest/oracle/tagging_secret_strategy.js +12 -0
  49. package/dest/oracle/test-resolver/default_fixtures.d.ts +16 -0
  50. package/dest/oracle/test-resolver/default_fixtures.d.ts.map +1 -0
  51. package/dest/oracle/test-resolver/default_fixtures.js +200 -0
  52. package/dest/oracle/test-resolver/index.d.ts +9 -0
  53. package/dest/oracle/test-resolver/index.d.ts.map +1 -0
  54. package/dest/oracle/test-resolver/index.js +32 -0
  55. package/dest/oracle/test-resolver/resolver.d.ts +48 -0
  56. package/dest/oracle/test-resolver/resolver.d.ts.map +1 -0
  57. package/dest/oracle/test-resolver/resolver.js +181 -0
  58. package/dest/oracle/txe_oracle_public_context.d.ts +40 -16
  59. package/dest/oracle/txe_oracle_public_context.d.ts.map +1 -1
  60. package/dest/oracle/txe_oracle_public_context.js +65 -17
  61. package/dest/oracle/txe_oracle_registry.d.ts +172 -0
  62. package/dest/oracle/txe_oracle_registry.d.ts.map +1 -0
  63. package/dest/oracle/txe_oracle_registry.js +767 -0
  64. package/dest/oracle/txe_oracle_top_level_context.d.ts +69 -29
  65. package/dest/oracle/txe_oracle_top_level_context.d.ts.map +1 -1
  66. package/dest/oracle/txe_oracle_top_level_context.js +608 -277
  67. package/dest/oracle/txe_oracle_version.d.ts +17 -0
  68. package/dest/oracle/txe_oracle_version.d.ts.map +1 -0
  69. package/dest/oracle/txe_oracle_version.js +14 -0
  70. package/dest/oracle/txe_private_execution_oracle.d.ts +17 -0
  71. package/dest/oracle/txe_private_execution_oracle.d.ts.map +1 -0
  72. package/dest/oracle/txe_private_execution_oracle.js +15 -0
  73. package/dest/rpc_server.d.ts +14 -0
  74. package/dest/rpc_server.d.ts.map +1 -0
  75. package/dest/rpc_server.js +78 -0
  76. package/dest/rpc_translator.d.ts +115 -222
  77. package/dest/rpc_translator.d.ts.map +1 -1
  78. package/dest/rpc_translator.js +901 -600
  79. package/dest/server.bundle.js +3 -0
  80. package/dest/server.bundle.js.map +7 -0
  81. package/dest/state_machine/archiver.d.ts +7 -6
  82. package/dest/state_machine/archiver.d.ts.map +1 -1
  83. package/dest/state_machine/archiver.js +31 -22
  84. package/dest/state_machine/dummy_p2p_client.d.ts +29 -16
  85. package/dest/state_machine/dummy_p2p_client.d.ts.map +1 -1
  86. package/dest/state_machine/dummy_p2p_client.js +53 -20
  87. package/dest/state_machine/global_variable_builder.d.ts +10 -6
  88. package/dest/state_machine/global_variable_builder.d.ts.map +1 -1
  89. package/dest/state_machine/global_variable_builder.js +8 -5
  90. package/dest/state_machine/index.d.ts +13 -7
  91. package/dest/state_machine/index.d.ts.map +1 -1
  92. package/dest/state_machine/index.js +75 -21
  93. package/dest/state_machine/mock_epoch_cache.d.ts +21 -4
  94. package/dest/state_machine/mock_epoch_cache.d.ts.map +1 -1
  95. package/dest/state_machine/mock_epoch_cache.js +35 -3
  96. package/dest/state_machine/synchronizer.d.ts +14 -6
  97. package/dest/state_machine/synchronizer.d.ts.map +1 -1
  98. package/dest/state_machine/synchronizer.js +22 -9
  99. package/dest/txe_session.d.ts +90 -16
  100. package/dest/txe_session.d.ts.map +1 -1
  101. package/dest/txe_session.js +381 -59
  102. package/dest/utils/block_creation.d.ts +6 -6
  103. package/dest/utils/block_creation.d.ts.map +1 -1
  104. package/dest/utils/block_creation.js +9 -7
  105. package/dest/utils/encoding.d.ts +192 -0
  106. package/dest/utils/encoding.d.ts.map +1 -0
  107. package/dest/{util → utils}/encoding.js +7 -2
  108. package/dest/{util → utils}/expected_failure_error.d.ts +1 -1
  109. package/dest/utils/expected_failure_error.d.ts.map +1 -0
  110. package/dest/utils/tx_effect_creation.d.ts +1 -1
  111. package/dest/utils/tx_effect_creation.d.ts.map +1 -1
  112. package/dest/utils/tx_effect_creation.js +0 -1
  113. package/dest/{util → utils}/txe_account_store.d.ts +1 -1
  114. package/dest/utils/txe_account_store.d.ts.map +1 -0
  115. package/dest/utils/txe_artifact_resolver.d.ts +37 -0
  116. package/dest/utils/txe_artifact_resolver.d.ts.map +1 -0
  117. package/dest/utils/txe_artifact_resolver.js +161 -0
  118. package/dest/utils/txe_public_contract_data_source.d.ts +20 -0
  119. package/dest/utils/txe_public_contract_data_source.d.ts.map +1 -0
  120. package/dest/utils/txe_public_contract_data_source.js +51 -0
  121. package/dest/worker.bundle.js +3 -0
  122. package/dest/worker.bundle.js.map +7 -0
  123. package/dest/worker.d.ts +2 -0
  124. package/dest/worker.d.ts.map +1 -0
  125. package/dest/worker.js +92 -0
  126. package/package.json +38 -21
  127. package/src/bin/check_txe_oracle_version.ts +67 -0
  128. package/src/bin/index.ts +11 -2
  129. package/src/bin/oracle_test_server.ts +51 -0
  130. package/src/constants.ts +11 -1
  131. package/src/dispatcher_pool.ts +317 -0
  132. package/src/index.ts +99 -190
  133. package/src/msgpackr_fr_extension.ts +23 -0
  134. package/src/oracle/interfaces.ts +75 -35
  135. package/src/oracle/tagging_secret_strategy.ts +25 -0
  136. package/src/oracle/test-resolver/default_fixtures.ts +271 -0
  137. package/src/oracle/test-resolver/index.ts +44 -0
  138. package/src/oracle/test-resolver/resolver.ts +245 -0
  139. package/src/oracle/txe_oracle_public_context.ts +80 -20
  140. package/src/oracle/txe_oracle_registry.ts +556 -0
  141. package/src/oracle/txe_oracle_top_level_context.ts +486 -180
  142. package/src/oracle/txe_oracle_version.ts +17 -0
  143. package/src/oracle/txe_private_execution_oracle.ts +30 -0
  144. package/src/rpc_server.ts +87 -0
  145. package/src/rpc_translator.ts +1116 -974
  146. package/src/state_machine/archiver.ts +45 -26
  147. package/src/state_machine/dummy_p2p_client.ts +83 -32
  148. package/src/state_machine/global_variable_builder.ts +12 -11
  149. package/src/state_machine/index.ts +105 -40
  150. package/src/state_machine/mock_epoch_cache.ts +45 -4
  151. package/src/state_machine/synchronizer.ts +31 -10
  152. package/src/txe_session.ts +630 -129
  153. package/src/utils/block_creation.ts +10 -7
  154. package/src/{util → utils}/encoding.ts +8 -2
  155. package/src/utils/tx_effect_creation.ts +0 -2
  156. package/src/utils/txe_artifact_resolver.ts +217 -0
  157. package/src/utils/txe_public_contract_data_source.ts +60 -0
  158. package/src/worker.ts +98 -0
  159. package/dest/util/encoding.d.ts +0 -720
  160. package/dest/util/encoding.d.ts.map +0 -1
  161. package/dest/util/expected_failure_error.d.ts.map +0 -1
  162. package/dest/util/txe_account_store.d.ts.map +0 -1
  163. package/dest/util/txe_contract_store.d.ts +0 -12
  164. package/dest/util/txe_contract_store.d.ts.map +0 -1
  165. package/dest/util/txe_contract_store.js +0 -22
  166. package/dest/util/txe_public_contract_data_source.d.ts +0 -21
  167. package/dest/util/txe_public_contract_data_source.d.ts.map +0 -1
  168. package/dest/util/txe_public_contract_data_source.js +0 -67
  169. package/src/util/txe_contract_store.ts +0 -36
  170. package/src/util/txe_public_contract_data_source.ts +0 -86
  171. /package/dest/{util → utils}/expected_failure_error.js +0 -0
  172. /package/dest/{util → utils}/txe_account_store.js +0 -0
  173. /package/src/{util → utils}/expected_failure_error.ts +0 -0
  174. /package/src/{util → utils}/txe_account_store.ts +0 -0
@@ -1,14 +1,4 @@
1
- import { Fr, Point } from '@aztec/aztec.js/fields';
2
- import { MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX } from '@aztec/constants';
3
- import { BlockNumber } from '@aztec/foundation/branded-types';
4
- import { packAsHintedNote } from '@aztec/pxe/simulator';
5
- import { EventSelector, FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
6
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import { L2BlockHash } from '@aztec/stdlib/block';
8
- import { MerkleTreeId } from '@aztec/stdlib/trees';
9
- import { addressFromSingle, arrayOfArraysToBoundedVecOfArrays, arrayToBoundedVec, bufferToU8Array, fromArray, fromSingle, fromUintArray, fromUintBoundedVec, toArray, toForeignCallResult, toSingle } from './util/encoding.js';
10
- const MAX_EVENT_LEN = 12; // This is MAX_MESSAGE_CONTENT_LEN - PRIVATE_EVENT_RESERVED_FIELDS
11
- const MAX_PRIVATE_EVENTS_PER_TXE_QUERY = 5;
1
+ import { callTxeHandler } from './oracle/txe_oracle_registry.js';
12
2
  export class UnavailableOracleError extends Error {
13
3
  constructor(oracleName){
14
4
  super(`${oracleName} oracles not available with the current handler`);
@@ -61,607 +51,918 @@ export class RPCTranslator {
61
51
  }
62
52
  return this.oracleHandler;
63
53
  }
54
+ // eslint-disable-next-line camelcase
55
+ aztec_txe_assertCompatibleOracleVersion(...inputs) {
56
+ return callTxeHandler({
57
+ oracle: 'aztec_txe_assertCompatibleOracleVersion',
58
+ inputs,
59
+ handler: ([major, minor])=>{
60
+ this.stateHandler.setTxeOracleVersion(major, minor);
61
+ }
62
+ });
63
+ }
64
64
  // TXE session state transition functions - these get handled by the state handler
65
- async txeSetTopLevelTXEContext() {
66
- await this.stateHandler.enterTopLevelState();
67
- return toForeignCallResult([]);
68
- }
69
- async txeSetPrivateTXEContext(foreignContractAddressIsSome, foreignContractAddressValue, foreignAnchorBlockNumberIsSome, foreignAnchorBlockNumberValue) {
70
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
71
- const anchorBlockNumber = fromSingle(foreignAnchorBlockNumberIsSome).toBool() ? BlockNumber(fromSingle(foreignAnchorBlockNumberValue).toNumber()) : undefined;
72
- const privateContextInputs = await this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber);
73
- return toForeignCallResult(privateContextInputs.toFields().map(toSingle));
74
- }
75
- async txeSetPublicTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
76
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
77
- await this.stateHandler.enterPublicState(contractAddress);
78
- return toForeignCallResult([]);
79
- }
80
- async txeSetUtilityTXEContext(foreignContractAddressIsSome, foreignContractAddressValue) {
81
- const contractAddress = fromSingle(foreignContractAddressIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignContractAddressValue)) : undefined;
82
- await this.stateHandler.enterUtilityState(contractAddress);
83
- return toForeignCallResult([]);
65
+ // eslint-disable-next-line camelcase
66
+ aztec_txe_setTopLevelTXEContext() {
67
+ return callTxeHandler({
68
+ oracle: 'aztec_txe_setTopLevelTXEContext',
69
+ inputs: [],
70
+ handler: ()=>this.stateHandler.enterTopLevelState()
71
+ });
72
+ }
73
+ // eslint-disable-next-line camelcase
74
+ aztec_txe_setPrivateTXEContext(...inputs) {
75
+ return callTxeHandler({
76
+ oracle: 'aztec_txe_setPrivateTXEContext',
77
+ inputs,
78
+ handler: ([contractAddress, anchorBlockNumber, gasSettings])=>this.stateHandler.enterPrivateState(contractAddress, anchorBlockNumber, gasSettings)
79
+ });
80
+ }
81
+ // eslint-disable-next-line camelcase
82
+ aztec_txe_setPublicTXEContext(...inputs) {
83
+ return callTxeHandler({
84
+ oracle: 'aztec_txe_setPublicTXEContext',
85
+ inputs,
86
+ handler: ([contractAddress])=>this.stateHandler.enterPublicState(contractAddress)
87
+ });
88
+ }
89
+ // eslint-disable-next-line camelcase
90
+ aztec_txe_setUtilityTXEContext(...inputs) {
91
+ return callTxeHandler({
92
+ oracle: 'aztec_txe_setUtilityTXEContext',
93
+ inputs,
94
+ handler: ([contractAddress])=>this.stateHandler.enterUtilityState(contractAddress)
95
+ });
84
96
  }
85
97
  // Other oracles - these get handled by the oracle handler
86
98
  // TXE-specific oracles
87
- txeGetDefaultAddress() {
88
- const defaultAddress = this.handlerAsTxe().txeGetDefaultAddress();
89
- return toForeignCallResult([
90
- toSingle(defaultAddress)
91
- ]);
92
- }
93
- async txeGetNextBlockNumber() {
94
- const nextBlockNumber = await this.handlerAsTxe().txeGetNextBlockNumber();
95
- return toForeignCallResult([
96
- toSingle(nextBlockNumber)
97
- ]);
98
- }
99
- async txeGetNextBlockTimestamp() {
100
- const nextBlockTimestamp = await this.handlerAsTxe().txeGetNextBlockTimestamp();
101
- return toForeignCallResult([
102
- toSingle(nextBlockTimestamp)
103
- ]);
104
- }
105
- async txeAdvanceBlocksBy(foreignBlocks) {
106
- const blocks = fromSingle(foreignBlocks).toNumber();
107
- await this.handlerAsTxe().txeAdvanceBlocksBy(blocks);
108
- return toForeignCallResult([]);
109
- }
110
- txeAdvanceTimestampBy(foreignDuration) {
111
- const duration = fromSingle(foreignDuration).toBigInt();
112
- this.handlerAsTxe().txeAdvanceTimestampBy(duration);
113
- return toForeignCallResult([]);
114
- }
115
- async txeDeploy(artifact, instance, foreignSecret) {
116
- const secret = fromSingle(foreignSecret);
117
- await this.handlerAsTxe().txeDeploy(artifact, instance, secret);
118
- return toForeignCallResult([
119
- toArray([
120
- instance.salt,
121
- instance.deployer.toField(),
122
- instance.currentContractClassId,
123
- instance.initializationHash,
124
- ...instance.publicKeys.toFields()
125
- ])
126
- ]);
127
- }
128
- async txeCreateAccount(foreignSecret) {
129
- const secret = fromSingle(foreignSecret);
130
- const completeAddress = await this.handlerAsTxe().txeCreateAccount(secret);
131
- return toForeignCallResult([
132
- toSingle(completeAddress.address),
133
- ...completeAddress.publicKeys.toFields().map(toSingle)
134
- ]);
135
- }
136
- async txeAddAccount(artifact, instance, foreignSecret) {
137
- const secret = fromSingle(foreignSecret);
138
- const completeAddress = await this.handlerAsTxe().txeAddAccount(artifact, instance, secret);
139
- return toForeignCallResult([
140
- toSingle(completeAddress.address),
141
- ...completeAddress.publicKeys.toFields().map(toSingle)
142
- ]);
143
- }
144
- async txeAddAuthWitness(foreignAddress, foreignMessageHash) {
145
- const address = addressFromSingle(foreignAddress);
146
- const messageHash = fromSingle(foreignMessageHash);
147
- await this.handlerAsTxe().txeAddAuthWitness(address, messageHash);
148
- return toForeignCallResult([]);
99
+ // eslint-disable-next-line camelcase
100
+ aztec_txe_getDefaultAddress() {
101
+ return callTxeHandler({
102
+ oracle: 'aztec_txe_getDefaultAddress',
103
+ inputs: [],
104
+ handler: ()=>this.handlerAsTxe().getDefaultAddress()
105
+ });
106
+ }
107
+ // eslint-disable-next-line camelcase
108
+ aztec_txe_getNextBlockNumber() {
109
+ return callTxeHandler({
110
+ oracle: 'aztec_txe_getNextBlockNumber',
111
+ inputs: [],
112
+ handler: ()=>this.handlerAsTxe().getNextBlockNumber()
113
+ });
114
+ }
115
+ // eslint-disable-next-line camelcase
116
+ aztec_txe_getNextBlockTimestamp() {
117
+ return callTxeHandler({
118
+ oracle: 'aztec_txe_getNextBlockTimestamp',
119
+ inputs: [],
120
+ handler: ()=>this.handlerAsTxe().getNextBlockTimestamp()
121
+ });
122
+ }
123
+ // eslint-disable-next-line camelcase
124
+ aztec_txe_advanceBlocksBy(...inputs) {
125
+ return callTxeHandler({
126
+ oracle: 'aztec_txe_advanceBlocksBy',
127
+ inputs,
128
+ handler: ([blocks])=>this.handlerAsTxe().advanceBlocksBy(blocks)
129
+ });
130
+ }
131
+ // eslint-disable-next-line camelcase
132
+ aztec_txe_advanceTimestampBy(...inputs) {
133
+ return callTxeHandler({
134
+ oracle: 'aztec_txe_advanceTimestampBy',
135
+ inputs,
136
+ handler: ([duration])=>this.handlerAsTxe().advanceTimestampBy(duration)
137
+ });
138
+ }
139
+ // eslint-disable-next-line camelcase
140
+ aztec_txe_deploy(...inputs) {
141
+ return callTxeHandler({
142
+ oracle: 'aztec_txe_deploy',
143
+ inputs,
144
+ handler: ([contractPath, initializer, _, args, secret, salt, deployer])=>this.handlerAsTxe().deploy(contractPath, initializer, args, secret, salt, deployer)
145
+ });
146
+ }
147
+ // eslint-disable-next-line camelcase
148
+ aztec_txe_createAccount(...inputs) {
149
+ return callTxeHandler({
150
+ oracle: 'aztec_txe_createAccount',
151
+ inputs,
152
+ handler: ([secret, partialAddress])=>this.handlerAsTxe().createAccount(secret, partialAddress)
153
+ });
154
+ }
155
+ // eslint-disable-next-line camelcase
156
+ aztec_txe_addAccount(...inputs) {
157
+ return callTxeHandler({
158
+ oracle: 'aztec_txe_addAccount',
159
+ inputs,
160
+ handler: ([secret])=>this.handlerAsTxe().addAccount(secret)
161
+ });
162
+ }
163
+ // eslint-disable-next-line camelcase
164
+ aztec_txe_addAuthWitness(...inputs) {
165
+ return callTxeHandler({
166
+ oracle: 'aztec_txe_addAuthWitness',
167
+ inputs,
168
+ handler: ([address, messageHash])=>this.handlerAsTxe().addAuthWitness(address, messageHash)
169
+ });
170
+ }
171
+ // eslint-disable-next-line camelcase
172
+ aztec_txe_sendL1ToL2Message(...inputs) {
173
+ return callTxeHandler({
174
+ oracle: 'aztec_txe_sendL1ToL2Message',
175
+ inputs,
176
+ handler: ([content, secretHash, sender, recipient])=>this.handlerAsTxe().sendL1ToL2Message(content, secretHash, sender, recipient)
177
+ });
178
+ }
179
+ // eslint-disable-next-line camelcase
180
+ aztec_txe_setTaggingSecretStrategies(...inputs) {
181
+ return callTxeHandler({
182
+ oracle: 'aztec_txe_setTaggingSecretStrategies',
183
+ inputs,
184
+ handler: ([unconstrainedStrategy, constrainedStrategy])=>this.handlerAsTxe().setTaggingSecretStrategies(unconstrainedStrategy, constrainedStrategy)
185
+ });
186
+ }
187
+ // eslint-disable-next-line camelcase
188
+ aztec_txe_setAuthorizeAllUtilityCallTargets(...inputs) {
189
+ return callTxeHandler({
190
+ oracle: 'aztec_txe_setAuthorizeAllUtilityCallTargets',
191
+ inputs,
192
+ handler: ([authorizeAll])=>this.handlerAsTxe().setAuthorizeAllUtilityCallTargets(authorizeAll)
193
+ });
149
194
  }
150
195
  // PXE oracles
151
- utilityAssertCompatibleOracleVersion(foreignVersion) {
152
- const version = fromSingle(foreignVersion).toNumber();
153
- this.handlerAsMisc().utilityAssertCompatibleOracleVersion(version);
154
- return toForeignCallResult([]);
155
- }
156
- utilityGetRandomField() {
157
- const randomField = this.handlerAsMisc().utilityGetRandomField();
158
- return toForeignCallResult([
159
- toSingle(randomField)
160
- ]);
161
- }
162
- async txeGetLastBlockTimestamp() {
163
- const timestamp = await this.handlerAsTxe().txeGetLastBlockTimestamp();
164
- return toForeignCallResult([
165
- toSingle(new Fr(timestamp))
166
- ]);
167
- }
168
- async txeGetLastTxEffects() {
169
- const { txHash, noteHashes, nullifiers } = await this.handlerAsTxe().txeGetLastTxEffects();
170
- return toForeignCallResult([
171
- toSingle(txHash.hash),
172
- ...arrayToBoundedVec(toArray(noteHashes), MAX_NOTE_HASHES_PER_TX),
173
- ...arrayToBoundedVec(toArray(nullifiers), MAX_NULLIFIERS_PER_TX)
174
- ]);
175
- }
176
- async txeGetPrivateEvents(foreignSelector, foreignContractAddress, foreignScope) {
177
- const selector = EventSelector.fromField(fromSingle(foreignSelector));
178
- const contractAddress = addressFromSingle(foreignContractAddress);
179
- const scope = addressFromSingle(foreignScope);
180
- const events = await this.handlerAsTxe().txeGetPrivateEvents(selector, contractAddress, scope);
181
- if (events.length > MAX_PRIVATE_EVENTS_PER_TXE_QUERY) {
182
- throw new Error(`Array of length ${events.length} larger than maxLen ${MAX_PRIVATE_EVENTS_PER_TXE_QUERY}`);
183
- }
184
- if (events.some((e)=>e.length > MAX_EVENT_LEN)) {
185
- throw new Error(`Some private event has length larger than maxLen ${MAX_EVENT_LEN}`);
186
- }
187
- // This is a workaround as Noir does not currently let us return nested structs with arrays. We instead return a raw
188
- // multidimensional array in get_private_events_oracle and create the BoundedVecs here.
189
- const rawArrayStorage = events.map((e)=>e.concat(Array(MAX_EVENT_LEN - e.length).fill(new Fr(0)))).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(Array(MAX_EVENT_LEN).fill(new Fr(0)))).flat();
190
- const eventLengths = events.map((e)=>new Fr(e.length)).concat(Array(MAX_PRIVATE_EVENTS_PER_TXE_QUERY - events.length).fill(new Fr(0)));
191
- const queryLength = new Fr(events.length);
192
- return toForeignCallResult([
193
- toArray(rawArrayStorage),
194
- toArray(eventLengths),
195
- toSingle(queryLength)
196
- ]);
197
- }
198
- privateStoreInExecutionCache(foreignValues, foreignHash) {
199
- const values = fromArray(foreignValues);
200
- const hash = fromSingle(foreignHash);
201
- this.handlerAsPrivate().privateStoreInExecutionCache(values, hash);
202
- return toForeignCallResult([]);
203
- }
204
- async privateLoadFromExecutionCache(foreignHash) {
205
- const hash = fromSingle(foreignHash);
206
- const returns = await this.handlerAsPrivate().privateLoadFromExecutionCache(hash);
207
- return toForeignCallResult([
208
- toArray(returns)
209
- ]);
210
- }
211
- // When the argument is a slice, noir automatically adds a length field to oracle call.
212
- // When the argument is an array, we add the field length manually to the signature.
213
- utilityDebugLog(foreignLevel, foreignMessage, _foreignLength, foreignFields) {
214
- const level = fromSingle(foreignLevel).toNumber();
215
- const message = fromArray(foreignMessage).map((field)=>String.fromCharCode(field.toNumber())).join('');
216
- const fields = fromArray(foreignFields);
217
- this.handlerAsMisc().utilityDebugLog(level, message, fields);
218
- return toForeignCallResult([]);
219
- }
220
- async utilityStorageRead(foreignBlockHash, foreignContractAddress, foreignStartStorageSlot, foreignNumberOfElements) {
221
- const blockHash = L2BlockHash.fromString(foreignBlockHash);
222
- const contractAddress = addressFromSingle(foreignContractAddress);
223
- const startStorageSlot = fromSingle(foreignStartStorageSlot);
224
- const numberOfElements = fromSingle(foreignNumberOfElements).toNumber();
225
- const values = await this.handlerAsUtility().utilityStorageRead(blockHash, contractAddress, startStorageSlot, numberOfElements);
226
- return toForeignCallResult([
227
- toArray(values)
228
- ]);
229
- }
230
- async utilityGetPublicDataWitness(foreignBlockHash, foreignLeafSlot) {
231
- const blockHash = L2BlockHash.fromString(foreignBlockHash);
232
- const leafSlot = fromSingle(foreignLeafSlot);
233
- const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(blockHash, leafSlot);
234
- if (!witness) {
235
- throw new Error(`Public data witness not found for slot ${leafSlot} at block ${blockHash.toString()}.`);
236
- }
237
- return toForeignCallResult(witness.toNoirRepresentation());
238
- }
239
- async utilityGetNotes(foreignOwnerIsSome, foreignOwnerValue, foreignStorageSlot, foreignNumSelects, foreignSelectByIndexes, foreignSelectByOffsets, foreignSelectByLengths, foreignSelectValues, foreignSelectComparators, foreignSortByIndexes, foreignSortByOffsets, foreignSortByLengths, foreignSortOrder, foreignLimit, foreignOffset, foreignStatus, foreignMaxNotes, foreignPackedHintedNoteLength) {
240
- // Parse Option<AztecAddress>: ownerIsSome is 0 for None, 1 for Some
241
- const owner = fromSingle(foreignOwnerIsSome).toBool() ? AztecAddress.fromField(fromSingle(foreignOwnerValue)) : undefined;
242
- const storageSlot = fromSingle(foreignStorageSlot);
243
- const numSelects = fromSingle(foreignNumSelects).toNumber();
244
- const selectByIndexes = fromArray(foreignSelectByIndexes).map((fr)=>fr.toNumber());
245
- const selectByOffsets = fromArray(foreignSelectByOffsets).map((fr)=>fr.toNumber());
246
- const selectByLengths = fromArray(foreignSelectByLengths).map((fr)=>fr.toNumber());
247
- const selectValues = fromArray(foreignSelectValues);
248
- const selectComparators = fromArray(foreignSelectComparators).map((fr)=>fr.toNumber());
249
- const sortByIndexes = fromArray(foreignSortByIndexes).map((fr)=>fr.toNumber());
250
- const sortByOffsets = fromArray(foreignSortByOffsets).map((fr)=>fr.toNumber());
251
- const sortByLengths = fromArray(foreignSortByLengths).map((fr)=>fr.toNumber());
252
- const sortOrder = fromArray(foreignSortOrder).map((fr)=>fr.toNumber());
253
- const limit = fromSingle(foreignLimit).toNumber();
254
- const offset = fromSingle(foreignOffset).toNumber();
255
- const status = fromSingle(foreignStatus).toNumber();
256
- const maxNotes = fromSingle(foreignMaxNotes).toNumber();
257
- const packedHintedNoteLength = fromSingle(foreignPackedHintedNoteLength).toNumber();
258
- const noteDatas = await this.handlerAsUtility().utilityGetNotes(owner, storageSlot, numSelects, selectByIndexes, selectByOffsets, selectByLengths, selectValues, selectComparators, sortByIndexes, sortByOffsets, sortByLengths, sortOrder, limit, offset, status);
259
- const returnDataAsArrayOfArrays = noteDatas.map((noteData)=>packAsHintedNote({
260
- contractAddress: noteData.contractAddress,
261
- owner: noteData.owner,
262
- randomness: noteData.randomness,
263
- storageSlot: noteData.storageSlot,
264
- noteNonce: noteData.noteNonce,
265
- isPending: noteData.isPending,
266
- note: noteData.note
267
- }));
268
- // Now we convert each sub-array to an array of ForeignCallSingles
269
- const returnDataAsArrayOfForeignCallSingleArrays = returnDataAsArrayOfArrays.map((subArray)=>subArray.map(toSingle));
270
- // At last we convert the array of arrays to a bounded vec of arrays
271
- return toForeignCallResult(arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfForeignCallSingleArrays, maxNotes, packedHintedNoteLength));
272
- }
273
- privateNotifyCreatedNote(foreignOwner, foreignStorageSlot, foreignRandomness, foreignNoteTypeId, foreignNote, foreignNoteHash, foreignCounter) {
274
- const owner = addressFromSingle(foreignOwner);
275
- const storageSlot = fromSingle(foreignStorageSlot);
276
- const randomness = fromSingle(foreignRandomness);
277
- const noteTypeId = NoteSelector.fromField(fromSingle(foreignNoteTypeId));
278
- const note = fromArray(foreignNote);
279
- const noteHash = fromSingle(foreignNoteHash);
280
- const counter = fromSingle(foreignCounter).toNumber();
281
- this.handlerAsPrivate().privateNotifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter);
282
- return toForeignCallResult([]);
283
- }
284
- async privateNotifyNullifiedNote(foreignInnerNullifier, foreignNoteHash, foreignCounter) {
285
- const innerNullifier = fromSingle(foreignInnerNullifier);
286
- const noteHash = fromSingle(foreignNoteHash);
287
- const counter = fromSingle(foreignCounter).toNumber();
288
- await this.handlerAsPrivate().privateNotifyNullifiedNote(innerNullifier, noteHash, counter);
289
- return toForeignCallResult([]);
290
- }
291
- async privateNotifyCreatedNullifier(foreignInnerNullifier) {
292
- const innerNullifier = fromSingle(foreignInnerNullifier);
293
- await this.handlerAsPrivate().privateNotifyCreatedNullifier(innerNullifier);
294
- return toForeignCallResult([]);
295
- }
296
- async utilityCheckNullifierExists(foreignInnerNullifier) {
297
- const innerNullifier = fromSingle(foreignInnerNullifier);
298
- const exists = await this.handlerAsUtility().utilityCheckNullifierExists(innerNullifier);
299
- return toForeignCallResult([
300
- toSingle(new Fr(exists))
301
- ]);
302
- }
303
- async utilityGetContractInstance(foreignAddress) {
304
- const address = addressFromSingle(foreignAddress);
305
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
306
- return toForeignCallResult([
307
- instance.salt,
308
- instance.deployer.toField(),
309
- instance.currentContractClassId,
310
- instance.initializationHash,
311
- ...instance.publicKeys.toFields()
312
- ].map(toSingle));
313
- }
314
- async utilityGetPublicKeysAndPartialAddress(foreignAddress) {
315
- const address = addressFromSingle(foreignAddress);
316
- const { publicKeys, partialAddress } = await this.handlerAsUtility().utilityGetPublicKeysAndPartialAddress(address);
317
- return toForeignCallResult([
318
- toArray([
319
- ...publicKeys.toFields(),
320
- partialAddress
321
- ])
322
- ]);
323
- }
324
- async utilityGetKeyValidationRequest(foreignPkMHash) {
325
- const pkMHash = fromSingle(foreignPkMHash);
326
- const keyValidationRequest = await this.handlerAsUtility().utilityGetKeyValidationRequest(pkMHash);
327
- return toForeignCallResult(keyValidationRequest.toFields().map(toSingle));
328
- }
329
- privateCallPrivateFunction(_foreignTargetContractAddress, _foreignFunctionSelector, _foreignArgsHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
330
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::private_context`, use `private_call` instead');
331
- }
332
- async utilityGetNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
333
- const blockHash = L2BlockHash.fromString(foreignBlockHash);
334
- const nullifier = fromSingle(foreignNullifier);
335
- const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(blockHash, nullifier);
336
- if (!witness) {
337
- throw new Error(`Nullifier membership witness not found at block ${blockHash}.`);
338
- }
339
- return toForeignCallResult(witness.toNoirRepresentation());
340
- }
341
- async utilityGetAuthWitness(foreignMessageHash) {
342
- const messageHash = fromSingle(foreignMessageHash);
343
- const authWitness = await this.handlerAsUtility().utilityGetAuthWitness(messageHash);
344
- if (!authWitness) {
345
- throw new Error(`Auth witness not found for message hash ${messageHash}.`);
346
- }
347
- return toForeignCallResult([
348
- toArray(authWitness)
349
- ]);
350
- }
351
- privateNotifyEnqueuedPublicFunctionCall(_foreignTargetContractAddress, _foreignCalldataHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
352
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
353
- }
354
- privateNotifySetPublicTeardownFunctionCall(_foreignTargetContractAddress, _foreignCalldataHash, _foreignSideEffectCounter, _foreignIsStaticCall) {
355
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
356
- }
357
- privateNotifySetMinRevertibleSideEffectCounter(_foreignMinRevertibleSideEffectCounter) {
358
- throw new Error('Enqueueing public calls is not supported in TestEnvironment::private_context');
359
- }
360
- async privateIsSideEffectCounterRevertible(foreignSideEffectCounter) {
361
- const sideEffectCounter = fromSingle(foreignSideEffectCounter).toNumber();
362
- const isRevertible = await this.handlerAsPrivate().privateIsSideEffectCounterRevertible(sideEffectCounter);
363
- return toForeignCallResult([
364
- toSingle(new Fr(isRevertible))
365
- ]);
366
- }
367
- utilityGetUtilityContext() {
368
- const context = this.handlerAsUtility().utilityGetUtilityContext();
369
- return toForeignCallResult(context.toNoirRepresentation());
370
- }
371
- async utilityGetBlockHeader(foreignBlockNumber) {
372
- const blockNumber = BlockNumber(fromSingle(foreignBlockNumber).toNumber());
373
- const header = await this.handlerAsUtility().utilityGetBlockHeader(blockNumber);
374
- if (!header) {
375
- throw new Error(`Block header not found for block ${blockNumber}.`);
376
- }
377
- return toForeignCallResult(header.toFields().map(toSingle));
378
- }
379
- async utilityGetMembershipWitness(foreignBlockHash, foreignTreeId, foreignLeafValue) {
380
- const blockHash = L2BlockHash.fromString(foreignBlockHash);
381
- const treeId = fromSingle(foreignTreeId).toNumber();
382
- const leafValue = fromSingle(foreignLeafValue);
383
- const witness = await this.handlerAsUtility().utilityGetMembershipWitness(blockHash, treeId, leafValue);
384
- if (!witness) {
385
- throw new Error(`Membership witness in tree ${MerkleTreeId[treeId]} not found for value ${leafValue} at block ${blockHash}.`);
386
- }
387
- return toForeignCallResult([
388
- toSingle(witness[0]),
389
- toArray(witness.slice(1))
390
- ]);
391
- }
392
- async utilityGetLowNullifierMembershipWitness(foreignBlockHash, foreignNullifier) {
393
- const blockHash = L2BlockHash.fromString(foreignBlockHash);
394
- const nullifier = fromSingle(foreignNullifier);
395
- const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(blockHash, nullifier);
396
- if (!witness) {
397
- throw new Error(`Low nullifier witness not found for nullifier ${nullifier} at block ${blockHash}.`);
398
- }
399
- return toForeignCallResult(witness.toNoirRepresentation());
400
- }
401
- async utilityFetchTaggedLogs(foreignPendingTaggedLogArrayBaseSlot) {
402
- const pendingTaggedLogArrayBaseSlot = fromSingle(foreignPendingTaggedLogArrayBaseSlot);
403
- await this.handlerAsUtility().utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot);
404
- return toForeignCallResult([]);
405
- }
406
- async utilityValidateEnqueuedNotesAndEvents(foreignContractAddress, foreignNoteValidationRequestsArrayBaseSlot, foreignEventValidationRequestsArrayBaseSlot) {
407
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
408
- const noteValidationRequestsArrayBaseSlot = fromSingle(foreignNoteValidationRequestsArrayBaseSlot);
409
- const eventValidationRequestsArrayBaseSlot = fromSingle(foreignEventValidationRequestsArrayBaseSlot);
410
- await this.handlerAsUtility().utilityValidateEnqueuedNotesAndEvents(contractAddress, noteValidationRequestsArrayBaseSlot, eventValidationRequestsArrayBaseSlot);
411
- return toForeignCallResult([]);
412
- }
413
- async utilityBulkRetrieveLogs(foreignContractAddress, foreignLogRetrievalRequestsArrayBaseSlot, foreignLogRetrievalResponsesArrayBaseSlot) {
414
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
415
- const logRetrievalRequestsArrayBaseSlot = fromSingle(foreignLogRetrievalRequestsArrayBaseSlot);
416
- const logRetrievalResponsesArrayBaseSlot = fromSingle(foreignLogRetrievalResponsesArrayBaseSlot);
417
- await this.handlerAsUtility().utilityBulkRetrieveLogs(contractAddress, logRetrievalRequestsArrayBaseSlot, logRetrievalResponsesArrayBaseSlot);
418
- return toForeignCallResult([]);
419
- }
420
- async utilityStoreCapsule(foreignContractAddress, foreignSlot, foreignCapsule) {
421
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
422
- const slot = fromSingle(foreignSlot);
423
- const capsule = fromArray(foreignCapsule);
424
- await this.handlerAsUtility().utilityStoreCapsule(contractAddress, slot, capsule);
425
- return toForeignCallResult([]);
426
- }
427
- async utilityLoadCapsule(foreignContractAddress, foreignSlot, foreignTSize) {
428
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
429
- const slot = fromSingle(foreignSlot);
430
- const tSize = fromSingle(foreignTSize).toNumber();
431
- const values = await this.handlerAsUtility().utilityLoadCapsule(contractAddress, slot);
432
- // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
433
- // with two fields: `some` (a boolean) and `value` (a field array in this case).
434
- if (values === null) {
435
- // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
436
- return toForeignCallResult([
437
- toSingle(new Fr(0)),
438
- toArray(Array(tSize).fill(new Fr(0)))
439
- ]);
440
- } else {
441
- // Data was found so we set `some` to 1 and return it along with `value`.
442
- return toForeignCallResult([
443
- toSingle(new Fr(1)),
444
- toArray(values)
445
- ]);
446
- }
447
- }
448
- async utilityDeleteCapsule(foreignContractAddress, foreignSlot) {
449
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
450
- const slot = fromSingle(foreignSlot);
451
- await this.handlerAsUtility().utilityDeleteCapsule(contractAddress, slot);
452
- return toForeignCallResult([]);
453
- }
454
- async utilityCopyCapsule(foreignContractAddress, foreignSrcSlot, foreignDstSlot, foreignNumEntries) {
455
- const contractAddress = AztecAddress.fromField(fromSingle(foreignContractAddress));
456
- const srcSlot = fromSingle(foreignSrcSlot);
457
- const dstSlot = fromSingle(foreignDstSlot);
458
- const numEntries = fromSingle(foreignNumEntries).toNumber();
459
- await this.handlerAsUtility().utilityCopyCapsule(contractAddress, srcSlot, dstSlot, numEntries);
460
- return toForeignCallResult([]);
196
+ // eslint-disable-next-line camelcase
197
+ aztec_misc_assertCompatibleOracleVersion(...inputs) {
198
+ return callTxeHandler({
199
+ oracle: 'aztec_misc_assertCompatibleOracleVersion',
200
+ inputs,
201
+ handler: ([major, minor])=>this.handlerAsMisc().assertCompatibleOracleVersion(major, minor)
202
+ });
203
+ }
204
+ // eslint-disable-next-line camelcase
205
+ aztec_misc_getRandomField() {
206
+ return callTxeHandler({
207
+ oracle: 'aztec_misc_getRandomField',
208
+ inputs: [],
209
+ handler: ()=>this.handlerAsMisc().getRandomField()
210
+ });
211
+ }
212
+ // eslint-disable-next-line camelcase
213
+ aztec_txe_getLastBlockTimestamp() {
214
+ return callTxeHandler({
215
+ oracle: 'aztec_txe_getLastBlockTimestamp',
216
+ inputs: [],
217
+ handler: ()=>this.handlerAsTxe().getLastBlockTimestamp()
218
+ });
219
+ }
220
+ // eslint-disable-next-line camelcase
221
+ aztec_txe_getLastTxEffects() {
222
+ return callTxeHandler({
223
+ oracle: 'aztec_txe_getLastTxEffects',
224
+ inputs: [],
225
+ handler: ()=>this.handlerAsTxe().getLastTxEffects()
226
+ });
227
+ }
228
+ // eslint-disable-next-line camelcase
229
+ aztec_txe_getLastCallOffchainEffects() {
230
+ return callTxeHandler({
231
+ oracle: 'aztec_txe_getLastCallOffchainEffects',
232
+ inputs: [],
233
+ handler: ()=>this.stateHandler.getLastCallOffchainEffects()
234
+ });
235
+ }
236
+ // eslint-disable-next-line camelcase
237
+ aztec_txe_getLastCallContext() {
238
+ return callTxeHandler({
239
+ oracle: 'aztec_txe_getLastCallContext',
240
+ inputs: [],
241
+ handler: ()=>this.stateHandler.getLastCallContext()
242
+ });
243
+ }
244
+ // eslint-disable-next-line camelcase
245
+ aztec_txe_getPrivateEvents(...inputs) {
246
+ return callTxeHandler({
247
+ oracle: 'aztec_txe_getPrivateEvents',
248
+ inputs,
249
+ handler: ([selector, contractAddress, scope])=>this.stateHandler.getPrivateEvents(selector, contractAddress, scope)
250
+ });
251
+ }
252
+ // eslint-disable-next-line camelcase
253
+ aztec_prv_setHashPreimage(...inputs) {
254
+ return callTxeHandler({
255
+ oracle: 'aztec_prv_setHashPreimage',
256
+ inputs,
257
+ handler: ([values, hash])=>this.handlerAsPrivate().setHashPreimage(values, hash)
258
+ });
259
+ }
260
+ // eslint-disable-next-line camelcase
261
+ aztec_prv_getHashPreimage(...inputs) {
262
+ return callTxeHandler({
263
+ oracle: 'aztec_prv_getHashPreimage',
264
+ inputs,
265
+ handler: ([hash])=>this.handlerAsPrivate().getHashPreimage(hash)
266
+ });
267
+ }
268
+ // eslint-disable-next-line camelcase
269
+ aztec_misc_log(...inputs) {
270
+ return callTxeHandler({
271
+ oracle: 'aztec_misc_log',
272
+ inputs,
273
+ handler: ([level, message, fieldsSize, fields])=>this.handlerAsMisc().log(level, message, fieldsSize, fields)
274
+ });
275
+ }
276
+ // eslint-disable-next-line camelcase
277
+ aztec_utl_getFromPublicStorage(...inputs) {
278
+ return callTxeHandler({
279
+ oracle: 'aztec_utl_getFromPublicStorage',
280
+ inputs,
281
+ handler: ([blockHash, contractAddress, startStorageSlot, numberOfElements])=>this.handlerAsUtility().getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements)
282
+ });
283
+ }
284
+ // eslint-disable-next-line camelcase
285
+ aztec_utl_getPublicDataWitness(...inputs) {
286
+ return callTxeHandler({
287
+ oracle: 'aztec_utl_getPublicDataWitness',
288
+ inputs,
289
+ handler: ([blockHash, leafSlot])=>this.handlerAsUtility().getPublicDataWitness(blockHash, leafSlot)
290
+ });
291
+ }
292
+ // eslint-disable-next-line camelcase
293
+ aztec_utl_getNotes(...inputs) {
294
+ return callTxeHandler({
295
+ oracle: 'aztec_utl_getNotes',
296
+ inputs,
297
+ handler: ([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)
298
+ });
299
+ }
300
+ // eslint-disable-next-line camelcase
301
+ aztec_prv_notifyCreatedNote(...inputs) {
302
+ return callTxeHandler({
303
+ oracle: 'aztec_prv_notifyCreatedNote',
304
+ inputs,
305
+ handler: ([owner, storageSlot, randomness, noteTypeId, note, noteHash, counter])=>this.handlerAsPrivate().notifyCreatedNote(owner, storageSlot, randomness, noteTypeId, note, noteHash, counter)
306
+ });
307
+ }
308
+ // eslint-disable-next-line camelcase
309
+ aztec_prv_notifyNullifiedNote(...inputs) {
310
+ return callTxeHandler({
311
+ oracle: 'aztec_prv_notifyNullifiedNote',
312
+ inputs,
313
+ handler: ([innerNullifier, noteHash, counter])=>this.handlerAsPrivate().notifyNullifiedNote(innerNullifier, noteHash, counter)
314
+ });
315
+ }
316
+ // eslint-disable-next-line camelcase
317
+ aztec_prv_notifyCreatedNullifier(...inputs) {
318
+ return callTxeHandler({
319
+ oracle: 'aztec_prv_notifyCreatedNullifier',
320
+ inputs,
321
+ handler: ([innerNullifier])=>this.handlerAsPrivate().notifyCreatedNullifier(innerNullifier)
322
+ });
323
+ }
324
+ // eslint-disable-next-line camelcase
325
+ aztec_prv_isNullifierPending(...inputs) {
326
+ return callTxeHandler({
327
+ oracle: 'aztec_prv_isNullifierPending',
328
+ inputs,
329
+ handler: ([innerNullifier, contractAddress])=>this.handlerAsPrivate().isNullifierPending(innerNullifier, contractAddress)
330
+ });
331
+ }
332
+ // eslint-disable-next-line camelcase
333
+ aztec_utl_doesNullifierExist(...inputs) {
334
+ return callTxeHandler({
335
+ oracle: 'aztec_utl_doesNullifierExist',
336
+ inputs,
337
+ handler: ([innerNullifier])=>this.handlerAsUtility().doesNullifierExist(innerNullifier)
338
+ });
339
+ }
340
+ // eslint-disable-next-line camelcase
341
+ aztec_utl_getContractInstance(...inputs) {
342
+ return callTxeHandler({
343
+ oracle: 'aztec_utl_getContractInstance',
344
+ inputs,
345
+ handler: ([address])=>this.handlerAsUtility().getContractInstance(address)
346
+ });
347
+ }
348
+ // eslint-disable-next-line camelcase
349
+ aztec_utl_getPublicKeysAndPartialAddress(...inputs) {
350
+ return callTxeHandler({
351
+ oracle: 'aztec_utl_getPublicKeysAndPartialAddress',
352
+ inputs,
353
+ handler: ([address])=>this.handlerAsUtility().getPublicKeysAndPartialAddress(address)
354
+ });
355
+ }
356
+ // eslint-disable-next-line camelcase
357
+ aztec_utl_getKeyValidationRequest(...inputs) {
358
+ return callTxeHandler({
359
+ oracle: 'aztec_utl_getKeyValidationRequest',
360
+ inputs,
361
+ handler: ([pkMHash, keyIndex])=>this.handlerAsUtility().getKeyValidationRequest(pkMHash, keyIndex)
362
+ });
363
+ }
364
+ // eslint-disable-next-line camelcase
365
+ aztec_prv_callPrivateFunction(...inputs) {
366
+ return callTxeHandler({
367
+ oracle: 'aztec_prv_callPrivateFunction',
368
+ inputs,
369
+ handler: ([contractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall])=>this.handlerAsPrivate().callPrivateFunction(contractAddress, functionSelector, argsHash, sideEffectCounter, isStaticCall)
370
+ });
371
+ }
372
+ // eslint-disable-next-line camelcase
373
+ aztec_utl_getNullifierMembershipWitness(...inputs) {
374
+ return callTxeHandler({
375
+ oracle: 'aztec_utl_getNullifierMembershipWitness',
376
+ inputs,
377
+ handler: ([blockHash, nullifier])=>this.handlerAsUtility().getNullifierMembershipWitness(blockHash, nullifier)
378
+ });
379
+ }
380
+ // eslint-disable-next-line camelcase
381
+ aztec_utl_getL1ToL2MembershipWitnessV2(...inputs) {
382
+ return callTxeHandler({
383
+ oracle: 'aztec_utl_getL1ToL2MembershipWitnessV2',
384
+ inputs,
385
+ handler: ([messageHash, nullifier])=>this.handlerAsUtility().getL1ToL2MembershipWitnessV2(messageHash, nullifier)
386
+ });
387
+ }
388
+ // eslint-disable-next-line camelcase
389
+ aztec_utl_getAuthWitness(...inputs) {
390
+ return callTxeHandler({
391
+ oracle: 'aztec_utl_getAuthWitness',
392
+ inputs,
393
+ handler: ([messageHash])=>this.handlerAsUtility().getAuthWitness(messageHash)
394
+ });
395
+ }
396
+ // eslint-disable-next-line camelcase
397
+ aztec_prv_assertValidPublicCalldata(...inputs) {
398
+ return callTxeHandler({
399
+ oracle: 'aztec_prv_assertValidPublicCalldata',
400
+ inputs,
401
+ handler: ([calldataHash])=>this.handlerAsPrivate().assertValidPublicCalldata(calldataHash)
402
+ });
403
+ }
404
+ // eslint-disable-next-line camelcase
405
+ aztec_prv_notifyRevertiblePhaseStart(...inputs) {
406
+ return callTxeHandler({
407
+ oracle: 'aztec_prv_notifyRevertiblePhaseStart',
408
+ inputs,
409
+ handler: ([minRevertibleSideEffectCounter])=>this.handlerAsPrivate().notifyRevertiblePhaseStart(minRevertibleSideEffectCounter)
410
+ });
411
+ }
412
+ // eslint-disable-next-line camelcase
413
+ aztec_prv_isExecutionInRevertiblePhase(...inputs) {
414
+ return callTxeHandler({
415
+ oracle: 'aztec_prv_isExecutionInRevertiblePhase',
416
+ inputs,
417
+ handler: ([sideEffectCounter])=>this.handlerAsPrivate().isExecutionInRevertiblePhase(sideEffectCounter)
418
+ });
419
+ }
420
+ // eslint-disable-next-line camelcase
421
+ aztec_utl_getUtilityContext() {
422
+ return callTxeHandler({
423
+ oracle: 'aztec_utl_getUtilityContext',
424
+ inputs: [],
425
+ handler: ()=>this.handlerAsUtility().getUtilityContext()
426
+ });
427
+ }
428
+ // eslint-disable-next-line camelcase
429
+ aztec_utl_getBlockHeader(...inputs) {
430
+ return callTxeHandler({
431
+ oracle: 'aztec_utl_getBlockHeader',
432
+ inputs,
433
+ handler: ([blockNumber])=>this.handlerAsUtility().getBlockHeader(blockNumber)
434
+ });
435
+ }
436
+ // eslint-disable-next-line camelcase
437
+ aztec_utl_getNoteHashMembershipWitness(...inputs) {
438
+ return callTxeHandler({
439
+ oracle: 'aztec_utl_getNoteHashMembershipWitness',
440
+ inputs,
441
+ handler: ([blockHash, noteHash])=>this.handlerAsUtility().getNoteHashMembershipWitness(blockHash, noteHash)
442
+ });
443
+ }
444
+ // eslint-disable-next-line camelcase
445
+ aztec_utl_getBlockHashMembershipWitness(...inputs) {
446
+ return callTxeHandler({
447
+ oracle: 'aztec_utl_getBlockHashMembershipWitness',
448
+ inputs,
449
+ handler: ([anchorBlockHash, blockHash])=>this.handlerAsUtility().getBlockHashMembershipWitness(anchorBlockHash, blockHash)
450
+ });
451
+ }
452
+ // eslint-disable-next-line camelcase
453
+ aztec_utl_areBlockHashesInArchive(...inputs) {
454
+ return callTxeHandler({
455
+ oracle: 'aztec_utl_areBlockHashesInArchive',
456
+ inputs,
457
+ handler: ([anchorBlockHash, blockHashes])=>this.handlerAsUtility().areBlockHashesInArchive(anchorBlockHash, blockHashes)
458
+ });
459
+ }
460
+ // eslint-disable-next-line camelcase
461
+ aztec_utl_getLowNullifierMembershipWitness(...inputs) {
462
+ return callTxeHandler({
463
+ oracle: 'aztec_utl_getLowNullifierMembershipWitness',
464
+ inputs,
465
+ handler: ([blockHash, nullifier])=>this.handlerAsUtility().getLowNullifierMembershipWitness(blockHash, nullifier)
466
+ });
467
+ }
468
+ // eslint-disable-next-line camelcase
469
+ aztec_utl_getPendingTaggedLogsV2(...inputs) {
470
+ return callTxeHandler({
471
+ oracle: 'aztec_utl_getPendingTaggedLogsV2',
472
+ inputs,
473
+ handler: ([scope, providedSecrets])=>this.handlerAsUtility().getPendingTaggedLogsV2(scope, providedSecrets)
474
+ });
475
+ }
476
+ // eslint-disable-next-line camelcase
477
+ aztec_utl_validateAndStoreEnqueuedNotesAndEvents(...inputs) {
478
+ return callTxeHandler({
479
+ oracle: 'aztec_utl_validateAndStoreEnqueuedNotesAndEvents',
480
+ inputs,
481
+ handler: ([noteValidationRequests, eventValidationRequests, scope])=>this.handlerAsUtility().validateAndStoreEnqueuedNotesAndEvents(noteValidationRequests, eventValidationRequests, scope)
482
+ });
483
+ }
484
+ // eslint-disable-next-line camelcase
485
+ aztec_utl_getLogsByTagV2(...inputs) {
486
+ return callTxeHandler({
487
+ oracle: 'aztec_utl_getLogsByTagV2',
488
+ inputs,
489
+ handler: ([requestArrayBaseSlot])=>this.handlerAsUtility().getLogsByTagV2(requestArrayBaseSlot)
490
+ });
491
+ }
492
+ // eslint-disable-next-line camelcase
493
+ aztec_utl_getResolvedTxs(...inputs) {
494
+ return callTxeHandler({
495
+ oracle: 'aztec_utl_getResolvedTxs',
496
+ inputs,
497
+ handler: ([requestArrayBaseSlot])=>this.handlerAsUtility().getResolvedTxs(requestArrayBaseSlot)
498
+ });
499
+ }
500
+ // eslint-disable-next-line camelcase
501
+ aztec_utl_getTxEffects(...inputs) {
502
+ return callTxeHandler({
503
+ oracle: 'aztec_utl_getTxEffects',
504
+ inputs,
505
+ handler: ([txHashes])=>this.handlerAsUtility().getTxEffects(txHashes)
506
+ });
507
+ }
508
+ // eslint-disable-next-line camelcase
509
+ aztec_utl_setCapsule(...inputs) {
510
+ return callTxeHandler({
511
+ oracle: 'aztec_utl_setCapsule',
512
+ inputs,
513
+ handler: ([contractAddress, slot, capsule, scope])=>this.handlerAsUtility().setCapsule(contractAddress, slot, capsule, scope)
514
+ });
515
+ }
516
+ // eslint-disable-next-line camelcase
517
+ aztec_utl_getCapsule(...inputs) {
518
+ return callTxeHandler({
519
+ oracle: 'aztec_utl_getCapsule',
520
+ inputs,
521
+ handler: ([contractAddress, slot, tSize, scope])=>this.handlerAsUtility().getCapsule(contractAddress, slot, tSize, scope)
522
+ });
523
+ }
524
+ // eslint-disable-next-line camelcase
525
+ aztec_utl_deleteCapsule(...inputs) {
526
+ return callTxeHandler({
527
+ oracle: 'aztec_utl_deleteCapsule',
528
+ inputs,
529
+ handler: ([contractAddress, slot, scope])=>this.handlerAsUtility().deleteCapsule(contractAddress, slot, scope)
530
+ });
531
+ }
532
+ // eslint-disable-next-line camelcase
533
+ aztec_utl_copyCapsule(...inputs) {
534
+ return callTxeHandler({
535
+ oracle: 'aztec_utl_copyCapsule',
536
+ inputs,
537
+ handler: ([contractAddress, srcSlot, dstSlot, numEntries, scope])=>this.handlerAsUtility().copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope)
538
+ });
539
+ }
540
+ // eslint-disable-next-line camelcase
541
+ aztec_utl_pushEphemeral(...inputs) {
542
+ return callTxeHandler({
543
+ oracle: 'aztec_utl_pushEphemeral',
544
+ inputs,
545
+ handler: ([slot, elements])=>this.handlerAsUtility().pushEphemeral(slot, elements)
546
+ });
547
+ }
548
+ // eslint-disable-next-line camelcase
549
+ aztec_utl_popEphemeral(...inputs) {
550
+ return callTxeHandler({
551
+ oracle: 'aztec_utl_popEphemeral',
552
+ inputs,
553
+ handler: ([slot])=>this.handlerAsUtility().popEphemeral(slot)
554
+ });
555
+ }
556
+ // eslint-disable-next-line camelcase
557
+ aztec_utl_getEphemeral(...inputs) {
558
+ return callTxeHandler({
559
+ oracle: 'aztec_utl_getEphemeral',
560
+ inputs,
561
+ handler: ([slot, index])=>this.handlerAsUtility().getEphemeral(slot, index)
562
+ });
563
+ }
564
+ // eslint-disable-next-line camelcase
565
+ aztec_utl_setEphemeral(...inputs) {
566
+ return callTxeHandler({
567
+ oracle: 'aztec_utl_setEphemeral',
568
+ inputs,
569
+ handler: ([slot, index, elements])=>this.handlerAsUtility().setEphemeral(slot, index, elements)
570
+ });
571
+ }
572
+ // eslint-disable-next-line camelcase
573
+ aztec_utl_getEphemeralLen(...inputs) {
574
+ return callTxeHandler({
575
+ oracle: 'aztec_utl_getEphemeralLen',
576
+ inputs,
577
+ handler: ([slot])=>this.handlerAsUtility().getEphemeralLen(slot)
578
+ });
579
+ }
580
+ // eslint-disable-next-line camelcase
581
+ aztec_utl_removeEphemeral(...inputs) {
582
+ return callTxeHandler({
583
+ oracle: 'aztec_utl_removeEphemeral',
584
+ inputs,
585
+ handler: ([slot, index])=>this.handlerAsUtility().removeEphemeral(slot, index)
586
+ });
587
+ }
588
+ // eslint-disable-next-line camelcase
589
+ aztec_utl_clearEphemeral(...inputs) {
590
+ return callTxeHandler({
591
+ oracle: 'aztec_utl_clearEphemeral',
592
+ inputs,
593
+ handler: ([slot])=>this.handlerAsUtility().clearEphemeral(slot)
594
+ });
595
+ }
596
+ // eslint-disable-next-line camelcase
597
+ aztec_utl_pushTransient(...inputs) {
598
+ return callTxeHandler({
599
+ oracle: 'aztec_utl_pushTransient',
600
+ inputs,
601
+ handler: ([slot, elements])=>this.handlerAsUtility().pushTransient(slot, elements)
602
+ });
603
+ }
604
+ // eslint-disable-next-line camelcase
605
+ aztec_utl_popTransient(...inputs) {
606
+ return callTxeHandler({
607
+ oracle: 'aztec_utl_popTransient',
608
+ inputs,
609
+ handler: ([slot])=>this.handlerAsUtility().popTransient(slot)
610
+ });
611
+ }
612
+ // eslint-disable-next-line camelcase
613
+ aztec_utl_getTransient(...inputs) {
614
+ return callTxeHandler({
615
+ oracle: 'aztec_utl_getTransient',
616
+ inputs,
617
+ handler: ([slot, index])=>this.handlerAsUtility().getTransient(slot, index)
618
+ });
619
+ }
620
+ // eslint-disable-next-line camelcase
621
+ aztec_utl_setTransient(...inputs) {
622
+ return callTxeHandler({
623
+ oracle: 'aztec_utl_setTransient',
624
+ inputs,
625
+ handler: ([slot, index, elements])=>this.handlerAsUtility().setTransient(slot, index, elements)
626
+ });
627
+ }
628
+ // eslint-disable-next-line camelcase
629
+ aztec_utl_getTransientLen(...inputs) {
630
+ return callTxeHandler({
631
+ oracle: 'aztec_utl_getTransientLen',
632
+ inputs,
633
+ handler: ([slot])=>this.handlerAsUtility().getTransientLen(slot)
634
+ });
635
+ }
636
+ // eslint-disable-next-line camelcase
637
+ aztec_utl_removeTransient(...inputs) {
638
+ return callTxeHandler({
639
+ oracle: 'aztec_utl_removeTransient',
640
+ inputs,
641
+ handler: ([slot, index])=>this.handlerAsUtility().removeTransient(slot, index)
642
+ });
643
+ }
644
+ // eslint-disable-next-line camelcase
645
+ aztec_utl_clearTransient(...inputs) {
646
+ return callTxeHandler({
647
+ oracle: 'aztec_utl_clearTransient',
648
+ inputs,
649
+ handler: ([slot])=>this.handlerAsUtility().clearTransient(slot)
650
+ });
461
651
  }
462
652
  // TODO: I forgot to add a corresponding function here, when I introduced an oracle method to txe_oracle.ts.
463
653
  // 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
464
654
  // to implement this function here. Isn't there a way to programmatically identify that this is missing, given the
465
655
  // existence of a txe_oracle method?
466
- async utilityAes128Decrypt(foreignCiphertextBVecStorage, foreignCiphertextLength, foreignIv, foreignSymKey) {
467
- const ciphertext = fromUintBoundedVec(foreignCiphertextBVecStorage, foreignCiphertextLength, 8);
468
- const iv = fromUintArray(foreignIv, 8);
469
- const symKey = fromUintArray(foreignSymKey, 8);
470
- const plaintextBuffer = await this.handlerAsUtility().utilityAes128Decrypt(ciphertext, iv, symKey);
471
- return toForeignCallResult(arrayToBoundedVec(bufferToU8Array(plaintextBuffer), foreignCiphertextBVecStorage.length));
472
- }
473
- async utilityGetSharedSecret(foreignAddress, foreignEphPKField0, foreignEphPKField1, foreignEphPKField2) {
474
- const address = AztecAddress.fromField(fromSingle(foreignAddress));
475
- const ephPK = Point.fromFields([
476
- fromSingle(foreignEphPKField0),
477
- fromSingle(foreignEphPKField1),
478
- fromSingle(foreignEphPKField2)
479
- ]);
480
- const secret = await this.handlerAsUtility().utilityGetSharedSecret(address, ephPK);
481
- return toForeignCallResult(secret.toFields().map(toSingle));
482
- }
483
- emitOffchainEffect(_foreignData) {
484
- throw new Error('Offchain effects are not yet supported in the TestEnvironment');
656
+ // eslint-disable-next-line camelcase
657
+ aztec_utl_decryptAes128(...inputs) {
658
+ return callTxeHandler({
659
+ oracle: 'aztec_utl_decryptAes128',
660
+ inputs,
661
+ handler: ([ciphertext, iv, symKey])=>this.handlerAsUtility().decryptAes128(ciphertext, iv, symKey)
662
+ });
663
+ }
664
+ // eslint-disable-next-line camelcase
665
+ aztec_utl_getSharedSecrets(...inputs) {
666
+ return callTxeHandler({
667
+ oracle: 'aztec_utl_getSharedSecrets',
668
+ inputs,
669
+ handler: ([address, ephPksSlot, contractAddress])=>this.handlerAsUtility().getSharedSecrets(address, ephPksSlot, contractAddress)
670
+ });
671
+ }
672
+ // eslint-disable-next-line camelcase
673
+ aztec_utl_setContractSyncCacheInvalid(...inputs) {
674
+ return callTxeHandler({
675
+ oracle: 'aztec_utl_setContractSyncCacheInvalid',
676
+ inputs,
677
+ handler: ([contractAddress, scopes])=>this.handlerAsUtility().setContractSyncCacheInvalid(contractAddress, scopes)
678
+ });
679
+ }
680
+ // eslint-disable-next-line camelcase
681
+ aztec_utl_emitOffchainEffect(...inputs) {
682
+ return callTxeHandler({
683
+ oracle: 'aztec_utl_emitOffchainEffect',
684
+ inputs,
685
+ handler: ([data])=>{
686
+ // Record the raw payload against the currently-executing top-level call. The Noir side
687
+ // (via `env.offchain_messages()`) is responsible for decoding the protocol-reserved prefix
688
+ // (`OFFCHAIN_MESSAGE_IDENTIFIER`, recipient) and turning each payload into an `OffchainMessage` struct suitable
689
+ // for `offchain_receive`.
690
+ this.stateHandler.recordOffchainEffect(data);
691
+ }
692
+ });
693
+ }
694
+ // eslint-disable-next-line camelcase
695
+ aztec_utl_recordFact(...inputs) {
696
+ return callTxeHandler({
697
+ oracle: 'aztec_utl_recordFact',
698
+ inputs,
699
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock])=>this.handlerAsUtility().recordFact(contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock)
700
+ });
701
+ }
702
+ // eslint-disable-next-line camelcase
703
+ aztec_utl_deleteFactCollection(...inputs) {
704
+ return callTxeHandler({
705
+ oracle: 'aztec_utl_deleteFactCollection',
706
+ inputs,
707
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId])=>this.handlerAsUtility().deleteFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId)
708
+ });
709
+ }
710
+ // eslint-disable-next-line camelcase
711
+ aztec_utl_getFactCollection(...inputs) {
712
+ return callTxeHandler({
713
+ oracle: 'aztec_utl_getFactCollection',
714
+ inputs,
715
+ handler: ([contractAddress, scope, factCollectionTypeId, factCollectionId])=>this.handlerAsUtility().getFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId)
716
+ });
717
+ }
718
+ // eslint-disable-next-line camelcase
719
+ aztec_utl_getFactCollectionsByType(...inputs) {
720
+ return callTxeHandler({
721
+ oracle: 'aztec_utl_getFactCollectionsByType',
722
+ inputs,
723
+ handler: ([contractAddress, scope, factCollectionTypeId])=>this.handlerAsUtility().getFactCollectionsByType(contractAddress, scope, factCollectionTypeId)
724
+ });
485
725
  }
486
726
  // AVM opcodes
487
- avmOpcodeEmitUnencryptedLog(_foreignMessage) {
488
- // TODO(#8811): Implement
489
- return toForeignCallResult([]);
490
- }
491
- async avmOpcodeStorageRead(foreignSlot) {
492
- const slot = fromSingle(foreignSlot);
493
- const value = (await this.handlerAsAvm().avmOpcodeStorageRead(slot)).value;
494
- return toForeignCallResult([
495
- toSingle(new Fr(value))
496
- ]);
497
- }
498
- async avmOpcodeStorageWrite(foreignSlot, foreignValue) {
499
- const slot = fromSingle(foreignSlot);
500
- const value = fromSingle(foreignValue);
501
- await this.handlerAsAvm().avmOpcodeStorageWrite(slot, value);
502
- return toForeignCallResult([]);
503
- }
504
- async avmOpcodeGetContractInstanceDeployer(foreignAddress) {
505
- const address = addressFromSingle(foreignAddress);
506
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
507
- return toForeignCallResult([
508
- toSingle(instance.deployer),
509
- // AVM requires an extra boolean indicating the instance was found
510
- toSingle(new Fr(1))
511
- ]);
512
- }
513
- async avmOpcodeGetContractInstanceClassId(foreignAddress) {
514
- const address = addressFromSingle(foreignAddress);
515
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
516
- return toForeignCallResult([
517
- toSingle(instance.currentContractClassId),
518
- // AVM requires an extra boolean indicating the instance was found
519
- toSingle(new Fr(1))
520
- ]);
521
- }
522
- async avmOpcodeGetContractInstanceInitializationHash(foreignAddress) {
523
- const address = addressFromSingle(foreignAddress);
524
- const instance = await this.handlerAsUtility().utilityGetContractInstance(address);
525
- return toForeignCallResult([
526
- toSingle(instance.initializationHash),
527
- // AVM requires an extra boolean indicating the instance was found
528
- toSingle(new Fr(1))
529
- ]);
530
- }
531
- async avmOpcodeSender() {
532
- const sender = await this.handlerAsAvm().avmOpcodeSender();
533
- return toForeignCallResult([
534
- toSingle(sender)
535
- ]);
536
- }
537
- async avmOpcodeEmitNullifier(foreignNullifier) {
538
- const nullifier = fromSingle(foreignNullifier);
539
- await this.handlerAsAvm().avmOpcodeEmitNullifier(nullifier);
540
- return toForeignCallResult([]);
541
- }
542
- async avmOpcodeEmitNoteHash(foreignNoteHash) {
543
- const noteHash = fromSingle(foreignNoteHash);
544
- await this.handlerAsAvm().avmOpcodeEmitNoteHash(noteHash);
545
- return toForeignCallResult([]);
546
- }
547
- async avmOpcodeNullifierExists(foreignInnerNullifier, foreignTargetAddress) {
548
- const innerNullifier = fromSingle(foreignInnerNullifier);
549
- const targetAddress = AztecAddress.fromField(fromSingle(foreignTargetAddress));
550
- const exists = await this.handlerAsAvm().avmOpcodeNullifierExists(innerNullifier, targetAddress);
551
- return toForeignCallResult([
552
- toSingle(new Fr(exists))
553
- ]);
554
- }
555
- async avmOpcodeAddress() {
556
- const contractAddress = await this.handlerAsAvm().avmOpcodeAddress();
557
- return toForeignCallResult([
558
- toSingle(contractAddress.toField())
559
- ]);
560
- }
561
- async avmOpcodeBlockNumber() {
562
- const blockNumber = await this.handlerAsAvm().avmOpcodeBlockNumber();
563
- return toForeignCallResult([
564
- toSingle(new Fr(blockNumber))
565
- ]);
566
- }
567
- async avmOpcodeTimestamp() {
568
- const timestamp = await this.handlerAsAvm().avmOpcodeTimestamp();
569
- return toForeignCallResult([
570
- toSingle(new Fr(timestamp))
571
- ]);
572
- }
573
- async avmOpcodeIsStaticCall() {
574
- const isStaticCall = await this.handlerAsAvm().avmOpcodeIsStaticCall();
575
- return toForeignCallResult([
576
- toSingle(new Fr(isStaticCall ? 1 : 0))
577
- ]);
578
- }
579
- async avmOpcodeChainId() {
580
- const chainId = await this.handlerAsAvm().avmOpcodeChainId();
581
- return toForeignCallResult([
582
- toSingle(chainId)
583
- ]);
584
- }
585
- async avmOpcodeVersion() {
586
- const version = await this.handlerAsAvm().avmOpcodeVersion();
587
- return toForeignCallResult([
588
- toSingle(version)
589
- ]);
590
- }
591
- avmOpcodeReturndataSize() {
592
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
593
- }
594
- avmOpcodeReturndataCopy(_foreignRdOffset, _foreignCopySize) {
595
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
596
- }
597
- avmOpcodeCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
598
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
599
- }
600
- avmOpcodeStaticCall(_foreignL2Gas, _foreignDaGas, _foreignAddress, _foreignLength, _foreignArgs) {
601
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
602
- }
603
- avmOpcodeSuccessCopy() {
604
- throw new Error('Contract calls are forbidden inside a `TestEnvironment::public_context`, use `public_call` instead');
605
- }
606
- async txePrivateCallNewFlow(foreignFrom, foreignTargetContractAddress, foreignFunctionSelector, foreignArgs, foreignArgsHash, foreignIsStaticCall) {
607
- const from = addressFromSingle(foreignFrom);
608
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
609
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
610
- const args = fromArray(foreignArgs);
611
- const argsHash = fromSingle(foreignArgsHash);
612
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
613
- const returnValues = await this.handlerAsTxe().txePrivateCallNewFlow(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall);
614
- return toForeignCallResult([
615
- toArray(returnValues)
616
- ]);
617
- }
618
- async txeSimulateUtilityFunction(foreignTargetContractAddress, foreignFunctionSelector, foreignArgs) {
619
- const targetContractAddress = addressFromSingle(foreignTargetContractAddress);
620
- const functionSelector = FunctionSelector.fromField(fromSingle(foreignFunctionSelector));
621
- const args = fromArray(foreignArgs);
622
- const returnValues = await this.handlerAsTxe().txeSimulateUtilityFunction(targetContractAddress, functionSelector, args);
623
- return toForeignCallResult([
624
- toArray(returnValues)
625
- ]);
626
- }
627
- async txePublicCallNewFlow(foreignFrom, foreignAddress, foreignCalldata, foreignIsStaticCall) {
628
- const from = addressFromSingle(foreignFrom);
629
- const address = addressFromSingle(foreignAddress);
630
- const calldata = fromArray(foreignCalldata);
631
- const isStaticCall = fromSingle(foreignIsStaticCall).toBool();
632
- const returnValues = await this.handlerAsTxe().txePublicCallNewFlow(from, address, calldata, isStaticCall);
633
- return toForeignCallResult([
634
- toArray(returnValues)
635
- ]);
636
- }
637
- async privateGetSenderForTags() {
638
- const sender = await this.handlerAsPrivate().privateGetSenderForTags();
639
- // Return a Noir Option struct with `some` and `value` fields
640
- if (sender === undefined) {
641
- // No sender found, return Option with some=0 and value=0
642
- return toForeignCallResult([
643
- toSingle(0),
644
- toSingle(0)
645
- ]);
646
- } else {
647
- // Sender found, return Option with some=1 and value=sender address
648
- return toForeignCallResult([
649
- toSingle(1),
650
- toSingle(sender)
651
- ]);
652
- }
653
- }
654
- async privateSetSenderForTags(foreignSenderForTags) {
655
- const senderForTags = AztecAddress.fromField(fromSingle(foreignSenderForTags));
656
- await this.handlerAsPrivate().privateSetSenderForTags(senderForTags);
657
- return toForeignCallResult([]);
658
- }
659
- async privateGetNextAppTagAsSender(foreignSender, foreignRecipient) {
660
- const sender = AztecAddress.fromField(fromSingle(foreignSender));
661
- const recipient = AztecAddress.fromField(fromSingle(foreignRecipient));
662
- const nextAppTag = await this.handlerAsPrivate().privateGetNextAppTagAsSender(sender, recipient);
663
- return toForeignCallResult([
664
- toSingle(nextAppTag.value)
665
- ]);
727
+ // eslint-disable-next-line camelcase
728
+ aztec_avm_emitPublicLog() {
729
+ return callTxeHandler({
730
+ oracle: 'aztec_avm_emitPublicLog',
731
+ inputs: [],
732
+ // TODO(#8811): Implement
733
+ handler: ()=>{}
734
+ });
735
+ }
736
+ // eslint-disable-next-line camelcase
737
+ aztec_avm_storageRead(...inputs) {
738
+ return callTxeHandler({
739
+ oracle: 'aztec_avm_storageRead',
740
+ inputs,
741
+ handler: ([slot, contractAddress])=>this.handlerAsAvm().storageRead(slot, contractAddress)
742
+ });
743
+ }
744
+ // eslint-disable-next-line camelcase
745
+ aztec_avm_storageWrite(...inputs) {
746
+ return callTxeHandler({
747
+ oracle: 'aztec_avm_storageWrite',
748
+ inputs,
749
+ handler: ([slot, value])=>this.handlerAsAvm().storageWrite(slot, value)
750
+ });
751
+ }
752
+ // eslint-disable-next-line camelcase
753
+ aztec_avm_getContractInstanceDeployer(...inputs) {
754
+ return callTxeHandler({
755
+ oracle: 'aztec_avm_getContractInstanceDeployer',
756
+ inputs,
757
+ handler: ([address])=>this.handlerAsAvm().getContractInstanceDeployer(address)
758
+ });
759
+ }
760
+ // eslint-disable-next-line camelcase
761
+ aztec_avm_getContractInstanceClassId(...inputs) {
762
+ return callTxeHandler({
763
+ oracle: 'aztec_avm_getContractInstanceClassId',
764
+ inputs,
765
+ handler: ([address])=>this.handlerAsAvm().getContractInstanceClassId(address)
766
+ });
767
+ }
768
+ // eslint-disable-next-line camelcase
769
+ aztec_avm_getContractInstanceInitializationHash(...inputs) {
770
+ return callTxeHandler({
771
+ oracle: 'aztec_avm_getContractInstanceInitializationHash',
772
+ inputs,
773
+ handler: ([address])=>this.handlerAsAvm().getContractInstanceInitializationHash(address)
774
+ });
775
+ }
776
+ // eslint-disable-next-line camelcase
777
+ aztec_avm_getContractInstanceImmutablesHash(...inputs) {
778
+ return callTxeHandler({
779
+ oracle: 'aztec_avm_getContractInstanceImmutablesHash',
780
+ inputs,
781
+ handler: ([address])=>this.handlerAsAvm().getContractInstanceImmutablesHash(address)
782
+ });
783
+ }
784
+ // eslint-disable-next-line camelcase
785
+ aztec_avm_sender() {
786
+ return callTxeHandler({
787
+ oracle: 'aztec_avm_sender',
788
+ inputs: [],
789
+ handler: ()=>this.handlerAsAvm().sender()
790
+ });
791
+ }
792
+ // eslint-disable-next-line camelcase
793
+ aztec_avm_emitNullifier(...inputs) {
794
+ return callTxeHandler({
795
+ oracle: 'aztec_avm_emitNullifier',
796
+ inputs,
797
+ handler: ([nullifier])=>this.handlerAsAvm().emitNullifier(nullifier)
798
+ });
799
+ }
800
+ // eslint-disable-next-line camelcase
801
+ aztec_avm_emitNoteHash(...inputs) {
802
+ return callTxeHandler({
803
+ oracle: 'aztec_avm_emitNoteHash',
804
+ inputs,
805
+ handler: ([noteHash])=>this.handlerAsAvm().emitNoteHash(noteHash)
806
+ });
807
+ }
808
+ // eslint-disable-next-line camelcase
809
+ aztec_avm_nullifierExists(...inputs) {
810
+ return callTxeHandler({
811
+ oracle: 'aztec_avm_nullifierExists',
812
+ inputs,
813
+ handler: ([siloedNullifier])=>this.handlerAsAvm().nullifierExists(siloedNullifier)
814
+ });
815
+ }
816
+ // eslint-disable-next-line camelcase
817
+ aztec_avm_address() {
818
+ return callTxeHandler({
819
+ oracle: 'aztec_avm_address',
820
+ inputs: [],
821
+ handler: ()=>this.handlerAsAvm().address()
822
+ });
823
+ }
824
+ // eslint-disable-next-line camelcase
825
+ aztec_avm_blockNumber() {
826
+ return callTxeHandler({
827
+ oracle: 'aztec_avm_blockNumber',
828
+ inputs: [],
829
+ handler: ()=>this.handlerAsAvm().blockNumber()
830
+ });
831
+ }
832
+ // eslint-disable-next-line camelcase
833
+ aztec_avm_timestamp() {
834
+ return callTxeHandler({
835
+ oracle: 'aztec_avm_timestamp',
836
+ inputs: [],
837
+ handler: ()=>this.handlerAsAvm().timestamp()
838
+ });
839
+ }
840
+ // eslint-disable-next-line camelcase
841
+ aztec_avm_isStaticCall() {
842
+ return callTxeHandler({
843
+ oracle: 'aztec_avm_isStaticCall',
844
+ inputs: [],
845
+ handler: ()=>this.handlerAsAvm().isStaticCall()
846
+ });
847
+ }
848
+ // eslint-disable-next-line camelcase
849
+ aztec_avm_chainId() {
850
+ return callTxeHandler({
851
+ oracle: 'aztec_avm_chainId',
852
+ inputs: [],
853
+ handler: ()=>this.handlerAsAvm().chainId()
854
+ });
855
+ }
856
+ // eslint-disable-next-line camelcase
857
+ aztec_avm_version() {
858
+ return callTxeHandler({
859
+ oracle: 'aztec_avm_version',
860
+ inputs: [],
861
+ handler: ()=>this.handlerAsAvm().version()
862
+ });
863
+ }
864
+ // eslint-disable-next-line camelcase
865
+ aztec_avm_returndataSize() {
866
+ return callTxeHandler({
867
+ oracle: 'aztec_avm_returndataSize',
868
+ inputs: [],
869
+ handler: ()=>this.handlerAsAvm().returndataSize()
870
+ });
871
+ }
872
+ // eslint-disable-next-line camelcase
873
+ aztec_avm_returndataCopy(...inputs) {
874
+ return callTxeHandler({
875
+ oracle: 'aztec_avm_returndataCopy',
876
+ inputs,
877
+ handler: ([rdOffset, copySize])=>this.handlerAsAvm().returndataCopy(rdOffset, copySize)
878
+ });
879
+ }
880
+ // eslint-disable-next-line camelcase
881
+ aztec_avm_call(...inputs) {
882
+ return callTxeHandler({
883
+ oracle: 'aztec_avm_call',
884
+ inputs,
885
+ handler: ([l2Gas, daGas, address, argsLength, args])=>this.handlerAsAvm().call(l2Gas, daGas, address, argsLength, args)
886
+ });
887
+ }
888
+ // eslint-disable-next-line camelcase
889
+ aztec_avm_staticCall(...inputs) {
890
+ return callTxeHandler({
891
+ oracle: 'aztec_avm_staticCall',
892
+ inputs,
893
+ handler: ([l2Gas, daGas, address, argsLength, args])=>this.handlerAsAvm().staticCall(l2Gas, daGas, address, argsLength, args)
894
+ });
895
+ }
896
+ // eslint-disable-next-line camelcase
897
+ aztec_avm_successCopy() {
898
+ return callTxeHandler({
899
+ oracle: 'aztec_avm_successCopy',
900
+ inputs: [],
901
+ handler: ()=>this.handlerAsAvm().successCopy()
902
+ });
903
+ }
904
+ // eslint-disable-next-line camelcase
905
+ aztec_txe_privateCallNewFlow(...inputs) {
906
+ return callTxeHandler({
907
+ oracle: 'aztec_txe_privateCallNewFlow',
908
+ inputs,
909
+ handler: ([from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, additionalScopes, authorizedUtilityCallTargets, gasSettings])=>this.stateHandler.executePrivateCall(from, targetContractAddress, functionSelector, args, argsHash, isStaticCall, additionalScopes, authorizedUtilityCallTargets, gasSettings)
910
+ });
911
+ }
912
+ // eslint-disable-next-line camelcase
913
+ aztec_txe_executeUtilityFunction(...inputs) {
914
+ return callTxeHandler({
915
+ oracle: 'aztec_txe_executeUtilityFunction',
916
+ inputs,
917
+ handler: ([from, targetContractAddress, functionSelector, args, authorizedUtilityCallTargets])=>this.stateHandler.executeUtilityFunction(from, targetContractAddress, functionSelector, args, authorizedUtilityCallTargets)
918
+ });
919
+ }
920
+ // eslint-disable-next-line camelcase
921
+ aztec_txe_publicCallNewFlow(...inputs) {
922
+ return callTxeHandler({
923
+ oracle: 'aztec_txe_publicCallNewFlow',
924
+ inputs,
925
+ handler: ([from, address, calldata, isStaticCall, gasSettings])=>this.stateHandler.executePublicCall(from, address, calldata, isStaticCall, gasSettings)
926
+ });
927
+ }
928
+ // eslint-disable-next-line camelcase
929
+ aztec_prv_getSenderForTags() {
930
+ return callTxeHandler({
931
+ oracle: 'aztec_prv_getSenderForTags',
932
+ inputs: [],
933
+ handler: ()=>this.handlerAsPrivate().getSenderForTags()
934
+ });
935
+ }
936
+ // eslint-disable-next-line camelcase
937
+ aztec_prv_resolveTaggingStrategy(...inputs) {
938
+ return callTxeHandler({
939
+ oracle: 'aztec_prv_resolveTaggingStrategy',
940
+ inputs,
941
+ handler: ([sender, recipient, deliveryMode])=>this.handlerAsPrivate().resolveTaggingStrategy(sender, recipient, deliveryMode)
942
+ });
943
+ }
944
+ // eslint-disable-next-line camelcase
945
+ aztec_prv_resolveCustomRequest(...inputs) {
946
+ return callTxeHandler({
947
+ oracle: 'aztec_prv_resolveCustomRequest',
948
+ inputs,
949
+ handler: ([kind, payload])=>this.handlerAsPrivate().resolveCustomRequest(kind, payload)
950
+ });
951
+ }
952
+ // eslint-disable-next-line camelcase
953
+ aztec_prv_getAppTaggingSecret(...inputs) {
954
+ return callTxeHandler({
955
+ oracle: 'aztec_prv_getAppTaggingSecret',
956
+ inputs,
957
+ handler: ([sender, recipient])=>this.handlerAsPrivate().getAppTaggingSecret(sender, recipient)
958
+ });
959
+ }
960
+ // eslint-disable-next-line camelcase
961
+ aztec_prv_getNextTaggingIndex(...inputs) {
962
+ return callTxeHandler({
963
+ oracle: 'aztec_prv_getNextTaggingIndex',
964
+ inputs,
965
+ handler: ([secret, deliveryMode])=>this.handlerAsPrivate().getNextTaggingIndex(secret, deliveryMode)
966
+ });
666
967
  }
667
968
  }