Skip to content

Commit

Permalink
refactor: check Aztec.nr version instead of Noir
Browse files Browse the repository at this point in the history
  • Loading branch information
alexghr committed Nov 6, 2023
1 parent bdc656e commit 8f87216
Show file tree
Hide file tree
Showing 21 changed files with 123 additions and 68 deletions.
2 changes: 1 addition & 1 deletion yarn-project/aztec-sandbox/src/bin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { createAztecNodeRpcServer } from '@aztec/aztec-node';
import { deployInitialSandboxAccounts } from '@aztec/aztec.js';
import { createDebugLogger } from '@aztec/foundation/log';
import { fileURLToPath } from '@aztec/foundation/url';
import { NoirWasmVersion } from '@aztec/noir-compiler/noir-version';
import { NoirWasmVersion } from '@aztec/noir-compiler/versions';
import { createPXERpcServer } from '@aztec/pxe';

import { readFileSync } from 'fs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,5 @@
"verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
}
],
"events": [],
"compilerVersion": "0.18.0-6ca33a2.aztec"
"events": []
}
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,5 @@
"verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
}
],
"events": [],
"compilerVersion": "0.18.0-6ca33a2.aztec"
"events": []
}
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,5 @@
"verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
}
],
"events": [],
"compilerVersion": "0.18.0-6ca33a2.aztec"
"events": []
}
6 changes: 4 additions & 2 deletions yarn-project/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import { mnemonicToAccount } from 'viem/accounts';

import { createCompatibleClient } from './client.js';
import { encodeArgs, parseStructString } from './encoding.js';
import { GITHUB_TAG_PREFIX } from './github.js';
import { unboxContract } from './unbox.js';
import { update } from './update/update.js';
import {
Expand Down Expand Up @@ -248,9 +249,10 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command {

const client = await createCompatibleClient(rpcUrl, debugLogger);
const nodeInfo = await client.getNodeInfo();
if (contractArtifact.compilerVersion && contractArtifact.compilerVersion !== nodeInfo.compatibleNargoVersion) {
const expectedAztecNrVersion = `${GITHUB_TAG_PREFIX}-v${nodeInfo.sandboxVersion}`;
if (contractArtifact.aztecNrVersion && contractArtifact.aztecNrVersion !== expectedAztecNrVersion) {
log(
`\nWarning: Contract was compiled with a different version of Noir: ${contractArtifact.compilerVersion}. Consider re-compiling the contract with Noir ${nodeInfo.compatibleNargoVersion}\n`,
`\nWarning: Contract was compiled with a different version of Aztec.nr: ${contractArtifact.aztecNrVersion}. Consider updating Aztec.nr to ${expectedAztecNrVersion}\n`,
);
}

Expand Down
2 changes: 1 addition & 1 deletion yarn-project/foundation/src/abi/abi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ export interface ContractArtifact {
/**
* The version of compiler used to create this artifact
*/
compilerVersion?: string;
aztecNrVersion?: string;

/**
* The functions of the contract.
Expand Down
2 changes: 1 addition & 1 deletion yarn-project/noir-compiler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"exports": {
".": "./dest/index.js",
"./cli": "./dest/cli/index.js",
"./noir-version": "./dest/noir-version.js"
"./versions": "./dest/versions.js"
},
"typedocOptions": {
"entryPoints": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
exports[`noir-compiler using nargo compiles the test contract 1`] = `
[
{
"aztecNrVersion": undefined,
"events": [],
"functions": [
{
Expand Down Expand Up @@ -195,6 +196,7 @@ export class TestContractContract extends ContractBase {
exports[`noir-compiler using wasm binary compiles the test contract 1`] = `
[
{
"aztecNrVersion": undefined,
"events": [],
"functions": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { NoirDependencyConfig } from '@aztec/foundation/noir';

import { NoirPackage } from '../package.js';
import { NoirDependencyManager } from './dependency-manager.js';
import { DependencyResolver } from './dependency-resolver.js';
import { Dependency, DependencyResolver } from './dependency-resolver.js';

describe('DependencyManager', () => {
let manager: NoirDependencyManager;
Expand Down Expand Up @@ -51,42 +51,51 @@ describe('DependencyManager', () => {

class TestDependencyResolver implements DependencyResolver {
// eslint-disable-next-line require-await
public async resolveDependency(pkg: NoirPackage, dep: NoirDependencyConfig): Promise<NoirPackage | null> {
public async resolveDependency(pkg: NoirPackage, dep: NoirDependencyConfig): Promise<Dependency | null> {
if (!('path' in dep)) {
return null;
}

switch (dep.path) {
case '/lib1':
return new NoirPackage('/lib1', '/lib1/src', {
dependencies: {},
package: {
name: 'lib1',
type: 'lib',
},
});
return {
version: '',
package: new NoirPackage('/lib1', '/lib1/src', {
dependencies: {},
package: {
name: 'lib1',
type: 'lib',
},
}),
};

case '/lib2':
return new NoirPackage('/lib2', '/lib2/src', {
dependencies: {
lib3: {
path: '/lib3',
return {
version: '',
package: new NoirPackage('/lib2', '/lib2/src', {
dependencies: {
lib3: {
path: '/lib3',
},
},
},
package: {
name: 'lib2',
type: 'lib',
},
});
package: {
name: 'lib2',
type: 'lib',
},
}),
};

case '/lib3':
return new NoirPackage('/lib3', '/lib3/src', {
dependencies: {},
package: {
name: 'lib3',
type: 'lib',
},
});
return {
version: '',
package: new NoirPackage('/lib3', '/lib3/src', {
dependencies: {},
package: {
name: 'lib3',
type: 'lib',
},
}),
};

default:
throw new Error();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import { NoirDependencyConfig } from '@aztec/foundation/noir';
import { join } from 'node:path';

import { NoirPackage } from '../package.js';
import { DependencyResolver } from './dependency-resolver.js';
import { Dependency, DependencyResolver } from './dependency-resolver.js';

/**
* Noir Dependency Resolver
*/
export class NoirDependencyManager {
#entryPoint: NoirPackage;
#libraries = new Map<string, NoirPackage>();
#libraries = new Map<string, Dependency>();
#dependencies = new Map<string, string[]>();
#log: LogFn;
#resolvers: readonly DependencyResolver[];
Expand Down Expand Up @@ -49,6 +49,16 @@ export class NoirDependencyManager {
await this.#recursivelyResolveDependencies('', this.#entryPoint);
}

/**
* Gets the version of a dependency in the dependency tree
* @param name - Dependency name
* @returns The dependency's version
*/
public getVersionOf(name: string): string | undefined {
const dep = this.#libraries.get(name);
return dep?.version;
}

async #recursivelyResolveDependencies(packageName: string, noirPackage: NoirPackage): Promise<void> {
for (const [name, config] of Object.entries(noirPackage.getDependencies())) {
// TODO what happens if more than one package has the same name but different versions?
Expand All @@ -60,20 +70,20 @@ export class NoirDependencyManager {
}

const dependency = await this.#resolveDependency(noirPackage, config);
if (dependency.getType() !== 'lib') {
if (dependency.package.getType() !== 'lib') {
this.#log(`Non-library package ${name}`, config);
throw new Error(`Dependency ${name} is not a library`);
}

this.#libraries.set(name, dependency);
this.#dependencies.set(packageName, [...(this.#dependencies.get(packageName) ?? []), name]);

await this.#recursivelyResolveDependencies(name, dependency);
await this.#recursivelyResolveDependencies(name, dependency.package);
}
}

async #resolveDependency(pkg: NoirPackage, config: NoirDependencyConfig) {
let dependency: NoirPackage | null = null;
async #resolveDependency(pkg: NoirPackage, config: NoirDependencyConfig): Promise<Dependency> {
let dependency: Dependency | null = null;
for (const resolver of this.#resolvers) {
dependency = await resolver.resolveDependency(pkg, config);
if (dependency) {
Expand Down Expand Up @@ -102,9 +112,9 @@ export class NoirDependencyManager {
*/
public findFile(sourceId: string): string | null {
const [lib, ...path] = sourceId.split('/').filter(x => x);
const pkg = this.#libraries.get(lib);
if (pkg) {
return join(pkg.getSrcPath(), ...path);
const dep = this.#libraries.get(lib);
if (dep) {
return join(dep.package.getSrcPath(), ...path);
} else {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@ import { NoirDependencyConfig } from '@aztec/foundation/noir';

import { NoirPackage } from '../package.js';

/**
* A Noir dependency
*/
export type Dependency = {
/** version string as determined by the resolver */
version?: string;
/** the actual package source code */
package: NoirPackage;
};

/**
* Resolves a dependency for a package.
*/
Expand All @@ -11,5 +21,5 @@ export interface DependencyResolver {
* @param pkg - The package to resolve dependencies for
* @param dep - The dependency config to resolve
*/
resolveDependency(pkg: NoirPackage, dep: NoirDependencyConfig): Promise<NoirPackage | null>;
resolveDependency(pkg: NoirPackage, dep: NoirDependencyConfig): Promise<Dependency | null>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@ describe('GithubDependencyResolver', () => {

it('resolves Github dependency', async () => {
fetchMock.mockResolvedValueOnce(new Response(await readFile(join(fixtures, 'test_lib.zip')), { status: 200 }));
const libPkg = await resolver.resolveDependency(pkg, libDependency);
expect(libPkg).toBeDefined();
expect(fm.hasFileSync(libPkg!.getEntryPointPath())).toBe(true);
const lib = await resolver.resolveDependency(pkg, libDependency);
expect(lib).toBeDefined();
expect(lib!.version).toEqual(libDependency.tag);
expect(fm.hasFileSync(lib!.package.getEntryPointPath())).toBe(true);
});

it.each<[NoirGitDependencyConfig, 'zip' | 'tar', string]>([
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { unzip } from 'unzipit';

import { FileManager } from '../file-manager/file-manager.js';
import { NoirPackage } from '../package.js';
import { DependencyResolver } from './dependency-resolver.js';
import { Dependency, DependencyResolver } from './dependency-resolver.js';

/**
* Downloads dependencies from github
Expand All @@ -25,7 +25,7 @@ export class GithubDependencyResolver implements DependencyResolver {
* @param dependency - The dependency configuration
* @returns asd
*/
async resolveDependency(_pkg: NoirPackage, dependency: NoirDependencyConfig): Promise<NoirPackage | null> {
async resolveDependency(_pkg: NoirPackage, dependency: NoirDependencyConfig): Promise<Dependency | null> {
// TODO accept ssh urls?
// TODO github authentication?
if (!('git' in dependency) || !dependency.git.startsWith('https://github.com')) {
Expand All @@ -34,7 +34,10 @@ export class GithubDependencyResolver implements DependencyResolver {

const archivePath = await this.#fetchZipFromGithub(dependency);
const libPath = await this.#extractZip(dependency, archivePath);
return NoirPackage.open(libPath, this.#fm);
return {
version: dependency.tag,
package: NoirPackage.open(libPath, this.#fm),
};
}

async #fetchZipFromGithub(dependency: Pick<NoirGitDependencyConfig, 'git' | 'tag'>): Promise<string> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@ describe('DependencyResolver', () => {
});

it.each(['../test_contract', '/test_contract'])('resolves a known dependency', async path => {
const libPkg = await resolver.resolveDependency(pkg, {
const lib = await resolver.resolveDependency(pkg, {
path,
});
expect(libPkg).toBeDefined();
expect(fm.hasFileSync(libPkg!.getEntryPointPath())).toBe(true);
expect(lib).toBeDefined();
expect(lib!.version).toBeUndefined();
expect(fm.hasFileSync(lib!.package.getEntryPointPath())).toBe(true);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { resolve } from 'path';

import { FileManager } from '../file-manager/file-manager.js';
import { NoirPackage } from '../package.js';
import { DependencyResolver } from './dependency-resolver.js';
import { Dependency, DependencyResolver } from './dependency-resolver.js';

/**
* Resolves dependencies on-disk, relative to current package
Expand All @@ -16,9 +16,13 @@ export class LocalDependencyResolver implements DependencyResolver {
this.#fm = fm;
}

resolveDependency(pkg: NoirPackage, config: NoirDependencyConfig): Promise<NoirPackage | null> {
resolveDependency(pkg: NoirPackage, config: NoirDependencyConfig): Promise<Dependency | null> {
if ('path' in config) {
return Promise.resolve(NoirPackage.open(resolve(pkg.getPackagePath(), config.path), this.#fm));
return Promise.resolve({
// unknown version, Nargo.toml doesn't have a version field
version: undefined,
package: NoirPackage.open(resolve(pkg.getPackagePath(), config.path), this.#fm),
});
} else {
return Promise.resolve(null);
}
Expand Down
Loading

0 comments on commit 8f87216

Please sign in to comment.