Skip to content

Commit eed8c0c

Browse files
nchamoaztec-bot
authored andcommitted
fix(pxe): skip registerContractFunctionSignatures when no public fns (#23134)
1 parent 40f864c commit eed8c0c

2 files changed

Lines changed: 41 additions & 3 deletions

File tree

yarn-project/pxe/src/pxe.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { AztecLMDBStoreV2, openTmpStore } from '@aztec/kv-store/lmdb-v2';
88
import { TestContractArtifact } from '@aztec/noir-test-contracts.js/Test';
99
import { BundledProtocolContractsProvider } from '@aztec/protocol-contracts/providers/bundle';
1010
import { WASMSimulator } from '@aztec/simulator/client';
11-
import { EventSelector } from '@aztec/stdlib/abi';
11+
import { EventSelector, FunctionType } from '@aztec/stdlib/abi';
1212
import { AztecAddress } from '@aztec/stdlib/aztec-address';
1313
import { BlockHash, GENESIS_CHECKPOINT_HEADER_HASH } from '@aztec/stdlib/block';
1414
import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
@@ -163,6 +163,40 @@ describe('PXE', () => {
163163
await expect(pxe.registerContract({ instance, artifact })).rejects.toThrow(/Artifact does not match/i);
164164
});
165165

166+
it('does not call registerContractFunctionSignatures for contracts without public functions', async () => {
167+
const { artifact, instance } = await randomDeployedContract();
168+
node.registerContractFunctionSignatures.mockClear();
169+
170+
await pxe.registerContract({ artifact, instance });
171+
172+
expect(node.registerContractFunctionSignatures).not.toHaveBeenCalled();
173+
});
174+
175+
it('calls registerContractFunctionSignatures for contracts with public functions', async () => {
176+
const artifact = randomContractArtifact();
177+
artifact.functions = [
178+
{
179+
name: 'my_public_fn',
180+
functionType: FunctionType.PUBLIC,
181+
isOnlySelf: false,
182+
isStatic: false,
183+
isInitializer: false,
184+
parameters: [],
185+
returnTypes: [],
186+
errorTypes: {},
187+
bytecode: Buffer.from(''),
188+
debugSymbols: '',
189+
},
190+
];
191+
const contractClass = await getContractClassFromArtifact(artifact);
192+
const instance = await randomContractInstanceWithAddress({ contractClassId: contractClass.id });
193+
node.registerContractFunctionSignatures.mockClear();
194+
195+
await pxe.registerContract({ artifact, instance });
196+
197+
expect(node.registerContractFunctionSignatures).toHaveBeenCalledWith(['my_public_fn()']);
198+
});
199+
166200
// These tests are meant to quickly exercise PXE as a
167201
// frontier API so we don't need to rely on slower E2E
168202
// tests (which in turn are more meaningful for acceptance).

yarn-project/pxe/src/pxe.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,9 @@ export class PXE {
692692
const publicFunctionSignatures = artifact.functions
693693
.filter(fn => fn.functionType === FunctionType.PUBLIC)
694694
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
695-
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
695+
if (publicFunctionSignatures.length > 0) {
696+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
697+
}
696698
} else {
697699
// Otherwise, make sure there is an artifact already registered for that class id
698700
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
@@ -739,7 +741,9 @@ export class PXE {
739741
const publicFunctionSignatures = artifact.functions
740742
.filter(fn => fn.functionType === FunctionType.PUBLIC)
741743
.map(fn => decodeFunctionSignature(fn.name, fn.parameters));
742-
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
744+
if (publicFunctionSignatures.length > 0) {
745+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
746+
}
743747

744748
currentInstance.currentContractClassId = contractClass.id;
745749
await Promise.all([

0 commit comments

Comments
 (0)