-
Notifications
You must be signed in to change notification settings - Fork 265
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
provides a stripped down contract with almost nothing, but retains the opinionated/batteries included react frontend from the PrivateToken contract box. <img width="1504" alt="image" src="https://github.com/AztecProtocol/aztec-packages/assets/142251406/6124f922-fdb9-4cf3-b710-1968f4e9b393"> <img width="1513" alt="image" src="https://github.com/AztecProtocol/aztec-packages/assets/142251406/e8659667-08ab-4b9c-88f1-1170e0ff6aed"> # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [ ] Every change is related to the PR description. - [ ] I have [linked](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) this pull request to relevant issues (if any exist). --------- Co-authored-by: Leila Wang <[email protected]>
- Loading branch information
Showing
63 changed files
with
2,123 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
module.exports = { | ||
root: true, | ||
env: { browser: true, es2020: true }, | ||
extends: [ | ||
'eslint:recommended', | ||
'plugin:@typescript-eslint/recommended', | ||
'plugin:react-hooks/recommended', | ||
'plugin:import/recommended', | ||
'plugin:import/typescript', | ||
'prettier', | ||
], | ||
settings: { | ||
'import/resolver': { | ||
typescript: true, | ||
node: true, | ||
}, | ||
}, | ||
ignorePatterns: ['dist', '.eslintrc.cjs'], | ||
parser: '@typescript-eslint/parser', | ||
plugins: ['react-refresh'], | ||
overrides: [ | ||
{ | ||
files: ['*.ts', '*.tsx'], | ||
parserOptions: { | ||
// hacky workaround for CI not having the same tsconfig setup | ||
project: true, | ||
}, | ||
}, | ||
], | ||
rules: { | ||
'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], | ||
'@typescript-eslint/explicit-module-boundary-types': 'off', | ||
'@typescript-eslint/no-non-null-assertion': 'off', | ||
'@typescript-eslint/no-explicit-any': 'off', | ||
'@typescript-eslint/no-empty-function': 'off', | ||
'@typescript-eslint/await-thenable': 'error', | ||
'@typescript-eslint/no-floating-promises': 2, | ||
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }], | ||
'require-await': 2, | ||
'no-console': 'warn', | ||
'no-constant-condition': 'off', | ||
camelcase: 2, | ||
'no-restricted-imports': [ | ||
'error', | ||
{ | ||
patterns: [ | ||
{ | ||
group: ['client-dest'], | ||
message: "Fix this absolute garbage import. It's your duty to solve it before it spreads.", | ||
}, | ||
{ | ||
group: ['dest'], | ||
message: 'You should not be importing from a build directory. Did you accidentally do a relative import?', | ||
}, | ||
], | ||
}, | ||
], | ||
'import/no-unresolved': 'error', | ||
'import/no-extraneous-dependencies': 'error', | ||
}, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Logs | ||
logs | ||
*.log | ||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
pnpm-debug.log* | ||
lerna-debug.log* | ||
|
||
node_modules | ||
dest | ||
dest-ssr | ||
*.local | ||
|
||
# Editor directories and files | ||
.vscode/* | ||
!.vscode/extensions.json | ||
.idea | ||
.DS_Store | ||
*.suo | ||
*.ntvs* | ||
*.njsproj | ||
*.sln | ||
*.sw? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"singleQuote": true, | ||
"trailingComma": "all", | ||
"printWidth": 120, | ||
"arrowParens": "avoid" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
This is a minimal [Aztec](https://aztec.network/) Noir smart contract and frontend bootstrapped with [`aztec-cli unbox`](https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/cli). It is recommended you use the `aztec-cli unbox blank-react` command so that the repository is copied with needed modifications from the monorepo subpackage. | ||
|
||
## Setup | ||
|
||
Dependencies can be installed from the root of the package: | ||
|
||
```bash | ||
yarn | ||
yarn install:noir | ||
yarn install:sandbox | ||
``` | ||
|
||
This sandbox requires [Docker](https://www.docker.com/) to be installed _and running_ locally. In the event the image needs updating, you can run `yarn install:sandbox` (see [sandbox docs](https://aztec-docs-dev.netlify.app/dev_docs/getting_started/sandbox) for more information.) | ||
|
||
In addition to the usual javascript dependencies, this project requires `nargo` (package manager) and `noir` (Aztec ZK smart contract language) in addition to `@aztec/aztec-cli`. The former are installed within `yarn install:noir` | ||
|
||
## Getting started | ||
|
||
After `yarn` has run,`yarn start:sandbox` in one terminal will launch a local instance of the Aztec sandbox via Docker Compose and `yarn start:dev` will launch a frontend app for deploying and interacting with an empty Aztec smart contract. | ||
|
||
At this point, [http://localhost:5173](http://localhost:5173) should provide a minimal smart contract frontend. | ||
|
||
This folder should have the following directory structure: | ||
|
||
``` | ||
|— README.md | ||
|— package.json | ||
|— src | ||
|-config.ts - Blank Contract specific configuration for the frontend. | ||
| You may need to update this if you modify the contract functions. | ||
|— app | ||
|— [frontend React .tsx code files] | ||
|- scripts | ||
|- [helpers for frontend to interact with contract on the sandbox] | ||
|— contracts | ||
|— src | ||
| The Noir smart contract source files are here. | ||
|— main.nr - the cloned noir contract, your starting point | ||
|- interface.nr - autogenerated from main.nr when you compile | ||
|— Nargo.toml [Noir build file, includes Aztec smart contract dependencies] | ||
|— artifacts | ||
| These are both generated from `contracts/` by the compile command | ||
|— blank_contract.json | ||
|— blank.ts | ||
|— tests | ||
| A simple end2end test deploying and testing the Blank contract deploys on a local sandbox | ||
| The test requires the sandbox and anvil to be running (yarn start:sandbox). | ||
|- blank.contract.test.ts | ||
``` | ||
|
||
Most relevant to you is likely `src/contracts/main.nr` (and the build config `src/contracts/Nargo.toml`). This contains the example blank contract logic that the frontend interacts with and is a good place to start writing Noir. | ||
|
||
The `src/artifacts` folder can be re-generated from the command line | ||
|
||
```bash | ||
yarn compile | ||
``` | ||
|
||
This will generate a [Contract ABI](src/artifacts/test_contract.json) and TypeScript class for the [Aztec smart contract](src/contracts/main.nr), which the frontend uses to generate the UI. | ||
|
||
Note: the `compile` command seems to generate a Typescript file which needs a single change - | ||
|
||
``` | ||
import TestContractAbiJson from 'text_contract.json' assert { type: 'json' }; | ||
// need to update the relative import to | ||
import TestContractAbiJson from './test_contract.json' assert { type: 'json' }; | ||
``` | ||
|
||
After compiling, you can re-deploy the upated noir smart contract from the web UI. The function interaction forms are generated from parsing the ContractABI, so they should update automatically after you recompile. | ||
|
||
## Learn More | ||
|
||
To learn more about Noir Smart Contract development, take a look at the following resources: | ||
|
||
- [Awesome Noir](https://github.com/noir-lang/awesome-noir) - learn about the Noir programming language. | ||
|
||
## Deploy on Aztec3 | ||
|
||
Coming Soon :) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
{ | ||
"name": "blank-contract-react", | ||
"private": true, | ||
"version": "0.1.0", | ||
"type": "module", | ||
"main": "./dest/index.js", | ||
"scripts": { | ||
"build": "yarn clean && webpack", | ||
"install:noir": "curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash noirup -v aztec", | ||
"install:sandbox": "docker pull aztecprotocol/aztec-sandbox:latest", | ||
"clean": "rm -rf ./dest .tsbuildinfo", | ||
"start": "serve -p 3000 ./dest", | ||
"start:dev": "webpack serve --mode=development", | ||
"start:sandbox": "SANDBOX_VERSION=latest /bin/bash -c \"$(curl -fsSL 'https://sandbox.aztec.network')\" ", | ||
"formatting": "prettier --check ./src && eslint ./src", | ||
"formatting:fix": "prettier -w ./src", | ||
"compile": "aztec-cli compile src/contracts --outdir ../artifacts --typescript ../artifacts", | ||
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --runInBand", | ||
"test:integration": "concurrently -k -s first -c reset,dim -n test,anvil \"yarn test\" \"anvil\"" | ||
}, | ||
"jest": { | ||
"preset": "ts-jest/presets/default-esm", | ||
"globals": { | ||
"ts-jest": { | ||
"useESM": true | ||
} | ||
}, | ||
"transform": { | ||
"^.+\\.(ts|tsx)$": "ts-jest" | ||
}, | ||
"moduleNameMapper": { | ||
"^(\\.{1,2}/.*)\\.js$": "$1" | ||
}, | ||
"testRegex": "./src/.*\\.test\\.ts$", | ||
"rootDir": "./src" | ||
}, | ||
"dependencies": { | ||
"@aztec/aztec-ui": "^0.1.14", | ||
"@aztec/aztec.js": "workspace:^", | ||
"@aztec/circuits.js": "workspace:^", | ||
"@aztec/cli": "workspace:^", | ||
"@aztec/foundation": "workspace:^", | ||
"classnames": "^2.3.2", | ||
"formik": "^2.4.3", | ||
"node-sass": "^9.0.0", | ||
"react": "^18.2.0", | ||
"react-dom": "^18.2.0", | ||
"sass-loader": "^13.3.2", | ||
"serve": "^14.2.1", | ||
"yup": "^1.2.0" | ||
}, | ||
"devDependencies": { | ||
"@types/node": "^20.5.9", | ||
"@types/react": "^18.2.15", | ||
"@types/react-dom": "^18.2.7", | ||
"@typescript-eslint/eslint-plugin": "^6.0.0", | ||
"@typescript-eslint/parser": "^6.0.0", | ||
"autoprefixer": "^10.4.15", | ||
"copy-webpack-plugin": "^11.0.0", | ||
"css-loader": "^6.8.1", | ||
"eslint": "^8.45.0", | ||
"eslint-import-resolver-typescript": "^3.5.5", | ||
"eslint-plugin-import": "^2.27.5", | ||
"eslint-plugin-react-hooks": "^4.6.0", | ||
"eslint-plugin-react-refresh": "^0.4.3", | ||
"jest": "^29.6.4", | ||
"postcss": "^8.4.29", | ||
"postcss-loader": "^7.3.3", | ||
"prettier": "^3.0.3", | ||
"resolve-typescript-plugin": "^2.0.1", | ||
"stream-browserify": "^3.0.0", | ||
"style-loader": "^3.3.3", | ||
"ts-jest": "^29.1.0", | ||
"ts-loader": "^9.4.4", | ||
"ts-node": "^10.9.1", | ||
"tty-browserify": "^0.0.1", | ||
"typescript": "^5.0.4", | ||
"util": "^0.12.5", | ||
"webpack": "^5.88.2", | ||
"webpack-cli": "^5.1.4", | ||
"webpack-dev-server": "^4.15.1" | ||
}, | ||
"browserslist": { | ||
"production": [ | ||
">0.5%", | ||
"not dead", | ||
"not op_mini all" | ||
], | ||
"development": [ | ||
"last 1 chrome version", | ||
"last 1 firefox version", | ||
"last 1 safari version" | ||
] | ||
}, | ||
"files": [ | ||
"dest", | ||
"src", | ||
"!*.test.*" | ||
], | ||
"types": "./dest/index.d.ts" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
declare module '*.svg' { | ||
const content: any; | ||
export default content; | ||
} | ||
|
||
declare module '*.module.scss' { | ||
const content: { [className: string]: string }; | ||
export = content; | ||
} |
67 changes: 67 additions & 0 deletions
67
yarn-project/boxes/blank-react/src/app/components/contract_function_form.module.scss
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
.input { | ||
border: none; | ||
outline-width: 0; | ||
outline-color: rgba(0, 0, 0, 0); | ||
padding: 2px 20px 0 20px; | ||
width: 100%; | ||
height: 45px; | ||
color: #000; | ||
border: 1px solid rgba(0, 0, 0, 0); | ||
font-size: 16px; | ||
text-align: left; | ||
font-weight: 400; | ||
border-radius: 10px; | ||
text-align: left; | ||
text-overflow: ellipsis; | ||
transition: box-shadow .2s; | ||
box-shadow: 0px 4px 10px rgba(0, 0, 0, .1); | ||
background-color: white; | ||
-webkit-appearance: none; | ||
|
||
|
||
&:disabled { | ||
color: #4a4a4a; | ||
background-color: rgba(239, 239, 239, 0.3); | ||
background: radial-gradient(rgba(239, 239, 239, 0.3), rgba(239, 239, 239, 0.3)); | ||
-webkit-text-fill-color: #4a4a4a; | ||
cursor: not-allowed; | ||
} | ||
} | ||
|
||
.label { | ||
font-weight: 450; | ||
font-size: 18px; | ||
display: flex; | ||
width: 100%; | ||
flex-direction: column; | ||
text-align: left; | ||
margin-bottom: 15px; | ||
justify-content: space-between; | ||
} | ||
|
||
.inputWrapper { | ||
width: 100%; | ||
display: flex; | ||
gap: 15px; | ||
} | ||
|
||
.field { | ||
display: flex; | ||
justify-content: start; | ||
flex-direction: column; | ||
align-items: flex-start; | ||
} | ||
|
||
.content { | ||
display: flex; | ||
justify-content: space-between; | ||
flex-direction: column; | ||
margin: 30px; | ||
width: 450px; | ||
gap: 30px; | ||
} | ||
|
||
.actionButton { | ||
width: 100%; | ||
align-self: center; | ||
} |
Oops, something went wrong.