@aztec/pxe 0.65.2 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dest/bin/index.js +5 -6
  2. package/dest/config/index.d.ts +0 -9
  3. package/dest/config/index.d.ts.map +1 -1
  4. package/dest/config/index.js +1 -17
  5. package/dest/config/package_info.d.ts +5 -0
  6. package/dest/config/package_info.d.ts.map +1 -0
  7. package/dest/config/package_info.js +4 -0
  8. package/dest/contract_data_oracle/index.js +2 -2
  9. package/dest/database/incoming_note_dao.d.ts +1 -1
  10. package/dest/database/incoming_note_dao.d.ts.map +1 -1
  11. package/dest/database/incoming_note_dao.js +2 -2
  12. package/dest/database/kv_pxe_database.d.ts +10 -13
  13. package/dest/database/kv_pxe_database.d.ts.map +1 -1
  14. package/dest/database/kv_pxe_database.js +153 -230
  15. package/dest/database/outgoing_note_dao.js +2 -2
  16. package/dest/database/pxe_database.d.ts +7 -25
  17. package/dest/database/pxe_database.d.ts.map +1 -1
  18. package/dest/database/pxe_database_test_suite.d.ts.map +1 -1
  19. package/dest/database/pxe_database_test_suite.js +18 -59
  20. package/dest/index.d.ts +2 -0
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +3 -1
  23. package/dest/kernel_oracle/index.d.ts.map +1 -1
  24. package/dest/kernel_oracle/index.js +3 -3
  25. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts +1 -1
  26. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -1
  27. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +13 -15
  28. package/dest/kernel_prover/index.d.ts +1 -0
  29. package/dest/kernel_prover/index.d.ts.map +1 -1
  30. package/dest/kernel_prover/index.js +2 -1
  31. package/dest/kernel_prover/kernel_prover.d.ts +1 -0
  32. package/dest/kernel_prover/kernel_prover.d.ts.map +1 -1
  33. package/dest/kernel_prover/kernel_prover.js +38 -4
  34. package/dest/kernel_prover/test/test_circuit_prover.d.ts.map +1 -1
  35. package/dest/kernel_prover/test/test_circuit_prover.js +4 -4
  36. package/dest/note_decryption_utils/add_public_values_to_payload.js +2 -2
  37. package/dest/note_decryption_utils/brute_force_note_info.d.ts +3 -3
  38. package/dest/note_decryption_utils/brute_force_note_info.d.ts.map +1 -1
  39. package/dest/note_decryption_utils/brute_force_note_info.js +8 -8
  40. package/dest/note_decryption_utils/produce_note_daos.d.ts +3 -6
  41. package/dest/note_decryption_utils/produce_note_daos.d.ts.map +1 -1
  42. package/dest/note_decryption_utils/produce_note_daos.js +5 -19
  43. package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts +1 -1
  44. package/dest/note_decryption_utils/produce_note_daos_for_key.d.ts.map +1 -1
  45. package/dest/pxe_service/error_enriching.d.ts +3 -3
  46. package/dest/pxe_service/error_enriching.d.ts.map +1 -1
  47. package/dest/pxe_service/error_enriching.js +10 -10
  48. package/dest/pxe_service/index.d.ts +0 -1
  49. package/dest/pxe_service/index.d.ts.map +1 -1
  50. package/dest/pxe_service/index.js +1 -2
  51. package/dest/pxe_service/pxe_service.d.ts +4 -16
  52. package/dest/pxe_service/pxe_service.d.ts.map +1 -1
  53. package/dest/pxe_service/pxe_service.js +86 -101
  54. package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -1
  55. package/dest/pxe_service/test/pxe_test_suite.js +1 -3
  56. package/dest/simulator/index.d.ts +1 -1
  57. package/dest/simulator/index.d.ts.map +1 -1
  58. package/dest/simulator/index.js +2 -2
  59. package/dest/simulator_oracle/index.d.ts +7 -6
  60. package/dest/simulator_oracle/index.d.ts.map +1 -1
  61. package/dest/simulator_oracle/index.js +65 -44
  62. package/dest/synchronizer/synchronizer.d.ts +10 -40
  63. package/dest/synchronizer/synchronizer.d.ts.map +1 -1
  64. package/dest/synchronizer/synchronizer.js +35 -69
  65. package/dest/{pxe_service → utils}/create_pxe_service.d.ts +1 -1
  66. package/dest/utils/create_pxe_service.d.ts.map +1 -0
  67. package/dest/utils/create_pxe_service.js +49 -0
  68. package/package.json +31 -19
  69. package/src/bin/index.ts +4 -5
  70. package/src/config/index.ts +0 -21
  71. package/src/config/package_info.ts +3 -0
  72. package/src/contract_data_oracle/index.ts +1 -1
  73. package/src/database/incoming_note_dao.ts +2 -2
  74. package/src/database/kv_pxe_database.ts +212 -309
  75. package/src/database/outgoing_note_dao.ts +1 -1
  76. package/src/database/pxe_database.ts +7 -28
  77. package/src/database/pxe_database_test_suite.ts +20 -75
  78. package/src/index.ts +2 -0
  79. package/src/kernel_oracle/index.ts +2 -2
  80. package/src/kernel_prover/hints/build_private_kernel_reset_private_inputs.ts +14 -16
  81. package/src/kernel_prover/index.ts +2 -0
  82. package/src/kernel_prover/kernel_prover.ts +61 -2
  83. package/src/kernel_prover/test/test_circuit_prover.ts +5 -3
  84. package/src/note_decryption_utils/add_public_values_to_payload.ts +1 -1
  85. package/src/note_decryption_utils/brute_force_note_info.ts +9 -9
  86. package/src/note_decryption_utils/produce_note_daos.ts +5 -48
  87. package/src/note_decryption_utils/produce_note_daos_for_key.ts +1 -1
  88. package/src/pxe_service/error_enriching.ts +14 -12
  89. package/src/pxe_service/index.ts +0 -1
  90. package/src/pxe_service/pxe_service.ts +137 -160
  91. package/src/pxe_service/test/pxe_test_suite.ts +0 -3
  92. package/src/simulator/index.ts +1 -1
  93. package/src/simulator_oracle/index.ts +71 -75
  94. package/src/synchronizer/synchronizer.ts +37 -77
  95. package/src/{pxe_service → utils}/create_pxe_service.ts +10 -10
  96. package/dest/pxe_service/create_pxe_service.d.ts.map +0 -1
  97. package/dest/pxe_service/create_pxe_service.js +0 -49
@@ -1,13 +1,13 @@
1
- var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_completeAddresses, _KVPxeDatabase_completeAddressIndex, _KVPxeDatabase_addressBook, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_nullifiersByBlockNumber, _KVPxeDatabase_nullifiedNotesToScope, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByAddressPoint, _KVPxeDatabase_nullifiedNotesByNullifier, _KVPxeDatabase_syncedBlockPerPublicKey, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_outgoingNotes, _KVPxeDatabase_outgoingNotesByContract, _KVPxeDatabase_outgoingNotesByStorageSlot, _KVPxeDatabase_outgoingNotesByTxHash, _KVPxeDatabase_outgoingNotesByOvpkM, _KVPxeDatabase_scopes, _KVPxeDatabase_notesToScope, _KVPxeDatabase_notesByContractAndScope, _KVPxeDatabase_notesByStorageSlotAndScope, _KVPxeDatabase_notesByTxHashAndScope, _KVPxeDatabase_notesByAddressPointAndScope, _KVPxeDatabase_taggingSecretIndexesForSenders, _KVPxeDatabase_taggingSecretIndexesForRecipients, _KVPxeDatabase_addScope, _KVPxeDatabase_getCompleteAddress, _KVPxeDatabase_setTaggingSecretsIndexes, _KVPxeDatabase_getTaggingSecretsIndexes;
1
+ var _KVPxeDatabase_instances, _KVPxeDatabase_synchronizedBlock, _KVPxeDatabase_completeAddresses, _KVPxeDatabase_completeAddressIndex, _KVPxeDatabase_addressBook, _KVPxeDatabase_authWitnesses, _KVPxeDatabase_capsules, _KVPxeDatabase_notes, _KVPxeDatabase_nullifiedNotes, _KVPxeDatabase_nullifierToNoteId, _KVPxeDatabase_nullifiersByBlockNumber, _KVPxeDatabase_nullifiedNotesToScope, _KVPxeDatabase_nullifiedNotesByContract, _KVPxeDatabase_nullifiedNotesByStorageSlot, _KVPxeDatabase_nullifiedNotesByTxHash, _KVPxeDatabase_nullifiedNotesByAddressPoint, _KVPxeDatabase_nullifiedNotesByNullifier, _KVPxeDatabase_contractArtifacts, _KVPxeDatabase_contractInstances, _KVPxeDatabase_db, _KVPxeDatabase_scopes, _KVPxeDatabase_notesToScope, _KVPxeDatabase_notesByContractAndScope, _KVPxeDatabase_notesByStorageSlotAndScope, _KVPxeDatabase_notesByTxHashAndScope, _KVPxeDatabase_notesByAddressPointAndScope, _KVPxeDatabase_taggingSecretIndexesForSenders, _KVPxeDatabase_taggingSecretIndexesForRecipients, _KVPxeDatabase_addScope, _KVPxeDatabase_getCompleteAddress, _KVPxeDatabase_setTaggingSecretsIndexes, _KVPxeDatabase_getTaggingSecretsIndexes;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { MerkleTreeId, NoteStatus, } from '@aztec/circuit-types';
4
- import { AztecAddress, CompleteAddress, Header, SerializableContractInstance, } from '@aztec/circuits.js';
3
+ import { MerkleTreeId, NoteStatus } from '@aztec/circuit-types';
4
+ import { AztecAddress, BlockHeader, CompleteAddress, SerializableContractInstance, } from '@aztec/circuits.js';
5
5
  import { FunctionSelector, FunctionType } from '@aztec/foundation/abi';
6
6
  import { toBufferBE } from '@aztec/foundation/bigint-buffer';
7
7
  import { Fr } from '@aztec/foundation/fields';
8
+ import { toArray } from '@aztec/foundation/iterable';
8
9
  import { contractArtifactFromBuffer, contractArtifactToBuffer } from '@aztec/types/abi';
9
10
  import { IncomingNoteDao } from './incoming_note_dao.js';
10
- import { OutgoingNoteDao } from './outgoing_note_dao.js';
11
11
  /**
12
12
  * A PXE database backed by LMDB.
13
13
  */
@@ -31,15 +31,9 @@ export class KVPxeDatabase {
31
31
  _KVPxeDatabase_nullifiedNotesByTxHash.set(this, void 0);
32
32
  _KVPxeDatabase_nullifiedNotesByAddressPoint.set(this, void 0);
33
33
  _KVPxeDatabase_nullifiedNotesByNullifier.set(this, void 0);
34
- _KVPxeDatabase_syncedBlockPerPublicKey.set(this, void 0);
35
34
  _KVPxeDatabase_contractArtifacts.set(this, void 0);
36
35
  _KVPxeDatabase_contractInstances.set(this, void 0);
37
36
  _KVPxeDatabase_db.set(this, void 0);
38
- _KVPxeDatabase_outgoingNotes.set(this, void 0);
39
- _KVPxeDatabase_outgoingNotesByContract.set(this, void 0);
40
- _KVPxeDatabase_outgoingNotesByStorageSlot.set(this, void 0);
41
- _KVPxeDatabase_outgoingNotesByTxHash.set(this, void 0);
42
- _KVPxeDatabase_outgoingNotesByOvpkM.set(this, void 0);
43
37
  _KVPxeDatabase_scopes.set(this, void 0);
44
38
  _KVPxeDatabase_notesToScope.set(this, void 0);
45
39
  _KVPxeDatabase_notesByContractAndScope.set(this, void 0);
@@ -60,7 +54,6 @@ export class KVPxeDatabase {
60
54
  __classPrivateFieldSet(this, _KVPxeDatabase_contractArtifacts, db.openMap('contract_artifacts'), "f");
61
55
  __classPrivateFieldSet(this, _KVPxeDatabase_contractInstances, db.openMap('contracts_instances'), "f");
62
56
  __classPrivateFieldSet(this, _KVPxeDatabase_synchronizedBlock, db.openSingleton('header'), "f");
63
- __classPrivateFieldSet(this, _KVPxeDatabase_syncedBlockPerPublicKey, db.openMap('synced_block_per_public_key'), "f");
64
57
  __classPrivateFieldSet(this, _KVPxeDatabase_notes, db.openMap('notes'), "f");
65
58
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotes, db.openMap('nullified_notes'), "f");
66
59
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifierToNoteId, db.openMap('nullifier_to_note'), "f");
@@ -71,26 +64,25 @@ export class KVPxeDatabase {
71
64
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByTxHash, db.openMultiMap('nullified_notes_by_tx_hash'), "f");
72
65
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, db.openMultiMap('nullified_notes_by_address_point'), "f");
73
66
  __classPrivateFieldSet(this, _KVPxeDatabase_nullifiedNotesByNullifier, db.openMap('nullified_notes_by_nullifier'), "f");
74
- __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotes, db.openMap('outgoing_notes'), "f");
75
- __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByContract, db.openMultiMap('outgoing_notes_by_contract'), "f");
76
- __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByStorageSlot, db.openMultiMap('outgoing_notes_by_storage_slot'), "f");
77
- __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByTxHash, db.openMultiMap('outgoing_notes_by_tx_hash'), "f");
78
- __classPrivateFieldSet(this, _KVPxeDatabase_outgoingNotesByOvpkM, db.openMultiMap('outgoing_notes_by_ovpk_m'), "f");
79
67
  __classPrivateFieldSet(this, _KVPxeDatabase_scopes, db.openSet('scopes'), "f");
80
68
  __classPrivateFieldSet(this, _KVPxeDatabase_notesToScope, db.openMultiMap('notes_to_scope'), "f");
81
69
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByContractAndScope, new Map(), "f");
82
70
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByStorageSlotAndScope, new Map(), "f");
83
71
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByTxHashAndScope, new Map(), "f");
84
72
  __classPrivateFieldSet(this, _KVPxeDatabase_notesByAddressPointAndScope, new Map(), "f");
85
- for (const scope of __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()) {
86
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_contract`));
87
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_storage_slot`));
88
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_tx_hash`));
89
- __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_address_point`));
90
- }
91
73
  __classPrivateFieldSet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, db.openMap('tagging_secret_indexes_for_senders'), "f");
92
74
  __classPrivateFieldSet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, db.openMap('tagging_secret_indexes_for_recipients'), "f");
93
75
  }
76
+ static async create(db) {
77
+ const pxeDB = new KVPxeDatabase(db);
78
+ for await (const scope of __classPrivateFieldGet(pxeDB, _KVPxeDatabase_scopes, "f").entriesAsync()) {
79
+ __classPrivateFieldGet(pxeDB, _KVPxeDatabase_notesByContractAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_contract`));
80
+ __classPrivateFieldGet(pxeDB, _KVPxeDatabase_notesByStorageSlotAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_storage_slot`));
81
+ __classPrivateFieldGet(pxeDB, _KVPxeDatabase_notesByTxHashAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_tx_hash`));
82
+ __classPrivateFieldGet(pxeDB, _KVPxeDatabase_notesByAddressPointAndScope, "f").set(scope, db.openMultiMap(`${scope}:notes_by_address_point`));
83
+ }
84
+ return pxeDB;
85
+ }
94
86
  async getContract(address) {
95
87
  const instance = await this.getContractInstance(address);
96
88
  const artifact = instance && (await this.getContractArtifact(instance?.contractClassId));
@@ -108,26 +100,27 @@ export class KVPxeDatabase {
108
100
  }
109
101
  await __classPrivateFieldGet(this, _KVPxeDatabase_contractArtifacts, "f").set(id.toString(), contractArtifactToBuffer(contract));
110
102
  }
111
- getContractArtifact(id) {
112
- const contract = __classPrivateFieldGet(this, _KVPxeDatabase_contractArtifacts, "f").get(id.toString());
113
- // TODO(@spalladino): AztecMap lies and returns Uint8Arrays instead of Buffers, hence the extra Buffer.from.
114
- return Promise.resolve(contract && contractArtifactFromBuffer(Buffer.from(contract)));
103
+ async getContractArtifact(id) {
104
+ const contract = await __classPrivateFieldGet(this, _KVPxeDatabase_contractArtifacts, "f").getAsync(id.toString());
105
+ // TODO(@spalladino): AztecAsyncMap lies and returns Uint8Arrays instead of Buffers, hence the extra Buffer.from.
106
+ return contract && contractArtifactFromBuffer(Buffer.from(contract));
115
107
  }
116
108
  async addContractInstance(contract) {
117
109
  await __classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").set(contract.address.toString(), new SerializableContractInstance(contract).toBuffer());
118
110
  }
119
- getContractInstance(address) {
120
- const contract = __classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").get(address.toString());
121
- return Promise.resolve(contract && SerializableContractInstance.fromBuffer(contract).withAddress(address));
111
+ async getContractInstance(address) {
112
+ const contract = await __classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").getAsync(address.toString());
113
+ return contract && SerializableContractInstance.fromBuffer(contract).withAddress(address);
122
114
  }
123
- getContractsAddresses() {
124
- return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").keys()).map(AztecAddress.fromString));
115
+ async getContractsAddresses() {
116
+ const keys = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_contractInstances, "f").keysAsync());
117
+ return keys.map(AztecAddress.fromString);
125
118
  }
126
119
  async addAuthWitness(messageHash, witness) {
127
120
  await __classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").set(messageHash.toString(), witness.map(w => w.toBuffer()));
128
121
  }
129
- getAuthWitness(messageHash) {
130
- const witness = __classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").get(messageHash.toString());
122
+ async getAuthWitness(messageHash) {
123
+ const witness = await __classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").getAsync(messageHash.toString());
131
124
  return Promise.resolve(witness?.map(w => Fr.fromBuffer(w)));
132
125
  }
133
126
  async addCapsule(capsule) {
@@ -138,153 +131,135 @@ export class KVPxeDatabase {
138
131
  return val?.map(b => Fr.fromBuffer(b));
139
132
  }
140
133
  async addNote(note, scope) {
141
- await this.addNotes([note], [], scope);
134
+ await this.addNotes([note], scope);
142
135
  }
143
- async addNotes(incomingNotes, outgoingNotes, scope = AztecAddress.ZERO) {
144
- if (!__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").has(scope.toString())) {
136
+ async addNotes(incomingNotes, scope = AztecAddress.ZERO) {
137
+ if (!(await __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").hasAsync(scope.toString()))) {
145
138
  await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_addScope).call(this, scope);
146
139
  }
147
- return this.db.transaction(() => {
140
+ return this.db.transactionAsync(async () => {
148
141
  for (const dao of incomingNotes) {
149
142
  // store notes by their index in the notes hash tree
150
143
  // this provides the uniqueness we need to store individual notes
151
144
  // and should also return notes in the order that they were created.
152
145
  // Had we stored them by their nullifier, they would be returned in random order
153
146
  const noteIndex = toBufferBE(dao.index, 32).toString('hex');
154
- void __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").set(noteIndex, dao.toBuffer());
155
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").set(noteIndex, scope.toString());
156
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").set(dao.siloedNullifier.toString(), noteIndex);
157
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope.toString()).set(dao.contractAddress.toString(), noteIndex);
158
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope.toString()).set(dao.storageSlot.toString(), noteIndex);
159
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope.toString()).set(dao.txHash.toString(), noteIndex);
160
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope.toString()).set(dao.addressPoint.toString(), noteIndex);
161
- }
162
- for (const dao of outgoingNotes) {
163
- const noteIndex = toBufferBE(dao.index, 32).toString('hex');
164
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotes, "f").set(noteIndex, dao.toBuffer());
165
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByContract, "f").set(dao.contractAddress.toString(), noteIndex);
166
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByStorageSlot, "f").set(dao.storageSlot.toString(), noteIndex);
167
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByTxHash, "f").set(dao.txHash.toString(), noteIndex);
168
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByOvpkM, "f").set(dao.ovpkM.toString(), noteIndex);
147
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").set(noteIndex, dao.toBuffer());
148
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").set(noteIndex, scope.toString());
149
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").set(dao.siloedNullifier.toString(), noteIndex);
150
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope.toString()).set(dao.contractAddress.toString(), noteIndex);
151
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope.toString()).set(dao.storageSlot.toString(), noteIndex);
152
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope.toString()).set(dao.txHash.toString(), noteIndex);
153
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope.toString()).set(dao.addressPoint.toString(), noteIndex);
169
154
  }
170
155
  });
171
156
  }
172
157
  removeNotesAfter(blockNumber) {
173
- return this.db.transaction(() => {
174
- for (const note of __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").values()) {
158
+ return this.db.transactionAsync(async () => {
159
+ const notes = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").valuesAsync());
160
+ for (const note of notes) {
175
161
  const noteDao = IncomingNoteDao.fromBuffer(note);
176
162
  if (noteDao.l2BlockNumber > blockNumber) {
177
163
  const noteIndex = toBufferBE(noteDao.index, 32).toString('hex');
178
- void __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").delete(noteIndex);
179
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").delete(noteIndex);
180
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").delete(noteDao.siloedNullifier.toString());
181
- for (const scope of __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()) {
182
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).deleteValue(noteDao.addressPoint.toString(), noteIndex);
183
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).deleteValue(noteDao.txHash.toString(), noteIndex);
184
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).deleteValue(noteDao.contractAddress.toString(), noteIndex);
185
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).deleteValue(noteDao.storageSlot.toString(), noteIndex);
164
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").delete(noteIndex);
165
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").delete(noteIndex);
166
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").delete(noteDao.siloedNullifier.toString());
167
+ const scopes = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entriesAsync());
168
+ for (const scope of scopes) {
169
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).deleteValue(noteDao.addressPoint.toString(), noteIndex);
170
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).deleteValue(noteDao.txHash.toString(), noteIndex);
171
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).deleteValue(noteDao.contractAddress.toString(), noteIndex);
172
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).deleteValue(noteDao.storageSlot.toString(), noteIndex);
186
173
  }
187
174
  }
188
175
  }
189
- for (const note of __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotes, "f").values()) {
190
- const noteDao = OutgoingNoteDao.fromBuffer(note);
191
- if (noteDao.l2BlockNumber > blockNumber) {
192
- const noteIndex = toBufferBE(noteDao.index, 32).toString('hex');
193
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotes, "f").delete(noteIndex);
194
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByContract, "f").deleteValue(noteDao.contractAddress.toString(), noteIndex);
195
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByStorageSlot, "f").deleteValue(noteDao.storageSlot.toString(), noteIndex);
196
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByTxHash, "f").deleteValue(noteDao.txHash.toString(), noteIndex);
197
- void __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByOvpkM, "f").deleteValue(noteDao.ovpkM.toString(), noteIndex);
198
- }
199
- }
200
176
  });
201
177
  }
202
178
  async unnullifyNotesAfter(blockNumber) {
203
179
  const nullifiersToUndo = [];
204
180
  const currentBlockNumber = blockNumber + 1;
205
- const maxBlockNumber = this.getBlockNumber() ?? currentBlockNumber;
181
+ const maxBlockNumber = (await this.getBlockNumber()) ?? currentBlockNumber;
206
182
  for (let i = currentBlockNumber; i <= maxBlockNumber; i++) {
207
- nullifiersToUndo.push(...__classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").getValues(i));
183
+ nullifiersToUndo.push(...(await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").getValuesAsync(i))));
208
184
  }
209
- const notesIndexesToReinsert = await this.db.transaction(() => nullifiersToUndo.map(nullifier => __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").get(nullifier)));
210
- const nullifiedNoteBuffers = await this.db.transaction(() => {
211
- return notesIndexesToReinsert
212
- .filter(noteIndex => noteIndex != undefined)
213
- .map(noteIndex => __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").get(noteIndex));
214
- });
185
+ const notesIndexesToReinsert = await Promise.all(nullifiersToUndo.map(nullifier => __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").getAsync(nullifier)));
186
+ const notNullNoteIndexes = notesIndexesToReinsert.filter(noteIndex => noteIndex != undefined);
187
+ const nullifiedNoteBuffers = await Promise.all(notNullNoteIndexes.map(noteIndex => __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").getAsync(noteIndex)));
215
188
  const noteDaos = nullifiedNoteBuffers
216
189
  .filter(buffer => buffer != undefined)
217
190
  .map(buffer => IncomingNoteDao.fromBuffer(buffer));
218
- await this.db.transaction(() => {
191
+ await this.db.transactionAsync(async () => {
219
192
  for (const dao of noteDaos) {
220
193
  const noteIndex = toBufferBE(dao.index, 32).toString('hex');
221
- void __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").set(noteIndex, dao.toBuffer());
222
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").set(dao.siloedNullifier.toString(), noteIndex);
223
- let scopes = Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").getValues(noteIndex) ?? []);
194
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").set(noteIndex, dao.toBuffer());
195
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").set(dao.siloedNullifier.toString(), noteIndex);
196
+ let scopes = (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").getValuesAsync(noteIndex))) ?? [];
224
197
  if (scopes.length === 0) {
225
198
  scopes = [new AztecAddress(dao.addressPoint.x).toString()];
226
199
  }
227
200
  for (const scope of scopes) {
228
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).set(dao.contractAddress.toString(), noteIndex);
229
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).set(dao.storageSlot.toString(), noteIndex);
230
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).set(dao.txHash.toString(), noteIndex);
231
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).set(dao.addressPoint.toString(), noteIndex);
232
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").set(noteIndex, scope);
201
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope.toString()).set(dao.contractAddress.toString(), noteIndex);
202
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope.toString()).set(dao.storageSlot.toString(), noteIndex);
203
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope.toString()).set(dao.txHash.toString(), noteIndex);
204
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope.toString()).set(dao.addressPoint.toString(), noteIndex);
205
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").set(noteIndex, scope);
233
206
  }
234
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").delete(noteIndex);
235
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").delete(noteIndex);
236
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").deleteValue(dao.l2BlockNumber, dao.siloedNullifier.toString());
237
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").deleteValue(dao.contractAddress.toString(), noteIndex);
238
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").deleteValue(dao.storageSlot.toString(), noteIndex);
239
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").deleteValue(dao.txHash.toString(), noteIndex);
240
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").deleteValue(dao.addressPoint.toString(), noteIndex);
241
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").delete(dao.siloedNullifier.toString());
207
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").delete(noteIndex);
208
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").delete(noteIndex);
209
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").deleteValue(dao.l2BlockNumber, dao.siloedNullifier.toString());
210
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").deleteValue(dao.contractAddress.toString(), noteIndex);
211
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").deleteValue(dao.storageSlot.toString(), noteIndex);
212
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").deleteValue(dao.txHash.toString(), noteIndex);
213
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").deleteValue(dao.addressPoint.toString(), noteIndex);
214
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").delete(dao.siloedNullifier.toString());
242
215
  }
243
216
  });
244
217
  }
245
- getIncomingNotes(filter) {
218
+ async getIncomingNotes(filter) {
246
219
  const publicKey = filter.owner ? filter.owner.toAddressPoint() : undefined;
247
220
  filter.status = filter.status ?? NoteStatus.ACTIVE;
248
221
  const candidateNoteSources = [];
249
- filter.scopes ?? (filter.scopes = [...__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()].map(addressString => AztecAddress.fromString(addressString)));
222
+ filter.scopes ?? (filter.scopes = (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entriesAsync())).map(addressString => AztecAddress.fromString(addressString)));
250
223
  const activeNoteIdsPerScope = [];
251
224
  for (const scope of new Set(filter.scopes)) {
252
225
  const formattedScopeString = scope.toString();
253
- if (!__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").has(formattedScopeString)) {
226
+ if (!__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").hasAsync(formattedScopeString)) {
254
227
  throw new Error('Trying to get incoming notes of an scope that is not in the PXE database');
255
228
  }
256
229
  activeNoteIdsPerScope.push(publicKey
257
- ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).getValues(publicKey.toString())
230
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).getValuesAsync(publicKey.toString()))
258
231
  : filter.txHash
259
- ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(formattedScopeString).getValues(filter.txHash.toString())
232
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(formattedScopeString).getValuesAsync(filter.txHash.toString()))
260
233
  : filter.contractAddress
261
- ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(formattedScopeString).getValues(filter.contractAddress.toString())
234
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f")
235
+ .get(formattedScopeString)
236
+ .getValuesAsync(filter.contractAddress.toString()))
262
237
  : filter.storageSlot
263
- ? __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(formattedScopeString).getValues(filter.storageSlot.toString())
264
- : __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).values());
238
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(formattedScopeString).getValuesAsync(filter.storageSlot.toString()))
239
+ : await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(formattedScopeString).valuesAsync()));
265
240
  }
266
241
  candidateNoteSources.push({
267
- ids: new Set(activeNoteIdsPerScope.flatMap(iterableIterator => [...iterableIterator])),
242
+ ids: new Set(activeNoteIdsPerScope.flat()),
268
243
  notes: __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f"),
269
244
  });
270
245
  if (filter.status == NoteStatus.ACTIVE_OR_NULLIFIED) {
271
246
  candidateNoteSources.push({
272
247
  ids: publicKey
273
- ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").getValues(publicKey.toString())
248
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").getValuesAsync(publicKey.toString()))
274
249
  : filter.txHash
275
- ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").getValues(filter.txHash.toString())
250
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").getValuesAsync(filter.txHash.toString()))
276
251
  : filter.contractAddress
277
- ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").getValues(filter.contractAddress.toString())
252
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").getValuesAsync(filter.contractAddress.toString()))
278
253
  : filter.storageSlot
279
- ? __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").getValues(filter.storageSlot.toString())
280
- : __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").keys(),
254
+ ? await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").getValuesAsync(filter.storageSlot.toString()))
255
+ : await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").keysAsync()),
281
256
  notes: __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f"),
282
257
  });
283
258
  }
284
259
  const result = [];
285
260
  for (const { ids, notes } of candidateNoteSources) {
286
261
  for (const id of ids) {
287
- const serializedNote = notes.get(id);
262
+ const serializedNote = await notes.getAsync(id);
288
263
  if (!serializedNote) {
289
264
  continue;
290
265
  }
@@ -307,94 +282,54 @@ export class KVPxeDatabase {
307
282
  result.push(note);
308
283
  }
309
284
  }
310
- return Promise.resolve(result);
311
- }
312
- getOutgoingNotes(filter) {
313
- const ovpkM = filter.owner
314
- ? __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, filter.owner)?.publicKeys.masterOutgoingViewingPublicKey
315
- : undefined;
316
- // Check if ovpkM is truthy
317
- const ids = ovpkM
318
- ? __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByOvpkM, "f").getValues(ovpkM.toString())
319
- : // If ovpkM is falsy, check if filter.txHash is truthy
320
- filter.txHash
321
- ? __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByTxHash, "f").getValues(filter.txHash.toString())
322
- : // If both ovpkM and filter.txHash are falsy, check if filter.contractAddress is truthy
323
- filter.contractAddress
324
- ? __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByContract, "f").getValues(filter.contractAddress.toString())
325
- : // If ovpkM, filter.txHash, and filter.contractAddress are all falsy, check if filter.storageSlot is truthy
326
- filter.storageSlot
327
- ? __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotesByStorageSlot, "f").getValues(filter.storageSlot.toString())
328
- : // If none of the above conditions are met, retrieve all keys from this.#outgoingNotes
329
- __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotes, "f").keys();
330
- const notes = [];
331
- for (const id of ids) {
332
- const serializedNote = __classPrivateFieldGet(this, _KVPxeDatabase_outgoingNotes, "f").get(id);
333
- if (!serializedNote) {
334
- continue;
335
- }
336
- const note = OutgoingNoteDao.fromBuffer(serializedNote);
337
- if (filter.contractAddress && !note.contractAddress.equals(filter.contractAddress)) {
338
- continue;
339
- }
340
- if (filter.txHash && !note.txHash.equals(filter.txHash)) {
341
- continue;
342
- }
343
- if (filter.storageSlot && !note.storageSlot.equals(filter.storageSlot)) {
344
- continue;
345
- }
346
- if (ovpkM && !note.ovpkM.equals(ovpkM)) {
347
- continue;
348
- }
349
- notes.push(note);
350
- }
351
- return Promise.resolve(notes);
285
+ return result;
352
286
  }
353
287
  removeNullifiedNotes(nullifiers, accountAddressPoint) {
354
288
  if (nullifiers.length === 0) {
355
289
  return Promise.resolve([]);
356
290
  }
357
- return __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").transaction(() => {
291
+ return this.db.transactionAsync(async () => {
358
292
  const nullifiedNotes = [];
359
293
  for (const blockScopedNullifier of nullifiers) {
360
294
  const { data: nullifier, l2BlockNumber: blockNumber } = blockScopedNullifier;
361
- const noteIndex = __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").get(nullifier.toString());
295
+ const noteIndex = await __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").getAsync(nullifier.toString());
362
296
  if (!noteIndex) {
363
297
  continue;
364
298
  }
365
- const noteBuffer = noteIndex ? __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").get(noteIndex) : undefined;
299
+ const noteBuffer = noteIndex ? await __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").getAsync(noteIndex) : undefined;
366
300
  if (!noteBuffer) {
367
301
  // note doesn't exist. Maybe it got nullified already
368
302
  continue;
369
303
  }
370
- const noteScopes = __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").getValues(noteIndex) ?? [];
304
+ const noteScopes = (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").getValuesAsync(noteIndex))) ?? [];
371
305
  const note = IncomingNoteDao.fromBuffer(noteBuffer);
372
306
  if (!note.addressPoint.equals(accountAddressPoint)) {
373
307
  // tried to nullify someone else's note
374
308
  continue;
375
309
  }
376
310
  nullifiedNotes.push(note);
377
- void __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").delete(noteIndex);
378
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").delete(noteIndex);
379
- for (const scope of __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entries()) {
380
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).deleteValue(accountAddressPoint.toString(), noteIndex);
381
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).deleteValue(note.txHash.toString(), noteIndex);
382
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).deleteValue(note.contractAddress.toString(), noteIndex);
383
- void __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).deleteValue(note.storageSlot.toString(), noteIndex);
311
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notes, "f").delete(noteIndex);
312
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesToScope, "f").delete(noteIndex);
313
+ const scopes = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").entriesAsync());
314
+ for (const scope of scopes) {
315
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").get(scope).deleteValue(accountAddressPoint.toString(), noteIndex);
316
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").get(scope).deleteValue(note.txHash.toString(), noteIndex);
317
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByContractAndScope, "f").get(scope).deleteValue(note.contractAddress.toString(), noteIndex);
318
+ await __classPrivateFieldGet(this, _KVPxeDatabase_notesByStorageSlotAndScope, "f").get(scope).deleteValue(note.storageSlot.toString(), noteIndex);
384
319
  }
385
320
  if (noteScopes !== undefined) {
386
321
  for (const scope of noteScopes) {
387
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").set(noteIndex, scope);
322
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesToScope, "f").set(noteIndex, scope);
388
323
  }
389
324
  }
390
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").set(noteIndex, note.toBuffer());
391
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").set(blockNumber, nullifier.toString());
392
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").set(note.contractAddress.toString(), noteIndex);
393
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").set(note.storageSlot.toString(), noteIndex);
394
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").set(note.txHash.toString(), noteIndex);
395
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").set(note.addressPoint.toString(), noteIndex);
396
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").set(nullifier.toString(), noteIndex);
397
- void __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").delete(nullifier.toString());
325
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotes, "f").set(noteIndex, note.toBuffer());
326
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiersByBlockNumber, "f").set(blockNumber, nullifier.toString());
327
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByContract, "f").set(note.contractAddress.toString(), noteIndex);
328
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").set(note.storageSlot.toString(), noteIndex);
329
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").set(note.txHash.toString(), noteIndex);
330
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").set(note.addressPoint.toString(), noteIndex);
331
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByNullifier, "f").set(nullifier.toString(), noteIndex);
332
+ await __classPrivateFieldGet(this, _KVPxeDatabase_nullifierToNoteId, "f").delete(nullifier.toString());
398
333
  }
399
334
  return nullifiedNotes;
400
335
  });
@@ -406,40 +341,39 @@ export class KVPxeDatabase {
406
341
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByStorageSlot, "f").set(note.storageSlot.toString(), noteIndex);
407
342
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByTxHash, "f").set(note.txHash.toString(), noteIndex);
408
343
  await __classPrivateFieldGet(this, _KVPxeDatabase_nullifiedNotesByAddressPoint, "f").set(note.addressPoint.toString(), noteIndex);
409
- return Promise.resolve();
410
344
  }
411
345
  async setHeader(header) {
412
346
  await __classPrivateFieldGet(this, _KVPxeDatabase_synchronizedBlock, "f").set(header.toBuffer());
413
347
  }
414
- getBlockNumber() {
415
- const headerBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_synchronizedBlock, "f").get();
348
+ async getBlockNumber() {
349
+ const headerBuffer = await __classPrivateFieldGet(this, _KVPxeDatabase_synchronizedBlock, "f").getAsync();
416
350
  if (!headerBuffer) {
417
351
  return undefined;
418
352
  }
419
- return Number(Header.fromBuffer(headerBuffer).globalVariables.blockNumber.toBigInt());
353
+ return Number(BlockHeader.fromBuffer(headerBuffer).globalVariables.blockNumber.toBigInt());
420
354
  }
421
- getHeader() {
422
- const headerBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_synchronizedBlock, "f").get();
355
+ async getBlockHeader() {
356
+ const headerBuffer = await __classPrivateFieldGet(this, _KVPxeDatabase_synchronizedBlock, "f").getAsync();
423
357
  if (!headerBuffer) {
424
358
  throw new Error(`Header not set`);
425
359
  }
426
- return Header.fromBuffer(headerBuffer);
360
+ return BlockHeader.fromBuffer(headerBuffer);
427
361
  }
428
- async addCompleteAddress(completeAddress) {
429
- await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_addScope).call(this, completeAddress.address);
430
- return __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").transaction(() => {
362
+ addCompleteAddress(completeAddress) {
363
+ return this.db.transactionAsync(async () => {
364
+ await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_addScope).call(this, completeAddress.address);
431
365
  const addressString = completeAddress.address.toString();
432
366
  const buffer = completeAddress.toBuffer();
433
- const existing = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").get(addressString);
434
- if (typeof existing === 'undefined') {
435
- const index = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").length;
436
- void __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").push(buffer);
437
- void __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").set(addressString, index);
367
+ const existing = await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").getAsync(addressString);
368
+ if (existing === undefined) {
369
+ const index = await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").lengthAsync();
370
+ await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").push(buffer);
371
+ await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").set(addressString, index);
438
372
  return true;
439
373
  }
440
374
  else {
441
- const existingBuffer = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").at(existing);
442
- if (existingBuffer?.equals(buffer)) {
375
+ const existingBuffer = await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").atAsync(existing);
376
+ if (existingBuffer && Buffer.from(existingBuffer).equals(buffer)) {
443
377
  return false;
444
378
  }
445
379
  throw new Error(`Complete address with aztec address ${addressString} but different public key or partial key already exists in memory database`);
@@ -447,41 +381,34 @@ export class KVPxeDatabase {
447
381
  });
448
382
  }
449
383
  getCompleteAddress(account) {
450
- return Promise.resolve(__classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, account));
384
+ return __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getCompleteAddress).call(this, account);
451
385
  }
452
- getCompleteAddresses() {
453
- return Promise.resolve(Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f")).map(v => CompleteAddress.fromBuffer(v)));
386
+ async getCompleteAddresses() {
387
+ return (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").valuesAsync())).map(v => CompleteAddress.fromBuffer(v));
454
388
  }
455
389
  async addContactAddress(address) {
456
- if (__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").has(address.toString())) {
390
+ if (await __classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").hasAsync(address.toString())) {
457
391
  return false;
458
392
  }
459
393
  await __classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").add(address.toString());
460
394
  return true;
461
395
  }
462
- getContactAddresses() {
463
- return [...__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").entries()].map(AztecAddress.fromString);
396
+ async getContactAddresses() {
397
+ return (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").entriesAsync())).map(AztecAddress.fromString);
464
398
  }
465
399
  async removeContactAddress(address) {
466
- if (!__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").has(address.toString())) {
400
+ if (!__classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").hasAsync(address.toString())) {
467
401
  return false;
468
402
  }
469
403
  await __classPrivateFieldGet(this, _KVPxeDatabase_addressBook, "f").delete(address.toString());
470
404
  return true;
471
405
  }
472
- getSynchedBlockNumberForAccount(account) {
473
- return __classPrivateFieldGet(this, _KVPxeDatabase_syncedBlockPerPublicKey, "f").get(account.toString());
474
- }
475
- setSynchedBlockNumberForAccount(account, blockNumber) {
476
- return __classPrivateFieldGet(this, _KVPxeDatabase_syncedBlockPerPublicKey, "f").set(account.toString(), blockNumber);
477
- }
478
406
  async estimateSize() {
479
- const incomingNotesSize = Array.from(await this.getIncomingNotes({})).reduce((sum, note) => sum + note.getSize(), 0);
480
- const outgoingNotesSize = Array.from(await this.getOutgoingNotes({})).reduce((sum, note) => sum + note.getSize(), 0);
481
- const authWitsSize = Array.from(__classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").values()).reduce((sum, value) => sum + value.length * Fr.SIZE_IN_BYTES, 0);
482
- const addressesSize = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").length * CompleteAddress.SIZE_IN_BYTES;
407
+ const incomingNotesSize = (await this.getIncomingNotes({})).reduce((sum, note) => sum + note.getSize(), 0);
408
+ const authWitsSize = (await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_authWitnesses, "f").valuesAsync())).reduce((sum, value) => sum + value.length * Fr.SIZE_IN_BYTES, 0);
409
+ const addressesSize = (await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").lengthAsync()) * CompleteAddress.SIZE_IN_BYTES;
483
410
  const treeRootsSize = Object.keys(MerkleTreeId).length * Fr.SIZE_IN_BYTES;
484
- return incomingNotesSize + outgoingNotesSize + treeRootsSize + authWitsSize + addressesSize;
411
+ return incomingNotesSize + treeRootsSize + authWitsSize + addressesSize;
485
412
  }
486
413
  async setTaggingSecretsIndexesAsSender(indexedSecrets) {
487
414
  await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_setTaggingSecretsIndexes).call(this, indexedSecrets, __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f"));
@@ -495,20 +422,18 @@ export class KVPxeDatabase {
495
422
  async getTaggingSecretsIndexesAsSender(appTaggingSecrets) {
496
423
  return await __classPrivateFieldGet(this, _KVPxeDatabase_instances, "m", _KVPxeDatabase_getTaggingSecretsIndexes).call(this, appTaggingSecrets, __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f"));
497
424
  }
498
- async resetNoteSyncData() {
499
- await this.db.transaction(() => {
500
- for (const recipient of __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f").keys()) {
501
- void __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f").delete(recipient);
502
- }
503
- for (const sender of __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f").keys()) {
504
- void __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f").delete(sender);
505
- }
425
+ resetNoteSyncData() {
426
+ return this.db.transactionAsync(async () => {
427
+ const recipients = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f").keysAsync());
428
+ await Promise.all(recipients.map(recipient => __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForRecipients, "f").delete(recipient)));
429
+ const senders = await toArray(__classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f").keysAsync());
430
+ await Promise.all(senders.map(sender => __classPrivateFieldGet(this, _KVPxeDatabase_taggingSecretIndexesForSenders, "f").delete(sender)));
506
431
  });
507
432
  }
508
433
  }
509
- _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_completeAddresses = new WeakMap(), _KVPxeDatabase_completeAddressIndex = new WeakMap(), _KVPxeDatabase_addressBook = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_nullifiersByBlockNumber = new WeakMap(), _KVPxeDatabase_nullifiedNotesToScope = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByAddressPoint = new WeakMap(), _KVPxeDatabase_nullifiedNotesByNullifier = new WeakMap(), _KVPxeDatabase_syncedBlockPerPublicKey = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_outgoingNotes = new WeakMap(), _KVPxeDatabase_outgoingNotesByContract = new WeakMap(), _KVPxeDatabase_outgoingNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_outgoingNotesByTxHash = new WeakMap(), _KVPxeDatabase_outgoingNotesByOvpkM = new WeakMap(), _KVPxeDatabase_scopes = new WeakMap(), _KVPxeDatabase_notesToScope = new WeakMap(), _KVPxeDatabase_notesByContractAndScope = new WeakMap(), _KVPxeDatabase_notesByStorageSlotAndScope = new WeakMap(), _KVPxeDatabase_notesByTxHashAndScope = new WeakMap(), _KVPxeDatabase_notesByAddressPointAndScope = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForSenders = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForRecipients = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_addScope = async function _KVPxeDatabase_addScope(scope) {
434
+ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_completeAddresses = new WeakMap(), _KVPxeDatabase_completeAddressIndex = new WeakMap(), _KVPxeDatabase_addressBook = new WeakMap(), _KVPxeDatabase_authWitnesses = new WeakMap(), _KVPxeDatabase_capsules = new WeakMap(), _KVPxeDatabase_notes = new WeakMap(), _KVPxeDatabase_nullifiedNotes = new WeakMap(), _KVPxeDatabase_nullifierToNoteId = new WeakMap(), _KVPxeDatabase_nullifiersByBlockNumber = new WeakMap(), _KVPxeDatabase_nullifiedNotesToScope = new WeakMap(), _KVPxeDatabase_nullifiedNotesByContract = new WeakMap(), _KVPxeDatabase_nullifiedNotesByStorageSlot = new WeakMap(), _KVPxeDatabase_nullifiedNotesByTxHash = new WeakMap(), _KVPxeDatabase_nullifiedNotesByAddressPoint = new WeakMap(), _KVPxeDatabase_nullifiedNotesByNullifier = new WeakMap(), _KVPxeDatabase_contractArtifacts = new WeakMap(), _KVPxeDatabase_contractInstances = new WeakMap(), _KVPxeDatabase_db = new WeakMap(), _KVPxeDatabase_scopes = new WeakMap(), _KVPxeDatabase_notesToScope = new WeakMap(), _KVPxeDatabase_notesByContractAndScope = new WeakMap(), _KVPxeDatabase_notesByStorageSlotAndScope = new WeakMap(), _KVPxeDatabase_notesByTxHashAndScope = new WeakMap(), _KVPxeDatabase_notesByAddressPointAndScope = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForSenders = new WeakMap(), _KVPxeDatabase_taggingSecretIndexesForRecipients = new WeakMap(), _KVPxeDatabase_instances = new WeakSet(), _KVPxeDatabase_addScope = async function _KVPxeDatabase_addScope(scope) {
510
435
  const scopeString = scope.toString();
511
- if (__classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").has(scopeString)) {
436
+ if (await __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").hasAsync(scopeString)) {
512
437
  return false;
513
438
  }
514
439
  await __classPrivateFieldGet(this, _KVPxeDatabase_scopes, "f").add(scopeString);
@@ -517,18 +442,16 @@ _KVPxeDatabase_synchronizedBlock = new WeakMap(), _KVPxeDatabase_completeAddress
517
442
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByTxHashAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_tx_hash`));
518
443
  __classPrivateFieldGet(this, _KVPxeDatabase_notesByAddressPointAndScope, "f").set(scopeString, __classPrivateFieldGet(this, _KVPxeDatabase_db, "f").openMultiMap(`${scopeString}:notes_by_address_point`));
519
444
  return true;
520
- }, _KVPxeDatabase_getCompleteAddress = function _KVPxeDatabase_getCompleteAddress(address) {
521
- const index = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").get(address.toString());
522
- if (typeof index === 'undefined') {
445
+ }, _KVPxeDatabase_getCompleteAddress = async function _KVPxeDatabase_getCompleteAddress(address) {
446
+ const index = await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddressIndex, "f").getAsync(address.toString());
447
+ if (index === undefined) {
523
448
  return undefined;
524
449
  }
525
- const value = __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").at(index);
450
+ const value = await __classPrivateFieldGet(this, _KVPxeDatabase_completeAddresses, "f").atAsync(index);
526
451
  return value ? CompleteAddress.fromBuffer(value) : undefined;
527
- }, _KVPxeDatabase_setTaggingSecretsIndexes = function _KVPxeDatabase_setTaggingSecretsIndexes(indexedSecrets, storageMap) {
528
- return this.db.transaction(() => {
529
- indexedSecrets.forEach(indexedSecret => void storageMap.set(indexedSecret.secret.toString(), indexedSecret.index));
530
- });
452
+ }, _KVPxeDatabase_setTaggingSecretsIndexes = async function _KVPxeDatabase_setTaggingSecretsIndexes(indexedSecrets, storageMap) {
453
+ await Promise.all(indexedSecrets.map(indexedSecret => storageMap.set(indexedSecret.secret.toString(), indexedSecret.index)));
531
454
  }, _KVPxeDatabase_getTaggingSecretsIndexes = function _KVPxeDatabase_getTaggingSecretsIndexes(appTaggingSecrets, storageMap) {
532
- return this.db.transaction(() => appTaggingSecrets.map(secret => storageMap.get(`${secret.toString()}`) ?? 0));
455
+ return Promise.all(appTaggingSecrets.map(async (secret) => (await storageMap.getAsync(`${secret.toString()}`)) ?? 0));
533
456
  };
534
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFHTCxZQUFZLEVBQ1osVUFBVSxHQUVYLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUdOLDRCQUE0QixHQUM3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBeUIsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVM5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUEwQ3hCLFlBQW9CLEVBQWdCOztRQUFoQixPQUFFLEdBQUYsRUFBRSxDQUFjO1FBekNwQyxtREFBMkM7UUFDM0MsbURBQXVDO1FBQ3ZDLHNEQUFnRDtRQUNoRCw2Q0FBK0I7UUFDL0IsK0NBQTJDO1FBQzNDLDBDQUFnQztRQUNoQyx1Q0FBaUM7UUFDakMsZ0RBQTBDO1FBQzFDLG1EQUE2QztRQUM3Qyx5REFBd0Q7UUFFeEQsdURBQXNEO1FBQ3RELDBEQUF5RDtRQUN6RCw2REFBNEQ7UUFDNUQsd0RBQXVEO1FBQ3ZELDhEQUE2RDtRQUM3RCwyREFBcUQ7UUFDckQseURBQW1EO1FBQ25ELG1EQUE2QztRQUM3QyxtREFBNkM7UUFDN0Msb0NBQWtCO1FBRWxCLCtDQUF5QztR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
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfcHhlX2RhdGFiYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2t2X3B4ZV9kYXRhYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBMEMsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLGVBQWUsRUFJZiw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQXlCLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3JELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBbUN4QixZQUE4QixFQUFxQjs7UUFBckIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFsQ25ELG1EQUFnRDtRQUNoRCxtREFBNEM7UUFDNUMsc0RBQXFEO1FBQ3JELDZDQUFvQztRQUNwQywrQ0FBZ0Q7UUFDaEQsMENBQXFDO1FBQ3JDLHVDQUFzQztRQUN0QyxnREFBK0M7UUFDL0MsbURBQWtEO1FBQ2xELHlEQUE2RDtRQUU3RCx1REFBMkQ7UUFDM0QsMERBQThEO1FBQzlELDZEQUFpRTtRQUNqRSx3REFBNEQ7UUFDNUQsOERBQWtFO1FBQ2xFLDJEQUEwRDtRQUMxRCxtREFBa0Q7UUFDbEQsbURBQWtEO1FBQ2xELG9DQUF1QjtRQUV2Qix3Q0FBK0I7UUFDL0IsOENBQWtE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