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: unbox empty box #2387

Merged
merged 30 commits into from
Sep 21, 2023
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
01513a9
copy a test contract with same webapp
dan-aztec Sep 19, 2023
c43c08f
working but horrible version
dan-aztec Sep 19, 2023
e0eeb7c
rename to blank-react
dan-aztec Sep 19, 2023
c6e046d
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
b130217
add missing stuff
dan-aztec Sep 19, 2023
74e4002
regen yarn.lock
dan-aztec Sep 19, 2023
821fe47
update yarn-project-base dockerfile
dan-aztec Sep 19, 2023
81f991e
folder name
dan-aztec Sep 19, 2023
1420cce
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
0db9bae
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
9079945
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
bda1748
fill out rest of box
dan-aztec Sep 19, 2023
58ca1e2
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
768ed57
update default address param name
dan-aztec Sep 19, 2023
6af71bf
re-yarn after inadvertent bump
dan-aztec Sep 19, 2023
99624e0
revert to master
dan-aztec Sep 19, 2023
0911299
reyarn
dan-aztec Sep 19, 2023
67f1ffa
pr feedback
dan-aztec Sep 19, 2023
5c30775
wording
dan-aztec Sep 19, 2023
458c4ad
Merge branch 'master' into dan/empty-box
dan-aztec Sep 19, 2023
f183006
fix name clash
dan-aztec Sep 20, 2023
dbd4999
pr feedback
dan-aztec Sep 20, 2023
d28c4a5
Merge branch 'master' into dan/empty-box
dan-aztec Sep 20, 2023
7ef442c
import
dan-aztec Sep 20, 2023
a16d6c2
better message on return value for callFunction
dan-aztec Sep 20, 2023
8902085
Merge branch 'master' into dan/empty-box
dan-aztec Sep 20, 2023
cf8e24b
Update yarn-project/boxes/blank/src/index.ts
dan-aztec Sep 20, 2023
628adca
pass down the selected wallet as default instead of async
dan-aztec Sep 20, 2023
8baae6d
Merge branch 'master' into dan/empty-box
dan-aztec Sep 20, 2023
512d259
bad returnval
dan-aztec Sep 20, 2023
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
61 changes: 61 additions & 0 deletions yarn-project/boxes/blank-react/.eslintrc.cjs
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',
},
};
24 changes: 24 additions & 0 deletions yarn-project/boxes/blank-react/.gitignore
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
dist
dan-aztec marked this conversation as resolved.
Show resolved Hide resolved
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
6 changes: 6 additions & 0 deletions yarn-project/boxes/blank-react/.prettierrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 120,
"arrowParens": "avoid"
}
79 changes: 79 additions & 0 deletions yarn-project/boxes/blank-react/README.md
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 :)
101 changes: 101 additions & 0 deletions yarn-project/boxes/blank-react/package.json
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"
}
4 changes: 4 additions & 0 deletions yarn-project/boxes/blank-react/src/@types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
declare module '*.svg' {
const content: any;
export default content;
}
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;
}
Loading