@aztec/simulator 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/acvm/acvm.js +18 -21
- package/dest/acvm/acvm_types.js +3 -2
- package/dest/acvm/deserialize.js +9 -13
- package/dest/acvm/index.js +0 -1
- package/dest/acvm/oracle/index.js +0 -1
- package/dest/acvm/oracle/oracle.js +42 -23
- package/dest/acvm/oracle/typed_oracle.js +36 -38
- package/dest/acvm/serialize.js +7 -14
- package/dest/avm/avm_context.js +24 -27
- package/dest/avm/avm_contract_call_result.js +12 -7
- package/dest/avm/avm_execution_environment.js +10 -7
- package/dest/avm/avm_gas.js +93 -56
- package/dest/avm/avm_machine_state.js +60 -61
- package/dest/avm/avm_memory_types.js +166 -255
- package/dest/avm/avm_simulator.js +68 -47
- package/dest/avm/avm_tree.js +282 -276
- package/dest/avm/bytecode_utils.js +8 -6
- package/dest/avm/errors.js +46 -63
- package/dest/avm/fixtures/avm_simulation_tester.js +18 -17
- package/dest/avm/fixtures/base_avm_simulation_tester.js +21 -16
- package/dest/avm/fixtures/index.js +27 -26
- package/dest/avm/fixtures/simple_contract_data_source.js +9 -13
- package/dest/avm/index.js +0 -1
- package/dest/avm/journal/index.js +0 -1
- package/dest/avm/journal/journal.js +147 -200
- package/dest/avm/journal/nullifiers.js +43 -46
- package/dest/avm/journal/public_storage.js +73 -87
- package/dest/avm/opcodes/accrued_substate.js +140 -110
- package/dest/avm/opcodes/addressing_mode.js +29 -31
- package/dest/avm/opcodes/arithmetic.js +17 -15
- package/dest/avm/opcodes/bitwise.js +40 -26
- package/dest/avm/opcodes/comparators.js +12 -10
- package/dest/avm/opcodes/contract.js +31 -29
- package/dest/avm/opcodes/control_flow.js +47 -43
- package/dest/avm/opcodes/conversion.js +30 -26
- package/dest/avm/opcodes/ec_add.js +35 -34
- package/dest/avm/opcodes/environment_getters.js +33 -33
- package/dest/avm/opcodes/external_calls.js +83 -74
- package/dest/avm/opcodes/hashing.js +69 -61
- package/dest/avm/opcodes/index.js +0 -1
- package/dest/avm/opcodes/instruction.js +31 -40
- package/dest/avm/opcodes/instruction_impl.js +12 -15
- package/dest/avm/opcodes/memory.js +177 -156
- package/dest/avm/opcodes/misc.js +27 -25
- package/dest/avm/opcodes/multi_scalar_mul.js +43 -41
- package/dest/avm/opcodes/storage.js +28 -25
- package/dest/avm/serialization/buffer_cursor.js +4 -4
- package/dest/avm/serialization/bytecode_serialization.js +292 -89
- package/dest/avm/serialization/instruction_serialization.js +67 -28
- package/dest/avm/test_utils.js +6 -9
- package/dest/client/client_execution_context.js +197 -219
- package/dest/client/db_oracle.js +4 -7
- package/dest/client/execution_note_cache.js +80 -81
- package/dest/client/index.js +0 -1
- package/dest/client/pick_notes.js +27 -30
- package/dest/client/private_execution.js +13 -14
- package/dest/client/simulator.js +44 -48
- package/dest/client/unconstrained_execution.js +8 -11
- package/dest/client/view_data_oracle.js +130 -139
- package/dest/common/debug_fn_name.js +1 -4
- package/dest/common/errors.js +30 -39
- package/dest/common/hashed_values_cache.js +16 -20
- package/dest/common/index.js +0 -1
- package/dest/common/message_load_oracle_inputs.js +7 -7
- package/dest/common/simulation_provider.js +3 -6
- package/dest/common.js +0 -1
- package/dest/providers/acvm_native.js +46 -32
- package/dest/providers/acvm_wasm.js +18 -10
- package/dest/providers/acvm_wasm_with_blobs.js +2 -5
- package/dest/providers/factory.js +5 -5
- package/dest/providers/index.js +0 -1
- package/dest/public/bytecode_errors.js +1 -2
- package/dest/public/db_interfaces.js +1 -2
- package/dest/public/execution.js +2 -4
- package/dest/public/executor_metrics.js +16 -12
- package/dest/public/fee_payment.js +2 -5
- package/dest/public/fixtures/index.js +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +13 -17
- package/dest/public/fixtures/utils.js +11 -14
- package/dest/public/index.js +0 -1
- package/dest/public/public_db_sources.js +79 -87
- package/dest/public/public_processor.js +310 -306
- package/dest/public/public_processor_metrics.js +46 -27
- package/dest/public/public_tx_context.js +97 -118
- package/dest/public/public_tx_simulator.js +299 -314
- package/dest/public/side_effect_errors.js +1 -2
- package/dest/public/side_effect_trace.js +44 -71
- package/dest/public/side_effect_trace_interface.js +1 -2
- package/dest/public/unique_class_ids.js +22 -27
- package/dest/public/utils.js +16 -11
- package/dest/server.js +0 -1
- package/dest/stats/index.js +0 -1
- package/dest/stats/stats.js +1 -2
- package/dest/test/utils.js +5 -4
- package/package.json +11 -11
- package/src/acvm/oracle/typed_oracle.ts +34 -34
- package/src/avm/avm_machine_state.ts +18 -14
- package/src/avm/avm_memory_types.ts +43 -183
- package/src/avm/avm_simulator.ts +37 -11
- package/src/avm/opcodes/accrued_substate.ts +7 -21
- package/src/avm/opcodes/addressing_mode.ts +9 -2
- package/src/avm/opcodes/arithmetic.ts +1 -3
- package/src/avm/opcodes/bitwise.ts +2 -6
- package/src/avm/opcodes/comparators.ts +1 -3
- package/src/avm/opcodes/contract.ts +1 -3
- package/src/avm/opcodes/control_flow.ts +1 -9
- package/src/avm/opcodes/conversion.ts +1 -3
- package/src/avm/opcodes/ec_add.ts +1 -3
- package/src/avm/opcodes/environment_getters.ts +1 -3
- package/src/avm/opcodes/external_calls.ts +3 -6
- package/src/avm/opcodes/hashing.ts +3 -9
- package/src/avm/opcodes/memory.ts +6 -20
- package/src/avm/opcodes/misc.ts +1 -3
- package/src/avm/opcodes/multi_scalar_mul.ts +1 -7
- package/src/avm/opcodes/storage.ts +2 -6
- package/src/client/index.ts +2 -2
- package/dest/acvm/acvm.d.ts +0 -35
- package/dest/acvm/acvm.d.ts.map +0 -1
- package/dest/acvm/acvm_types.d.ts +0 -10
- package/dest/acvm/acvm_types.d.ts.map +0 -1
- package/dest/acvm/deserialize.d.ts +0 -36
- package/dest/acvm/deserialize.d.ts.map +0 -1
- package/dest/acvm/index.d.ts +0 -6
- package/dest/acvm/index.d.ts.map +0 -1
- package/dest/acvm/oracle/index.d.ts +0 -14
- package/dest/acvm/oracle/index.d.ts.map +0 -1
- package/dest/acvm/oracle/oracle.d.ts +0 -49
- package/dest/acvm/oracle/oracle.d.ts.map +0 -1
- package/dest/acvm/oracle/typed_oracle.d.ts +0 -75
- package/dest/acvm/oracle/typed_oracle.d.ts.map +0 -1
- package/dest/acvm/serialize.d.ts +0 -20
- package/dest/acvm/serialize.d.ts.map +0 -1
- package/dest/avm/avm_context.d.ts +0 -39
- package/dest/avm/avm_context.d.ts.map +0 -1
- package/dest/avm/avm_contract_call_result.d.ts +0 -30
- package/dest/avm/avm_contract_call_result.d.ts.map +0 -1
- package/dest/avm/avm_execution_environment.d.ts +0 -21
- package/dest/avm/avm_execution_environment.d.ts.map +0 -1
- package/dest/avm/avm_gas.d.ts +0 -60
- package/dest/avm/avm_gas.d.ts.map +0 -1
- package/dest/avm/avm_machine_state.d.ts +0 -93
- package/dest/avm/avm_machine_state.d.ts.map +0 -1
- package/dest/avm/avm_memory_types.d.ts +0 -310
- package/dest/avm/avm_memory_types.d.ts.map +0 -1
- package/dest/avm/avm_simulator.d.ts +0 -37
- package/dest/avm/avm_simulator.d.ts.map +0 -1
- package/dest/avm/avm_tree.d.ts +0 -281
- package/dest/avm/avm_tree.d.ts.map +0 -1
- package/dest/avm/bytecode_utils.d.ts +0 -5
- package/dest/avm/bytecode_utils.d.ts.map +0 -1
- package/dest/avm/errors.d.ts +0 -121
- package/dest/avm/errors.d.ts.map +0 -1
- package/dest/avm/fixtures/avm_simulation_tester.d.ts +0 -21
- package/dest/avm/fixtures/avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts +0 -35
- package/dest/avm/fixtures/base_avm_simulation_tester.d.ts.map +0 -1
- package/dest/avm/fixtures/index.d.ts +0 -67
- package/dest/avm/fixtures/index.d.ts.map +0 -1
- package/dest/avm/fixtures/simple_contract_data_source.d.ts +0 -31
- package/dest/avm/fixtures/simple_contract_data_source.d.ts.map +0 -1
- package/dest/avm/index.d.ts +0 -4
- package/dest/avm/index.d.ts.map +0 -1
- package/dest/avm/journal/index.d.ts +0 -2
- package/dest/avm/journal/index.d.ts.map +0 -1
- package/dest/avm/journal/journal.d.ts +0 -176
- package/dest/avm/journal/journal.d.ts.map +0 -1
- package/dest/avm/journal/nullifiers.d.ts +0 -62
- package/dest/avm/journal/nullifiers.d.ts.map +0 -1
- package/dest/avm/journal/public_storage.d.ts +0 -66
- package/dest/avm/journal/public_storage.d.ts.map +0 -1
- package/dest/avm/opcodes/accrued_substate.d.ts +0 -75
- package/dest/avm/opcodes/accrued_substate.d.ts.map +0 -1
- package/dest/avm/opcodes/addressing_mode.d.ts +0 -27
- package/dest/avm/opcodes/addressing_mode.d.ts.map +0 -1
- package/dest/avm/opcodes/arithmetic.d.ts +0 -37
- package/dest/avm/opcodes/arithmetic.d.ts.map +0 -1
- package/dest/avm/opcodes/bitwise.d.ts +0 -50
- package/dest/avm/opcodes/bitwise.d.ts.map +0 -1
- package/dest/avm/opcodes/comparators.d.ts +0 -25
- package/dest/avm/opcodes/comparators.d.ts.map +0 -1
- package/dest/avm/opcodes/contract.d.ts +0 -21
- package/dest/avm/opcodes/contract.d.ts.map +0 -1
- package/dest/avm/opcodes/control_flow.d.ts +0 -41
- package/dest/avm/opcodes/control_flow.d.ts.map +0 -1
- package/dest/avm/opcodes/conversion.d.ts +0 -17
- package/dest/avm/opcodes/conversion.d.ts.map +0 -1
- package/dest/avm/opcodes/ec_add.d.ts +0 -19
- package/dest/avm/opcodes/ec_add.d.ts.map +0 -1
- package/dest/avm/opcodes/environment_getters.d.ts +0 -28
- package/dest/avm/opcodes/environment_getters.d.ts.map +0 -1
- package/dest/avm/opcodes/external_calls.d.ts +0 -50
- package/dest/avm/opcodes/external_calls.d.ts.map +0 -1
- package/dest/avm/opcodes/hashing.d.ts +0 -36
- package/dest/avm/opcodes/hashing.d.ts.map +0 -1
- package/dest/avm/opcodes/index.d.ts +0 -16
- package/dest/avm/opcodes/index.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction.d.ts +0 -70
- package/dest/avm/opcodes/instruction.d.ts.map +0 -1
- package/dest/avm/opcodes/instruction_impl.d.ts +0 -19
- package/dest/avm/opcodes/instruction_impl.d.ts.map +0 -1
- package/dest/avm/opcodes/memory.d.ts +0 -74
- package/dest/avm/opcodes/memory.d.ts.map +0 -1
- package/dest/avm/opcodes/misc.d.ts +0 -17
- package/dest/avm/opcodes/misc.d.ts.map +0 -1
- package/dest/avm/opcodes/multi_scalar_mul.d.ts +0 -16
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +0 -1
- package/dest/avm/opcodes/storage.d.ts +0 -24
- package/dest/avm/opcodes/storage.d.ts.map +0 -1
- package/dest/avm/serialization/buffer_cursor.d.ts +0 -28
- package/dest/avm/serialization/buffer_cursor.d.ts.map +0 -1
- package/dest/avm/serialization/bytecode_serialization.d.ts +0 -21
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +0 -1
- package/dest/avm/serialization/instruction_serialization.d.ts +0 -105
- package/dest/avm/serialization/instruction_serialization.d.ts.map +0 -1
- package/dest/avm/test_utils.d.ts +0 -16
- package/dest/avm/test_utils.d.ts.map +0 -1
- package/dest/client/client_execution_context.d.ts +0 -214
- package/dest/client/client_execution_context.d.ts.map +0 -1
- package/dest/client/db_oracle.d.ts +0 -229
- package/dest/client/db_oracle.d.ts.map +0 -1
- package/dest/client/execution_note_cache.d.ts +0 -93
- package/dest/client/execution_note_cache.d.ts.map +0 -1
- package/dest/client/index.d.ts +0 -15
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/pick_notes.d.ts +0 -85
- package/dest/client/pick_notes.d.ts.map +0 -1
- package/dest/client/private_execution.d.ts +0 -19
- package/dest/client/private_execution.d.ts.map +0 -1
- package/dest/client/simulator.d.ts +0 -60
- package/dest/client/simulator.d.ts.map +0 -1
- package/dest/client/unconstrained_execution.d.ts +0 -10
- package/dest/client/unconstrained_execution.d.ts.map +0 -1
- package/dest/client/view_data_oracle.d.ts +0 -159
- package/dest/client/view_data_oracle.d.ts.map +0 -1
- package/dest/common/debug_fn_name.d.ts +0 -4
- package/dest/common/debug_fn_name.d.ts.map +0 -1
- package/dest/common/errors.d.ts +0 -54
- package/dest/common/errors.d.ts.map +0 -1
- package/dest/common/hashed_values_cache.d.ts +0 -28
- package/dest/common/hashed_values_cache.d.ts.map +0 -1
- package/dest/common/index.d.ts +0 -3
- package/dest/common/index.d.ts.map +0 -1
- package/dest/common/message_load_oracle_inputs.d.ts +0 -15
- package/dest/common/message_load_oracle_inputs.d.ts.map +0 -1
- package/dest/common/simulation_provider.d.ts +0 -19
- package/dest/common/simulation_provider.d.ts.map +0 -1
- package/dest/common.d.ts +0 -2
- package/dest/common.d.ts.map +0 -1
- package/dest/providers/acvm_native.d.ts +0 -40
- package/dest/providers/acvm_native.d.ts.map +0 -1
- package/dest/providers/acvm_wasm.d.ts +0 -15
- package/dest/providers/acvm_wasm.d.ts.map +0 -1
- package/dest/providers/acvm_wasm_with_blobs.d.ts +0 -19
- package/dest/providers/acvm_wasm_with_blobs.d.ts.map +0 -1
- package/dest/providers/factory.d.ts +0 -12
- package/dest/providers/factory.d.ts.map +0 -1
- package/dest/providers/index.d.ts +0 -5
- package/dest/providers/index.d.ts.map +0 -1
- package/dest/public/bytecode_errors.d.ts +0 -4
- package/dest/public/bytecode_errors.d.ts.map +0 -1
- package/dest/public/db_interfaces.d.ts +0 -105
- package/dest/public/db_interfaces.d.ts.map +0 -1
- package/dest/public/execution.d.ts +0 -102
- package/dest/public/execution.d.ts.map +0 -1
- package/dest/public/executor_metrics.d.ts +0 -13
- package/dest/public/executor_metrics.d.ts.map +0 -1
- package/dest/public/fee_payment.d.ts +0 -11
- package/dest/public/fee_payment.d.ts.map +0 -1
- package/dest/public/fixtures/index.d.ts +0 -3
- package/dest/public/fixtures/index.d.ts.map +0 -1
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +0 -21
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +0 -1
- package/dest/public/fixtures/utils.d.ts +0 -17
- package/dest/public/fixtures/utils.d.ts.map +0 -1
- package/dest/public/index.d.ts +0 -9
- package/dest/public/index.d.ts.map +0 -1
- package/dest/public/public_db_sources.d.ts +0 -81
- package/dest/public/public_db_sources.d.ts.map +0 -1
- package/dest/public/public_processor.d.ts +0 -72
- package/dest/public/public_processor.d.ts.map +0 -1
- package/dest/public/public_processor_metrics.d.ts +0 -27
- package/dest/public/public_processor_metrics.d.ts.map +0 -1
- package/dest/public/public_tx_context.d.ts +0 -131
- package/dest/public/public_tx_context.d.ts.map +0 -1
- package/dest/public/public_tx_simulator.d.ts +0 -99
- package/dest/public/public_tx_simulator.d.ts.map +0 -1
- package/dest/public/side_effect_errors.d.ts +0 -4
- package/dest/public/side_effect_errors.d.ts.map +0 -1
- package/dest/public/side_effect_trace.d.ts +0 -126
- package/dest/public/side_effect_trace.d.ts.map +0 -1
- package/dest/public/side_effect_trace_interface.d.ts +0 -32
- package/dest/public/side_effect_trace_interface.d.ts.map +0 -1
- package/dest/public/unique_class_ids.d.ts +0 -37
- package/dest/public/unique_class_ids.d.ts.map +0 -1
- package/dest/public/utils.d.ts +0 -5
- package/dest/public/utils.d.ts.map +0 -1
- package/dest/server.d.ts +0 -6
- package/dest/server.d.ts.map +0 -1
- package/dest/stats/index.d.ts +0 -2
- package/dest/stats/index.d.ts.map +0 -1
- package/dest/stats/stats.d.ts +0 -4
- package/dest/stats/stats.d.ts.map +0 -1
- package/dest/test/utils.d.ts +0 -12
- package/dest/test/utils.d.ts.map +0 -1
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { MEM_TAG_FF, MEM_TAG_U1, MEM_TAG_U8, MEM_TAG_U16, MEM_TAG_U32, MEM_TAG_U64, MEM_TAG_U128
|
|
1
|
+
import { MEM_TAG_FF, MEM_TAG_U1, MEM_TAG_U8, MEM_TAG_U16, MEM_TAG_U32, MEM_TAG_U64, MEM_TAG_U128 } from '@aztec/circuits.js';
|
|
2
2
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
3
|
import { toBufferBE } from '@aztec/foundation/bigint-buffer';
|
|
4
4
|
import { Fr } from '@aztec/foundation/fields';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { strict as assert } from 'assert';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
/** MemoryValue gathers the common operations for all memory types. */
|
|
10
|
-
export class MemoryValue {
|
|
7
|
+
import { InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError } from './errors.js';
|
|
8
|
+
/** MemoryValue gathers the common operations for all memory types. */ export class MemoryValue {
|
|
11
9
|
// To field
|
|
12
10
|
toFr() {
|
|
13
11
|
return new Fr(this.toBigInt());
|
|
@@ -23,76 +21,73 @@ export class MemoryValue {
|
|
|
23
21
|
return `${this.constructor.name}(0x${this.toBigInt().toString(16)})`;
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
|
-
/** IntegralValue gathers the common operations for all integral memory types. */
|
|
27
|
-
export class IntegralValue extends MemoryValue {
|
|
24
|
+
/** IntegralValue gathers the common operations for all integral memory types. */ export class IntegralValue extends MemoryValue {
|
|
28
25
|
}
|
|
29
26
|
/**
|
|
30
27
|
* This function creates a class for unsigned integers of a given number of bits.
|
|
31
28
|
* In TypeScript terms, it's a class mixin.
|
|
32
|
-
**/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return toBufferBE(this.n, bits / 8);
|
|
29
|
+
**/ function UnsignedIntegerClassFactory(bits) {
|
|
30
|
+
return class NewUintClass extends IntegralValue {
|
|
31
|
+
static mod = 1n << BigInt(bits);
|
|
32
|
+
static bitmask = this.mod - 1n;
|
|
33
|
+
n;
|
|
34
|
+
constructor(n){
|
|
35
|
+
super();
|
|
36
|
+
this.n = BigInt(n);
|
|
37
|
+
assert(n < NewUintClass.mod, `Value ${n} is too large for ${this.constructor.name}.`);
|
|
38
|
+
}
|
|
39
|
+
build(n) {
|
|
40
|
+
return new this.constructor.prototype.constructor(n);
|
|
41
|
+
}
|
|
42
|
+
add(rhs) {
|
|
43
|
+
return this.build(this.n + rhs.n & NewUintClass.bitmask);
|
|
44
|
+
}
|
|
45
|
+
sub(rhs) {
|
|
46
|
+
const res = this.n - rhs.n;
|
|
47
|
+
return this.build(res >= 0 ? res : res + NewUintClass.mod);
|
|
48
|
+
}
|
|
49
|
+
mul(rhs) {
|
|
50
|
+
return this.build(this.n * rhs.n & NewUintClass.bitmask);
|
|
51
|
+
}
|
|
52
|
+
div(rhs) {
|
|
53
|
+
return this.build(this.n / rhs.n);
|
|
54
|
+
}
|
|
55
|
+
// No sign extension.
|
|
56
|
+
shr(rhs) {
|
|
57
|
+
// Note that this.n is > 0 by class invariant.
|
|
58
|
+
return this.build(this.n >> rhs.n);
|
|
59
|
+
}
|
|
60
|
+
shl(rhs) {
|
|
61
|
+
return this.build(this.n << rhs.n & NewUintClass.bitmask);
|
|
62
|
+
}
|
|
63
|
+
and(rhs) {
|
|
64
|
+
return this.build(this.n & rhs.n);
|
|
65
|
+
}
|
|
66
|
+
or(rhs) {
|
|
67
|
+
return this.build(this.n | rhs.n);
|
|
68
|
+
}
|
|
69
|
+
xor(rhs) {
|
|
70
|
+
return this.build(this.n ^ rhs.n);
|
|
71
|
+
}
|
|
72
|
+
not() {
|
|
73
|
+
return this.build(~this.n & NewUintClass.bitmask);
|
|
74
|
+
}
|
|
75
|
+
equals(rhs) {
|
|
76
|
+
return this.n === rhs.n;
|
|
77
|
+
}
|
|
78
|
+
lt(rhs) {
|
|
79
|
+
return this.n < rhs.n;
|
|
80
|
+
}
|
|
81
|
+
toBigInt() {
|
|
82
|
+
return this.n;
|
|
83
|
+
}
|
|
84
|
+
toBuffer() {
|
|
85
|
+
if (bits < 8) {
|
|
86
|
+
return toBufferBE(this.n, 1);
|
|
91
87
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
_a;
|
|
88
|
+
return toBufferBE(this.n, bits / 8);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
96
91
|
}
|
|
97
92
|
// Now we can create the classes for each unsigned integer type.
|
|
98
93
|
// We extend instead of just assigning so that the class has the right name.
|
|
@@ -110,7 +105,9 @@ export class Uint64 extends UnsignedIntegerClassFactory(64) {
|
|
|
110
105
|
export class Uint128 extends UnsignedIntegerClassFactory(128) {
|
|
111
106
|
}
|
|
112
107
|
export class Field extends MemoryValue {
|
|
113
|
-
|
|
108
|
+
static MODULUS = Fr.MODULUS;
|
|
109
|
+
rep;
|
|
110
|
+
constructor(v){
|
|
114
111
|
super();
|
|
115
112
|
this.rep = new Fr(v);
|
|
116
113
|
}
|
|
@@ -147,39 +144,39 @@ export class Field extends MemoryValue {
|
|
|
147
144
|
return this.rep.toBuffer();
|
|
148
145
|
}
|
|
149
146
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
TypeTag[TypeTag["
|
|
154
|
-
TypeTag[TypeTag["
|
|
155
|
-
TypeTag[TypeTag["
|
|
156
|
-
TypeTag[TypeTag["
|
|
157
|
-
TypeTag[TypeTag["
|
|
158
|
-
TypeTag[TypeTag["
|
|
159
|
-
TypeTag
|
|
160
|
-
|
|
161
|
-
})(TypeTag || (TypeTag = {}));
|
|
147
|
+
export var TypeTag = /*#__PURE__*/ function(TypeTag) {
|
|
148
|
+
TypeTag[TypeTag["FIELD"] = MEM_TAG_FF] = "FIELD";
|
|
149
|
+
TypeTag[TypeTag["UINT1"] = MEM_TAG_U1] = "UINT1";
|
|
150
|
+
TypeTag[TypeTag["UINT8"] = MEM_TAG_U8] = "UINT8";
|
|
151
|
+
TypeTag[TypeTag["UINT16"] = MEM_TAG_U16] = "UINT16";
|
|
152
|
+
TypeTag[TypeTag["UINT32"] = MEM_TAG_U32] = "UINT32";
|
|
153
|
+
TypeTag[TypeTag["UINT64"] = MEM_TAG_U64] = "UINT64";
|
|
154
|
+
TypeTag[TypeTag["UINT128"] = MEM_TAG_U128] = "UINT128";
|
|
155
|
+
TypeTag[TypeTag["INVALID"] = void 0] = "INVALID";
|
|
156
|
+
return TypeTag;
|
|
157
|
+
}({});
|
|
162
158
|
export class TaggedMemory {
|
|
163
|
-
|
|
159
|
+
static log = createLogger('simulator:avm:memory');
|
|
160
|
+
// Whether to track and validate memory accesses for each instruction.
|
|
161
|
+
static TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
|
|
162
|
+
// Memory is modelled by a map with key type being number.
|
|
163
|
+
// We however restrict the keys to be non-negative integers smaller than
|
|
164
|
+
// MAX_MEMORY_SIZE.
|
|
165
|
+
static MAX_MEMORY_SIZE = Number(1n << 32n);
|
|
166
|
+
_mem;
|
|
167
|
+
constructor(){
|
|
164
168
|
this._mem = new Map();
|
|
165
169
|
}
|
|
166
170
|
getMaxMemorySize() {
|
|
167
171
|
return TaggedMemory.MAX_MEMORY_SIZE;
|
|
168
172
|
}
|
|
169
|
-
/** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
|
|
170
|
-
track(type = 'instruction') {
|
|
171
|
-
return TaggedMemory.TRACK_MEMORY_ACCESSES ? new MeteredTaggedMemory(this, type) : this;
|
|
172
|
-
}
|
|
173
173
|
get(offset) {
|
|
174
|
-
|
|
175
|
-
const value = this.getAs(offset);
|
|
176
|
-
return value;
|
|
174
|
+
return this.getAs(offset);
|
|
177
175
|
}
|
|
178
176
|
getAs(offset) {
|
|
179
|
-
assert(Number.isInteger(offset));
|
|
180
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
177
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
181
178
|
const word = this._mem.get(offset);
|
|
182
|
-
TaggedMemory.log.trace(`get(${offset}) = ${word}`);
|
|
179
|
+
//TaggedMemory.log.trace(`get(${offset}) = ${word}`);
|
|
183
180
|
if (word === undefined) {
|
|
184
181
|
TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
|
|
185
182
|
return new Field(0);
|
|
@@ -192,7 +189,7 @@ export class TaggedMemory {
|
|
|
192
189
|
throw new MemorySliceOutOfRangeError(offset, size);
|
|
193
190
|
}
|
|
194
191
|
const slice = new Array(size);
|
|
195
|
-
for
|
|
192
|
+
for(let i = 0; i < size; i++){
|
|
196
193
|
slice[i] = this._mem.get(offset + i) ?? new Field(0);
|
|
197
194
|
}
|
|
198
195
|
TaggedMemory.log.trace(`getSlice(${offset}, ${size}) = ${slice}`);
|
|
@@ -205,30 +202,27 @@ export class TaggedMemory {
|
|
|
205
202
|
return this.getSlice(offset, size).map(TaggedMemory.getTag);
|
|
206
203
|
}
|
|
207
204
|
set(offset, v) {
|
|
208
|
-
assert(Number.isInteger(offset));
|
|
209
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
205
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
210
206
|
this._mem.set(offset, v);
|
|
211
|
-
|
|
207
|
+
//TaggedMemory.log.trace(`set(${offset}, ${v})`);
|
|
212
208
|
}
|
|
213
209
|
setSlice(offset, slice) {
|
|
214
210
|
assert(Number.isInteger(offset));
|
|
215
211
|
if (offset + slice.length > TaggedMemory.MAX_MEMORY_SIZE) {
|
|
216
212
|
throw new MemorySliceOutOfRangeError(offset, slice.length);
|
|
217
213
|
}
|
|
218
|
-
slice.forEach((element, idx)
|
|
214
|
+
slice.forEach((element, idx)=>{
|
|
219
215
|
this._mem.set(offset + idx, element);
|
|
220
216
|
});
|
|
221
217
|
TaggedMemory.log.trace(`setSlice(${offset}, ${slice})`);
|
|
222
218
|
}
|
|
223
219
|
getTag(offset) {
|
|
224
|
-
assert(Number.isInteger(offset));
|
|
225
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
220
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
226
221
|
return TaggedMemory.getTag(this._mem.get(offset));
|
|
227
222
|
}
|
|
228
223
|
/**
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
checkTag(tag, offset) {
|
|
224
|
+
* Check that the memory at the given offset matches the specified tag.
|
|
225
|
+
*/ checkTag(tag, offset) {
|
|
232
226
|
const gotTag = this.getTag(offset);
|
|
233
227
|
if (gotTag !== tag) {
|
|
234
228
|
throw TagCheckError.forOffset(offset, TypeTag[gotTag], TypeTag[tag]);
|
|
@@ -238,192 +232,109 @@ export class TaggedMemory {
|
|
|
238
232
|
this.checkTag(TypeTag.UINT32, offset);
|
|
239
233
|
}
|
|
240
234
|
static checkIsIntegralTag(tag) {
|
|
241
|
-
if (!
|
|
235
|
+
if (!INTEGRAL_TAGS.has(tag)) {
|
|
242
236
|
throw TagCheckError.forTag(TypeTag[tag], 'integral');
|
|
243
237
|
}
|
|
244
238
|
}
|
|
245
239
|
static checkIsValidTag(tagNumber) {
|
|
246
|
-
if (!
|
|
247
|
-
TypeTag.FIELD,
|
|
248
|
-
TypeTag.UINT1,
|
|
249
|
-
TypeTag.UINT8,
|
|
250
|
-
TypeTag.UINT16,
|
|
251
|
-
TypeTag.UINT32,
|
|
252
|
-
TypeTag.UINT64,
|
|
253
|
-
TypeTag.UINT128,
|
|
254
|
-
].includes(tagNumber)) {
|
|
240
|
+
if (!VALID_TAGS.has(tagNumber)) {
|
|
255
241
|
throw new InvalidTagValueError(tagNumber);
|
|
256
242
|
}
|
|
257
243
|
}
|
|
258
244
|
/**
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
for (const offset of offsets) {
|
|
245
|
+
* Check tags for memory at all of the specified offsets.
|
|
246
|
+
*/ checkTags(tag, ...offsets) {
|
|
247
|
+
for (const offset of offsets){
|
|
263
248
|
this.checkTag(tag, offset);
|
|
264
249
|
}
|
|
265
250
|
}
|
|
266
251
|
/**
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
for (let i = 1; i < offsets.length; i++) {
|
|
272
|
-
this.checkTag(tag, offsets[i]);
|
|
273
|
-
}
|
|
252
|
+
* Check that all tags at the given offsets are the same.
|
|
253
|
+
*/ checkTagsAreSame(offset0, offset1) {
|
|
254
|
+
const tag0 = this.getTag(offset0);
|
|
255
|
+
this.checkTag(tag0, offset1);
|
|
274
256
|
}
|
|
275
257
|
/**
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
for (let offset = startOffset; offset < startOffset + size; offset++) {
|
|
258
|
+
* Check tags for all memory in the specified range.
|
|
259
|
+
*/ checkTagsRange(tag, startOffset, size) {
|
|
260
|
+
for(let offset = startOffset; offset < startOffset + size; offset++){
|
|
280
261
|
this.checkTag(tag, offset);
|
|
281
262
|
}
|
|
282
263
|
}
|
|
283
|
-
// TODO: this might be slow, but I don't want to have the types know of their tags.
|
|
284
|
-
// It might be possible to have a map<Prototype, TypeTag>.
|
|
285
264
|
static getTag(v) {
|
|
286
|
-
let tag = TypeTag.INVALID;
|
|
287
|
-
// Not sure why, but using instanceof here doesn't work and leads odd behavior,
|
|
288
|
-
// but using constructor.name does the job...
|
|
289
265
|
if (v === undefined) {
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
tag = TypeTag.FIELD;
|
|
266
|
+
return TypeTag.FIELD; // uninitialized memory is Field(0)
|
|
267
|
+
} else {
|
|
268
|
+
return TAG_FOR_MEM_VAL.get(v.constructor.name) ?? TypeTag.INVALID;
|
|
294
269
|
}
|
|
295
|
-
else if (v.constructor.name == 'Uint1') {
|
|
296
|
-
tag = TypeTag.UINT1;
|
|
297
|
-
}
|
|
298
|
-
else if (v.constructor.name == 'Uint8') {
|
|
299
|
-
tag = TypeTag.UINT8;
|
|
300
|
-
}
|
|
301
|
-
else if (v.constructor.name == 'Uint16') {
|
|
302
|
-
tag = TypeTag.UINT16;
|
|
303
|
-
}
|
|
304
|
-
else if (v.constructor.name == 'Uint32') {
|
|
305
|
-
tag = TypeTag.UINT32;
|
|
306
|
-
}
|
|
307
|
-
else if (v.constructor.name == 'Uint64') {
|
|
308
|
-
tag = TypeTag.UINT64;
|
|
309
|
-
}
|
|
310
|
-
else if (v.constructor.name == 'Uint128') {
|
|
311
|
-
tag = TypeTag.UINT128;
|
|
312
|
-
}
|
|
313
|
-
return tag;
|
|
314
270
|
}
|
|
315
271
|
// Truncates the value to fit the type.
|
|
316
272
|
static buildFromTagTruncating(v, tag) {
|
|
317
273
|
v = BigInt(v);
|
|
318
|
-
switch
|
|
274
|
+
switch(tag){
|
|
319
275
|
case TypeTag.FIELD:
|
|
320
276
|
return new Field(v);
|
|
321
277
|
case TypeTag.UINT1:
|
|
322
278
|
return new Uint1(v & 1n);
|
|
323
279
|
case TypeTag.UINT8:
|
|
324
|
-
return new Uint8(v & (
|
|
280
|
+
return new Uint8(v & (1n << 8n) - 1n);
|
|
325
281
|
case TypeTag.UINT16:
|
|
326
|
-
return new Uint16(v & (
|
|
282
|
+
return new Uint16(v & (1n << 16n) - 1n);
|
|
327
283
|
case TypeTag.UINT32:
|
|
328
|
-
return new Uint32(v & (
|
|
284
|
+
return new Uint32(v & (1n << 32n) - 1n);
|
|
329
285
|
case TypeTag.UINT64:
|
|
330
|
-
return new Uint64(v & (
|
|
286
|
+
return new Uint64(v & (1n << 64n) - 1n);
|
|
331
287
|
case TypeTag.UINT128:
|
|
332
|
-
return new Uint128(v & (
|
|
288
|
+
return new Uint128(v & (1n << 128n) - 1n);
|
|
333
289
|
default:
|
|
334
290
|
throw new InvalidTagValueError(tag);
|
|
335
291
|
}
|
|
336
292
|
}
|
|
337
|
-
/** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
|
|
338
|
-
assert(_operations) { }
|
|
339
|
-
}
|
|
340
|
-
TaggedMemory.log = createLogger('simulator:avm:memory');
|
|
341
|
-
// Whether to track and validate memory accesses for each instruction.
|
|
342
|
-
TaggedMemory.TRACK_MEMORY_ACCESSES = process.env.NODE_ENV === 'test';
|
|
343
|
-
// Memory is modelled by a map with key type being number.
|
|
344
|
-
// We however restrict the keys to be non-negative integers smaller than
|
|
345
|
-
// MAX_MEMORY_SIZE.
|
|
346
|
-
TaggedMemory.MAX_MEMORY_SIZE = Number(1n << 32n);
|
|
347
|
-
/** Tagged memory wrapper with metering for each memory read and write operation. */
|
|
348
|
-
export class MeteredTaggedMemory {
|
|
349
|
-
constructor(wrapped, type = 'instruction') {
|
|
350
|
-
this.wrapped = wrapped;
|
|
351
|
-
this.type = type;
|
|
352
|
-
this.reads = 0;
|
|
353
|
-
this.writes = 0;
|
|
354
|
-
}
|
|
355
|
-
/** Returns the number of reads and writes tracked so far and resets them to zero. */
|
|
356
|
-
reset() {
|
|
357
|
-
const stats = { reads: this.reads, writes: this.writes };
|
|
358
|
-
this.reads = 0;
|
|
359
|
-
this.writes = 0;
|
|
360
|
-
return stats;
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Asserts that the exact number of memory operations have been performed.
|
|
364
|
-
* Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
|
|
365
|
-
*/
|
|
366
|
-
assert(operations) {
|
|
367
|
-
const { reads: expectedReads, writes: expectedWrites, addressing, } = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
|
|
368
|
-
const totalExpectedReads = expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
|
|
369
|
-
const { reads: actualReads, writes: actualWrites } = this.reset();
|
|
370
|
-
if (actualReads !== totalExpectedReads) {
|
|
371
|
-
throw new InstructionExecutionError(`Incorrect number of memory reads for ${this.type}: expected ${totalExpectedReads} but executed ${actualReads}`);
|
|
372
|
-
}
|
|
373
|
-
if (actualWrites !== expectedWrites) {
|
|
374
|
-
throw new InstructionExecutionError(`Incorrect number of memory writes for ${this.type}: expected ${expectedWrites} but executed ${actualWrites}`);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
getMaxMemorySize() {
|
|
378
|
-
return this.wrapped.getMaxMemorySize();
|
|
379
|
-
}
|
|
380
|
-
track(type = 'instruction') {
|
|
381
|
-
return new MeteredTaggedMemory(this.wrapped, type);
|
|
382
|
-
}
|
|
383
|
-
get(offset) {
|
|
384
|
-
this.reads++;
|
|
385
|
-
return this.wrapped.get(offset);
|
|
386
|
-
}
|
|
387
|
-
getSliceAs(offset, size) {
|
|
388
|
-
this.reads += size;
|
|
389
|
-
return this.wrapped.getSliceAs(offset, size);
|
|
390
|
-
}
|
|
391
|
-
getAs(offset) {
|
|
392
|
-
this.reads++;
|
|
393
|
-
return this.wrapped.getAs(offset);
|
|
394
|
-
}
|
|
395
|
-
getSlice(offset, size) {
|
|
396
|
-
this.reads += size;
|
|
397
|
-
return this.wrapped.getSlice(offset, size);
|
|
398
|
-
}
|
|
399
|
-
set(offset, v) {
|
|
400
|
-
this.writes++;
|
|
401
|
-
this.wrapped.set(offset, v);
|
|
402
|
-
}
|
|
403
|
-
setSlice(offset, vs) {
|
|
404
|
-
this.writes += vs.length;
|
|
405
|
-
this.wrapped.setSlice(offset, vs);
|
|
406
|
-
}
|
|
407
|
-
getSliceTags(offset, size) {
|
|
408
|
-
return this.wrapped.getSliceTags(offset, size);
|
|
409
|
-
}
|
|
410
|
-
getTag(offset) {
|
|
411
|
-
return this.wrapped.getTag(offset);
|
|
412
|
-
}
|
|
413
|
-
checkTag(tag, offset) {
|
|
414
|
-
this.wrapped.checkTag(tag, offset);
|
|
415
|
-
}
|
|
416
|
-
checkIsValidMemoryOffsetTag(offset) {
|
|
417
|
-
this.wrapped.checkIsValidMemoryOffsetTag(offset);
|
|
418
|
-
}
|
|
419
|
-
checkTags(tag, ...offsets) {
|
|
420
|
-
this.wrapped.checkTags(tag, ...offsets);
|
|
421
|
-
}
|
|
422
|
-
checkTagsAreSame(...offsets) {
|
|
423
|
-
this.wrapped.checkTagsAreSame(...offsets);
|
|
424
|
-
}
|
|
425
|
-
checkTagsRange(tag, startOffset, size) {
|
|
426
|
-
this.wrapped.checkTagsRange(tag, startOffset, size);
|
|
427
|
-
}
|
|
428
293
|
}
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZtX21lbW9yeV90eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdm0vYXZtX21lbW9yeV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFlLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xFLE9BQU8sRUFBRSxNQUFNLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTFDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsb0JBQW9CLEVBQ3BCLDBCQUEwQixFQUMxQixhQUFhLEdBQ2QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxzRUFBc0U7QUFDdEUsTUFBTSxPQUFnQixXQUFXO0lBa0IvQixXQUFXO0lBQ0osSUFBSTtRQUNULE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLGNBQWM7UUFDbkIsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkNBQTZDO0lBQ3RDLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sR0FBRyxJQUFJ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
|
|
294
|
+
const TAG_FOR_MEM_VAL = new Map([
|
|
295
|
+
[
|
|
296
|
+
'Field',
|
|
297
|
+
TypeTag.FIELD
|
|
298
|
+
],
|
|
299
|
+
[
|
|
300
|
+
'Uint1',
|
|
301
|
+
TypeTag.UINT1
|
|
302
|
+
],
|
|
303
|
+
[
|
|
304
|
+
'Uint8',
|
|
305
|
+
TypeTag.UINT8
|
|
306
|
+
],
|
|
307
|
+
[
|
|
308
|
+
'Uint16',
|
|
309
|
+
TypeTag.UINT16
|
|
310
|
+
],
|
|
311
|
+
[
|
|
312
|
+
'Uint32',
|
|
313
|
+
TypeTag.UINT32
|
|
314
|
+
],
|
|
315
|
+
[
|
|
316
|
+
'Uint64',
|
|
317
|
+
TypeTag.UINT64
|
|
318
|
+
],
|
|
319
|
+
[
|
|
320
|
+
'Uint128',
|
|
321
|
+
TypeTag.UINT128
|
|
322
|
+
]
|
|
323
|
+
]);
|
|
324
|
+
const VALID_TAGS = new Set([
|
|
325
|
+
TypeTag.FIELD,
|
|
326
|
+
TypeTag.UINT1,
|
|
327
|
+
TypeTag.UINT8,
|
|
328
|
+
TypeTag.UINT16,
|
|
329
|
+
TypeTag.UINT32,
|
|
330
|
+
TypeTag.UINT64,
|
|
331
|
+
TypeTag.UINT128
|
|
332
|
+
]);
|
|
333
|
+
const INTEGRAL_TAGS = new Set([
|
|
334
|
+
TypeTag.UINT1,
|
|
335
|
+
TypeTag.UINT8,
|
|
336
|
+
TypeTag.UINT16,
|
|
337
|
+
TypeTag.UINT32,
|
|
338
|
+
TypeTag.UINT64,
|
|
339
|
+
TypeTag.UINT128
|
|
340
|
+
]);
|