@aztec/simulator 0.75.0 → 0.76.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.
- package/dest/avm/avm_machine_state.d.ts.map +1 -1
- package/dest/avm/avm_machine_state.js +18 -13
- package/dest/avm/avm_memory_types.d.ts +1 -47
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_memory_types.js +42 -144
- package/dest/avm/avm_simulator.d.ts +2 -1
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/avm_simulator.js +23 -7
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +8 -15
- package/dest/avm/opcodes/addressing_mode.d.ts.map +1 -1
- package/dest/avm/opcodes/addressing_mode.js +8 -3
- package/dest/avm/opcodes/arithmetic.d.ts.map +1 -1
- package/dest/avm/opcodes/arithmetic.js +2 -3
- package/dest/avm/opcodes/bitwise.d.ts.map +1 -1
- package/dest/avm/opcodes/bitwise.js +3 -5
- package/dest/avm/opcodes/comparators.d.ts.map +1 -1
- package/dest/avm/opcodes/comparators.js +2 -3
- package/dest/avm/opcodes/contract.d.ts.map +1 -1
- package/dest/avm/opcodes/contract.js +2 -3
- package/dest/avm/opcodes/control_flow.d.ts.map +1 -1
- package/dest/avm/opcodes/control_flow.js +2 -6
- package/dest/avm/opcodes/conversion.d.ts.map +1 -1
- package/dest/avm/opcodes/conversion.js +2 -3
- package/dest/avm/opcodes/ec_add.d.ts.map +1 -1
- package/dest/avm/opcodes/ec_add.js +2 -3
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +2 -3
- package/dest/avm/opcodes/external_calls.d.ts.map +1 -1
- package/dest/avm/opcodes/external_calls.js +4 -7
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +4 -7
- package/dest/avm/opcodes/memory.d.ts.map +1 -1
- package/dest/avm/opcodes/memory.js +7 -13
- package/dest/avm/opcodes/misc.d.ts.map +1 -1
- package/dest/avm/opcodes/misc.js +2 -3
- package/dest/avm/opcodes/multi_scalar_mul.d.ts.map +1 -1
- package/dest/avm/opcodes/multi_scalar_mul.js +2 -7
- package/dest/avm/opcodes/storage.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +3 -5
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts +5 -0
- package/dest/public/fixtures/public_tx_simulation_tester.d.ts.map +1 -1
- package/dest/public/fixtures/public_tx_simulation_tester.js +10 -6
- package/package.json +9 -9
- 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/public/fixtures/public_tx_simulation_tester.ts +16 -4
package/dest/avm/opcodes/misc.js
CHANGED
|
@@ -13,7 +13,7 @@ export class DebugLog extends Instruction {
|
|
|
13
13
|
this.messageSize = messageSize;
|
|
14
14
|
}
|
|
15
15
|
async execute(context) {
|
|
16
|
-
const memory = context.machineState.memory
|
|
16
|
+
const memory = context.machineState.memory;
|
|
17
17
|
const operands = [this.messageOffset, this.fieldsOffset, this.fieldsSizeOffset];
|
|
18
18
|
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
19
19
|
const [messageOffset, fieldsOffset, fieldsSizeOffset] = addressing.resolve(operands, memory);
|
|
@@ -28,7 +28,6 @@ export class DebugLog extends Instruction {
|
|
|
28
28
|
const messageAsStr = rawMessage.map(field => String.fromCharCode(field.toNumber())).join('');
|
|
29
29
|
const formattedStr = applyStringFormatting(messageAsStr, fields.map(field => field.toFr()));
|
|
30
30
|
DebugLog.logger.verbose(formattedStr);
|
|
31
|
-
memory.assert({ reads: 1 + fieldsSize + this.messageSize, addressing });
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
33
|
DebugLog.type = 'DEBUGLOG';
|
|
@@ -43,4 +42,4 @@ DebugLog.wireFormat = [
|
|
|
43
42
|
OperandType.UINT16, // fields size address
|
|
44
43
|
OperandType.UINT16, // message size
|
|
45
44
|
];
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxRQUFTLFNBQVEsV0FBVztJQWV2QyxZQUNVLFFBQWdCLEVBQ2hCLGFBQXFCLEVBQ3JCLFlBQW9CLEVBQ3BCLGdCQUF3QixFQUN4QixXQUFtQjtRQUUzQixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO0lBRzdCLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQW1CO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFL0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFN0Usd0NBQXdDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUN4QyxZQUFZLEVBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUNsQyxDQUFDO1FBRUYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7QUFqRE0sYUFBSSxHQUFXLFVBQVUsQ0FBQztBQUNqQixlQUFNLEdBQVcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUNqQyxlQUFNLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFFakUsMERBQTBEO0FBQzFDLG1CQUFVLEdBQWtCO0lBQzFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUztJQUM1QixXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVc7SUFDOUIsV0FBVyxDQUFDLE1BQU0sRUFBRSx5QkFBeUI7SUFDN0MsV0FBVyxDQUFDLE1BQU0sRUFBRSx3QkFBd0I7SUFDNUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxzQkFBc0I7SUFDMUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlO0NBQ3BDLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi_scalar_mul.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/multi_scalar_mul.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,WAAW;IAe3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAlB5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAc;IAG5C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM;IAKvB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"multi_scalar_mul.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/multi_scalar_mul.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,cAAe,SAAQ,WAAW;IAe3C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,kBAAkB;IAlB5B,MAAM,CAAC,IAAI,EAAE,MAAM,CAAoB;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAc;IAG5C,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM;IAKvB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAsFzD"}
|
|
@@ -15,7 +15,7 @@ export class MultiScalarMul extends Instruction {
|
|
|
15
15
|
this.pointsLengthOffset = pointsLengthOffset;
|
|
16
16
|
}
|
|
17
17
|
async execute(context) {
|
|
18
|
-
const memory = context.machineState.memory
|
|
18
|
+
const memory = context.machineState.memory;
|
|
19
19
|
// Resolve indirects
|
|
20
20
|
const operands = [this.pointsOffset, this.scalarsOffset, this.outputOffset, this.pointsLengthOffset];
|
|
21
21
|
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
@@ -96,11 +96,6 @@ export class MultiScalarMul extends Instruction {
|
|
|
96
96
|
memory.setSlice(outputOffset, [new Field(outputPoint.x), new Field(outputPoint.y)]);
|
|
97
97
|
// Check representation of infinity for grumpkin
|
|
98
98
|
memory.setSlice(outputOffset + 2, [new Uint1(outputPoint.equals(Point.ZERO) ? 1 : 0)]);
|
|
99
|
-
memory.assert({
|
|
100
|
-
reads: 1 + pointsReadLength + scalarReadLength /* points and scalars */,
|
|
101
|
-
writes: 3 /* output triplet */,
|
|
102
|
-
addressing,
|
|
103
|
-
});
|
|
104
99
|
}
|
|
105
100
|
}
|
|
106
101
|
MultiScalarMul.type = 'MultiScalarMul';
|
|
@@ -114,4 +109,4 @@ MultiScalarMul.wireFormat = [
|
|
|
114
109
|
OperandType.UINT16 /* output offset (fixed triplet) */,
|
|
115
110
|
OperandType.UINT16 /* points length offset */,
|
|
116
111
|
];
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlfc2NhbGFyX211bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9tdWx0aV9zY2FsYXJfbXVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzNELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxXQUFXO0lBYzdDLFlBQ1UsUUFBZ0IsRUFDaEIsWUFBb0IsRUFDcEIsYUFBcUIsRUFDckIsWUFBb0IsRUFDcEIsa0JBQTBCO1FBRWxDLEtBQUssRUFBRSxDQUFDO1FBTkEsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQVE7SUFHcEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDM0Msb0JBQW9CO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJ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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,sBAAuB,SAAQ,WAAW;IAS3C,SAAS,CAAC,QAAQ,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAP5F,gBAAuB,UAAU,EAAE,WAAW,EAAE,CAK9C;gBAEoB,QAAQ,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM;CAG7F;AAED,qBAAa,MAAO,SAAQ,sBAAsB;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;gBAE3B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,uBAAe,sBAAuB,SAAQ,WAAW;IAS3C,SAAS,CAAC,QAAQ,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAAE,SAAS,CAAC,OAAO,EAAE,MAAM;IAP5F,gBAAuB,UAAU,EAAE,WAAW,EAAE,CAK9C;gBAEoB,QAAQ,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM,EAAY,OAAO,EAAE,MAAM;CAG7F;AAED,qBAAa,MAAO,SAAQ,sBAAsB;IAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAY;IACxC,MAAM,CAAC,QAAQ,CAAC,MAAM,iBAAiB;gBAE3B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBzD;AAED,qBAAa,KAAM,SAAQ,sBAAsB;IAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAW;IACvC,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAgB;gBAE1B,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAItD,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAazD"}
|
|
@@ -26,7 +26,7 @@ export class SStore extends BaseStorageInstruction {
|
|
|
26
26
|
if (context.environment.isStaticCall) {
|
|
27
27
|
throw new StaticCallAlterationError();
|
|
28
28
|
}
|
|
29
|
-
const memory = context.machineState.memory
|
|
29
|
+
const memory = context.machineState.memory;
|
|
30
30
|
context.machineState.consumeGas(this.gasCost());
|
|
31
31
|
const operands = [this.aOffset, this.bOffset];
|
|
32
32
|
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
@@ -36,7 +36,6 @@ export class SStore extends BaseStorageInstruction {
|
|
|
36
36
|
const slot = memory.get(slotOffset).toFr();
|
|
37
37
|
const value = memory.get(srcOffset).toFr();
|
|
38
38
|
await context.persistableState.writeStorage(context.environment.address, slot, value);
|
|
39
|
-
memory.assert({ reads: 2, addressing });
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
SStore.type = 'SSTORE';
|
|
@@ -46,7 +45,7 @@ export class SLoad extends BaseStorageInstruction {
|
|
|
46
45
|
super(indirect, slotOffset, dstOffset);
|
|
47
46
|
}
|
|
48
47
|
async execute(context) {
|
|
49
|
-
const memory = context.machineState.memory
|
|
48
|
+
const memory = context.machineState.memory;
|
|
50
49
|
context.machineState.consumeGas(this.gasCost());
|
|
51
50
|
const operands = [this.aOffset, this.bOffset];
|
|
52
51
|
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
@@ -55,9 +54,8 @@ export class SLoad extends BaseStorageInstruction {
|
|
|
55
54
|
const slot = memory.get(slotOffset).toFr();
|
|
56
55
|
const value = await context.persistableState.readStorage(context.environment.address, slot);
|
|
57
56
|
memory.set(dstOffset, new Field(value));
|
|
58
|
-
memory.assert({ writes: 1, reads: 1, addressing });
|
|
59
57
|
}
|
|
60
58
|
}
|
|
61
59
|
SLoad.type = 'SLOAD';
|
|
62
60
|
SLoad.opcode = Opcode.SLOAD;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvQyxNQUFlLHNCQUF1QixTQUFRLFdBQVc7SUFTdkQsWUFBc0IsUUFBZ0IsRUFBWSxPQUFlLEVBQVksT0FBZTtRQUMxRixLQUFLLEVBQUUsQ0FBQztRQURZLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUU1RixDQUFDOztBQVZELDBEQUEwRDtBQUNuQyxpQ0FBVSxHQUFrQjtJQUNqRCxXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsS0FBSztJQUNqQixXQUFXLENBQUMsTUFBTTtJQUNsQixXQUFXLENBQUMsTUFBTTtDQUNuQixDQUFDO0FBT0osTUFBTSxPQUFPLE1BQU8sU0FBUSxzQkFBc0I7SUFJaEQsWUFBWSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsVUFBa0I7UUFDakUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FB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
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { type MerkleTreeWriteOperations } from '@aztec/circuit-types';
|
|
1
2
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
2
3
|
import { BaseAvmSimulationTester } from '../../avm/fixtures/base_avm_simulation_tester.js';
|
|
4
|
+
import { SimpleContractDataSource } from '../../avm/fixtures/simple_contract_data_source.js';
|
|
5
|
+
import { WorldStateDB } from '../public_db_sources.js';
|
|
3
6
|
import { type PublicTxResult } from '../public_tx_simulator.js';
|
|
4
7
|
export type TestEnqueuedCall = {
|
|
5
8
|
address: AztecAddress;
|
|
@@ -13,7 +16,9 @@ export type TestEnqueuedCall = {
|
|
|
13
16
|
* transactions.
|
|
14
17
|
*/
|
|
15
18
|
export declare class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
19
|
+
private worldStateDB;
|
|
16
20
|
private txCount;
|
|
21
|
+
constructor(worldStateDB: WorldStateDB, contractDataSource: SimpleContractDataSource, merkleTrees: MerkleTreeWriteOperations, skipContractDeployments: boolean);
|
|
17
22
|
static create(skipContractDeployments?: boolean): Promise<PublicTxSimulationTester>;
|
|
18
23
|
simulateTx(sender: AztecAddress, setupCalls?: TestEnqueuedCall[], appCalls?: TestEnqueuedCall[], teardownCall?: TestEnqueuedCall, feePayer?: AztecAddress): Promise<PublicTxResult>;
|
|
19
24
|
private commitTxStateUpdates;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"public_tx_simulation_tester.d.ts","sourceRoot":"","sources":["../../../src/public/fixtures/public_tx_simulation_tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,yBAAyB,EAAmC,MAAM,sBAAsB,CAAC;AAcrH,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAM/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAE3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,2BAA2B,CAAC;AAMnF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,uBAAuB;IAIjE,OAAO,CAAC,YAAY;IAHtB,OAAO,CAAC,OAAO,CAAK;gBAGV,YAAY,EAAE,YAAY,EAClC,kBAAkB,EAAE,wBAAwB,EAC5C,WAAW,EAAE,yBAAyB,EACtC,uBAAuB,EAAE,OAAO;WAKd,MAAM,CAAC,uBAAuB,UAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAOjF,UAAU,CACrB,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,gBAAgB,EAAO,EACnC,QAAQ,GAAE,gBAAgB,EAAO,EACjC,YAAY,CAAC,EAAE,gBAAgB,EAC/B,QAAQ,GAAE,YAAkC,GAC3C,OAAO,CAAC,cAAc,CAAC;YA0EZ,oBAAoB;CAqBnC"}
|
|
@@ -20,21 +20,22 @@ const DEFAULT_GAS_FEES = new GasFees(2, 3);
|
|
|
20
20
|
* transactions.
|
|
21
21
|
*/
|
|
22
22
|
export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
23
|
-
constructor() {
|
|
24
|
-
super(
|
|
23
|
+
constructor(worldStateDB, contractDataSource, merkleTrees, skipContractDeployments) {
|
|
24
|
+
super(contractDataSource, merkleTrees, skipContractDeployments);
|
|
25
|
+
this.worldStateDB = worldStateDB;
|
|
25
26
|
this.txCount = 0;
|
|
26
27
|
}
|
|
27
28
|
static async create(skipContractDeployments = false) {
|
|
28
29
|
const contractDataSource = new SimpleContractDataSource();
|
|
29
30
|
const merkleTrees = await (await NativeWorldStateService.tmp()).fork();
|
|
30
|
-
|
|
31
|
+
const worldStateDB = new WorldStateDB(merkleTrees, contractDataSource);
|
|
32
|
+
return new PublicTxSimulationTester(worldStateDB, contractDataSource, merkleTrees, skipContractDeployments);
|
|
31
33
|
}
|
|
32
34
|
async simulateTx(sender, setupCalls = [], appCalls = [], teardownCall, feePayer = AztecAddress.zero()) {
|
|
33
35
|
const globals = GlobalVariables.empty();
|
|
34
36
|
globals.timestamp = TIMESTAMP;
|
|
35
37
|
globals.gasFees = DEFAULT_GAS_FEES;
|
|
36
|
-
const
|
|
37
|
-
const simulator = new PublicTxSimulator(this.merkleTrees, worldStateDB, globals, /*doMerkleOperations=*/ true);
|
|
38
|
+
const simulator = new PublicTxSimulator(this.merkleTrees, this.worldStateDB, globals, /*doMerkleOperations=*/ true);
|
|
38
39
|
const setupExecutionRequests = [];
|
|
39
40
|
for (let i = 0; i < setupCalls.length; i++) {
|
|
40
41
|
const address = setupCalls[i].address;
|
|
@@ -59,7 +60,10 @@ export class PublicTxSimulationTester extends BaseAvmSimulationTester {
|
|
|
59
60
|
// but make sure each tx has a unique first nullifier.
|
|
60
61
|
const firstNullifier = new Fr(420000 + this.txCount++);
|
|
61
62
|
const tx = await createTxForPublicCalls(firstNullifier, setupExecutionRequests, appExecutionRequests, teardownExecutionRequest, feePayer);
|
|
63
|
+
const startTime = performance.now();
|
|
62
64
|
const avmResult = await simulator.simulate(tx);
|
|
65
|
+
const endTime = performance.now();
|
|
66
|
+
this.logger.debug(`Public transaction simulation took ${endTime - startTime}ms`);
|
|
63
67
|
if (avmResult.revertCode.isOK()) {
|
|
64
68
|
await this.commitTxStateUpdates(avmResult.avmProvingRequest.inputs.publicInputs);
|
|
65
69
|
}
|
|
@@ -85,4 +89,4 @@ async function executionRequestForCall(sender, address, fnName, args = [], isSta
|
|
|
85
89
|
/*selector=*/ new FunctionSelector(PUBLIC_DISPATCH_SELECTOR), isStaticCall);
|
|
86
90
|
return new PublicExecutionRequest(callContext, calldata);
|
|
87
91
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3R4X3NpbXVsYXRpb25fdGVzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3B1YmxpYy9maXh0dXJlcy9wdWJsaWNfdHhfc2ltdWxhdGlvbl90ZXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBa0Msc0JBQXNCLEVBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNySCxPQUFPLEVBRUwsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQXlCLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9GLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQXVCLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sWUFBWSxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/simulator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.76.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./common": "./dest/common.js",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
]
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@aztec/circuit-types": "0.
|
|
64
|
-
"@aztec/circuits.js": "0.
|
|
65
|
-
"@aztec/foundation": "0.
|
|
66
|
-
"@aztec/noir-protocol-circuits-types": "0.
|
|
67
|
-
"@aztec/protocol-contracts": "0.
|
|
68
|
-
"@aztec/telemetry-client": "0.
|
|
69
|
-
"@aztec/types": "0.
|
|
70
|
-
"@aztec/world-state": "0.
|
|
63
|
+
"@aztec/circuit-types": "0.76.0",
|
|
64
|
+
"@aztec/circuits.js": "0.76.0",
|
|
65
|
+
"@aztec/foundation": "0.76.0",
|
|
66
|
+
"@aztec/noir-protocol-circuits-types": "0.76.0",
|
|
67
|
+
"@aztec/protocol-contracts": "0.76.0",
|
|
68
|
+
"@aztec/telemetry-client": "0.76.0",
|
|
69
|
+
"@aztec/types": "0.76.0",
|
|
70
|
+
"@aztec/world-state": "0.76.0",
|
|
71
71
|
"@noir-lang/acvm_js": "portal:../../noir/packages/acvm_js",
|
|
72
72
|
"@noir-lang/noirc_abi": "portal:../../noir/packages/noirc_abi",
|
|
73
73
|
"@noir-lang/types": "portal:../../noir/packages/types",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Fr } from '@aztec/circuits.js';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { type Gas } from './avm_gas.js';
|
|
4
4
|
import { TaggedMemory } from './avm_memory_types.js';
|
|
5
5
|
import { type AvmRevertReason, OutOfGasError } from './errors.js';
|
|
6
6
|
|
|
@@ -92,26 +92,29 @@ export class AvmMachineState {
|
|
|
92
92
|
*/
|
|
93
93
|
public consumeGas(gasCost: Partial<Gas>) {
|
|
94
94
|
// Assert there is enough gas on every dimension.
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
);
|
|
95
|
+
const outOfL2Gas = this.l2GasLeft - (gasCost.l2Gas ?? 0) < 0;
|
|
96
|
+
const outOfDaGas = this.daGasLeft - (gasCost.daGas ?? 0) < 0;
|
|
98
97
|
// If not, trigger an exceptional halt.
|
|
99
|
-
|
|
100
|
-
if (outOfGasDimensions.length > 0) {
|
|
98
|
+
if (outOfL2Gas || outOfDaGas) {
|
|
101
99
|
this.exceptionalHalt();
|
|
102
|
-
|
|
100
|
+
const dimensions = [];
|
|
101
|
+
if (outOfL2Gas) {
|
|
102
|
+
dimensions.push('l2Gas');
|
|
103
|
+
}
|
|
104
|
+
if (outOfDaGas) {
|
|
105
|
+
dimensions.push('daGas');
|
|
106
|
+
}
|
|
107
|
+
throw new OutOfGasError(dimensions);
|
|
103
108
|
}
|
|
104
109
|
// Otherwise, charge the corresponding gas
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
110
|
+
this.l2GasLeft -= gasCost.l2Gas ?? 0;
|
|
111
|
+
this.daGasLeft -= gasCost.daGas ?? 0;
|
|
108
112
|
}
|
|
109
113
|
|
|
110
114
|
/** Increases the gas left by the amounts specified. */
|
|
111
115
|
public refundGas(gasRefund: Partial<Gas>) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
116
|
+
this.l2GasLeft += gasRefund.l2Gas ?? 0;
|
|
117
|
+
this.daGasLeft += gasRefund.daGas ?? 0;
|
|
115
118
|
}
|
|
116
119
|
|
|
117
120
|
/**
|
|
@@ -151,7 +154,8 @@ export class AvmMachineState {
|
|
|
151
154
|
* Flag an exceptional halt. Clears gas left and sets the reverted flag. No output data.
|
|
152
155
|
*/
|
|
153
156
|
private exceptionalHalt() {
|
|
154
|
-
|
|
157
|
+
this.l2GasLeft = 0;
|
|
158
|
+
this.daGasLeft = 0;
|
|
155
159
|
this.reverted = true;
|
|
156
160
|
this.halted = true;
|
|
157
161
|
}
|
|
@@ -15,13 +15,7 @@ import { type FunctionsOf } from '@aztec/foundation/types';
|
|
|
15
15
|
|
|
16
16
|
import { strict as assert } from 'assert';
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
InstructionExecutionError,
|
|
20
|
-
InvalidTagValueError,
|
|
21
|
-
MemorySliceOutOfRangeError,
|
|
22
|
-
TagCheckError,
|
|
23
|
-
} from './errors.js';
|
|
24
|
-
import { Addressing, AddressingMode } from './opcodes/addressing_mode.js';
|
|
18
|
+
import { InvalidTagValueError, MemorySliceOutOfRangeError, TagCheckError } from './errors.js';
|
|
25
19
|
|
|
26
20
|
/** MemoryValue gathers the common operations for all memory types. */
|
|
27
21
|
export abstract class MemoryValue {
|
|
@@ -251,22 +245,14 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
251
245
|
return TaggedMemory.MAX_MEMORY_SIZE;
|
|
252
246
|
}
|
|
253
247
|
|
|
254
|
-
/** Returns a MeteredTaggedMemory instance to track the number of reads and writes if TRACK_MEMORY_ACCESSES is set. */
|
|
255
|
-
public track(type: string = 'instruction'): TaggedMemoryInterface {
|
|
256
|
-
return TaggedMemory.TRACK_MEMORY_ACCESSES ? new MeteredTaggedMemory(this, type) : this;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
248
|
public get(offset: number): MemoryValue {
|
|
260
|
-
|
|
261
|
-
const value = this.getAs<MemoryValue>(offset);
|
|
262
|
-
return value;
|
|
249
|
+
return this.getAs<MemoryValue>(offset);
|
|
263
250
|
}
|
|
264
251
|
|
|
265
252
|
public getAs<T>(offset: number): T {
|
|
266
|
-
assert(Number.isInteger(offset));
|
|
267
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
253
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
268
254
|
const word = this._mem.get(offset);
|
|
269
|
-
TaggedMemory.log.trace(`get(${offset}) = ${word}`);
|
|
255
|
+
//TaggedMemory.log.trace(`get(${offset}) = ${word}`);
|
|
270
256
|
if (word === undefined) {
|
|
271
257
|
TaggedMemory.log.debug(`WARNING: Memory at offset ${offset} is undefined!`);
|
|
272
258
|
return new Field(0) as T;
|
|
@@ -300,10 +286,9 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
300
286
|
}
|
|
301
287
|
|
|
302
288
|
public set(offset: number, v: MemoryValue) {
|
|
303
|
-
assert(Number.isInteger(offset));
|
|
304
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
289
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
305
290
|
this._mem.set(offset, v);
|
|
306
|
-
TaggedMemory.log.trace(`set(${offset}, ${v})`);
|
|
291
|
+
//TaggedMemory.log.trace(`set(${offset}, ${v})`);
|
|
307
292
|
}
|
|
308
293
|
|
|
309
294
|
public setSlice(offset: number, slice: MemoryValue[]) {
|
|
@@ -320,8 +305,7 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
320
305
|
}
|
|
321
306
|
|
|
322
307
|
public getTag(offset: number): TypeTag {
|
|
323
|
-
assert(Number.isInteger(offset));
|
|
324
|
-
assert(offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
308
|
+
assert(Number.isInteger(offset) && offset < TaggedMemory.MAX_MEMORY_SIZE);
|
|
325
309
|
return TaggedMemory.getTag(this._mem.get(offset));
|
|
326
310
|
}
|
|
327
311
|
|
|
@@ -340,25 +324,13 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
340
324
|
}
|
|
341
325
|
|
|
342
326
|
public static checkIsIntegralTag(tag: TypeTag) {
|
|
343
|
-
if (
|
|
344
|
-
![TypeTag.UINT1, TypeTag.UINT8, TypeTag.UINT16, TypeTag.UINT32, TypeTag.UINT64, TypeTag.UINT128].includes(tag)
|
|
345
|
-
) {
|
|
327
|
+
if (!INTEGRAL_TAGS.has(tag)) {
|
|
346
328
|
throw TagCheckError.forTag(TypeTag[tag], 'integral');
|
|
347
329
|
}
|
|
348
330
|
}
|
|
349
331
|
|
|
350
332
|
public static checkIsValidTag(tagNumber: number) {
|
|
351
|
-
if (
|
|
352
|
-
![
|
|
353
|
-
TypeTag.FIELD,
|
|
354
|
-
TypeTag.UINT1,
|
|
355
|
-
TypeTag.UINT8,
|
|
356
|
-
TypeTag.UINT16,
|
|
357
|
-
TypeTag.UINT32,
|
|
358
|
-
TypeTag.UINT64,
|
|
359
|
-
TypeTag.UINT128,
|
|
360
|
-
].includes(tagNumber)
|
|
361
|
-
) {
|
|
333
|
+
if (!VALID_TAGS.has(tagNumber)) {
|
|
362
334
|
throw new InvalidTagValueError(tagNumber);
|
|
363
335
|
}
|
|
364
336
|
}
|
|
@@ -375,11 +347,9 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
375
347
|
/**
|
|
376
348
|
* Check that all tags at the given offsets are the same.
|
|
377
349
|
*/
|
|
378
|
-
public checkTagsAreSame(
|
|
379
|
-
const
|
|
380
|
-
|
|
381
|
-
this.checkTag(tag, offsets[i]);
|
|
382
|
-
}
|
|
350
|
+
public checkTagsAreSame(offset0: number, offset1: number) {
|
|
351
|
+
const tag0 = this.getTag(offset0);
|
|
352
|
+
this.checkTag(tag0, offset1);
|
|
383
353
|
}
|
|
384
354
|
|
|
385
355
|
/**
|
|
@@ -391,32 +361,12 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
391
361
|
}
|
|
392
362
|
}
|
|
393
363
|
|
|
394
|
-
// TODO: this might be slow, but I don't want to have the types know of their tags.
|
|
395
|
-
// It might be possible to have a map<Prototype, TypeTag>.
|
|
396
364
|
public static getTag(v: MemoryValue | undefined): TypeTag {
|
|
397
|
-
let tag = TypeTag.INVALID;
|
|
398
|
-
|
|
399
|
-
// Not sure why, but using instanceof here doesn't work and leads odd behavior,
|
|
400
|
-
// but using constructor.name does the job...
|
|
401
365
|
if (v === undefined) {
|
|
402
|
-
|
|
403
|
-
} else
|
|
404
|
-
|
|
405
|
-
} else if (v.constructor.name == 'Uint1') {
|
|
406
|
-
tag = TypeTag.UINT1;
|
|
407
|
-
} else if (v.constructor.name == 'Uint8') {
|
|
408
|
-
tag = TypeTag.UINT8;
|
|
409
|
-
} else if (v.constructor.name == 'Uint16') {
|
|
410
|
-
tag = TypeTag.UINT16;
|
|
411
|
-
} else if (v.constructor.name == 'Uint32') {
|
|
412
|
-
tag = TypeTag.UINT32;
|
|
413
|
-
} else if (v.constructor.name == 'Uint64') {
|
|
414
|
-
tag = TypeTag.UINT64;
|
|
415
|
-
} else if (v.constructor.name == 'Uint128') {
|
|
416
|
-
tag = TypeTag.UINT128;
|
|
366
|
+
return TypeTag.FIELD; // uninitialized memory is Field(0)
|
|
367
|
+
} else {
|
|
368
|
+
return TAG_FOR_MEM_VAL.get(v.constructor.name) ?? TypeTag.INVALID;
|
|
417
369
|
}
|
|
418
|
-
|
|
419
|
-
return tag;
|
|
420
370
|
}
|
|
421
371
|
|
|
422
372
|
// Truncates the value to fit the type.
|
|
@@ -441,123 +391,33 @@ export class TaggedMemory implements TaggedMemoryInterface {
|
|
|
441
391
|
throw new InvalidTagValueError(tag);
|
|
442
392
|
}
|
|
443
393
|
}
|
|
444
|
-
|
|
445
|
-
/** No-op. Implemented here for compatibility with the MeteredTaggedMemory. */
|
|
446
|
-
public assert(_operations: Partial<MemoryOperations & { addressing: Addressing }>) {}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/** Tagged memory wrapper with metering for each memory read and write operation. */
|
|
450
|
-
export class MeteredTaggedMemory implements TaggedMemoryInterface {
|
|
451
|
-
private reads: number = 0;
|
|
452
|
-
private writes: number = 0;
|
|
453
|
-
|
|
454
|
-
constructor(private wrapped: TaggedMemory, private type: string = 'instruction') {}
|
|
455
|
-
|
|
456
|
-
/** Returns the number of reads and writes tracked so far and resets them to zero. */
|
|
457
|
-
public reset(): MemoryOperations {
|
|
458
|
-
const stats = { reads: this.reads, writes: this.writes };
|
|
459
|
-
this.reads = 0;
|
|
460
|
-
this.writes = 0;
|
|
461
|
-
return stats;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
/**
|
|
465
|
-
* Asserts that the exact number of memory operations have been performed.
|
|
466
|
-
* Indirect represents the flags for indirect accesses: each bit set to one counts as an extra read.
|
|
467
|
-
*/
|
|
468
|
-
public assert(operations: Partial<MemoryOperations & { addressing: Addressing }>) {
|
|
469
|
-
const {
|
|
470
|
-
reads: expectedReads,
|
|
471
|
-
writes: expectedWrites,
|
|
472
|
-
addressing,
|
|
473
|
-
} = { reads: 0, writes: 0, addressing: new Addressing([]), ...operations };
|
|
474
|
-
|
|
475
|
-
const totalExpectedReads =
|
|
476
|
-
expectedReads + addressing.count(AddressingMode.INDIRECT) + addressing.count(AddressingMode.RELATIVE);
|
|
477
|
-
const { reads: actualReads, writes: actualWrites } = this.reset();
|
|
478
|
-
if (actualReads !== totalExpectedReads) {
|
|
479
|
-
throw new InstructionExecutionError(
|
|
480
|
-
`Incorrect number of memory reads for ${this.type}: expected ${totalExpectedReads} but executed ${actualReads}`,
|
|
481
|
-
);
|
|
482
|
-
}
|
|
483
|
-
if (actualWrites !== expectedWrites) {
|
|
484
|
-
throw new InstructionExecutionError(
|
|
485
|
-
`Incorrect number of memory writes for ${this.type}: expected ${expectedWrites} but executed ${actualWrites}`,
|
|
486
|
-
);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
public getMaxMemorySize(): number {
|
|
491
|
-
return this.wrapped.getMaxMemorySize();
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
public track(type: string = 'instruction'): MeteredTaggedMemory {
|
|
495
|
-
return new MeteredTaggedMemory(this.wrapped, type);
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
public get(offset: number): MemoryValue {
|
|
499
|
-
this.reads++;
|
|
500
|
-
return this.wrapped.get(offset);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
public getSliceAs<T>(offset: number, size: number): T[] {
|
|
504
|
-
this.reads += size;
|
|
505
|
-
return this.wrapped.getSliceAs<T>(offset, size);
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
public getAs<T>(offset: number): T {
|
|
509
|
-
this.reads++;
|
|
510
|
-
return this.wrapped.getAs(offset);
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
public getSlice(offset: number, size: number): MemoryValue[] {
|
|
514
|
-
this.reads += size;
|
|
515
|
-
return this.wrapped.getSlice(offset, size);
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
public set(offset: number, v: MemoryValue): void {
|
|
519
|
-
this.writes++;
|
|
520
|
-
this.wrapped.set(offset, v);
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
public setSlice(offset: number, vs: MemoryValue[]): void {
|
|
524
|
-
this.writes += vs.length;
|
|
525
|
-
this.wrapped.setSlice(offset, vs);
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
public getSliceTags(offset: number, size: number): TypeTag[] {
|
|
529
|
-
return this.wrapped.getSliceTags(offset, size);
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
public getTag(offset: number): TypeTag {
|
|
533
|
-
return this.wrapped.getTag(offset);
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
public checkTag(tag: TypeTag, offset: number): void {
|
|
537
|
-
this.wrapped.checkTag(tag, offset);
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
public checkIsValidMemoryOffsetTag(offset: number): void {
|
|
541
|
-
this.wrapped.checkIsValidMemoryOffsetTag(offset);
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
public checkTags(tag: TypeTag, ...offsets: number[]): void {
|
|
545
|
-
this.wrapped.checkTags(tag, ...offsets);
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
public checkTagsAreSame(...offsets: number[]): void {
|
|
549
|
-
this.wrapped.checkTagsAreSame(...offsets);
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
public checkTagsRange(tag: TypeTag, startOffset: number, size: number): void {
|
|
553
|
-
this.wrapped.checkTagsRange(tag, startOffset, size);
|
|
554
|
-
}
|
|
555
394
|
}
|
|
556
395
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
396
|
+
const TAG_FOR_MEM_VAL = new Map<string, TypeTag>([
|
|
397
|
+
['Field', TypeTag.FIELD],
|
|
398
|
+
['Uint1', TypeTag.UINT1],
|
|
399
|
+
['Uint8', TypeTag.UINT8],
|
|
400
|
+
['Uint16', TypeTag.UINT16],
|
|
401
|
+
['Uint32', TypeTag.UINT32],
|
|
402
|
+
['Uint64', TypeTag.UINT64],
|
|
403
|
+
['Uint128', TypeTag.UINT128],
|
|
404
|
+
]);
|
|
405
|
+
|
|
406
|
+
const VALID_TAGS = new Set([
|
|
407
|
+
TypeTag.FIELD,
|
|
408
|
+
TypeTag.UINT1,
|
|
409
|
+
TypeTag.UINT8,
|
|
410
|
+
TypeTag.UINT16,
|
|
411
|
+
TypeTag.UINT32,
|
|
412
|
+
TypeTag.UINT64,
|
|
413
|
+
TypeTag.UINT128,
|
|
414
|
+
]);
|
|
415
|
+
|
|
416
|
+
const INTEGRAL_TAGS = new Set([
|
|
417
|
+
TypeTag.UINT1,
|
|
418
|
+
TypeTag.UINT8,
|
|
419
|
+
TypeTag.UINT16,
|
|
420
|
+
TypeTag.UINT32,
|
|
421
|
+
TypeTag.UINT64,
|
|
422
|
+
TypeTag.UINT128,
|
|
423
|
+
]);
|