Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: make noir_wasm the default compiler #3090

Merged
merged 8 commits into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -373,17 +373,6 @@ jobs:
name: "Build and test"
command: build l1-contracts

noir-contracts-build:
machine:
image: ubuntu-2204:2023.07.2
resource_class: large
steps:
- *checkout
- *setup_env
- run:
name: Build
command: build noir-contracts-build | add_timestamps

yarn-project-base:
machine:
image: ubuntu-2204:2023.07.2
Expand Down Expand Up @@ -1237,7 +1226,6 @@ workflows:
<<: *defaults

- l1-contracts: *defaults
- noir-contracts-build: *defaults

- mainnet-fork: *defaults
- deploy-mainnet-fork:
Expand All @@ -1254,7 +1242,6 @@ workflows:
- yarn-project:
requires:
- yarn-project-base
- noir-contracts-build
<<: *defaults
- yarn-project-formatting:
requires:
Expand Down
14 changes: 1 addition & 13 deletions build_manifest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,6 @@ circuits-x86_64-linux-clang-assert:
l1-contracts:
buildDir: l1-contracts

# We should move the noir source code to the top of the repo.
# It's currently under yarn-project which looks very circular, but it isn't.
# We're specific with our rebuild patterns as we depend on aztec.nr, but it doesn't have its own build.
noir-contracts-build:
buildDir: yarn-project
projectDir: yarn-project/noir-contracts
rebuildPatterns:
- ^yarn-project/noir-contracts/
- ^yarn-project/noir-compiler/src/noir-version.json
- ^yarn-project/aztec-nr/

yarn-project-base:
buildDir: yarn-project
projectDir: yarn-project/yarn-project-base
Expand All @@ -107,11 +96,10 @@ yarn-project-base:
yarn-project:
buildDir: yarn-project
rebuildPatterns:
- ^yarn-project/.*\.(ts|tsx|js|cjs|mjs|json|html|md|sh)$
- ^yarn-project/.*\.(ts|tsx|js|cjs|mjs|json|html|md|sh|nr|toml)$
- ^yarn-project/Dockerfile
dependencies:
- yarn-project-base
- noir-contracts-build

aztec-sandbox:
buildDir: yarn-project
Expand Down
19 changes: 7 additions & 12 deletions yarn-project/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,16 @@
# This base dockerfile adds all the remaining source files, performs artifact generation, and builds the project.
# See yarn-project-base/Dockerfile for deeper insight into why things are how they are.
FROM 278380418400.dkr.ecr.eu-west-2.amazonaws.com/noir-contracts-build as noir
FROM 278380418400.dkr.ecr.eu-west-2.amazonaws.com/yarn-project-base as builder

RUN apk add bash perl

# Copy in the entire workspace.
COPY . .

# Generate Noir contract TypeScript artifacts.
COPY --from=noir /usr/src/yarn-project/noir-contracts/target /usr/src/yarn-project/noir-contracts/target
# Run yarn build to have the json artifacts available for the types generator, generate types, build again.
RUN apk add perl
RUN cd /usr/src/yarn-project/noir-contracts && yarn build && ./scripts/types_all.sh && yarn build
# Cleanup to reduce final image size.
RUN rm -rf noir-contracts/target

# Build the entire project.
RUN yarn tsc -b
RUN yarn workspace @aztec/foundation build && \
yarn workspace @aztec/noir-compiler build && \
yarn workspace @aztec/noir-contracts noir:build:all && \
yarn tsc -b

# Build aztec.js web artifact
RUN cd /usr/src/yarn-project/aztec.js && yarn build:web
Expand All @@ -37,4 +32,4 @@ RUN cp /usr/src/circuits/cpp/build-wasm/bin/aztec3-circuits.wasm /usr/src/yarn-p

WORKDIR /usr/src/yarn-project

ENTRYPOINT ["yarn"]
ENTRYPOINT ["yarn"]
6 changes: 3 additions & 3 deletions 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 { NoirVersion } from '@aztec/noir-compiler/noir-version';
import { NoirWasmVersion } from '@aztec/noir-compiler/noir-version';
import { createPXERpcServer } from '@aztec/pxe';

import { readFileSync } from 'fs';
Expand Down Expand Up @@ -52,7 +52,7 @@ async function main() {
const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json');
const version = JSON.parse(readFileSync(packageJsonPath).toString()).version;

logger.info(`Setting up Aztec Sandbox v${version} (nargo ${NoirVersion.tag}), please stand by...`);
logger.info(`Setting up Aztec Sandbox v${version} (noir v${NoirWasmVersion}), please stand by...`);

const { pxe, node, stop, accounts } = await createAndInitialiseSandbox();

Expand Down Expand Up @@ -85,7 +85,7 @@ async function main() {
logger.info(
`${splash}\n${github}\n\n`
.concat(...accountStrings)
.concat(`Aztec Sandbox v${version} (nargo ${NoirVersion.tag}) is now ready for use!`),
.concat(`Aztec Sandbox v${version} (noir v${NoirWasmVersion}) is now ready for use!`),
);
}

Expand Down
12 changes: 5 additions & 7 deletions yarn-project/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,14 @@ set -eu
yarn install --immutable

# Build the necessary dependencies for Aztec.nr contracts typegen.
for DIR in foundation noir-compiler; do
echo "Building $DIR..."
cd $DIR
yarn build
cd ..
for package in "@aztec/foundation" "@aztec/noir-compiler"; do
echo "Building $package"
yarn workspace $package build
done

# Run remake bindings before building Aztec.nr contracts or l1 contracts as they depend on files created by it.
yarn --cwd circuits.js remake-bindings
yarn --cwd circuits.js remake-constants
yarn workspace @aztec/circuits.js remake-bindings
yarn workspace @aztec/circuits.js remake-constants
Comment on lines -28 to +27
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why --cwd randomly started to fail on my system so I've changed it all to use workspace


(cd noir-contracts && ./bootstrap.sh)
(cd boxes && ./bootstrap.sh)
Expand Down
6 changes: 4 additions & 2 deletions yarn-project/noir-compiler/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@
"dependencies": {
"@aztec/foundation": "workspace:^",
"@ltd/j-toml": "^1.38.0",
"@noir-lang/noir_wasm": "0.18.0-3919619.aztec",
"@noir-lang/source-resolver": "0.18.0-3919619.aztec",
"@noir-lang/noir_wasm": "0.18.0-6ca33a2.aztec",
"@noir-lang/source-resolver": "0.18.0-6ca33a2.aztec",
"base64-js": "^1.5.1",
"commander": "^9.0.0",
"fs-extra": "^11.1.1",
Expand All @@ -59,6 +59,7 @@
"lodash.upperfirst": "^4.3.1",
"memfs": "^4.6.0",
"pako": "^2.1.0",
"semver": "^7.5.4",
"tslib": "^2.4.0",
"unzipit": "^1.4.3"
},
Expand All @@ -74,6 +75,7 @@
"@types/lodash.upperfirst": "^4.3.7",
"@types/node": "^18.7.23",
"@types/pako": "^2.0.0",
"@types/semver": "^7.5.4",
"jest": "^29.5.0",
"ts-jest": "^29.1.0",
"ts-node": "^10.9.1",
Expand Down
192 changes: 2 additions & 190 deletions yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,197 +3,10 @@
exports[`noir-compiler using nargo compiles the test contract 1`] = `
[
{
"debug": {
"debugSymbols": [
"eJyrVsrJT04syczPK1ayqlYyULKKrlYqLkjMA/GKSxKLSpSsDE0MdZRS81KALFOzWh2ltMycVCC7VgdDpbEJVKGZOVydsSkWhUaGZlCVRiaWCKW1sbW1AA1jLOg=",
"eJyrVsrJT04syczPK1ayqq6tBQAz9wY7",
],
"fileMap": {
"1": {
"path": "/home/ubuntu/host/aztec-packages/yarn-project/noir-compiler/src/fixtures/test_contract/src/main.nr",
"source": "contract TestContract {
use dep::test::module::foo;

fn constructor(param: Field, pub_param: pub Field) -> pub [Field; 2] {
[foo::bar(param), param + pub_param]
}

open fn openFunction() -> pub Field {
42
}

}
",
},
"3": {
"path": "std/hash.nr",
"source": "mod poseidon;

#[foreign(sha256)]
pub fn sha256<N>(_input : [u8; N]) -> [u8; 32] {}

#[foreign(blake2s)]
pub fn blake2s<N>(_input : [u8; N]) -> [u8; 32] {}

pub fn pedersen<N>(input : [Field; N]) -> [Field; 2] {
pedersen_with_separator(input, 0)
}

#[foreign(pedersen)]
pub fn pedersen_with_separator<N>(_input : [Field; N], _separator : u32) -> [Field; 2] {}

pub fn pedersen_hash<N>(input : [Field; N]) -> Field {
pedersen_hash_with_separator(input, 0)
}

#[foreign(pedersen_hash)]
pub fn pedersen_hash_with_separator<N>(_input : [Field; N], _separator : u32) -> Field {}

#[foreign(hash_to_field_128_security)]
pub fn hash_to_field<N>(_input : [Field; N]) -> Field {}

#[foreign(keccak256)]
pub fn keccak256<N>(_input : [u8; N], _message_size: u32) -> [u8; 32] {}

// mimc-p/p implementation
// constants are (publicly generated) random numbers, for instance using keccak as a ROM.
// You must use constants generated for the native field
// Rounds number should be ~ log(p)/log(exp)
// For 254 bit primes, exponent 7 and 91 rounds seems to be recommended
fn mimc<N>(x: Field, k: Field, constants: [Field; N], exp : Field) -> Field {
//round 0
let mut t = x + k;
let mut h = t.pow_32(exp);
//next rounds
for i in 1 .. constants.len() {
t = h + k + constants[i];
h = t.pow_32(exp);
};
h + k
}

global MIMC_BN254_ROUNDS = 91;

//mimc implementation with hardcoded parameters for BN254 curve.
pub fn mimc_bn254<N>(array: [Field; N]) -> Field {
//mimc parameters
let exponent = 7;
//generated from seed "mimc" using keccak256
let constants: [Field; MIMC_BN254_ROUNDS] = [
0,
20888961410941983456478427210666206549300505294776164667214940546594746570981,
15265126113435022738560151911929040668591755459209400716467504685752745317193,
8334177627492981984476504167502758309043212251641796197711684499645635709656,
1374324219480165500871639364801692115397519265181803854177629327624133579404,
11442588683664344394633565859260176446561886575962616332903193988751292992472,
2558901189096558760448896669327086721003508630712968559048179091037845349145,
11189978595292752354820141775598510151189959177917284797737745690127318076389,
3262966573163560839685415914157855077211340576201936620532175028036746741754,
17029914891543225301403832095880481731551830725367286980611178737703889171730,
4614037031668406927330683909387957156531244689520944789503628527855167665518,
19647356996769918391113967168615123299113119185942498194367262335168397100658,
5040699236106090655289931820723926657076483236860546282406111821875672148900,
2632385916954580941368956176626336146806721642583847728103570779270161510514,
17691411851977575435597871505860208507285462834710151833948561098560743654671,
11482807709115676646560379017491661435505951727793345550942389701970904563183,
8360838254132998143349158726141014535383109403565779450210746881879715734773,
12663821244032248511491386323242575231591777785787269938928497649288048289525,
3067001377342968891237590775929219083706800062321980129409398033259904188058,
8536471869378957766675292398190944925664113548202769136103887479787957959589,
19825444354178182240559170937204690272111734703605805530888940813160705385792,
16703465144013840124940690347975638755097486902749048533167980887413919317592,
13061236261277650370863439564453267964462486225679643020432589226741411380501,
10864774797625152707517901967943775867717907803542223029967000416969007792571,
10035653564014594269791753415727486340557376923045841607746250017541686319774,
3446968588058668564420958894889124905706353937375068998436129414772610003289,
4653317306466493184743870159523234588955994456998076243468148492375236846006,
8486711143589723036499933521576871883500223198263343024003617825616410932026,
250710584458582618659378487568129931785810765264752039738223488321597070280,
2104159799604932521291371026105311735948154964200596636974609406977292675173,
16313562605837709339799839901240652934758303521543693857533755376563489378839,
6032365105133504724925793806318578936233045029919447519826248813478479197288,
14025118133847866722315446277964222215118620050302054655768867040006542798474,
7400123822125662712777833064081316757896757785777291653271747396958201309118,
1744432620323851751204287974553233986555641872755053103823939564833813704825,
8316378125659383262515151597439205374263247719876250938893842106722210729522,
6739722627047123650704294650168547689199576889424317598327664349670094847386,
21211457866117465531949733809706514799713333930924902519246949506964470524162,
13718112532745211817410303291774369209520657938741992779396229864894885156527,
5264534817993325015357427094323255342713527811596856940387954546330728068658,
18884137497114307927425084003812022333609937761793387700010402412840002189451,
5148596049900083984813839872929010525572543381981952060869301611018636120248,
19799686398774806587970184652860783461860993790013219899147141137827718662674,
19240878651604412704364448729659032944342952609050243268894572835672205984837,
10546185249390392695582524554167530669949955276893453512788278945742408153192,
5507959600969845538113649209272736011390582494851145043668969080335346810411,
18177751737739153338153217698774510185696788019377850245260475034576050820091,
19603444733183990109492724100282114612026332366576932662794133334264283907557,
10548274686824425401349248282213580046351514091431715597441736281987273193140,
1823201861560942974198127384034483127920205835821334101215923769688644479957,
11867589662193422187545516240823411225342068709600734253659804646934346124945,
18718569356736340558616379408444812528964066420519677106145092918482774343613,
10530777752259630125564678480897857853807637120039176813174150229243735996839,
20486583726592018813337145844457018474256372770211860618687961310422228379031,
12690713110714036569415168795200156516217175005650145422920562694422306200486,
17386427286863519095301372413760745749282643730629659997153085139065756667205,
2216432659854733047132347621569505613620980842043977268828076165669557467682,
6309765381643925252238633914530877025934201680691496500372265330505506717193,
20806323192073945401862788605803131761175139076694468214027227878952047793390,
4037040458505567977365391535756875199663510397600316887746139396052445718861,
19948974083684238245321361840704327952464170097132407924861169241740046562673,
845322671528508199439318170916419179535949348988022948153107378280175750024,
16222384601744433420585982239113457177459602187868460608565289920306145389382,
10232118865851112229330353999139005145127746617219324244541194256766741433339,
6699067738555349409504843460654299019000594109597429103342076743347235369120,
6220784880752427143725783746407285094967584864656399181815603544365010379208,
6129250029437675212264306655559561251995722990149771051304736001195288083309,
10773245783118750721454994239248013870822765715268323522295722350908043393604,
4490242021765793917495398271905043433053432245571325177153467194570741607167,
19596995117319480189066041930051006586888908165330319666010398892494684778526,
837850695495734270707668553360118467905109360511302468085569220634750561083,
11803922811376367215191737026157445294481406304781326649717082177394185903907,
10201298324909697255105265958780781450978049256931478989759448189112393506592,
13564695482314888817576351063608519127702411536552857463682060761575100923924,
9262808208636973454201420823766139682381973240743541030659775288508921362724,
173271062536305557219323722062711383294158572562695717740068656098441040230,
18120430890549410286417591505529104700901943324772175772035648111937818237369,
20484495168135072493552514219686101965206843697794133766912991150184337935627,
19155651295705203459475805213866664350848604323501251939850063308319753686505,
11971299749478202793661982361798418342615500543489781306376058267926437157297,
18285310723116790056148596536349375622245669010373674803854111592441823052978,
7069216248902547653615508023941692395371990416048967468982099270925308100727,
6465151453746412132599596984628739550147379072443683076388208843341824127379,
16143532858389170960690347742477978826830511669766530042104134302796355145785,
19362583304414853660976404410208489566967618125972377176980367224623492419647,
1702213613534733786921602839210290505213503664731919006932367875629005980493,
10781825404476535814285389902565833897646945212027592373510689209734812292327,
4212716923652881254737947578600828255798948993302968210248673545442808456151,
7594017890037021425366623750593200398174488805473151513558919864633711506220,
18979889247746272055963929241596362599320706910852082477600815822482192194401,
13602139229813231349386885113156901793661719180900395818909719758150455500533,
];

let mut r = 0;
for elem in array {
let h = mimc(elem, r, constants, exponent);
r = r + elem + h;
}
r
}
",
},
"35": {
"path": "/home/ubuntu/host/aztec-packages/yarn-project/noir-compiler/src/fixtures/test_lib/src/module/foo.nr",
"source": "fn bar(param: Field) -> Field {
dep::std::hash::pedersen([param])[0]
}",
},
},
},
"events": [],
"functions": [
{
"bytecode": "H4sIAAAAAAAA/61RQQ7DMAij6bL3QIAGbvvKoqX/f8G0TqVSem4tWTYXC9kZABLsmDY+Q4/7G37e+IAz5tBXKF4DTTdmpSGLcRHptXRiemPxZoqibTEyUtNPMeZuYtWbV3QS7rSq8xph+b6/cOz28GnY4N9pHjr+AWqna3ugAQAA",
"bytecode": "H4sIAAAAAAAA/62QUQqEMAxEY7ew10maxCZ/e5Ut1vufQFRsoX7rQJiZnyG8CAABLk3HfZv3vrX8gbt6/zXHZ6Lpxa0wbDHOIjWnSkx/TF5MUbTMRkZquiRjriaWvXhGJ+FKqzqvbSy+9xeOXHsOA/+TaRwY7+UbOCacAQAA",
"functionType": "secret",
"isInternal": false,
"name": "constructor",
Expand Down Expand Up @@ -382,11 +195,10 @@ export class TestContractContract extends ContractBase {
exports[`noir-compiler using wasm binary compiles the test contract 1`] = `
[
{
"debug": undefined,
"events": [],
"functions": [
{
"bytecode": "H4sIAAAAAAAA/61RQQ7DMAij6bL3QIAGbvvKoqX/f8G0TqVSem4tWTYXC9kZABLsmDY+Q4/7G37e+IAz5tBXKF4DTTdmpSGLcRHptXRiemPxZoqibTEyUtNPMeZuYtWbV3QS7rSq8xph+b6/cOz28GnY4N9pHjr+AWqna3ugAQAA",
"bytecode": "H4sIAAAAAAAA/62QUQqEMAxEY7ew10maxCZ/e5Ut1vufQFRsoX7rQJiZnyG8CAABLk3HfZv3vrX8gbt6/zXHZ6Lpxa0wbDHOIjWnSkx/TF5MUbTMRkZquiRjriaWvXhGJ+FKqzqvbSy+9xeOXHsOA/+TaRwY7+UbOCacAQAA",
"functionType": "secret",
"isInternal": false,
"name": "constructor",
Expand Down
Loading