@aztec/simulator 0.58.0 → 0.60.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/acvm/acvm.d.ts +1 -0
- package/dest/acvm/acvm.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.d.ts +3 -3
- package/dest/acvm/oracle/oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/oracle.js +7 -7
- package/dest/acvm/oracle/typed_oracle.d.ts +4 -3
- package/dest/acvm/oracle/typed_oracle.d.ts.map +1 -1
- package/dest/acvm/oracle/typed_oracle.js +4 -4
- package/dest/acvm/serialize.d.ts +1 -0
- package/dest/acvm/serialize.d.ts.map +1 -1
- package/dest/avm/avm_context.d.ts +1 -1
- package/dest/avm/avm_context.js +1 -1
- package/dest/avm/avm_execution_environment.d.ts +2 -5
- package/dest/avm/avm_execution_environment.d.ts.map +1 -1
- package/dest/avm/avm_execution_environment.js +7 -15
- package/dest/avm/avm_gas.d.ts.map +1 -1
- package/dest/avm/avm_gas.js +1 -8
- package/dest/avm/avm_memory_types.d.ts +1 -0
- package/dest/avm/avm_memory_types.d.ts.map +1 -1
- package/dest/avm/avm_simulator.d.ts +1 -0
- package/dest/avm/avm_simulator.d.ts.map +1 -1
- package/dest/avm/bytecode_utils.d.ts +1 -0
- package/dest/avm/bytecode_utils.d.ts.map +1 -1
- package/dest/avm/fixtures/index.d.ts +3 -0
- package/dest/avm/fixtures/index.d.ts.map +1 -1
- package/dest/avm/fixtures/index.js +8 -2
- package/dest/avm/journal/journal.d.ts +14 -13
- package/dest/avm/journal/journal.d.ts.map +1 -1
- package/dest/avm/journal/journal.js +33 -33
- package/dest/avm/journal/nullifiers.d.ts +9 -9
- package/dest/avm/journal/nullifiers.d.ts.map +1 -1
- package/dest/avm/journal/nullifiers.js +24 -24
- package/dest/avm/journal/public_storage.d.ts +10 -10
- package/dest/avm/journal/public_storage.d.ts.map +1 -1
- package/dest/avm/journal/public_storage.js +21 -21
- package/dest/avm/opcodes/accrued_substate.d.ts.map +1 -1
- package/dest/avm/opcodes/accrued_substate.js +5 -5
- package/dest/avm/opcodes/environment_getters.d.ts +12 -13
- package/dest/avm/opcodes/environment_getters.d.ts.map +1 -1
- package/dest/avm/opcodes/environment_getters.js +13 -16
- package/dest/avm/opcodes/hashing.d.ts +2 -26
- package/dest/avm/opcodes/hashing.d.ts.map +1 -1
- package/dest/avm/opcodes/hashing.js +11 -95
- package/dest/avm/opcodes/index.d.ts +0 -1
- package/dest/avm/opcodes/index.d.ts.map +1 -1
- package/dest/avm/opcodes/index.js +1 -2
- package/dest/avm/opcodes/instruction.d.ts +1 -0
- package/dest/avm/opcodes/instruction.d.ts.map +1 -1
- package/dest/avm/opcodes/storage.js +3 -3
- package/dest/avm/serialization/buffer_cursor.d.ts +1 -0
- package/dest/avm/serialization/buffer_cursor.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.d.ts +1 -0
- package/dest/avm/serialization/bytecode_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/bytecode_serialization.js +2 -6
- package/dest/avm/serialization/instruction_serialization.d.ts +11 -14
- package/dest/avm/serialization/instruction_serialization.d.ts.map +1 -1
- package/dest/avm/serialization/instruction_serialization.js +11 -15
- package/dest/avm/test_utils.d.ts +1 -0
- package/dest/avm/test_utils.d.ts.map +1 -1
- package/dest/client/client_execution_context.d.ts +9 -10
- package/dest/client/client_execution_context.d.ts.map +1 -1
- package/dest/client/client_execution_context.js +30 -33
- package/dest/client/private_execution.d.ts.map +1 -1
- package/dest/client/private_execution.js +3 -4
- package/dest/client/simulator.d.ts.map +1 -1
- package/dest/client/simulator.js +3 -3
- package/dest/mocks/fixtures.js +2 -2
- package/dest/providers/acvm_native.d.ts +1 -0
- package/dest/providers/acvm_native.d.ts.map +1 -1
- package/dest/public/db_interfaces.d.ts +1 -0
- package/dest/public/db_interfaces.d.ts.map +1 -1
- package/dest/public/dual_side_effect_trace.d.ts +7 -6
- package/dest/public/dual_side_effect_trace.d.ts.map +1 -1
- package/dest/public/dual_side_effect_trace.js +19 -19
- package/dest/public/enqueued_call_side_effect_trace.d.ts +7 -6
- package/dest/public/enqueued_call_side_effect_trace.d.ts.map +1 -1
- package/dest/public/enqueued_call_side_effect_trace.js +15 -17
- package/dest/public/enqueued_call_simulator.d.ts +1 -1
- package/dest/public/enqueued_call_simulator.d.ts.map +1 -1
- package/dest/public/enqueued_call_simulator.js +11 -12
- package/dest/public/enqueued_calls_processor.d.ts.map +1 -1
- package/dest/public/enqueued_calls_processor.js +2 -2
- package/dest/public/execution.d.ts +1 -0
- package/dest/public/execution.d.ts.map +1 -1
- package/dest/public/execution.js +2 -2
- package/dest/public/executor.d.ts.map +1 -1
- package/dest/public/executor.js +6 -5
- package/dest/public/public_db_sources.d.ts +1 -0
- package/dest/public/public_db_sources.d.ts.map +1 -1
- package/dest/public/side_effect_trace.d.ts +7 -6
- package/dest/public/side_effect_trace.d.ts.map +1 -1
- package/dest/public/side_effect_trace.js +14 -15
- package/dest/public/side_effect_trace_interface.d.ts +7 -6
- package/dest/public/side_effect_trace_interface.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/acvm/oracle/oracle.ts +0 -6
- package/src/acvm/oracle/typed_oracle.ts +0 -3
- package/src/avm/avm_context.ts +1 -1
- package/src/avm/avm_execution_environment.ts +0 -15
- package/src/avm/avm_gas.ts +0 -7
- package/src/avm/fixtures/index.ts +7 -2
- package/src/avm/journal/journal.ts +32 -32
- package/src/avm/journal/nullifiers.ts +23 -23
- package/src/avm/journal/public_storage.ts +20 -20
- package/src/avm/opcodes/accrued_substate.ts +4 -8
- package/src/avm/opcodes/environment_getters.ts +0 -3
- package/src/avm/opcodes/hashing.ts +9 -122
- package/src/avm/opcodes/index.ts +0 -1
- package/src/avm/opcodes/storage.ts +2 -2
- package/src/avm/serialization/bytecode_serialization.ts +0 -7
- package/src/avm/serialization/instruction_serialization.ts +0 -4
- package/src/client/client_execution_context.ts +21 -44
- package/src/client/private_execution.ts +1 -9
- package/src/client/simulator.ts +0 -2
- package/src/mocks/fixtures.ts +1 -1
- package/src/public/dual_side_effect_trace.ts +18 -18
- package/src/public/enqueued_call_side_effect_trace.ts +14 -20
- package/src/public/enqueued_call_simulator.ts +10 -23
- package/src/public/enqueued_calls_processor.ts +1 -3
- package/src/public/execution.ts +1 -1
- package/src/public/executor.ts +11 -5
- package/src/public/side_effect_trace.ts +19 -14
- package/src/public/side_effect_trace_interface.ts +6 -6
- package/dest/avm/opcodes/commitment.d.ts +0 -16
- package/dest/avm/opcodes/commitment.d.ts.map +0 -1
- package/dest/avm/opcodes/commitment.js +0 -51
- package/src/avm/opcodes/commitment.ts +0 -65
|
@@ -92,13 +92,13 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
92
92
|
|
|
93
93
|
// TODO(dbanks12): checks against tx-wide limit need access to parent trace's length
|
|
94
94
|
|
|
95
|
-
public tracePublicStorageRead(
|
|
95
|
+
public tracePublicStorageRead(contractAddress: Fr, slot: Fr, value: Fr, _exists: boolean, _cached: boolean) {
|
|
96
96
|
// NOTE: exists and cached are unused for now but may be used for optimizations or kernel hints later
|
|
97
97
|
if (this.contractStorageReads.length >= MAX_PUBLIC_DATA_READS_PER_TX) {
|
|
98
98
|
throw new SideEffectLimitReachedError('contract storage read', MAX_PUBLIC_DATA_READS_PER_TX);
|
|
99
99
|
}
|
|
100
100
|
this.contractStorageReads.push(
|
|
101
|
-
new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(
|
|
101
|
+
new ContractStorageRead(slot, value, this.sideEffectCounter, AztecAddress.fromField(contractAddress)),
|
|
102
102
|
);
|
|
103
103
|
this.avmCircuitHints.storageValues.items.push(
|
|
104
104
|
new AvmKeyValueHint(/*key=*/ new Fr(this.sideEffectCounter), /*value=*/ value),
|
|
@@ -107,20 +107,20 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
107
107
|
this.incrementSideEffectCounter();
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
public tracePublicStorageWrite(
|
|
110
|
+
public tracePublicStorageWrite(contractAddress: Fr, slot: Fr, value: Fr) {
|
|
111
111
|
if (this.contractStorageUpdateRequests.length >= MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX) {
|
|
112
112
|
throw new SideEffectLimitReachedError('contract storage write', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
|
|
113
113
|
}
|
|
114
114
|
this.contractStorageUpdateRequests.push(
|
|
115
|
-
new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter,
|
|
115
|
+
new ContractStorageUpdateRequest(slot, value, this.sideEffectCounter, contractAddress),
|
|
116
116
|
);
|
|
117
117
|
this.logger.debug(`SSTORE cnt: ${this.sideEffectCounter} val: ${value} slot: ${slot}`);
|
|
118
118
|
this.incrementSideEffectCounter();
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
// TODO(8287): _exists can be removed once we have the vm properly handling the equality check
|
|
122
|
-
public traceNoteHashCheck(
|
|
123
|
-
// NOTE:
|
|
122
|
+
public traceNoteHashCheck(_contractAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean) {
|
|
123
|
+
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
124
124
|
if (this.noteHashReadRequests.length >= MAX_NOTE_HASH_READ_REQUESTS_PER_TX) {
|
|
125
125
|
throw new SideEffectLimitReachedError('note hash read request', MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
|
|
126
126
|
}
|
|
@@ -131,7 +131,7 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
131
131
|
// NOTE: counter does not increment for note hash checks (because it doesn't rely on pending note hashes)
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
public traceNewNoteHash(
|
|
134
|
+
public traceNewNoteHash(_contractAddress: Fr, noteHash: Fr) {
|
|
135
135
|
if (this.noteHashes.length >= MAX_NOTE_HASHES_PER_TX) {
|
|
136
136
|
throw new SideEffectLimitReachedError('note hash', MAX_NOTE_HASHES_PER_TX);
|
|
137
137
|
}
|
|
@@ -140,8 +140,14 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
140
140
|
this.incrementSideEffectCounter();
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
public traceNullifierCheck(
|
|
144
|
-
|
|
143
|
+
public traceNullifierCheck(
|
|
144
|
+
_contractAddress: Fr,
|
|
145
|
+
nullifier: Fr,
|
|
146
|
+
_leafIndex: Fr,
|
|
147
|
+
exists: boolean,
|
|
148
|
+
_isPending: boolean,
|
|
149
|
+
) {
|
|
150
|
+
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
145
151
|
// NOTE: isPending and leafIndex are unused for now but may be used for optimizations or kernel hints later
|
|
146
152
|
|
|
147
153
|
this.enforceLimitOnNullifierChecks();
|
|
@@ -159,8 +165,8 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
159
165
|
this.incrementSideEffectCounter();
|
|
160
166
|
}
|
|
161
167
|
|
|
162
|
-
public traceNewNullifier(
|
|
163
|
-
// NOTE:
|
|
168
|
+
public traceNewNullifier(_contractAddress: Fr, nullifier: Fr) {
|
|
169
|
+
// NOTE: contractAddress is unused but will be important when an AVM circuit processes an entire enqueued call
|
|
164
170
|
if (this.nullifiers.length >= MAX_NULLIFIERS_PER_TX) {
|
|
165
171
|
throw new SideEffectLimitReachedError('nullifier', MAX_NULLIFIERS_PER_TX);
|
|
166
172
|
}
|
|
@@ -369,10 +375,9 @@ export class PublicSideEffectTrace implements PublicSideEffectTraceInterface {
|
|
|
369
375
|
function createPublicExecutionRequest(avmEnvironment: AvmExecutionEnvironment): PublicExecutionRequest {
|
|
370
376
|
const callContext = CallContext.from({
|
|
371
377
|
msgSender: avmEnvironment.sender,
|
|
372
|
-
|
|
378
|
+
contractAddress: avmEnvironment.address,
|
|
373
379
|
functionSelector: avmEnvironment.functionSelector,
|
|
374
|
-
isDelegateCall: avmEnvironment.isDelegateCall,
|
|
375
380
|
isStaticCall: avmEnvironment.isStaticCall,
|
|
376
381
|
});
|
|
377
|
-
return new PublicExecutionRequest(
|
|
382
|
+
return new PublicExecutionRequest(callContext, avmEnvironment.calldata);
|
|
378
383
|
}
|
|
@@ -9,12 +9,12 @@ export interface PublicSideEffectTraceInterface {
|
|
|
9
9
|
fork(): PublicSideEffectTraceInterface;
|
|
10
10
|
getCounter(): number;
|
|
11
11
|
// all "trace*" functions can throw SideEffectLimitReachedError
|
|
12
|
-
tracePublicStorageRead(
|
|
13
|
-
tracePublicStorageWrite(
|
|
14
|
-
traceNoteHashCheck(
|
|
15
|
-
traceNewNoteHash(
|
|
16
|
-
traceNullifierCheck(
|
|
17
|
-
traceNewNullifier(
|
|
12
|
+
tracePublicStorageRead(contractAddress: Fr, slot: Fr, value: Fr, exists: boolean, cached: boolean): void;
|
|
13
|
+
tracePublicStorageWrite(contractAddress: Fr, slot: Fr, value: Fr): void;
|
|
14
|
+
traceNoteHashCheck(contractAddress: Fr, noteHash: Fr, leafIndex: Fr, exists: boolean): void;
|
|
15
|
+
traceNewNoteHash(contractAddress: Fr, noteHash: Fr): void;
|
|
16
|
+
traceNullifierCheck(contractAddress: Fr, nullifier: Fr, leafIndex: Fr, exists: boolean, isPending: boolean): void;
|
|
17
|
+
traceNewNullifier(contractAddress: Fr, nullifier: Fr): void;
|
|
18
18
|
traceL1ToL2MessageCheck(contractAddress: Fr, msgHash: Fr, msgLeafIndex: Fr, exists: boolean): void;
|
|
19
19
|
traceNewL2ToL1Message(contractAddress: Fr, recipient: Fr, content: Fr): void;
|
|
20
20
|
traceUnencryptedLog(contractAddress: Fr, log: Fr[]): void;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type AvmContext } from '../avm_context.js';
|
|
2
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
3
|
-
import { Instruction } from './instruction.js';
|
|
4
|
-
export declare class PedersenCommitment extends Instruction {
|
|
5
|
-
private indirect;
|
|
6
|
-
private inputOffset;
|
|
7
|
-
private outputOffset;
|
|
8
|
-
private inputSizeOffset;
|
|
9
|
-
private genIndexOffset;
|
|
10
|
-
static type: string;
|
|
11
|
-
static readonly opcode: Opcode;
|
|
12
|
-
static readonly wireFormat: OperandType[];
|
|
13
|
-
constructor(indirect: number, inputOffset: number, outputOffset: number, inputSizeOffset: number, genIndexOffset: number);
|
|
14
|
-
execute(context: AvmContext): Promise<void>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=commitment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commitment.d.ts","sourceRoot":"","sources":["../../../src/avm/opcodes/commitment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAEpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,kBAAmB,SAAQ,WAAW;IAe/C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IAlBxB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAwB;IAC3C,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAA6B;IAG3D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,CAOvC;gBAGQ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM;IAKnB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCzD"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { pedersenCommit } from '@aztec/foundation/crypto';
|
|
2
|
-
import { Field, TypeTag, Uint8 } from '../avm_memory_types.js';
|
|
3
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
4
|
-
import { Addressing } from './addressing_mode.js';
|
|
5
|
-
import { Instruction } from './instruction.js';
|
|
6
|
-
export class PedersenCommitment extends Instruction {
|
|
7
|
-
constructor(indirect, inputOffset, outputOffset, inputSizeOffset, genIndexOffset) {
|
|
8
|
-
super();
|
|
9
|
-
this.indirect = indirect;
|
|
10
|
-
this.inputOffset = inputOffset;
|
|
11
|
-
this.outputOffset = outputOffset;
|
|
12
|
-
this.inputSizeOffset = inputSizeOffset;
|
|
13
|
-
this.genIndexOffset = genIndexOffset;
|
|
14
|
-
}
|
|
15
|
-
async execute(context) {
|
|
16
|
-
const memory = context.machineState.memory.track(this.type);
|
|
17
|
-
const operands = [this.inputOffset, this.outputOffset, this.inputSizeOffset, this.genIndexOffset];
|
|
18
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
19
|
-
const [inputOffset, outputOffset, inputSizeOffset, genIndexOffset] = addressing.resolve(operands, memory);
|
|
20
|
-
const inputSize = memory.get(inputSizeOffset).toNumber();
|
|
21
|
-
memory.checkTag(TypeTag.UINT32, inputSizeOffset);
|
|
22
|
-
const inputs = memory.getSlice(inputOffset, inputSize);
|
|
23
|
-
memory.checkTagsRange(TypeTag.FIELD, inputOffset, inputSize);
|
|
24
|
-
const generatorIndex = memory.get(genIndexOffset).toNumber();
|
|
25
|
-
memory.checkTag(TypeTag.UINT32, genIndexOffset);
|
|
26
|
-
context.machineState.consumeGas(this.gasCost(inputSize));
|
|
27
|
-
const inputBuffer = inputs.map(input => input.toBuffer());
|
|
28
|
-
// TODO: Add the generate index to the pedersenCommit function
|
|
29
|
-
const commitment = pedersenCommit(inputBuffer, generatorIndex).map(f => new Field(f));
|
|
30
|
-
// The function doesnt include a flag if the output point is infinity, come back to this
|
|
31
|
-
// for now we just check if theyre zero - until we know how bb encodes them
|
|
32
|
-
const isInfinity = commitment[0].equals(new Field(0)) && commitment[1].equals(new Field(0));
|
|
33
|
-
memory.set(outputOffset, commitment[0]); // Field typed
|
|
34
|
-
memory.set(outputOffset + 1, commitment[1]); // Field typed
|
|
35
|
-
memory.set(outputOffset + 2, new Uint8(isInfinity ? 1 : 0)); // U8 typed
|
|
36
|
-
memory.assert({ reads: inputSize + 2, writes: 3, addressing });
|
|
37
|
-
context.machineState.incrementPc();
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
PedersenCommitment.type = 'PEDERSENCOMMITMENT';
|
|
41
|
-
PedersenCommitment.opcode = Opcode.PEDERSENCOMMITMENT;
|
|
42
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
43
|
-
PedersenCommitment.wireFormat = [
|
|
44
|
-
OperandType.UINT8 /* Opcode */,
|
|
45
|
-
OperandType.UINT8 /* Indirect */,
|
|
46
|
-
OperandType.UINT32 /* Input Offset*/,
|
|
47
|
-
OperandType.UINT32 /* Dst Offset */,
|
|
48
|
-
OperandType.UINT32 /* Input Size Offset */,
|
|
49
|
-
OperandType.UINT32 /* Generator Index Offset */,
|
|
50
|
-
];
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdm0vb3Bjb2Rlcy9jb21taXRtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFjakQsWUFDVSxRQUFnQixFQUNoQixXQUFtQixFQUNuQixZQUFvQixFQUNwQixlQUF1QixFQUN2QixjQUFzQjtRQUU5QixLQUFLLEVBQUUsQ0FBQztRQU5BLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQVE7SUFHaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1RCxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUVqRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRWhELE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV6RCxNQUFNLFdBQVcsR0FBYSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEUsOERBQThEO1FBQzlELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0Rix3RkFBd0Y7UUFDeEYsMkVBQTJFO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUV4RSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsQ0FBQzs7QUF0RE0sdUJBQUksR0FBVyxvQkFBb0IsQ0FBQztBQUMzQix5QkFBTSxHQUFXLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztBQUUzRCwwREFBMEQ7QUFDMUMsNkJBQVUsR0FBa0I7SUFDMUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZO0lBQzlCLFdBQVcsQ0FBQyxLQUFLLENBQUMsY0FBYztJQUNoQyxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtJQUNwQyxXQUFXLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtJQUNuQyxXQUFXLENBQUMsTUFBTSxDQUFDLHVCQUF1QjtJQUMxQyxXQUFXLENBQUMsTUFBTSxDQUFDLDRCQUE0QjtDQUNoRCxDQUFDIn0=
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { pedersenCommit } from '@aztec/foundation/crypto';
|
|
2
|
-
|
|
3
|
-
import { type AvmContext } from '../avm_context.js';
|
|
4
|
-
import { Field, TypeTag, Uint8 } from '../avm_memory_types.js';
|
|
5
|
-
import { Opcode, OperandType } from '../serialization/instruction_serialization.js';
|
|
6
|
-
import { Addressing } from './addressing_mode.js';
|
|
7
|
-
import { Instruction } from './instruction.js';
|
|
8
|
-
|
|
9
|
-
export class PedersenCommitment extends Instruction {
|
|
10
|
-
static type: string = 'PEDERSENCOMMITMENT';
|
|
11
|
-
static readonly opcode: Opcode = Opcode.PEDERSENCOMMITMENT;
|
|
12
|
-
|
|
13
|
-
// Informs (de)serialization. See Instruction.deserialize.
|
|
14
|
-
static readonly wireFormat: OperandType[] = [
|
|
15
|
-
OperandType.UINT8 /* Opcode */,
|
|
16
|
-
OperandType.UINT8 /* Indirect */,
|
|
17
|
-
OperandType.UINT32 /* Input Offset*/,
|
|
18
|
-
OperandType.UINT32 /* Dst Offset */,
|
|
19
|
-
OperandType.UINT32 /* Input Size Offset */,
|
|
20
|
-
OperandType.UINT32 /* Generator Index Offset */,
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
constructor(
|
|
24
|
-
private indirect: number,
|
|
25
|
-
private inputOffset: number,
|
|
26
|
-
private outputOffset: number,
|
|
27
|
-
private inputSizeOffset: number,
|
|
28
|
-
private genIndexOffset: number,
|
|
29
|
-
) {
|
|
30
|
-
super();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public async execute(context: AvmContext): Promise<void> {
|
|
34
|
-
const memory = context.machineState.memory.track(this.type);
|
|
35
|
-
|
|
36
|
-
const operands = [this.inputOffset, this.outputOffset, this.inputSizeOffset, this.genIndexOffset];
|
|
37
|
-
const addressing = Addressing.fromWire(this.indirect, operands.length);
|
|
38
|
-
const [inputOffset, outputOffset, inputSizeOffset, genIndexOffset] = addressing.resolve(operands, memory);
|
|
39
|
-
|
|
40
|
-
const inputSize = memory.get(inputSizeOffset).toNumber();
|
|
41
|
-
memory.checkTag(TypeTag.UINT32, inputSizeOffset);
|
|
42
|
-
|
|
43
|
-
const inputs = memory.getSlice(inputOffset, inputSize);
|
|
44
|
-
memory.checkTagsRange(TypeTag.FIELD, inputOffset, inputSize);
|
|
45
|
-
|
|
46
|
-
const generatorIndex = memory.get(genIndexOffset).toNumber();
|
|
47
|
-
memory.checkTag(TypeTag.UINT32, genIndexOffset);
|
|
48
|
-
|
|
49
|
-
context.machineState.consumeGas(this.gasCost(inputSize));
|
|
50
|
-
|
|
51
|
-
const inputBuffer: Buffer[] = inputs.map(input => input.toBuffer());
|
|
52
|
-
// TODO: Add the generate index to the pedersenCommit function
|
|
53
|
-
const commitment = pedersenCommit(inputBuffer, generatorIndex).map(f => new Field(f));
|
|
54
|
-
// The function doesnt include a flag if the output point is infinity, come back to this
|
|
55
|
-
// for now we just check if theyre zero - until we know how bb encodes them
|
|
56
|
-
const isInfinity = commitment[0].equals(new Field(0)) && commitment[1].equals(new Field(0));
|
|
57
|
-
|
|
58
|
-
memory.set(outputOffset, commitment[0]); // Field typed
|
|
59
|
-
memory.set(outputOffset + 1, commitment[1]); // Field typed
|
|
60
|
-
memory.set(outputOffset + 2, new Uint8(isInfinity ? 1 : 0)); // U8 typed
|
|
61
|
-
|
|
62
|
-
memory.assert({ reads: inputSize + 2, writes: 3, addressing });
|
|
63
|
-
context.machineState.incrementPc();
|
|
64
|
-
}
|
|
65
|
-
}
|