From f66077a6f7bfd446eec81dd4f09723322fc0c980 Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Wed, 13 Sep 2023 20:27:02 +0100 Subject: [PATCH 01/25] feat: Build system handles dynamic deps first class. (#2283) If no deps provided, query-manifest exectutes script in project, uses 1 line of jq to get deps for ts. --- build-system/scripts/query_manifest | 55 +++++-- build_manifest.json | 184 +++-------------------- yarn-project/scripts/get_dependencies.sh | 7 + 3 files changed, 72 insertions(+), 174 deletions(-) create mode 100755 yarn-project/scripts/get_dependencies.sh diff --git a/build-system/scripts/query_manifest b/build-system/scripts/query_manifest index e64086badc0d..51eac1df79d7 100755 --- a/build-system/scripts/query_manifest +++ b/build-system/scripts/query_manifest @@ -11,18 +11,46 @@ if [ $(jq "has(\"$REPO\")" $MANIFEST) == "false" ]; then exit 1 fi -function addRebuildPatterns { - local TYPE=$(jq -r ".\"$1\".rebuildPatterns | type" $MANIFEST) - if [ "$TYPE" == "string" ]; then - local FILE=$(jq -r ".\"$1\".rebuildPatterns" $MANIFEST) - local BUILD_DIR=$($0 buildDir $1) - PATTERNS=(${PATTERNS[@]} $(cat $BUILD_DIR/$FILE)) - elif [ "$TYPE" == "array" ]; then - PATTERNS=(${PATTERNS[@]} $(jq -r ".\"$1\".rebuildPatterns | .[]" $MANIFEST)) - else - >&2 echo "Missing rebuildPatterns property. Either filename as string, or patterns as array." +function get_deps { + local TYPE=$(jq -r ".\"$1\".dependencies | type" $MANIFEST) + if [ "$TYPE" == "string" ]; then + # Execute string as command relative to buildDir to retrieve dependencies. + local CMD=$BUILD_DIR/$(jq -r ".\"$1\".dependencies") + if [ ! -f "$CMD" ]; then + >&2 echo "Dependency script not found: $CMD" exit 1 fi + local PROJECT_DIR=$($0 projectDir $1) + DEPS=($($CMD $PROJECT_DIR)) + elif [ "$TYPE" == "null" ]; then + # Execute default script relative to buildDir to retrieve dependencies. + local CMD=$BUILD_DIR/scripts/get_dependencies.sh + if [ ! -f "$CMD" ]; then + >&2 echo "Dependency script not found: $CMD" + exit 1 + fi + local PROJECT_DIR=$($0 projectDir $1) + DEPS=($($CMD $PROJECT_DIR)) + elif [ "$TYPE" == "array" ]; then + DEPS=($(jq -r ".\"$1\".dependencies // [] | .[]" $MANIFEST)) + else + >&2 echo "dependencies must be a array, string or null." + exit 1 + fi +} + +function add_rebuild_patterns { + local TYPE=$(jq -r ".\"$1\".rebuildPatterns | type" $MANIFEST) + if [ "$TYPE" == "string" ]; then + local FILE=$(jq -r ".\"$1\".rebuildPatterns" $MANIFEST) + local BUILD_DIR=$($0 buildDir $1) + PATTERNS=(${PATTERNS[@]} $(cat $BUILD_DIR/$FILE)) + elif [ "$TYPE" == "array" ]; then + PATTERNS=(${PATTERNS[@]} $(jq -r ".\"$1\".rebuildPatterns | .[]" $MANIFEST)) + else + >&2 echo "Missing rebuildPatterns property. Either filename as string, or patterns as array." + exit 1 + fi } case "$CMD" in @@ -46,13 +74,14 @@ case "$CMD" in jq -r ".\"$REPO\".projectDir // .\"$REPO\".buildDir" $MANIFEST ;; dependencies) + BUILD_DIR=$($0 buildDir $REPO) declare -A ALL_DEPS add_deps() { if [[ -v ALL_DEPS[$1] ]]; then return fi ALL_DEPS["$1"]=1 - DEPS=($(jq -r ".\"$1\".dependencies // [] | .[]" $MANIFEST)) + get_deps $1 for DEP in "${DEPS[@]}"; do add_deps $DEP done @@ -65,9 +94,9 @@ case "$CMD" in rebuildPatterns) DEPS=($($0 dependencies $REPO)) PATTERNS=() - addRebuildPatterns $REPO + add_rebuild_patterns $REPO for DEP in "${DEPS[@]}"; do - addRebuildPatterns $DEP + add_rebuild_patterns $DEP done printf "%s\n" "${PATTERNS[@]}" | sort | uniq ;; diff --git a/build_manifest.json b/build_manifest.json index c00f07645132..db71326fe078 100644 --- a/build_manifest.json +++ b/build_manifest.json @@ -113,168 +113,85 @@ "buildDir": "yarn-project", "projectDir": "yarn-project/acir-simulator", "dockerfile": "acir-simulator/Dockerfile", - "rebuildPatterns": ["^yarn-project/acir-simulator/"], - "dependencies": [ - "yarn-project-base", - "circuits.js", - "foundation", - "types", - "merkle-tree", - "noir-contracts" - ] + "rebuildPatterns": ["^yarn-project/acir-simulator/"] }, "archiver": { "buildDir": "yarn-project", "projectDir": "yarn-project/archiver", "dockerfile": "archiver/Dockerfile", - "rebuildPatterns": ["^yarn-project/archiver/"], - "dependencies": [ - "yarn-project-base", - "circuits.js", - "ethereum", - "foundation", - "l1-artifacts", - "types" - ] + "rebuildPatterns": ["^yarn-project/archiver/"] }, "cli": { "buildDir": "yarn-project", "projectDir": "yarn-project/cli", "dockerfile": "cli/Dockerfile", - "rebuildPatterns": ["^yarn-project/cli/"], - "dependencies": [ - "yarn-project-base", - "aztec.js", - "ethereum", - "foundation", - "noir-compiler", - "noir-contracts", - "types" - ] + "rebuildPatterns": ["^yarn-project/cli/"] }, "aztec-rpc": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec-rpc", "dockerfile": "aztec-rpc/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-rpc/"], - "dependencies": [ - "yarn-project-base", - "acir-simulator", - "circuits.js", - "foundation", - "key-store", - "types" - ] + "rebuildPatterns": ["^yarn-project/aztec-rpc/"] }, "aztec-sandbox": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec-sandbox", "dockerfile": "aztec-sandbox/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-sandbox/"], - "dependencies": [ - "yarn-project-base", - "aztec-node", - "aztec-rpc", - "aztec.js", - "circuits.js", - "ethereum", - "foundation", - "l1-artifacts", - "noir-contracts", - "types" - ] + "rebuildPatterns": ["^yarn-project/aztec-sandbox/"] }, "aztec.js": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec.js", "dockerfile": "aztec.js/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec.js/"], - "dependencies": ["yarn-project-base", "circuits.js", "foundation", "types"] + "rebuildPatterns": ["^yarn-project/aztec.js/"] }, "canary-build": { "buildDir": "yarn-project", "projectDir": "yarn-project/canary", "dockerfile": "canary/Dockerfile.build", - "rebuildPatterns": ["^yarn-project/canary/"], - "dependencies": [ - "yarn-project-base", - "aztec.js", - "l1-artifacts", - "noir-contracts", - "aztec-sandbox" - ] + "rebuildPatterns": ["^yarn-project/canary/"] }, "canary": { "buildDir": "yarn-project", "projectDir": "yarn-project/canary", "dockerfile": "canary/Dockerfile", - "rebuildPatterns": ["^yarn-project/canary/"], - "dependencies": [ - "yarn-project-base", - "aztec.js", - "foundation", - "l1-artifacts", - "noir-contracts" - ] + "rebuildPatterns": ["^yarn-project/canary/"] }, "circuits.js": { "buildDir": "yarn-project", "projectDir": "yarn-project/circuits.js", "dockerfile": "circuits.js/Dockerfile", - "rebuildPatterns": ["^yarn-project/circuits.js/"], - "dependencies": ["yarn-project-base", "foundation"] + "rebuildPatterns": ["^yarn-project/circuits.js/"] }, "end-to-end": { "buildDir": "yarn-project", "projectDir": "yarn-project/end-to-end", "dockerfile": "end-to-end/Dockerfile", - "rebuildPatterns": ["^yarn-project/end-to-end/"], - "dependencies": [ - "yarn-project-base", - "archiver", - "aztec-node", - "aztec-rpc", - "aztec-sandbox", - "aztec.js", - "circuits.js", - "cli", - "ethereum", - "foundation", - "l1-artifacts", - "noir-contracts", - "p2p", - "sequencer-client", - "types", - "world-state" - ] + "rebuildPatterns": ["^yarn-project/end-to-end/"] }, "ethereum": { "buildDir": "yarn-project", "projectDir": "yarn-project/ethereum", "dockerfile": "ethereum/Dockerfile", - "rebuildPatterns": ["^yarn-project/ethereum/"], - "dependencies": ["yarn-project-base", "foundation", "l1-artifacts"] + "rebuildPatterns": ["^yarn-project/ethereum/"] }, "foundation": { "buildDir": "yarn-project", "projectDir": "yarn-project/foundation", "dockerfile": "foundation/Dockerfile", - "rebuildPatterns": ["^yarn-project/foundation/"], - "dependencies": ["yarn-project-base"] + "rebuildPatterns": ["^yarn-project/foundation/"] }, "key-store": { "buildDir": "yarn-project", "projectDir": "yarn-project/key-store", "dockerfile": "key-store/Dockerfile", - "rebuildPatterns": ["^yarn-project/key-store/"], - "dependencies": ["yarn-project-base", "circuits.js", "foundation", "types"] + "rebuildPatterns": ["^yarn-project/key-store/"] }, "merkle-tree": { "buildDir": "yarn-project", "projectDir": "yarn-project/merkle-tree", "dockerfile": "merkle-tree/Dockerfile", - "rebuildPatterns": ["^yarn-project/merkle-tree/"], - "dependencies": ["yarn-project-base", "circuits.js", "foundation", "types"] + "rebuildPatterns": ["^yarn-project/merkle-tree/"] }, "noir-contracts-build": { "buildDir": "yarn-project", @@ -283,12 +200,6 @@ "rebuildPatterns": [ "^yarn-project/noir-contracts/", "^yarn-project/noir-libs/" - ], - "dependencies": [ - "yarn-project-base", - "aztec.js", - "foundation", - "noir-compiler" ] }, "noir-contracts": { @@ -298,109 +209,60 @@ "rebuildPatterns": [ "^yarn-project/noir-contracts/", "^yarn-project/noir-libs/" - ], - "dependencies": [ - "yarn-project-base", - "aztec.js", - "foundation", - "noir-compiler" ] }, "noir-compiler": { "buildDir": "yarn-project", "projectDir": "yarn-project/noir-compiler", "dockerfile": "noir-compiler/Dockerfile", - "rebuildPatterns": ["^yarn-project/noir-compiler/"], - "dependencies": ["yarn-project-base", "foundation"] + "rebuildPatterns": ["^yarn-project/noir-compiler/"] }, "p2p": { "buildDir": "yarn-project", "projectDir": "yarn-project/p2p", "dockerfile": "p2p/Dockerfile", - "rebuildPatterns": ["^yarn-project/p2p/"], - "dependencies": ["yarn-project-base", "circuits.js", "foundation", "types"] + "rebuildPatterns": ["^yarn-project/p2p/"] }, "p2p-bootstrap": { "buildDir": "yarn-project", "projectDir": "yarn-project/p2p-bootstrap", "dockerfile": "p2p/Dockerfile", - "rebuildPatterns": ["^yarn-project/p2p-bootstrap/"], - "dependencies": ["yarn-project-base", "foundation", "p2p"] + "rebuildPatterns": ["^yarn-project/p2p-bootstrap/"] }, "prover-client": { "buildDir": "yarn-project", "projectDir": "yarn-project/prover-client", "dockerfile": "prover-client/Dockerfile", - "rebuildPatterns": ["^yarn-project/prover-client/"], - "dependencies": ["yarn-project-base", "foundation"] + "rebuildPatterns": ["^yarn-project/prover-client/"] }, "rollup-provider": { "buildDir": "yarn-project", "projectDir": "yarn-project/rollup-provider", "dockerfile": "rollup-provider/Dockerfile", - "rebuildPatterns": ["^yarn-project/rollup-provider/"], - "dependencies": [ - "yarn-project-base", - "aztec-node", - "circuits.js", - "foundation", - "types" - ] + "rebuildPatterns": ["^yarn-project/rollup-provider/"] }, "aztec-node": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec-node", "dockerfile": "aztec-node/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-node/"], - "dependencies": [ - "yarn-project-base", - "archiver", - "circuits.js", - "foundation", - "l1-artifacts", - "merkle-tree", - "p2p", - "sequencer-client", - "types", - "world-state" - ] + "rebuildPatterns": ["^yarn-project/aztec-node/"] }, "sequencer-client": { "buildDir": "yarn-project", "projectDir": "yarn-project/sequencer-client", "dockerfile": "sequencer-client/Dockerfile", - "rebuildPatterns": ["^yarn-project/sequencer-client/"], - "dependencies": [ - "yarn-project-base", - "acir-simulator", - "circuits.js", - "ethereum", - "foundation", - "l1-artifacts", - "merkle-tree", - "p2p", - "types", - "world-state" - ] + "rebuildPatterns": ["^yarn-project/sequencer-client/"] }, "types": { "buildDir": "yarn-project", "projectDir": "yarn-project/types", "dockerfile": "types/Dockerfile", - "rebuildPatterns": ["^yarn-project/types/"], - "dependencies": ["yarn-project-base", "circuits.js", "foundation"] + "rebuildPatterns": ["^yarn-project/types/"] }, "world-state": { "buildDir": "yarn-project", "projectDir": "yarn-project/world-state", "dockerfile": "world-state/Dockerfile", - "rebuildPatterns": ["^yarn-project/world-state/"], - "dependencies": [ - "yarn-project-base", - "circuits.js", - "foundation", - "merkle-tree", - "types" - ] + "rebuildPatterns": ["^yarn-project/world-state/"] } } diff --git a/yarn-project/scripts/get_dependencies.sh b/yarn-project/scripts/get_dependencies.sh new file mode 100755 index 000000000000..60b61bbc9854 --- /dev/null +++ b/yarn-project/scripts/get_dependencies.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -eu + +PROJECT_DIR=$1 + +echo yarn-project-base +jq -r ".dependencies + .devDependencies | keys | .[] | select(startswith(\"@aztec/\")) | ltrimstr(\"@aztec/\")" $PROJECT_DIR/package.json \ No newline at end of file From a91db48d1943fdc2e39535a153216b7aaca40de4 Mon Sep 17 00:00:00 2001 From: Michael Connor Date: Wed, 13 Sep 2023 20:53:26 +0100 Subject: [PATCH 02/25] chore(docs): rename to aztec.nr (#1943) Find + replace --------- Co-authored-by: kevaundray Co-authored-by: Maddiaa0 <47148561+Maddiaa0@users.noreply.github.com> --- .../roadmap/features_initial_ldt.md | 14 +- .../circuits/kernels/private_kernel.md | 4 +- docs/docs/concepts/advanced/circuits/main.md | 2 +- .../advanced/data_structures/trees.md | 6 +- .../docs/concepts/foundation/accounts/keys.md | 4 +- docs/docs/concepts/foundation/state_model.md | 6 +- docs/docs/dev_docs/contracts/common_errors.md | 2 +- docs/docs/dev_docs/contracts/compiling.md | 16 +- docs/docs/dev_docs/contracts/contract.md | 2 +- docs/docs/dev_docs/contracts/layout.md | 2 +- docs/docs/dev_docs/contracts/main.md | 11 +- docs/docs/dev_docs/contracts/types.md | 2 +- docs/docs/dev_docs/contracts/workflow.md | 2 +- docs/docs/dev_docs/dapps/main.md | 2 +- docs/docs/dev_docs/getting_started/sandbox.md | 2 +- docs/docs/dev_docs/sandbox/common_errors.md | 14 +- docs/docs/dev_docs/sandbox/components.md | 14 +- docs/docs/dev_docs/sandbox/main.md | 2 +- docs/docs/dev_docs/testing/cheat_codes.md | 4 +- docs/docs/dev_docs/testing/main.md | 4 +- docs/docs/dev_docs/wallets/architecture.md | 2 +- .../wallets/writing_an_account_contract.md | 4 +- l1-contracts/GUIDE_LINES.md | 2 +- l1-contracts/src/core/libraries/Decoder.sol | 2 +- .../acir-simulator/src/acvm/serialize.ts | 4 +- .../src/client/client_execution_context.ts | 2 +- .../acir-simulator/src/client/db_oracle.ts | 2 +- .../acir-simulator/src/client/debug.ts | 2 +- .../src/client/private_execution.test.ts | 6 +- yarn-project/acir-simulator/src/utils.ts | 2 +- .../src/contract_data_oracle/index.ts | 2 +- .../examples/uniswap_trade_on_l1_from_l2.ts | 4 +- .../contract_deployer/contract_deployer.ts | 2 +- .../aztec.js/src/utils/cheat_codes.ts | 4 +- yarn-project/bootstrap.sh | 4 +- .../src/uniswap_trade_on_l1_from_l2.test.ts | 4 +- .../src/structs/verification_key.test.ts | 2 +- yarn-project/cli/README.md | 6 +- yarn-project/cli/src/index.ts | 10 +- .../e2e_pending_commitments_contract.test.ts | 10 +- .../src/fixtures/cross_chain_test_harness.ts | 4 +- yarn-project/foundation/src/abi/abi.ts | 2 +- yarn-project/foundation/src/abi/decoder.ts | 2 +- yarn-project/noir-compiler/README.md | 4 +- yarn-project/noir-compiler/package.json | 2 +- .../src/__snapshots__/index.test.ts.snap | 214 ++++++++++++++++-- .../noir-compiler/src/cli/contract.ts | 10 +- .../noir-compiler/src/compile/nargo.ts | 6 +- .../src/contract-interface-gen/abi.ts | 2 +- .../src/contract-interface-gen/noir.ts | 6 +- yarn-project/noir-compiler/src/index.test.ts | 2 +- yarn-project/noir-compiler/src/index.ts | 2 +- .../noir-compiler/src/noir_artifact.ts | 10 +- yarn-project/noir-contracts/README.md | 2 +- .../noir-contracts/scripts/compile.sh | 2 +- .../src/contracts/test_contract/src/main.nr | 2 +- .../noir-contracts/src/scripts/copy_output.ts | 4 +- .../noir-libs/safe-math/src/safe_u120.nr | 3 +- yarn-project/types/src/contract_database.ts | 2 +- yarn-project/yarn-project-base/Dockerfile | 4 +- 60 files changed, 335 insertions(+), 141 deletions(-) diff --git a/docs/docs/about_aztec/roadmap/features_initial_ldt.md b/docs/docs/about_aztec/roadmap/features_initial_ldt.md index f85c0bc28bf0..50cf79233f14 100644 --- a/docs/docs/about_aztec/roadmap/features_initial_ldt.md +++ b/docs/docs/about_aztec/roadmap/features_initial_ldt.md @@ -8,7 +8,7 @@ Devs should be able to quickly spin up local, emulated instances of an Ethereum Here's a summary of the features we intend to support with the first release of the Aztec Sandbox. -## Noir Contracts +## Aztec.nr Contracts - Noir `contract` scopes. - Declare a `contract`, containing a collection of state variables and functions. @@ -21,7 +21,7 @@ Here's a summary of the features we intend to support with the first release of - public functions - May read and modify public state. - `constructor` functions, for initialising contract state. -- `import` other Noir contracts, so their functions may be called. +- `import` other Aztec.nr contracts, so their functions may be called. - Nested function calls, for contract composability - private functions can call private functions of other contracts, and receive return values. - private functions can call public functions any contract. @@ -29,14 +29,14 @@ Here's a summary of the features we intend to support with the first release of - public functions can call public functions of other contracts, and receive return values. - private functions can be called recursively. - public functions can be called recursively. -- Send messages from Noir contracts to Ethereum L1, for consumption by L1 smart contracts. +- Send messages from Aztec.nr contracts to Ethereum L1, for consumption by L1 smart contracts. - Useful, for example, if writing an app to withdraw funds from L2 to L1. - Consume messages which have been sent by: - L1 functions. - Useful, for example, if writing an app to deposit funds from L1 to L2. - public L2 functions. -- Emit `event` data from a Noir Contract. - - Allows applications to subscribe to events which have been emitted by a Noir contract's functions, for example. +- Emit `event` data from a Aztec.nr Contract. + - Allows applications to subscribe to events which have been emitted by a Aztec.nr contract's functions, for example. - Write `unconstrained` functions. - These allow developers to write `pure` and `view` functions, which can perform calculations and retrieve state. E.g. for fetching contract-specific information, which may then be consumed by a dapp, without having to generate a zero-knowledge proof or interact with the 'network'. @@ -46,13 +46,13 @@ A typescript wrapper for making RPC calls to an Aztec LDT node. - Similar in purpose to `web3.js`/`ethers.js`/`viem`, but for interacting with Aztec Network nodes. The RPC interface for an Aztec node is necessarily different from that of an Ethereum node, because it deals with encrypted transactions and state variables. - A library for public/private key management. -- Construct `Contract` instances from a Noir contract's JSON ABI. +- Construct `Contract` instances from a Aztec.nr contract's JSON ABI. - Deploy new contracts to the Aztec LDT. - Construct tx requests, passing arguments to a function of a contract. - Sign tx requests. - Send txs to the LDT node, for simulating. - Send txs to the LDT node, to be sent to the LDT network. -- Call `unconstrained` functions of a Noir contract, to perform `pure` calculations or retrieve state. +- Call `unconstrained` functions of a Aztec.nr contract, to perform `pure` calculations or retrieve state. ## Aztec Local Developer Testnet Node diff --git a/docs/docs/concepts/advanced/circuits/kernels/private_kernel.md b/docs/docs/concepts/advanced/circuits/kernels/private_kernel.md index d079a3deaa81..405a6163061a 100644 --- a/docs/docs/concepts/advanced/circuits/kernels/private_kernel.md +++ b/docs/docs/concepts/advanced/circuits/kernels/private_kernel.md @@ -6,7 +6,7 @@ This circuit is executed by the user, on their own device. This is to ensure pri - Verifies a user's signature. - Hides the user's address. -- Verifies an app's proof - i.e. a proof which has been output after the execution of some function in a Noir Contract. +- Verifies an app's proof - i.e. a proof which has been output after the execution of some function in an Aztec.nr Contract. - Performs private state reads and writes. - Exposes (forwards) the following data to the next recursive circuit: - new note hashes; @@ -21,5 +21,5 @@ This circuit is executed by the user, on their own device. This is to ensure pri - Verifies a previous 'Private Kernel Proof', recursively, when verifying transactions which are composed of many private function calls. - Optionally can [deploy](../../contract_creation) a new private contract. -> Note: **This is the only core protocol circuit which actually needs to be "zk" (zero knowledge)!!!** That's because this is the only core protocol circuit which handles private data, and hence the only circuit for which proofs must not leak any information about witnesses! (The private data being handled includes: details of the Noir Contract function which has been executed; the address of the user who executed the function; the intelligible inputs and outputs of that function). +> Note: **This is the only core protocol circuit which actually needs to be "zk" (zero knowledge)!!!** That's because this is the only core protocol circuit which handles private data, and hence the only circuit for which proofs must not leak any information about witnesses! (The private data being handled includes: details of the Aztec.nr Contract function which has been executed; the address of the user who executed the function; the intelligible inputs and outputs of that function). > This is a really interesting point. Most so-called "zk-Rollups" do not make use of this "zero knowledge" property. Their snarks are "snarks"; with no need for zero-knowledge, because they don't seek privacy; they only seek the 'succinct' computation-compression properties of snarks. Aztec's "zk-Rollup" actually makes use of "zero knowledge" snarks. That's why we sometimes call it a "zk-zk-Rollup", or "_actual_ zk-Rollup". diff --git a/docs/docs/concepts/advanced/circuits/main.md b/docs/docs/concepts/advanced/circuits/main.md index b959287941a2..3f21cb79053c 100644 --- a/docs/docs/concepts/advanced/circuits/main.md +++ b/docs/docs/concepts/advanced/circuits/main.md @@ -7,7 +7,7 @@ title: Circuits In Aztec, circuits come from two sources: 1. Core protocol circuits -2. User-written circuits (written as Noir Contracts and deployed to the network) +2. User-written circuits (written as Aztec.nr Contracts and deployed to the network) This page focusses on the core protocol circuits. These circuits check that the rules of the protocol are being adhered to. diff --git a/docs/docs/concepts/advanced/data_structures/trees.md b/docs/docs/concepts/advanced/data_structures/trees.md index 75cbcdddf456..903b80a3de13 100644 --- a/docs/docs/concepts/advanced/data_structures/trees.md +++ b/docs/docs/concepts/advanced/data_structures/trees.md @@ -25,11 +25,11 @@ So, if an app needs to edit a private state variable (which will be represented ### Example Note -An example blob of data might be defined in a Noir Contract as: +An example blob of data might be defined in an Aztec.nr Contract as: ```rust struct MyNote { - storage_slot: Field, // determined by the Noir Contract + storage_slot: Field, // determined by the Aztec.nr Contract value: Field, owner_public_key: Point, // The owner of this private state // (and the person who may edit it). @@ -37,7 +37,7 @@ struct MyNote { } ``` -The note might be committed-to, within a function of the Noir Contract as: +The note might be committed-to, within a function of the Aztec.nr Contract as: ```rust note_hash: Field = pedersen::compress( diff --git a/docs/docs/concepts/foundation/accounts/keys.md b/docs/docs/concepts/foundation/accounts/keys.md index 0e4755c3798a..9f7ca23f5818 100644 --- a/docs/docs/concepts/foundation/accounts/keys.md +++ b/docs/docs/concepts/foundation/accounts/keys.md @@ -69,7 +69,7 @@ The privacy master key is used to derive encryption keys. Encryption keys, as th In a future version, encryption keys will be differentiated between incoming and outgoing. When sending a note to another user, the sender will use the recipient's incoming encryption key for encrypting the data for them, and will optionally use their own outgoing encryption key for encrypting any data about the destination of that note. This is useful for reconstructing transaction history from on-chain data. For example, during a token transfer, the token contract may dictate that the sender encrypts the note with value with the recipient's incoming key, but also records the transfer with its own outgoing key for bookkeeping purposes. -An application in Noir can access the encryption public key for a given address using the oracle call `get_public_key`, which you can then use for calls such as `emit_encrypted_log`: +An application in Aztec.nr can access the encryption public key for a given address using the oracle call `get_public_key`, which you can then use for calls such as `emit_encrypted_log`: #include_code encrypted /yarn-project/noir-libs/value-note/src/utils.nr rust @@ -81,7 +81,7 @@ In order to be able to provide the public encryption key for a given address, th In addition to deriving encryption keys, the privacy master key is used for deriving nullifier secrets. Whenever a private note is consumed, a nullifier deterministically derived from it is emitted. This mechanisms prevents double-spends, since nullifiers are checked by the protocol to be unique. Now, in order to preserve privacy, a third party should not be able to link a note commitment to its nullifier - this link is enforced by the note implementation. Therefore, calculating the nullifier for a note requires a secret from its owner. -An application in Noir can request a nullifier from the current user for computing the nullifier of a note via the `get_secret_key` oracle call: +An application in Aztec.nr can request a nullifier from the current user for computing the nullifier of a note via the `get_secret_key` oracle call: #include_code nullifier /yarn-project/noir-libs/value-note/src/value_note.nr rust diff --git a/docs/docs/concepts/foundation/state_model.md b/docs/docs/concepts/foundation/state_model.md index e29d13508496..87db190203cf 100644 --- a/docs/docs/concepts/foundation/state_model.md +++ b/docs/docs/concepts/foundation/state_model.md @@ -10,7 +10,7 @@ import Disclaimer from '../../misc/common/\_disclaimer.mdx'; ## Private State -Private state must be treated differently from public state and this must be expressed in the semantics of the Noir language. +Private state must be treated differently from public state and this must be expressed in the semantics of Aztec.nr. Private state is encrypted and therefore is "owned" by a user or a set of users (via shared secrets) that are able to decrypt the state. @@ -22,12 +22,12 @@ Modification of state variables can be emulated by nullifying the a state record ### Abstracting UTXO's from App's / Users -The goal of Noir's contract syntax is abstract the UTXO model away from an app user / developer, contract developers are the only actor who should have to think about UTXO's. +The goal of the Aztec.nr smart contract library is to abstract the UTXO model away from an app user / developer, contract developers are the only actor who should have to think about UTXO's. This is achieved with two main features: 1. Users sign over transactions, not over specific UTXO's -2. Noir contracts support developer defined `unconstrained` getter functions to help dApp's make sense of UTXO's. e.g `getBalance()`. These functions can be called outside of a transaction context to read private state. +2. Aztec.nr contracts support developer defined `unconstrained` getter functions to help dApp's make sense of UTXO's. e.g `getBalance()`. These functions can be called outside of a transaction context to read private state. ### The lifecycle of a note diff --git a/docs/docs/dev_docs/contracts/common_errors.md b/docs/docs/dev_docs/contracts/common_errors.md index 75762ef9cd6c..ce96e27ed09d 100644 --- a/docs/docs/dev_docs/contracts/common_errors.md +++ b/docs/docs/dev_docs/contracts/common_errors.md @@ -2,7 +2,7 @@ List common errors. -There are two kinds of errors: errors in a noir contract, and errors spat out by an Aztec Sandbox node! +There are two kinds of errors: errors in an Aztec.nr contract, and errors spat out by an Aztec Sandbox node! Maybe even auto-generate error docs, based on error codes in our codebase. diff --git a/docs/docs/dev_docs/contracts/compiling.md b/docs/docs/dev_docs/contracts/compiling.md index 109aa96732b8..845ffdf645ed 100644 --- a/docs/docs/dev_docs/contracts/compiling.md +++ b/docs/docs/dev_docs/contracts/compiling.md @@ -1,10 +1,10 @@ # Compiling contracts -Once you have written a [contract](../contracts/main.md) in Noir, you will need to compile it into an [artifact](./abi.md) in order to use it. +Once you have written a [contract](../contracts/main.md) in Aztec.nr, you will need to compile it into an [artifact](./abi.md) in order to use it. In this guide we will cover how to do so, both using the CLI and programmatically. -We'll also cover how to generate a helper [TypeScript interface](#typescript-interfaces) and a [Noir interface](#noir-interfaces) for easily interacting with your contract from your typescript app and from other noir contracts, respectively. +We'll also cover how to generate a helper [TypeScript interface](#typescript-interfaces) and an [Aztec.nr interface](#noir-interfaces) for easily interacting with your contract from your typescript app and from other Aztec.nr contracts, respectively. ## Prerequisites @@ -76,13 +76,13 @@ export class PrivateTokenContract extends ContractBase { Read more about interacting with contracts using `aztec.js` [here](../dapps/main.md). -### Noir interfaces +### Aztec.nr interfaces -A Noir contract can [call a function](./functions.md) in another contract via `context.call_private_function` or `context.call_public_function`. However, this requires manually assembling the function selector and manually serialising the arguments, which is not type-safe. +An Aztec.nr contract can [call a function](./functions.md) in another contract via `context.call_private_function` or `context.call_public_function`. However, this requires manually assembling the function selector and manually serialising the arguments, which is not type-safe. To make this easier, the compiler can generate contract interface structs that expose a convenience method for each function listed in a given contract ABI. These structs are intended to be used from another contract project that calls into the current one. For each contract, two interface structs are generated: one to be used from private functions with a `PrivateContext`, and one to be used from open functions with a `PublicContext`. -To generate them, include a `--interface` option in the compile command with a path to the target folder for the generated Noir interface files: +To generate them, include a `--interface` option in the compile command with a path to the target folder for the generated Aztec.nr interface files: ``` aztec-cli compile --interface ./path/to/another_aztec_contract_project/src ./path/to/my_aztec_contract_project @@ -128,7 +128,7 @@ impl PrivateTokenPrivateContextInterface { } ``` -Read more about how to use the Noir interfaces [here](./functions.md#contract-interface). +Read more about how to use the Aztec.nr interfaces [here](./functions.md#contract-interface). :::info At the moment, the compiler generates these interfaces from already compiled ABIs, and not from source code. This means that you should not import a generated interface from within the same project as its source contract, or you risk circular references. @@ -143,9 +143,9 @@ npm install @aztec/noir-compiler ` The compiler exposes the following functions: -- `compileUsingNargo`: Compiles a Noir project in the target folder using the `nargo` binary available on the shell `PATH` and returns the generated ABIs. +- `compileUsingNargo`: Compiles an Aztec.nr project in the target folder using the `nargo` binary available on the shell `PATH` and returns the generated ABIs. - `generateTypescriptContractInterface`: Generates a typescript class for the given contract ABI. -- `generateNoirContractInterface`: Generates a Noir interface struct for the given contract ABI. +- `generateNoirContractInterface`: Generates a Aztec.nr interface struct for the given contract ABI. ## Next steps diff --git a/docs/docs/dev_docs/contracts/contract.md b/docs/docs/dev_docs/contracts/contract.md index 9e94abb09ffb..211491237ee1 100644 --- a/docs/docs/dev_docs/contracts/contract.md +++ b/docs/docs/dev_docs/contracts/contract.md @@ -18,7 +18,7 @@ contract MyContract { ``` -> A note for vanilla Noir devs: There is no [`main()`](https://noir-lang.org/getting_started/breakdown/#mainnr) function within a Noir Contract scope. This is because more than one function of a contract may be called and proven as external (as opposed to inlined by the compiler). +> A note for vanilla Noir devs: There is no [`main()`](https://noir-lang.org/getting_started/breakdown/#mainnr) function within a Noir `contract` scope. This is because more than one function of a contract may be called and proven as external (as opposed to inlined by the compiler). ## Structure of a contract diff --git a/docs/docs/dev_docs/contracts/layout.md b/docs/docs/dev_docs/contracts/layout.md index 2c657d37fc7a..a6db7b63a6d2 100644 --- a/docs/docs/dev_docs/contracts/layout.md +++ b/docs/docs/dev_docs/contracts/layout.md @@ -2,7 +2,7 @@ ## Directory structure -Here's a common layout for a basic Noir Contract project: +Here's a common layout for a basic Aztec.nr Contract project: ```title="layout of an aztec contract project" ─── my_aztec_contract_project diff --git a/docs/docs/dev_docs/contracts/main.md b/docs/docs/dev_docs/contracts/main.md index 571a4fe3156d..b5e5ecc1787f 100644 --- a/docs/docs/dev_docs/contracts/main.md +++ b/docs/docs/dev_docs/contracts/main.md @@ -2,7 +2,7 @@ ## What is Aztec.nr? -**Aztec.nr** is a library for writing Aztec smart contracts. +**Aztec.nr** is a framework for writing Aztec smart contracts. ## Nomenclature @@ -12,17 +12,17 @@ A **smart contract** is just a collection of persistent state variables, and a c An **Aztec smart contract** is a smart contract with **private** state variables and **private** functions. -**Aztec.nr** is a library for writing Aztec smart contracts, written in Noir. +**Aztec.nr** is a framework for writing Aztec smart contracts, written in Noir. # Getting started ## Install Noir -To write a Noir Contract, you need to write Noir, and to write Noir, you need to [install Nargo](https://noir-lang.org/getting_started/nargo_installation). +To write an Aztec.nr contract, you need to write Noir, and to write Noir, you need to [install Nargo](https://noir-lang.org/getting_started/nargo_installation). ## Install Noir tooling -There are a number of tools to make writing Noir Contracts more pleasant. See [here](https://github.com/noir-lang/awesome-noir#get-coding). +There are a number of tools to make writing Aztec.nr contracts more pleasant. See [here](https://github.com/noir-lang/awesome-noir#get-coding). ## Quick start @@ -30,7 +30,8 @@ There are a number of tools to make writing Noir Contracts more pleasant. See [h Starter kit ::: -## Example Noir Contract + +## Example Aztec.nr Contract In keeping with the origins of blockchain, here's an example of a simple private token contract. Everyone's balances are private. diff --git a/docs/docs/dev_docs/contracts/types.md b/docs/docs/dev_docs/contracts/types.md index de66faed98b3..a7e81ff00274 100644 --- a/docs/docs/dev_docs/contracts/types.md +++ b/docs/docs/dev_docs/contracts/types.md @@ -1,2 +1,2 @@ See Noir docs for Noir types. -See [state_variables](./state_variables.md) for Noir Contract state variable types. \ No newline at end of file +See [state_variables](./state_variables.md) for Aztec.nr state variable types. \ No newline at end of file diff --git a/docs/docs/dev_docs/contracts/workflow.md b/docs/docs/dev_docs/contracts/workflow.md index f208a34e33bb..9ebe0ac24315 100644 --- a/docs/docs/dev_docs/contracts/workflow.md +++ b/docs/docs/dev_docs/contracts/workflow.md @@ -1,4 +1,4 @@ -# Noir contract workflow +# Aztec.nr smart contract workflow ## Write diff --git a/docs/docs/dev_docs/dapps/main.md b/docs/docs/dev_docs/dapps/main.md index cf4484cd4ebb..d267ad9a1626 100644 --- a/docs/docs/dev_docs/dapps/main.md +++ b/docs/docs/dev_docs/dapps/main.md @@ -21,7 +21,7 @@ Explain how to write a dapp using [`aztec.js`](https://github.com/AztecProtocol/ - Use the e2e tests as inspiration. - Instantiate a contract - Deploy a contract - - How to generate a nice typescript interface for a Noir Contract's functions (we have a little `.ts` program in `noir-contracts` to generate a types file at the moment... how would a user do this?) + - How to generate a nice typescript interface for an Aztec.nr contract's functions (we have a little `.ts` program in `noir-contracts` to generate a types file at the moment... how would a user do this?) - Call 'view' functions - Simulate functions (simulate the result, without sending to the 'network') - Execute functions (send them to the 'network') diff --git a/docs/docs/dev_docs/getting_started/sandbox.md b/docs/docs/dev_docs/getting_started/sandbox.md index 8f2dc173a207..fc31b6708da6 100644 --- a/docs/docs/dev_docs/getting_started/sandbox.md +++ b/docs/docs/dev_docs/getting_started/sandbox.md @@ -6,7 +6,7 @@ import Image from "@theme/IdealImage"; ## Introduction -The Aztec Sandbox aims to provide a local development system against which you can build and test Noir contracts in a fast, safe, and free environment. +The Aztec Sandbox aims to provide a local development system against which you can build and test Aztec.nr contracts in a fast, safe, and free environment. Here we will walkthrough the process of retrieving the Sandbox, installing the client libraries and using it to deploy and use a fully private token contract on the Aztec network. diff --git a/docs/docs/dev_docs/sandbox/common_errors.md b/docs/docs/dev_docs/sandbox/common_errors.md index 5552601ff652..c13345e00ddc 100644 --- a/docs/docs/dev_docs/sandbox/common_errors.md +++ b/docs/docs/dev_docs/sandbox/common_errors.md @@ -26,7 +26,7 @@ For static calls, new commitments aren't allowed For static calls, new nullifiers aren't allowed #### 2009 - PRIVATE_KERNEL__NON_PRIVATE_FUNCTION_EXECUTED_WITH_PRIVATE_KERNEL -You cannot execute a public noir function in the private kernel +You cannot execute a public Aztec.nr function in the private kernel #### 2011 - PRIVATE_KERNEL__UNSUPPORTED_OP You are trying to do something that is currently unsupported in the private kernel. If this is a blocker feel free to open up an issue on our monorepo [aztec3-packages](https://github.com/AztecProtocol/aztec3-packages/tree/master) or reach out to us on discord @@ -34,7 +34,7 @@ You are trying to do something that is currently unsupported in the private kern Note that certain operations are unsupported on certain versions of the private kernel. Eg static calls are allowed for all but the initial iteration of the private kernel (which initialises the kernel for subsequent function calls). #### 2012 - PRIVATE_KERNEL__CONTRACT_ADDRESS_MISMATCH -For the initial iteration of the private kernel, only the expected noir contract should be the entrypoint. Static and delegate calls are not allowed in the initial iteration. +For the initial iteration of the private kernel, only the expected Aztec.nr contract should be the entrypoint. Static and delegate calls are not allowed in the initial iteration. #### 2013 - PRIVATE_KERNEL__NON_PRIVATE_KERNEL_VERIFIED_WITH_PRIVATE_KERNEL The previous kernel iteration within the private kernel must also be private @@ -46,7 +46,7 @@ A constructor must be executed as the first tx in the recursion i.e. a construct Confirms that the TxRequest (user's intent) matches the private call being executed. This error may happen when: * origin address of tx_request doesn't match call_stack_item's contract_address * tx_request.function_data doesn't match call_stack_item.function_data -* noir function args passed to tx_request doesn't match args in the call_stack_item +* Aztec.nr function args passed to tx_request doesn't match args in the call_stack_item #### 2018 - PRIVATE_KERNEL__READ_REQUEST_PRIVATE_DATA_ROOT_MISMATCH Given a read request and provided witness, we check that the merkle root obtained from the witness' sibling path and it's leaf is similar to the historic state root we want to read against. This is a sanity check to ensure we are reading from the right state. @@ -65,7 +65,7 @@ But for non transient reads, we do a merkle membership check. Redas are done at You are trying to do something that is currently unsupported in the public kernel. If this is a blocker feel free to open up an issue on our monorepo [aztec3-packages](https://github.com/AztecProtocol/aztec3-packages/tree/master) or reach out to us on discord #### 3002 - PUBLIC_KERNEL__PRIVATE_FUNCTION_NOT_ALLOWED -Calling a private noir function in a public kernel is not allowed. +Calling a private Aztec.nr function in a public kernel is not allowed. #### 3005 - PUBLIC_KERNEL__NON_EMPTY_PRIVATE_CALL_STACK Public functions are executed after all the private functions are (see [private-public execution](../../concepts/foundation/communication/public_private_calls.md)). As such, private call stack must be empty when executing in the public kernel. @@ -109,7 +109,7 @@ The L1 chain ID you used in your proof generation (for your private transaction) #### 4008 - BASE__INVALID_VERSION Same as [section 4007](#4007---base__invalid_chain_id) except the `version` refers to the version of the Aztec L2 instance. -Some scary bugs like `4003 - BASE__INVALID_NULLIFIER_SUBTREE` and `4004 - BASE__INVALID_NULLIFIER_RANGE` which are to do malformed nullifier trees (see [Indexed Merkle Trees](../../concepts/advanced/data_structures/indexed_merkle_tree.md)) etc may seem unrelated at a glance, but at a closer look may be because of some bug in an application's Noir code. Same is true for certain instances of `7008 - MEMBERSHIP_CHECK_FAILED`. +Some scary bugs like `4003 - BASE__INVALID_NULLIFIER_SUBTREE` and `4004 - BASE__INVALID_NULLIFIER_RANGE` which are to do malformed nullifier trees (see [Indexed Merkle Trees](../../concepts/advanced/data_structures/indexed_merkle_tree.md)) etc may seem unrelated at a glance, but at a closer look may be because of some bug in an application's Aztec.nr code. Same is true for certain instances of `7008 - MEMBERSHIP_CHECK_FAILED`. ### Generic circuit errors @@ -119,7 +119,7 @@ Circuits work by having a fixed size array. As such, we have limits on how many * too many new commitments in one tx * too many new nullifiers in one tx - - Note: Nullifiers may be created even outside the context of your noir code. Eg, when creating a contract, we add a nullifier for its address to prevent same address from ever occurring. Similarly, we add a nullifier for your transaction hash too. + - Note: Nullifiers may be created even outside the context of your Aztec.nr code. Eg, when creating a contract, we add a nullifier for its address to prevent same address from ever occurring. Similarly, we add a nullifier for your transaction hash too. * too many private function calls in one tx (i.e. call stack size exceeded) * too many public function calls in one tx (i.e. call stack size exceeded) * too many new L2 to L1 messages in one tx @@ -159,7 +159,7 @@ Users may create a proof against a historic state in Aztec. The rollup circuits * "Public call stack size exceeded" - In Aztec, the sequencer executes all enqueued public functions in a transaction (to prevent race conditions - see [private-public execution](../../concepts/foundation/communication/public_private_calls.md)). This error says there are too many public functions requested. -* "Array size exceeds target length" - happens if you add more items than allowed by the constants set due to our circuit limitations (eg sending too many L2 to L1 messages or creating a function that exceeds the call stack length or return more values than what Noir functions allows) +* "Array size exceeds target length" - happens if you add more items than allowed by the constants set due to our circuit limitations (eg sending too many L2 to L1 messages or creating a function that exceeds the call stack length or returns more values than what Aztec.nr functions allow) * "Failed to publish block" - Happens when sequencer tries to submit its L2 block + proof to the rollup contract. Use the CLI to find any solidity error and then refer the [Contract errors section](#l1-aztec-contract-errors). diff --git a/docs/docs/dev_docs/sandbox/components.md b/docs/docs/dev_docs/sandbox/components.md index 588aeaa016f1..cb07a4b6139b 100644 --- a/docs/docs/dev_docs/sandbox/components.md +++ b/docs/docs/dev_docs/sandbox/components.md @@ -2,7 +2,11 @@ title: Components --- - + + +:::TODO Outdated +This page needs to be updated. +::: import Disclaimer from '../../misc/common/\_disclaimer.mdx'; @@ -84,10 +88,10 @@ Responsibilities: These tasks are lower priority than providing a handcrafted ABI. -- The ability for a dev to enclose a collection of Noir functions in a 'contract scope'. -- The ability to create a Noir contract abi from the above. +- The ability for a dev to enclose a collection of Aztec.nr functions in a 'contract scope'. +- The ability to create an Aztec.nr contract abi from the above. -Design a Noir Contract ABI, similar to a Solidity ABI which is output by Solc (see [here](https://docs.soliditylang.org/en/v0.8.13/abi-spec.html#json)). It might include for each function: +Design an Aztec.nr Contract ABI, similar to a Solidity ABI which is output by Solc (see [here](https://docs.soliditylang.org/en/v0.8.13/abi-spec.html#json)). It might include for each function: - ACIR opcodes (akin to Solidity bytecode). - Function name and parameter names & types. @@ -109,7 +113,7 @@ aztec.js should always be stateless. It offers the ability to interact with stat The analogous AC component would be the AztecSdk (wraps the CoreSdk which is more analogous to the private client). - Allows a user to create an Aztec keypair. Call `create_account` on Wallet. -- Create a `Contract` instance (similar to web3.js), given a path to a Noir Contract ABI. +- Create a `Contract` instance (similar to web3.js), given a path to an Aztec.nr Contract ABI. - Construct `tx_request` by calling e.g. `contract.get_deployment_request(constructor_args)`. - Call wallet `sign_tx_request(tx_request)` to get signature. - Call `simulate_tx(signed_tx_request)` on the Private Client. In future this would help compute gas, for now we won't actually return gas (it's hard). Returns success or failure, so client knows if it should proceed, and computed kernel circuit public outputs. diff --git a/docs/docs/dev_docs/sandbox/main.md b/docs/docs/dev_docs/sandbox/main.md index 9ddf0ce78ac1..2f33ffa684a2 100644 --- a/docs/docs/dev_docs/sandbox/main.md +++ b/docs/docs/dev_docs/sandbox/main.md @@ -2,7 +2,7 @@ ## What is the Aztec Sandbox? -The Aztec Sandbox is local development system against which you can build and test Noir contracts in a fast, safe, and free environment. +The Aztec Sandbox is local development system against which you can build and test Aztec.nr contracts in a fast, safe, and free environment. To learn more and to download to for yourself you can visit the [website](https://sandbox.aztec.network). diff --git a/docs/docs/dev_docs/testing/cheat_codes.md b/docs/docs/dev_docs/testing/cheat_codes.md index 4a09ac7f8119..458b5f406db4 100644 --- a/docs/docs/dev_docs/testing/cheat_codes.md +++ b/docs/docs/dev_docs/testing/cheat_codes.md @@ -382,7 +382,7 @@ Otherwise, it will throw an error. const timestamp = await cc.eth.timestamp(); const newTimestamp = timestamp + 100_000_000; await cc.aztec.warp(newTimestamp); -// any noir contract calls that make use of current timestamp +// any Aztec.nr contract calls that make use of current timestamp // and is executed in the next rollup block will now read `newTimestamp` ``` @@ -395,7 +395,7 @@ public computeSlotInMap(baseSlot: Fr | bigint, key: Fr | bigint): Fr #### Description Compute storage slot for a map key. -The baseSlot is specified in the noir contract. +The baseSlot is specified in the Aztec.nr contract. #### Example ```rust diff --git a/docs/docs/dev_docs/testing/main.md b/docs/docs/dev_docs/testing/main.md index ca7cd33a8359..a6adae5114ba 100644 --- a/docs/docs/dev_docs/testing/main.md +++ b/docs/docs/dev_docs/testing/main.md @@ -2,8 +2,8 @@ Please use the [TUTORIAL-TEMPLATE](../../TUTORIAL_TEMPLATE.md) for standalone guides / tutorials. -## Testing in Noir +## Testing in Aztec.nr Individual functions can be tested much like [how 'regular Noir' functions can be tested](https://noir-lang.org/nargo/testing). -But a Noir Contract typically tracks state variables, so you'll likely need to write more complex tests in TypeScript, using Aztec.js \ No newline at end of file +But an Aztec.nr contract typically tracks state variables, so you'll likely need to write more complex tests in TypeScript, using Aztec.js \ No newline at end of file diff --git a/docs/docs/dev_docs/wallets/architecture.md b/docs/docs/dev_docs/wallets/architecture.md index 27818b48b9fb..2d81c5946552 100644 --- a/docs/docs/dev_docs/wallets/architecture.md +++ b/docs/docs/dev_docs/wallets/architecture.md @@ -8,7 +8,7 @@ Architecture-wise, a wallet is an instance of an **Aztec RPC Server** which mana Additionally, a wallet must be able to handle one or more [account contract implementations](../../concepts/foundation/accounts/main.md#account-contracts-and-wallets). When a user creates a new account, the account is represented on-chain by an account contract. The wallet is responsible for deploying and interacting with this contract. A wallet may support multiple flavours of accounts, such as an account that uses ECDSA signatures, or one that relies on WebAuthn, or one that requires multi-factor authentication. For a user, the choice of what account implementation to use is then determined by the wallet they interact with. -In code, this translates to a wallet implementing an **Entrypoint** interface that defines [how to create an _execution request_ out of an array of _function calls_](./main.md#transaction-lifecycle) for the specific implementation of an account contract. Think of the entrypoint interface as the Javascript counterpart of an account contract, or the piece of code that knows how to format and authenticate a transaction based on the rules defined in Noir by the user's account. +In code, this translates to a wallet implementing an **Entrypoint** interface that defines [how to create an _execution request_ out of an array of _function calls_](./main.md#transaction-lifecycle) for the specific implementation of an account contract. Think of the entrypoint interface as the Javascript counterpart of an account contract, or the piece of code that knows how to format and authenticate a transaction based on the rules defined in Aztec.nr by the user's account. ## Entrypoint interface diff --git a/docs/docs/dev_docs/wallets/writing_an_account_contract.md b/docs/docs/dev_docs/wallets/writing_an_account_contract.md index b6ddc219c5db..b1f02e156f7f 100644 --- a/docs/docs/dev_docs/wallets/writing_an_account_contract.md +++ b/docs/docs/dev_docs/wallets/writing_an_account_contract.md @@ -14,7 +14,7 @@ For the sake of simplicity, we will hardcode the signing public key into the con ## The account contract -Let's start with the account contract itself in Noir. Create [a new Noir contract project](../contracts/main.md) that will contain a file with the code for the account contract, with a hardcoded public key: +Let's start with the account contract itself in Aztec.nr. Create [a new Aztec.nr contract project](../contracts/main.md) that will contain a file with the code for the account contract, with a hardcoded public key: #include_code contract yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/src/main.nr rust @@ -54,7 +54,7 @@ Note the usage of the `_with_packed_args` variant of [`call_public_function` and ## The typescript side of things -Now that we have a valid Noir account contract, we need to write the typescript glue code that will take care of formatting and authenticating transactions so they can be processed by our contract, as well as deploying the contract during account setup. This takes the form of implementing the `AccountContract` interface: +Now that we have a valid Aztec.nr account contract, we need to write the typescript glue code that will take care of formatting and authenticating transactions so they can be processed by our contract, as well as deploying the contract during account setup. This takes the form of implementing the `AccountContract` interface: #include_code account-contract-interface yarn-project/aztec.js/src/account/contract/index.ts typescript diff --git a/l1-contracts/GUIDE_LINES.md b/l1-contracts/GUIDE_LINES.md index 255f85c52a5d..650c09befbf0 100644 --- a/l1-contracts/GUIDE_LINES.md +++ b/l1-contracts/GUIDE_LINES.md @@ -5,7 +5,7 @@ In the following, there will be guidelines for the process of writing readable, - when optimizing - when reviewing. -In general the language of choice will be Solidity for our L1 contracts, so most of the specific style rules will be having that in mind, but the process for writing it can be adapted slightly for vyper, and will have an extension when Noir contracts are more mature. +In general the language of choice will be Solidity for our L1 contracts, so most of the specific style rules will be having that in mind, but the process for writing it can be adapted slightly for vyper, and will have an extension when Aztec.nr contracts are more mature. ![](https://media.tenor.com/ry_sCXk6wH0AAAAC/pirates-caribbean-code.gif) diff --git a/l1-contracts/src/core/libraries/Decoder.sol b/l1-contracts/src/core/libraries/Decoder.sol index 2de68f9d980e..b5f604437fc1 100644 --- a/l1-contracts/src/core/libraries/Decoder.sol +++ b/l1-contracts/src/core/libraries/Decoder.sol @@ -401,7 +401,7 @@ library Decoder { // Iterate until all the logs were processed while (remainingLogsLength > 0) { - // The length of the logs emitted by Noir from the function call corresponding to this kernel iteration + // The length of the logs emitted by Aztec.nr from the function call corresponding to this kernel iteration uint256 privateCircuitPublicInputLogsLength = read4(_l2Block, offset); offset += 0x4; diff --git a/yarn-project/acir-simulator/src/acvm/serialize.ts b/yarn-project/acir-simulator/src/acvm/serialize.ts index 8784774486cc..00ca0d9de485 100644 --- a/yarn-project/acir-simulator/src/acvm/serialize.ts +++ b/yarn-project/acir-simulator/src/acvm/serialize.ts @@ -127,11 +127,11 @@ export function toAcvmCallPrivateStackItem(item: PrivateCallStackItem): ACVMFiel /** * Converts a public call stack item with the request for executing a public function to - * a set of ACVM fields accepted by the enqueue_public_function_call_oracle Noir function. + * a set of ACVM fields accepted by the enqueue_public_function_call_oracle Aztec.nr function. * Note that only the fields related to the request are serialized: those related to the result * are empty since this is just an execution request, so we don't send them to the circuit. * @param item - The public call stack item to serialize to be passed onto Noir. - * @returns The fields expected by the enqueue_public_function_call_oracle Noir function. + * @returns The fields expected by the enqueue_public_function_call_oracle Aztec.nr function. */ export async function toAcvmEnqueuePublicFunctionResult(item: PublicCallRequest): Promise { return [ diff --git a/yarn-project/acir-simulator/src/client/client_execution_context.ts b/yarn-project/acir-simulator/src/client/client_execution_context.ts index 550490b48beb..5dc9ff7d549e 100644 --- a/yarn-project/acir-simulator/src/client/client_execution_context.ts +++ b/yarn-project/acir-simulator/src/client/client_execution_context.ts @@ -186,7 +186,7 @@ export class ClientTxExecutionContext { }); // TODO: notice, that if we don't have a note in our DB, we don't know how big the preimage needs to be, and so we don't actually know how many dummy notes to return, or big to make those dummy notes, or where to position `is_some` booleans to inform the noir program that _all_ the notes should be dummies. - // By a happy coincidence, a `0` field is interpreted as `is_none`, and since in this case (of an empty db) we'll return all zeros (paddedZeros), the noir program will treat the returned data as all dummies, but this is luck. Perhaps a preimage size should be conveyed by the get_notes noir oracle? + // By a happy coincidence, a `0` field is interpreted as `is_none`, and since in this case (of an empty db) we'll return all zeros (paddedZeros), the noir program will treat the returned data as all dummies, but this is luck. Perhaps a preimage size should be conveyed by the get_notes Aztec.nr oracle? const preimageLength = notes?.[0]?.preimage.length ?? 0; if ( !notes.every(({ preimage }) => { diff --git a/yarn-project/acir-simulator/src/client/db_oracle.ts b/yarn-project/acir-simulator/src/client/db_oracle.ts index 2392e3824959..cb3c77b113ce 100644 --- a/yarn-project/acir-simulator/src/client/db_oracle.ts +++ b/yarn-project/acir-simulator/src/client/db_oracle.ts @@ -27,7 +27,7 @@ export interface NoteData { } /** - * The format that noir uses to get L1 to L2 Messages. + * The format that Aztec.nr uses to get L1 to L2 Messages. */ export interface MessageLoadOracleInputs { /** diff --git a/yarn-project/acir-simulator/src/client/debug.ts b/yarn-project/acir-simulator/src/client/debug.ts index 21efa0e576c2..a6e7d97d075d 100644 --- a/yarn-project/acir-simulator/src/client/debug.ts +++ b/yarn-project/acir-simulator/src/client/debug.ts @@ -24,7 +24,7 @@ export function acvmFieldMessageToString(msg: ACVMField[]): string { } /** - * Format a debug string for Noir filling in `'{0}'` entries with their + * Format a debug string for Aztec.nr filling in `'{0}'` entries with their * corresponding values from the args array. * * @param formatStr - str of form `'this is a string with some entries like {0} and {1}'` diff --git a/yarn-project/acir-simulator/src/client/private_execution.test.ts b/yarn-project/acir-simulator/src/client/private_execution.test.ts index d45cbddf93b0..3ba37e9f2002 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.test.ts @@ -223,7 +223,7 @@ describe('Private Execution test suite', () => { const storageSlot = Fr.random(); const note = buildNote(60n, owner, storageSlot); - // Should be the same as how we compute the values for the ValueNote in the noir library. + // Should be the same as how we compute the values for the ValueNote in the Aztec.nr library. const valueNoteHash = pedersenPlookupCommitInputs( circuitsWasm, note.preimage.map(f => f.toBuffer()), @@ -451,7 +451,7 @@ describe('Private Execution test suite', () => { const storageSlot = Fr.random(); const note = buildNote(60n, owner, storageSlot); - // Should be the same as how we compute the values for the ValueNote in the noir library. + // Should be the same as how we compute the values for the ValueNote in the Aztec.nr library. const valueNoteHash = pedersenPlookupCommitInputs( circuitsWasm, note.preimage.map(f => f.toBuffer()), @@ -627,7 +627,7 @@ describe('Private Execution test suite', () => { expect(result.nestedExecutions).toHaveLength(1); expect(result.nestedExecutions[0].callStackItem.publicInputs.returnValues[0]).toEqual(new Fr(privateIncrement)); - // check that Noir calculated the call stack item hash like cpp does + // check that Aztec.nr calculated the call stack item hash like cpp does const wasm = await CircuitsWasm.get(); const expectedCallStackItemHash = computeCallStackItemHash(wasm, result.nestedExecutions[0].callStackItem); expect(result.callStackItem.publicInputs.privateCallStack[0]).toEqual(expectedCallStackItemHash); diff --git a/yarn-project/acir-simulator/src/utils.ts b/yarn-project/acir-simulator/src/utils.ts index fa30e5786575..a15b8f74b0fe 100644 --- a/yarn-project/acir-simulator/src/utils.ts +++ b/yarn-project/acir-simulator/src/utils.ts @@ -3,7 +3,7 @@ import { Grumpkin, pedersenPlookupCommitInputs } from '@aztec/circuits.js/barret import { Fr } from '@aztec/foundation/fields'; /** - * A point in the format that noir uses. + * A point in the format that Aztec.nr uses. */ export type NoirPoint = { /** The x coordinate. */ diff --git a/yarn-project/aztec-rpc/src/contract_data_oracle/index.ts b/yarn-project/aztec-rpc/src/contract_data_oracle/index.ts index f398edfe86b6..0984e3dcc70d 100644 --- a/yarn-project/aztec-rpc/src/contract_data_oracle/index.ts +++ b/yarn-project/aztec-rpc/src/contract_data_oracle/index.ts @@ -5,7 +5,7 @@ import { ContractCommitmentProvider, ContractDatabase } from '@aztec/types'; import { ContractTree } from '../contract_tree/index.js'; /** - * ContractDataOracle serves as a data manager and retriever for noir contracts. + * ContractDataOracle serves as a data manager and retriever for Aztec.nr contracts. * It provides methods to obtain contract addresses, function ABI, bytecode, and membership witnesses * from a given contract address and function selector. The class maintains a cache of ContractTree instances * to efficiently serve the requested data. It interacts with the ContractDatabase and AztecNode to fetch diff --git a/yarn-project/aztec-sandbox/src/examples/uniswap_trade_on_l1_from_l2.ts b/yarn-project/aztec-sandbox/src/examples/uniswap_trade_on_l1_from_l2.ts index 72fd032da4aa..9feaa2d9b898 100644 --- a/yarn-project/aztec-sandbox/src/examples/uniswap_trade_on_l1_from_l2.ts +++ b/yarn-project/aztec-sandbox/src/examples/uniswap_trade_on_l1_from_l2.ts @@ -217,7 +217,7 @@ async function main() { // 3. Claim WETH on L2 logger('Minting weth on L2'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const consumptionTx = wethL2Contract.methods .mint(wethAmountToBridge, owner.address, messageKey, secret, ethAccount.toField()) .send(); @@ -298,7 +298,7 @@ async function main() { // 6. claim dai on L2 logger('Consuming messages to mint dai on L2'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const daiMintTx = daiL2Contract.methods .mint(daiAmountToBridge, owner.address, depositDaiMessageKey, secret, ethAccount.toField()) .send(); diff --git a/yarn-project/aztec.js/src/contract_deployer/contract_deployer.ts b/yarn-project/aztec.js/src/contract_deployer/contract_deployer.ts index fb9a9b14ea7c..c01f44900250 100644 --- a/yarn-project/aztec.js/src/contract_deployer/contract_deployer.ts +++ b/yarn-project/aztec.js/src/contract_deployer/contract_deployer.ts @@ -6,7 +6,7 @@ import { DeployMethod } from './deploy_method.js'; /** * A class for deploying contract. - * @remarks Keeping this around even though we have noir contract types because it can be useful for non-TS users. + * @remarks Keeping this around even though we have Aztec.nr contract types because it can be useful for non-TS users. */ export class ContractDeployer { constructor(private abi: ContractAbi, private arc: AztecRPC, private publicKey?: PublicKey) {} diff --git a/yarn-project/aztec.js/src/utils/cheat_codes.ts b/yarn-project/aztec.js/src/utils/cheat_codes.ts index 1dc12106108a..d5e644e6ff49 100644 --- a/yarn-project/aztec.js/src/utils/cheat_codes.ts +++ b/yarn-project/aztec.js/src/utils/cheat_codes.ts @@ -151,7 +151,7 @@ export class EthCheatCodes { /** * Computes the slot value for a given map and key. - * @param baseSlot - The base slot of the map (specified in noir contract) + * @param baseSlot - The base slot of the map (specified in Aztec.nr contract) * @param key - The key to lookup in the map * @returns The storage slot of the value in the map */ @@ -228,7 +228,7 @@ export class AztecCheatCodes { /** * Computes the slot value for a given map and key. - * @param baseSlot - The base slot of the map (specified in noir contract) + * @param baseSlot - The base slot of the map (specified in Aztec.nr contract) * @param key - The key to lookup in the map * @returns The storage slot of the value in the map */ diff --git a/yarn-project/bootstrap.sh b/yarn-project/bootstrap.sh index f3ad539416e0..78be8c3e6920 100755 --- a/yarn-project/bootstrap.sh +++ b/yarn-project/bootstrap.sh @@ -16,7 +16,7 @@ set -eu yarn install --immutable -# Build the necessary dependencies for noir contracts typegen. +# Build the necessary dependencies for Aztec.nr contracts typegen. for DIR in foundation noir-compiler circuits.js; do echo "Building $DIR..." cd $DIR @@ -24,7 +24,7 @@ for DIR in foundation noir-compiler circuits.js; do cd .. done -# Run remake bindings before building noir contracts or l1 contracts as they depend on files created by it. +# 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 diff --git a/yarn-project/canary/src/uniswap_trade_on_l1_from_l2.test.ts b/yarn-project/canary/src/uniswap_trade_on_l1_from_l2.test.ts index f79632c5f83a..7a142332a03d 100644 --- a/yarn-project/canary/src/uniswap_trade_on_l1_from_l2.test.ts +++ b/yarn-project/canary/src/uniswap_trade_on_l1_from_l2.test.ts @@ -243,7 +243,7 @@ describe('uniswap_trade_on_l1_from_l2', () => { // 3. Claim WETH on L2 logger('Minting weth on L2'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const consumptionTx = wethL2Contract.methods .mint(wethAmountToBridge, owner, messageKey, secret, ethAccount.toField()) .send(); @@ -324,7 +324,7 @@ describe('uniswap_trade_on_l1_from_l2', () => { // 6. claim dai on L2 logger('Consuming messages to mint dai on L2'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const daiMintTx = daiL2Contract.methods .mint(daiAmountToBridge, owner, depositDaiMessageKey, secret, ethAccount.toField()) .send(); diff --git a/yarn-project/circuits.js/src/structs/verification_key.test.ts b/yarn-project/circuits.js/src/structs/verification_key.test.ts index 40256ed86138..7dd17b375dca 100644 --- a/yarn-project/circuits.js/src/structs/verification_key.test.ts +++ b/yarn-project/circuits.js/src/structs/verification_key.test.ts @@ -1,7 +1,7 @@ import { VerificationKey } from './verification_key.js'; describe('structs/verification_key', () => { - // The VK below was grabbed from the noir contract artifact child_contract.json + // The VK below was grabbed from the Aztec.nr contract artifact child_contract.json it(`can deserialize vk built by noir`, () => { const serialized = `0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f`; const vk = VerificationKey.fromBuffer(Buffer.from(serialized, 'hex')); diff --git a/yarn-project/cli/README.md b/yarn-project/cli/README.md index e2ec0163948a..87f643a669fb 100644 --- a/yarn-project/cli/README.md +++ b/yarn-project/cli/README.md @@ -135,7 +135,7 @@ aztec-cli create-account ### deploy -Deploys a compiled Noir contract to Aztec. +Deploys a compiled Aztec.nr contract to Aztec. Syntax: @@ -145,12 +145,12 @@ aztec-cli deploy [options] Options: -- `-c, --contract-abi `: Path to the compiled Noir contract's ABI file in JSON format. You can also use one of Aztec's example contracts found in [@aztec/noir-contracts](https://www.npmjs.com/package/@aztec/noir-contracts), e.g. PrivateTokenContractAbi. You can get a full ist of the available contracts with `aztec-cli example-contracts` +- `-c, --contract-abi `: Path to the compiled Aztec.nr contract's ABI file in JSON format. You can also use one of Aztec's example contracts found in [@aztec/noir-contracts](https://www.npmjs.com/package/@aztec/noir-contracts), e.g. PrivateTokenContractAbi. You can get a full ist of the available contracts with `aztec-cli example-contracts` - `-a, --args ` (optional): Contract constructor arguments Default: []. - `-u, --rpc-url `: URL of the Aztec RPC. Default: `http://localhost:8080`. - `-k, --public-key `: Public key of the deployer. If not provided, it will check the RPC for existing ones. -This command deploys a compiled Noir contract to Aztec. It requires the path to the contract's ABI file in JSON format. Optionally, you can specify the public key of the deployer and provide constructor arguments for the contract. The command displays the address of the deployed contract. +This command deploys a compiled Aztec.nr contract to Aztec. It requires the path to the contract's ABI file in JSON format. Optionally, you can specify the public key of the deployer and provide constructor arguments for the contract. The command displays the address of the deployed contract. Example usage: diff --git a/yarn-project/cli/src/index.ts b/yarn-project/cli/src/index.ts index b1ac8bb4c7ca..a597a07e21fc 100644 --- a/yarn-project/cli/src/index.ts +++ b/yarn-project/cli/src/index.ts @@ -148,10 +148,10 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { program .command('deploy') - .description('Deploys a compiled Noir contract to Aztec.') + .description('Deploys a compiled Aztec.nr contract to Aztec.') .argument( '', - "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", + "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", ) .option('-a, --args ', 'Contract constructor arguments', []) .option('-u, --rpc-url ', 'URL of the Aztec RPC', AZTEC_RPC_HOST || 'http://localhost:8080') @@ -360,7 +360,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { .option('-a, --args [functionArgs...]', 'Function arguments', []) .requiredOption( '-c, --contract-abi ', - "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", + "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", ) .requiredOption('-ca, --contract-address
', 'Aztec address of the contract.') .option('-k, --private-key ', "The sender's private key.", PRIVATE_KEY) @@ -406,7 +406,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { .option('-a, --args [functionArgs...]', 'Function arguments', []) .requiredOption( '-c, --contract-abi ', - "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", + "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", ) .requiredOption('-ca, --contract-address
', 'Aztec address of the contract.') .option('-f, --from ', 'Public key of the TX viewer. If empty, will try to find account in RPC.') @@ -438,7 +438,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { .argument('', 'The encoded hex string') .requiredOption( '-c, --contract-abi ', - "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", + "A compiled Aztec.nr contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", ) .requiredOption('-p, --parameter ', 'The name of the struct parameter to decode into') .action(async (encodedString, options) => { diff --git a/yarn-project/end-to-end/src/e2e_pending_commitments_contract.test.ts b/yarn-project/end-to-end/src/e2e_pending_commitments_contract.test.ts index 24edd48610bc..2c8d21403ee3 100644 --- a/yarn-project/end-to-end/src/e2e_pending_commitments_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_pending_commitments_contract.test.ts @@ -64,7 +64,7 @@ describe('e2e_pending_commitments_contract', () => { return contract; }; - it('Noir function can "get" notes it just "inserted"', async () => { + it('Aztec.nr function can "get" notes it just "inserted"', async () => { const mintAmount = 65n; const deployedContract = await deployContract(); @@ -76,7 +76,7 @@ describe('e2e_pending_commitments_contract', () => { expect(receipt.status).toBe(TxStatus.MINED); }, 60_000); - it('Squash! Noir function can "create" and "nullify" note in the same TX', async () => { + it('Squash! Aztec.nr function can "create" and "nullify" note in the same TX', async () => { // Kernel will squash the noteHash and its nullifier. // Realistic way to describe this test is "Mint note A, then burn note A in the same transaction" const mintAmount = 65n; @@ -101,7 +101,7 @@ describe('e2e_pending_commitments_contract', () => { await expectNullifiersSquashedExcept(0); }, 60_000); - it('Squash! Noir function can "create" 2 notes and "nullify" both in the same TX', async () => { + it('Squash! Aztec.nr function can "create" 2 notes and "nullify" both in the same TX', async () => { // Kernel will squash both noteHashes and their nullifier. // Realistic way to describe this test is "Mint notes A and B, then burn both in the same transaction" const mintAmount = 65n; @@ -125,7 +125,7 @@ describe('e2e_pending_commitments_contract', () => { await expectNullifiersSquashedExcept(0); }, 60_000); - it('Squash! Noir function can "create" 2 notes and "nullify" 1 in the same TX (kernel will squash one note + nullifier)', async () => { + it('Squash! Aztec.nr function can "create" 2 notes and "nullify" 1 in the same TX (kernel will squash one note + nullifier)', async () => { // Kernel will squash one noteHash and its nullifier. // The other note will become persistent! // Realistic way to describe this test is "Mint notes A and B, then burn note A in the same transaction" @@ -150,7 +150,7 @@ describe('e2e_pending_commitments_contract', () => { await expectNullifiersSquashedExcept(0); }, 60_000); - it('Squash! Noir function can nullify a pending note and a persistent in the same TX', async () => { + it('Squash! Aztec.nr function can nullify a pending note and a persistent in the same TX', async () => { // Create 1 note in isolated TX. // Then, in a separate TX, create 1 new note and nullify BOTH notes. // In this second TX, the kernel will squash one note + nullifier, diff --git a/yarn-project/end-to-end/src/fixtures/cross_chain_test_harness.ts b/yarn-project/end-to-end/src/fixtures/cross_chain_test_harness.ts index ad71a3f1733c..9084a1126873 100644 --- a/yarn-project/end-to-end/src/fixtures/cross_chain_test_harness.ts +++ b/yarn-project/end-to-end/src/fixtures/cross_chain_test_harness.ts @@ -166,7 +166,7 @@ export class CrossChainTestHarness { async consumeMessageOnAztecAndMintSecretly(bridgeAmount: bigint, messageKey: Fr, secret: Fr) { this.logger('Consuming messages on L2 secretively'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const consumptionTx = this.l2Contract.methods .mint(bridgeAmount, this.ownerAddress, messageKey, secret, this.ethAccount.toField()) .send(); @@ -178,7 +178,7 @@ export class CrossChainTestHarness { async consumeMessageOnAztecAndMintPublicly(bridgeAmount: bigint, messageKey: Fr, secret: Fr) { this.logger('Consuming messages on L2 Publicly'); - // Call the mint tokens function on the noir contract + // Call the mint tokens function on the Aztec.nr contract const consumptionTx = this.l2Contract.methods .mintPublic(bridgeAmount, this.ownerAddress, messageKey, secret, this.ethAccount.toField()) .send(); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index 0fecd88c5cdb..18dd0dd27939 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -96,7 +96,7 @@ export interface StructType extends BasicType<'struct'> { } /** - * Noir function types. + * Aztec.nr function types. */ export enum FunctionType { SECRET = 'secret', diff --git a/yarn-project/foundation/src/abi/decoder.ts b/yarn-project/foundation/src/abi/decoder.ts index 0dfbe09708c1..cece6e9d9496 100644 --- a/yarn-project/foundation/src/abi/decoder.ts +++ b/yarn-project/foundation/src/abi/decoder.ts @@ -62,7 +62,7 @@ class ReturnValuesDecoder { /** * Decodes all the return values for the given function ABI. - * Noir support only single return value + * Aztec.nr support only single return value * The return value can however be simple types, structs or arrays * @returns The decoded return values. */ diff --git a/yarn-project/noir-compiler/README.md b/yarn-project/noir-compiler/README.md index 92558025bbb6..ade6f9bfa0c9 100644 --- a/yarn-project/noir-compiler/README.md +++ b/yarn-project/noir-compiler/README.md @@ -1,6 +1,6 @@ -# Aztec Noir compiler +# Aztec.nr compiler -The Aztec noir compiler compiles noir contracts using nargo and outputs Aztec formatted contract ABIs. The compiler can also generate typescript classes for each contract, as well as Noir interfaces for calling external functions. +The Aztec.nr compiler compiles Aztec.nr contracts using nargo and outputs Aztec formatted contract ABIs. The compiler can also generate typescript classes for each contract, as well as Aztec.nr interfaces for calling external functions. ## Installation diff --git a/yarn-project/noir-compiler/package.json b/yarn-project/noir-compiler/package.json index 067b9a5c6d92..7ef409d0bb48 100644 --- a/yarn-project/noir-compiler/package.json +++ b/yarn-project/noir-compiler/package.json @@ -10,7 +10,7 @@ "entryPoints": [ "./src/index.ts" ], - "name": "Aztec noir compiler", + "name": "Aztec.nr compiler", "tsconfig": "./tsconfig.json" }, "bin": { diff --git a/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap index 4a4607ed2880..5defbe9affe5 100644 --- a/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap @@ -3,9 +3,167 @@ exports[`noir-compiler using nargo binary compiles the test contract 1`] = ` [ { + "debug": { + "debugSymbols": [ + "eJyrVsrJT04syczPK1ayqlYyULKKrlYqLkjMA/GKSxKLSpSsDE0MdZRS81KALFOzWh2ltMycVCC7VgdDpbEJVKGZOVydsQkWhUYGMJVGxkhKa2N1lAwH2gm1tQDKLFO0", + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7", + ], + "fileMap": { + "3": { + "path": "std/hash", + "source": "mod poseidon; + +#[foreign(sha256)] +fn sha256(_input : [u8; N]) -> [u8; 32] {} + +#[foreign(blake2s)] +fn blake2s(_input : [u8; N]) -> [u8; 32] {} + +fn pedersen(input : [Field; N]) -> [Field; 2] { + pedersen_with_separator(input, 0) +} + +#[foreign(pedersen)] +fn pedersen_with_separator(_input : [Field; N], _separator : u32) -> [Field; 2] {} + +#[foreign(hash_to_field_128_security)] +fn hash_to_field(_input : [Field; N]) -> Field {} + +#[foreign(keccak256)] +fn keccak256(_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(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. +fn mimc_bn254(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 +} +", + }, + }, + }, "functions": [ { - "bytecode": "H4sIAAAAAAAA/61RQQ6DQAjEtfU9sIALt36lm67/f0GjRkzWs04ymeEykGECgAQHho1T6Dn/w48bX3DFGPoJxXug4cGs1GUxziKt5EZMX8xeTVG0zkZGavrLxtxMrHj1gk7CjRZ1XiLs/dxd2Hd7+tT9YO9037cCCmnZhZgBAAA=", + "bytecode": "H4sIAAAAAAAA/61Q0QrDMAhMuqXfo1EbfduvLCz9/y8Y66gF6Wt7cJwncsjNKaVH2pE3zq6H//r8v3luLO6n0z7iyHu5wjVgvjFrClkEC/NodSDhG6p1FWDpi6KiqHyqEg1lbdatgSHTwFWMVg8r9/0FsfMcOo49l9DxD+/NSgK4AQAA", "functionType": "secret", "isInternal": false, "name": "constructor", @@ -22,7 +180,7 @@ exports[`noir-compiler using nargo binary compiles the test contract 1`] = ` "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f", }, { - "bytecode": "H4sIAAAAAAAA/6WOSwqAMAwFU0+Ub5vsvEqL6f2PIKKCIK6czcBbPGYBgAJv7m29LFhVs3GSUEeO4YZqozo5mdvGLpKu3mJEwyCVpGkhE0/K4wt/wf2r9fAOFP9TANAAAAA=", + "bytecode": "H4sIAAAAAAAA/6WPuw2AMAxEHSbyN7E7VkmEs/8IFIAUCVHxmpOuON3bAKDAm6fb7xSsqtk4Sagjx3BDtVGdnMztYBdJV28xomGQStK0kIkXZdnCX3D/+rp6nNHQ/4XYAAAA", "functionType": "open", "isInternal": false, "name": "openFunction", @@ -40,19 +198,21 @@ exports[`noir-compiler using nargo binary compiles the test contract 1`] = ` ] `; -exports[`noir-compiler using nargo binary generates noir external interface 1`] = ` +exports[`noir-compiler using nargo binary generates Aztec.nr external interface 1`] = ` "/* Autogenerated file, do not edit! */ use dep::std; -use dep::aztec::context::PrivateContext; +use dep::aztec::context::{ PrivateContext, PublicContext }; use dep::aztec::constants_gen::RETURN_VALUES_LENGTH; -struct TestContractContractInterface { + +// Interface for calling TestContract functions from a private context +struct TestContractPrivateContextInterface { address: Field, } -impl TestContractContractInterface { +impl TestContractPrivateContextInterface { fn at(address: Field) -> Self { Self { address, @@ -69,7 +229,34 @@ impl TestContractContractInterface { } } + + + + +// Interface for calling TestContract functions from a public context +struct TestContractPublicContextInterface { + address: Field, +} + +impl TestContractPublicContextInterface { + fn at(address: Field) -> Self { + Self { + address, + } + } + + fn openFunction( + self, + context: PublicContext + ) -> [Field; RETURN_VALUES_LENGTH] { + let mut serialised_args = [0; 0]; + context.call_public_function(self.address, 0x46be982e, serialised_args) + } + +} + + " `; @@ -78,12 +265,12 @@ exports[`noir-compiler using nargo binary generates typescript interface 1`] = ` /* Autogenerated file, do not edit! */ /* eslint-disable */ -import { AztecAddress, ContractBase, ContractFunctionInteraction, ContractMethod, DeployMethod, FieldLike, Wallet } from '@aztec/aztec.js'; +import { AztecAddress, CompleteAddress, ContractBase, ContractFunctionInteraction, ContractMethod, DeployMethod, FieldLike, Wallet } from '@aztec/aztec.js'; import { Fr, Point } from '@aztec/foundation/fields'; import { AztecRPC, PublicKey } from '@aztec/types'; import { ContractAbi } from '@aztec/foundation/abi'; import TestContractContractAbiJson from '../target/test.json' assert { type: 'json' }; -export const TestContractContractAbi = TestContractContractAbiJson as ContractAbi; +export const TestContractContractAbi = TestContractContractAbiJson as unknown as ContractAbi; /** * Type-safe interface for contract TestContract; @@ -91,12 +278,12 @@ export const TestContractContractAbi = TestContractContractAbiJson as ContractAb export class TestContractContract extends ContractBase { private constructor( - /** The deployed contract's address. */ - address: AztecAddress, + /** The deployed contract's complete address. */ + completeAddress: CompleteAddress, /** The wallet. */ wallet: Wallet, ) { - super(address, TestContractContractAbi, wallet); + super(completeAddress, TestContractContractAbi, wallet); } @@ -113,10 +300,11 @@ export class TestContractContract extends ContractBase { /** The wallet. */ wallet: Wallet, ) { - if ((await wallet.getContractData(address)) === undefined) { + const extendedContractData = await wallet.getExtendedContractData(address); + if (extendedContractData === undefined) { throw new Error('Contract ' + address.toString() + ' is not deployed'); } - return new TestContractContract(address, wallet); + return new TestContractContract(extendedContractData.getCompleteAddress(), wallet); } diff --git a/yarn-project/noir-compiler/src/cli/contract.ts b/yarn-project/noir-compiler/src/cli/contract.ts index 020908f0ab0d..92243a5a3680 100644 --- a/yarn-project/noir-compiler/src/cli/contract.ts +++ b/yarn-project/noir-compiler/src/cli/contract.ts @@ -8,7 +8,7 @@ import path, { resolve } from 'path'; import { compileUsingNargo, generateNoirContractInterface, generateTypescriptContractInterface } from '../index.js'; /** - * Registers a 'contract' command on the given commander program that compiles a Noir contract project. + * Registers a 'contract' command on the given commander program that compiles an Aztec.nr contract project. * @param program - Commander program. * @param log - Optional logging function. * @returns The program with the command registered. @@ -16,10 +16,10 @@ import { compileUsingNargo, generateNoirContractInterface, generateTypescriptCon export function compileContract(program: Command, name = 'contract', log: LogFn = () => {}): Command { return program .command(name) - .argument('', 'Path to the noir project to compile') + .argument('', 'Path to the Aztec.nr project to compile') .option('-o, --outdir ', 'Output folder for the binary artifacts, relative to the project path', 'target') .option('-ts, --typescript ', 'Optional output folder for generating typescript wrappers', undefined) - .option('-i, --interface ', 'Optional output folder for generating noir contract interface', undefined) + .option('-i, --interface ', 'Optional output folder for generating an Aztec.nr contract interface', undefined) .description('Compiles the contracts in the target project') .action( @@ -48,7 +48,9 @@ export function compileContract(program: Command, name = 'contract', log: LogFn if (noirInterface) { const noirInterfacePath = resolve(projectPath, noirInterface, `${contract.name}_interface.nr`); - log(`Writing ${contract.name} Noir external interface to ${path.relative(currentDir, noirInterfacePath)}`); + log( + `Writing ${contract.name} Aztec.nr external interface to ${path.relative(currentDir, noirInterfacePath)}`, + ); const noirWrapper = generateNoirContractInterface(contract); mkdirpSync(path.dirname(noirInterfacePath)); writeFileSync(noirInterfacePath, noirWrapper); diff --git a/yarn-project/noir-compiler/src/compile/nargo.ts b/yarn-project/noir-compiler/src/compile/nargo.ts index 790f4462b840..bba92a986179 100644 --- a/yarn-project/noir-compiler/src/compile/nargo.ts +++ b/yarn-project/noir-compiler/src/compile/nargo.ts @@ -19,7 +19,7 @@ export type CompileOpts = { }; /** - * A class that compiles noir contracts using nargo via the shell. + * A class that compiles Aztec.nr contracts using nargo via the shell. */ export class NargoContractCompiler { private log: LogFn; @@ -28,8 +28,8 @@ export class NargoContractCompiler { } /** - * Compiles the contracts in projectPath and returns the Noir artifact. - * @returns Noir artifact of the compiled contracts. + * Compiles the contracts in projectPath and returns the Aztec.nr artifact. + * @returns Aztec.nr artifact of the compiled contracts. */ public compile(): Promise { const stdio = this.opts.quiet ? 'ignore' : 'inherit'; diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/abi.ts b/yarn-project/noir-compiler/src/contract-interface-gen/abi.ts index a6d32037717b..ba3f02d48d31 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/abi.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/abi.ts @@ -6,7 +6,7 @@ import { mockVerificationKey } from '../mocked_keys.js'; import { NoirCompilationArtifacts, NoirFunctionEntry } from '../noir_artifact.js'; /** - * Generates an Aztec ABI for a Noir function build artifact. Replaces verification key with a mock value. + * Generates an Aztec ABI for a Aztec.nr function build artifact. Replaces verification key with a mock value. * @param fn - Noir function entry. * @returns Aztec ABI function entry. */ diff --git a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts index cbd9cea15322..8f81f7697bac 100644 --- a/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts +++ b/yarn-project/noir-compiler/src/contract-interface-gen/noir.ts @@ -134,8 +134,8 @@ function generateSerialisation(parameters: ABIParameter[]) { } /** - * Generate a function interface for a particular function of the Noir Contract being processed. This function will be a method of the ContractInterface struct being created here. - * @param functionData - Data relating to the function, which can be used to generate a callable Noir Function. + * Generate a function interface for a particular function of the Aztec.nr Contract being processed. This function will be a method of the ContractInterface struct being created here. + * @param functionData - Data relating to the function, which can be used to generate a callable Aztec.nr Function. * @param kind - Whether this interface will be used from private or public functions. * @returns A code string. */ @@ -272,7 +272,7 @@ ${contractImpl} /** * Generates the Noir code to represent an interface for calling a contract. - * @param abi - The compiled Noir artifact. + * @param abi - The compiled Aztec.nr artifact. * @returns The corresponding ts code. */ export function generateNoirContractInterface(abi: ContractAbi) { diff --git a/yarn-project/noir-compiler/src/index.test.ts b/yarn-project/noir-compiler/src/index.test.ts index 9a09d1fe8f87..804dc88da31d 100644 --- a/yarn-project/noir-compiler/src/index.test.ts +++ b/yarn-project/noir-compiler/src/index.test.ts @@ -39,7 +39,7 @@ describe('noir-compiler', () => { expect(result).toMatchSnapshot(); }); - it('generates noir external interface', () => { + it('generates Aztec.nr external interface', () => { const result = generateNoirContractInterface(compiled[0]); expect(result).toMatchSnapshot(); }); diff --git a/yarn-project/noir-compiler/src/index.ts b/yarn-project/noir-compiler/src/index.ts index b7054d895779..85b52ffe7bdb 100644 --- a/yarn-project/noir-compiler/src/index.ts +++ b/yarn-project/noir-compiler/src/index.ts @@ -12,7 +12,7 @@ export { generateTypescriptContractInterface } from './contract-interface-gen/ty export { generateAztecAbi }; /** - * Compile Noir contracts in project path using a nargo binary available in the shell. + * Compile Aztec.nr contracts in project path using a nargo binary available in the shell. * @param projectPath - Path to project. * @param opts - Compiler options. * @returns Compiled artifacts. diff --git a/yarn-project/noir-compiler/src/noir_artifact.ts b/yarn-project/noir-compiler/src/noir_artifact.ts index 40eed69101fd..f1fab9562a78 100644 --- a/yarn-project/noir-compiler/src/noir_artifact.ts +++ b/yarn-project/noir-compiler/src/noir_artifact.ts @@ -1,9 +1,9 @@ import { ABIParameter, ABIType, DebugFileMap, DebugInfo } from '@aztec/foundation/abi'; -/** The noir function types. */ +/** The Aztec.nr function types. */ type NoirFunctionType = 'Open' | 'Secret' | 'Unconstrained'; -/** The ABI of a noir function. */ +/** The ABI of an Aztec.nr function. */ interface NoirFunctionAbi { /** The parameters of the function. */ parameters: ABIParameter[]; @@ -16,7 +16,7 @@ interface NoirFunctionAbi { } /** - * The compilation result of a noir function. + * The compilation result of an Aztec.nr function. */ export interface NoirFunctionEntry { /** The name of the function. */ @@ -36,7 +36,7 @@ export interface NoirFunctionEntry { } /** - * The compilation result of a noir contract. + * The compilation result of an Aztec.nr contract. */ export interface NoirCompiledContract { /** The name of the contract. */ @@ -48,7 +48,7 @@ export interface NoirCompiledContract { } /** - * The debug metadata of a noir contract. + * The debug metadata of an Aztec.nr contract. */ export interface NoirDebugMetadata { /** diff --git a/yarn-project/noir-contracts/README.md b/yarn-project/noir-contracts/README.md index b4631099f63b..33d3ea1518b0 100644 --- a/yarn-project/noir-contracts/README.md +++ b/yarn-project/noir-contracts/README.md @@ -1,4 +1,4 @@ -# Noir contracts +# Aztec.nr contracts This package contains the source code and the Aztec ABIs for the example contracts used in tests. diff --git a/yarn-project/noir-contracts/scripts/compile.sh b/yarn-project/noir-contracts/scripts/compile.sh index 972e96527309..09c1d896f6c9 100755 --- a/yarn-project/noir-contracts/scripts/compile.sh +++ b/yarn-project/noir-contracts/scripts/compile.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Compiles noir contracts in parallel, bubbling any compilation errors +# Compiles Aztec.nr contracts in parallel, bubbling any compilation errors source ./scripts/catch.sh source ./scripts/nargo_check.sh diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr index fe9fa044e5e2..d2c29d6c6e8c 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/test_contract/src/main.nr @@ -44,7 +44,7 @@ contract Test { context.this_address() } - // Test codegen for noir interfaces + // Test codegen for Aztec.nr interfaces // See yarn-project/acir-simulator/src/client/private_execution.test.ts 'nested calls through autogenerated interface' // Note; this function is deliberately NOT annotated with #[aztec(private)] due to its use in tests fn testCodeGen( diff --git a/yarn-project/noir-contracts/src/scripts/copy_output.ts b/yarn-project/noir-contracts/src/scripts/copy_output.ts index 05da55f50be5..68ec5ca5204b 100644 --- a/yarn-project/noir-contracts/src/scripts/copy_output.ts +++ b/yarn-project/noir-contracts/src/scripts/copy_output.ts @@ -88,7 +88,7 @@ const main = () => { writeFileSync(tsInterfaceDestFilePath, generateTypescriptContractInterface(artifactJson, tsAbiImportPath)); log(`Written ${tsInterfaceDestFilePath}`); - // Write a .nr contract interface, for consumption by other Noir Contracts + // Write a .nr contract interface, for consumption by other Aztec.nr contracts if (INTERFACE_CONTRACTS.includes(name)) { const projectDirPath = `src/contracts/${projectName}`; const noirInterfaceDestFilePath = `${projectDirPath}/src/interface.nr`; @@ -96,7 +96,7 @@ const main = () => { writeFileSync(noirInterfaceDestFilePath, generateNoirContractInterface(artifactJson)); log(`Written ${noirInterfaceDestFilePath}`); } catch (err) { - log(`Error generating noir interface for ${name}: ${err}`); + log(`Error generating Aztec.nr interface for ${name}: ${err}`); } } }; diff --git a/yarn-project/noir-libs/safe-math/src/safe_u120.nr b/yarn-project/noir-libs/safe-math/src/safe_u120.nr index ccb6ab906a82..5feeb3cca233 100644 --- a/yarn-project/noir-libs/safe-math/src/safe_u120.nr +++ b/yarn-project/noir-libs/safe-math/src/safe_u120.nr @@ -259,11 +259,10 @@ fn test_mul_div_up_ghost_overflow() { // It should not be possible for us to overflow `mul_div_up` through the adder, since that require the divisor to be 1 // since we otherwise would not be at the max value. If divisor is 1, adder is 0. - #[test(should_fail)] fn test_mul_div_up_zero_divisor() { let a = SafeU120::new(6); let b = SafeU120::new(3); let c = SafeU120::new(0); let _d = SafeU120::mul_div_up(a, b, c); -} \ No newline at end of file +} diff --git a/yarn-project/types/src/contract_database.ts b/yarn-project/types/src/contract_database.ts index 7eb2333ed88c..f9b8581febb2 100644 --- a/yarn-project/types/src/contract_database.ts +++ b/yarn-project/types/src/contract_database.ts @@ -3,7 +3,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address'; import { ContractDao } from './contract_dao.js'; /** - * Represents a ContractDatabase interface for managing noir contracts. + * Represents a ContractDatabase interface for managing Aztec.nr contracts. * Provides methods for adding and retrieving ContractDao objects by their associated addresses. */ export interface ContractDatabase { diff --git a/yarn-project/yarn-project-base/Dockerfile b/yarn-project/yarn-project-base/Dockerfile index ffcf3abb8c25..dca9635efdc6 100644 --- a/yarn-project/yarn-project-base/Dockerfile +++ b/yarn-project/yarn-project-base/Dockerfile @@ -108,7 +108,7 @@ RUN ./scripts/generate-artifacts.sh WORKDIR /usr/src/yarn-project -# Generate noir contract artifacts +# Generate Aztec.nr contract artifacts FROM builder_ as noir_types COPY . . COPY --from=noir /usr/src/yarn-project/noir-contracts/src/contracts /usr/src/yarn-project/noir-contracts/src/contracts @@ -121,7 +121,7 @@ RUN ./scripts/types_all.sh # Run yarn build again to build the types RUN yarn build -# Take noir contract artifacts into the final build image +# Take Aztec.nr contract artifacts into the final build image FROM builder_ as final COPY . . COPY --from=noir_types /usr/src/yarn-project/noir-contracts/src/artifacts /usr/src/yarn-project/noir-contracts/src/artifacts From c57f027af9a9796ddef970db24e56be954215760 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Wed, 13 Sep 2023 23:00:35 +0200 Subject: [PATCH 03/25] chore(ci): Mirror Aztec-nr (#2270) solution for: - https://github.com/AztecProtocol/aztec-packages/issues/2265 - handles renaming noir-libs -> aztec-nr - renames what was aztec-nr to just aztec aztec-nr lives here (with full history): - https://github.com/AztecProtocol/aztec-nr - once this is merged it can be made public and a nice readme put on it --- .github/workflows/mirror_repos.yml | 23 +- build_manifest.json | 6 +- .../docs/concepts/foundation/accounts/keys.md | 4 +- docs/docs/dev_docs/contracts/events.md | 4 +- docs/docs/dev_docs/contracts/portals/main.md | 4 +- .../dev_docs/contracts/state_variables.md | 8 +- docs/docs/dev_docs/contracts/syntax.md | 2 +- docs/docs/dev_docs/dapps/testing.md | 2 +- .../dapps/tutorials/contract_deployment.md | 4 +- .../getting_started/noir_contracts.md | 2 +- .../wallets/writing_an_account_contract.md | 4 +- yarn-project/aztec-nr/.gitrepo | 12 ++ yarn-project/aztec-nr/LICENCE | 202 ++++++++++++++++++ yarn-project/aztec-nr/README.md | 66 ++++++ yarn-project/aztec-nr/assets/Aztec_banner.png | Bin 0 -> 605722 bytes .../aztec-noir => aztec-nr/aztec}/Nargo.toml | 0 .../aztec-noir => aztec-nr/aztec}/src/abi.nr | 0 .../aztec-noir => aztec-nr/aztec}/src/auth.nr | 0 .../aztec}/src/constants_gen.nr | 0 .../aztec}/src/context.nr | 0 .../aztec}/src/entrypoint.nr | 0 .../aztec-noir => aztec-nr/aztec}/src/lib.nr | 0 .../aztec-noir => aztec-nr/aztec}/src/log.nr | 0 .../aztec}/src/messaging.nr | 0 .../aztec}/src/messaging/l1_to_l2_message.nr | 0 .../messaging/l1_to_l2_message_getter_data.nr | 0 .../aztec-noir => aztec-nr/aztec}/src/note.nr | 0 .../aztec}/src/note/lifecycle.nr | 0 .../aztec}/src/note/note_getter.nr | 0 .../aztec}/src/note/note_getter_options.nr | 0 .../aztec}/src/note/note_hash.nr | 0 .../aztec}/src/note/note_header.nr | 0 .../aztec}/src/note/note_interface.nr | 0 .../aztec}/src/note/note_viewer_options.nr | 0 .../aztec}/src/note/utils.nr | 0 .../aztec}/src/oracle.nr | 0 .../aztec}/src/oracle/arguments.nr | 0 .../src/oracle/call_private_function.nr | 0 .../aztec}/src/oracle/compute_selector.nr | 0 .../aztec}/src/oracle/context.nr | 0 .../aztec}/src/oracle/create_commitment.nr | 0 .../aztec}/src/oracle/debug_log.nr | 0 .../oracle/enqueue_public_function_call.nr | 0 .../aztec}/src/oracle/get_l1_to_l2_message.nr | 0 .../aztec}/src/oracle/get_public_key.nr | 0 .../aztec}/src/oracle/get_secret_key.nr | 0 .../aztec}/src/oracle/logs.nr | 0 .../aztec}/src/oracle/notes.nr | 0 .../aztec}/src/oracle/public_call.nr | 0 .../aztec}/src/oracle/rand.nr | 0 .../aztec}/src/oracle/storage.nr | 0 .../aztec}/src/private_call_stack_item.nr | 0 .../aztec}/src/public_call_stack_item.nr | 0 .../aztec}/src/state_vars.nr | 0 .../src/state_vars/immutable_singleton.nr | 0 .../aztec}/src/state_vars/map.nr | 0 .../aztec}/src/state_vars/public_state.nr | 0 .../aztec}/src/state_vars/set.nr | 0 .../aztec}/src/state_vars/singleton.nr | 0 .../aztec}/src/types.nr | 0 .../aztec}/src/types/grumpkin_scalar.nr | 0 .../aztec}/src/types/point.nr | 0 .../aztec}/src/types/type_serialisation.nr | 0 .../type_serialisation/bool_serialisation.nr | 0 .../type_serialisation/field_serialisation.nr | 0 .../type_serialisation/u32_serialisation.nr | 0 .../aztec}/src/types/vec.nr | 0 .../aztec}/src/utils.nr | 0 .../easy-private-state/Nargo.toml | 2 +- .../src/easy_private_state.nr | 0 .../easy-private-state/src/lib.nr | 0 .../safe-math/Nargo.toml | 0 .../safe-math/src/lib.nr | 0 .../safe-math/src/safe_u120.nr | 0 .../value-note/Nargo.toml | 2 +- .../value-note/src/balance_utils.nr | 0 .../value-note/src/filter.nr | 0 .../value-note/src/lib.nr | 0 .../value-note/src/utils.nr | 0 .../value-note/src/value_note.nr | 0 .../account/entrypoint/entrypoint_payload.ts | 2 +- .../aztec.js/src/utils/cheat_codes.ts | 2 +- .../circuits.js/src/cbind/constants.in.ts | 2 +- yarn-project/noir-contracts/README.md | 2 +- .../scripts/get_all_libraries.sh | 4 +- .../noir-contracts/scripts/nargo_test.sh | 2 +- .../contracts/card_game_contract/Nargo.toml | 4 +- .../src/contracts/child_contract/Nargo.toml | 2 +- .../docs_example_contract/Nargo.toml | 2 +- .../easy_private_token_contract/Nargo.toml | 6 +- .../ecdsa_account_contract/Nargo.toml | 2 +- .../src/contracts/escrow_contract/Nargo.toml | 2 +- .../contracts/import_test_contract/Nargo.toml | 2 +- .../src/contracts/lending_contract/Nargo.toml | 4 +- .../multi_transfer_contract/Nargo.toml | 2 +- .../native_token_contract/Nargo.toml | 4 +- .../non_native_token_contract/Nargo.toml | 4 +- .../src/contracts/parent_contract/Nargo.toml | 2 +- .../pending_commitments_contract/Nargo.toml | 4 +- .../pokeable_token_contract/Nargo.toml | 4 +- .../contracts/price_feed_contract/Nargo.toml | 2 +- .../private_token_airdrop_contract/Nargo.toml | 4 +- .../private_token_contract/Nargo.toml | 4 +- .../public_token_contract/Nargo.toml | 2 +- .../schnorr_account_contract/Nargo.toml | 2 +- .../Nargo.toml | 2 +- .../Nargo.toml | 2 +- .../Nargo.toml | 2 +- .../src/contracts/test_contract/Nargo.toml | 2 +- .../src/contracts/token_contract/Nargo.toml | 6 +- .../src/contracts/uniswap_contract/Nargo.toml | 2 +- 111 files changed, 368 insertions(+), 67 deletions(-) create mode 100644 yarn-project/aztec-nr/.gitrepo create mode 100644 yarn-project/aztec-nr/LICENCE create mode 100644 yarn-project/aztec-nr/README.md create mode 100644 yarn-project/aztec-nr/assets/Aztec_banner.png rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/Nargo.toml (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/abi.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/auth.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/constants_gen.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/context.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/entrypoint.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/lib.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/log.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/messaging.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/messaging/l1_to_l2_message.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/messaging/l1_to_l2_message_getter_data.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/lifecycle.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_getter.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_getter_options.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_hash.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_header.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_interface.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/note_viewer_options.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/note/utils.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/arguments.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/call_private_function.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/compute_selector.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/context.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/create_commitment.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/debug_log.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/enqueue_public_function_call.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/get_l1_to_l2_message.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/get_public_key.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/get_secret_key.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/logs.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/notes.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/public_call.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/rand.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/oracle/storage.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/private_call_stack_item.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/public_call_stack_item.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars/immutable_singleton.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars/map.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars/public_state.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars/set.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/state_vars/singleton.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/grumpkin_scalar.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/point.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/type_serialisation.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/type_serialisation/bool_serialisation.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/type_serialisation/field_serialisation.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/type_serialisation/u32_serialisation.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/types/vec.nr (100%) rename yarn-project/{noir-libs/aztec-noir => aztec-nr/aztec}/src/utils.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/easy-private-state/Nargo.toml (81%) rename yarn-project/{noir-libs => aztec-nr}/easy-private-state/src/easy_private_state.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/easy-private-state/src/lib.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/safe-math/Nargo.toml (100%) rename yarn-project/{noir-libs => aztec-nr}/safe-math/src/lib.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/safe-math/src/safe_u120.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/value-note/Nargo.toml (76%) rename yarn-project/{noir-libs => aztec-nr}/value-note/src/balance_utils.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/value-note/src/filter.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/value-note/src/lib.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/value-note/src/utils.nr (100%) rename yarn-project/{noir-libs => aztec-nr}/value-note/src/value_note.nr (100%) diff --git a/.github/workflows/mirror_repos.yml b/.github/workflows/mirror_repos.yml index c3cec86a551b..f93244bbce2a 100644 --- a/.github/workflows/mirror_repos.yml +++ b/.github/workflows/mirror_repos.yml @@ -12,7 +12,7 @@ concurrency: on: schedule: # Run the workflow every night at 2:00 AM UTC. - cron: '0 2 * * *' + - cron: '0 2 * * *' jobs: mirror-to-docs-repo: @@ -77,3 +77,24 @@ jobs: git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]" git push fi + + mirror-to-aztec-nr-repo: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + token: ${{ secrets.AZTEC_BOT_GITHUB_TOKEN }} + - name: Push to aztec-nr repo + run: | + SUBREPO_PATH=yarn-project/aztec-nr + git config --global user.name AztecBot + git config --global user.email tech@aztecprotocol.com + + if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=main; then + git fetch # in case a commit came after this + git rebase origin/master + git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]" + git push + fi \ No newline at end of file diff --git a/build_manifest.json b/build_manifest.json index db71326fe078..0f7316595d73 100644 --- a/build_manifest.json +++ b/build_manifest.json @@ -102,7 +102,7 @@ "^l1-contracts/", "^yarn-project/l1-artifacts/", "^yarn-project/noir-contracts/", - "^yarn-project/noir-libs/", + "^yarn-project/aztec-nr/", "^yarn-project/noir-compiler/", "^yarn-project/yarn-project-base/", "^yarn-project/yarn.lock" @@ -199,7 +199,7 @@ "dockerfile": "noir-contracts/Dockerfile.build", "rebuildPatterns": [ "^yarn-project/noir-contracts/", - "^yarn-project/noir-libs/" + "^yarn-project/aztec-nr/" ] }, "noir-contracts": { @@ -208,7 +208,7 @@ "dockerfile": "noir-contracts/Dockerfile", "rebuildPatterns": [ "^yarn-project/noir-contracts/", - "^yarn-project/noir-libs/" + "^yarn-project/aztec-nr/" ] }, "noir-compiler": { diff --git a/docs/docs/concepts/foundation/accounts/keys.md b/docs/docs/concepts/foundation/accounts/keys.md index 9f7ca23f5818..2fb19d878600 100644 --- a/docs/docs/concepts/foundation/accounts/keys.md +++ b/docs/docs/concepts/foundation/accounts/keys.md @@ -71,7 +71,7 @@ In a future version, encryption keys will be differentiated between incoming and An application in Aztec.nr can access the encryption public key for a given address using the oracle call `get_public_key`, which you can then use for calls such as `emit_encrypted_log`: -#include_code encrypted /yarn-project/noir-libs/value-note/src/utils.nr rust +#include_code encrypted /yarn-project/aztec-nr/value-note/src/utils.nr rust :::info In order to be able to provide the public encryption key for a given address, that public key needs to have been registered in advance. At the moment, there is no broadcasting mechanism for public keys, which means that you will need to manually register all addresses you intend to send encrypted notes to. You can do this via the `registerRecipient` method of the Aztec RPC server, callable either via aztec.js or the CLI. Note that any accounts you own that have been added to the RPC server are automatically registered. @@ -83,7 +83,7 @@ In addition to deriving encryption keys, the privacy master key is used for deri An application in Aztec.nr can request a nullifier from the current user for computing the nullifier of a note via the `get_secret_key` oracle call: -#include_code nullifier /yarn-project/noir-libs/value-note/src/value_note.nr rust +#include_code nullifier /yarn-project/aztec-nr/value-note/src/value_note.nr rust ### Scoped keys diff --git a/docs/docs/dev_docs/contracts/events.md b/docs/docs/dev_docs/contracts/events.md index 1f12b91c8e5b..88eaf3b23960 100644 --- a/docs/docs/dev_docs/contracts/events.md +++ b/docs/docs/dev_docs/contracts/events.md @@ -44,11 +44,11 @@ await aztecRpc.registerRecipient(completeAddress); To emit encrypted logs first import the `emit_encrypted_log` utility function inside your contract: -#include_code encrypted_import /yarn-project/noir-libs/value-note/src/utils.nr rust +#include_code encrypted_import /yarn-project/aztec-nr/value-note/src/utils.nr rust Then you can call the function: -#include_code encrypted /yarn-project/noir-libs/value-note/src/utils.nr rust +#include_code encrypted /yarn-project/aztec-nr/value-note/src/utils.nr rust ### Unencrypted Events diff --git a/docs/docs/dev_docs/contracts/portals/main.md b/docs/docs/dev_docs/contracts/portals/main.md index b1ead86a80e5..67074e53aab8 100644 --- a/docs/docs/dev_docs/contracts/portals/main.md +++ b/docs/docs/dev_docs/contracts/portals/main.md @@ -37,7 +37,7 @@ As time passes, a sequencer will see your tx, the juicy fee provided and include To consume the message, we can use the `consume_l1_to_l2_message` function within the `context` struct. The `msg_key` is the hash of the message produced from the `sendL2Message` call, the `content` is the content of the message, and the `secret` is the pre-image hashed to compute the `secretHash`. -#include_code context_consume_l1_to_l2_message /yarn-project/noir-libs/aztec-noir/src/context.nr rust +#include_code context_consume_l1_to_l2_message /yarn-project/aztec-nr/aztec/src/context.nr rust Computing the `content` might be a little clunky in its current form, as we are still adding a number of bytes utilities. A good example exists within the [Non-native token example](https://github.com/AztecProtocol/aztec-packages/blob/master/yarn-project/noir-contracts/src/contracts/non_native_token_contract/src/hash.nr). @@ -63,7 +63,7 @@ The portal must ensure that the sender is as expected. One way to do this, is to To send a message to L1 from your Aztec contract, you must use the `message_portal` function on the `context`. When messaging to L1, only the `content` is required (as field). -#include_code context_message_portal /yarn-project/noir-libs/aztec-noir/src/context.nr rust +#include_code context_message_portal /yarn-project/aztec-nr/aztec/src/context.nr rust When sending a message from L2 to L1 we don't need to pass recipient, deadline, secret nor fees. Recipient is populated with the attached portal and the remaining values are not needed as the message is inserted into the outbox at the same time as it was included in a block (for the inbox it could be inserted and then only included in rollup block later). diff --git a/docs/docs/dev_docs/contracts/state_variables.md b/docs/docs/dev_docs/contracts/state_variables.md index d11e7fb8b2d2..db6ac3f62894 100644 --- a/docs/docs/dev_docs/contracts/state_variables.md +++ b/docs/docs/dev_docs/contracts/state_variables.md @@ -28,7 +28,7 @@ The BoolSerialisationMethods is part of the Aztec stdlib: It contains methods that instruct its PublicState wrapper how to serialise and deserialise a boolean to and from a Field, which is the data type being saved in the public state tree. -The Aztec stdlib provides serialization methods for various common types. Check [here](https://github.com/AztecProtocol/aztec-packages/blob/master/yarn-project/noir-libs/aztec-noir/src/types/type_serialisation) for the complete list. +The Aztec stdlib provides serialization methods for various common types. Check [here](https://github.com/AztecProtocol/aztec-packages/blob/master/yarn-project/aztec-nr/aztec/src/types/type_serialisation) for the complete list. ### Custom types @@ -36,7 +36,7 @@ It's possible to create a public state for any types. Simply define methods that The methods should be implemented in a struct that conforms to the following interface: -#include_code TypeSerialisationInterface /yarn-project/noir-libs/aztec-noir/src/types/type_serialisation.nr rust +#include_code TypeSerialisationInterface /yarn-project/aztec-nr/aztec/src/types/type_serialisation.nr rust For example, to create a public state for the following type: @@ -118,7 +118,7 @@ Notes are the fundamental elements in the private world. A note should conform to the following interface: -#include_code NoteInterface /yarn-project/noir-libs/aztec-noir/src/note/note_interface.nr rust +#include_code NoteInterface /yarn-project/aztec-nr/aztec/src/note/note_interface.nr rust The interplay between a private state variable and its notes can be confusing. Here's a summary to aid intuition: @@ -243,7 +243,7 @@ Because of this limit, we should always consider using the second argument `Note `NoteGetterOptions` encapsulates a set of configurable options for filtering and retrieving a selection of notes from a database: -#include_code NoteGetterOptions /yarn-project/noir-libs/aztec-noir/src/note/note_getter_options.nr rust +#include_code NoteGetterOptions /yarn-project/aztec-nr/aztec/src/note/note_getter_options.nr rust Developers can design instances of `NoteGetterOptions`, to determine how notes should be filtered and returned to the functions of their smart contracts. diff --git a/docs/docs/dev_docs/contracts/syntax.md b/docs/docs/dev_docs/contracts/syntax.md index a5d5008e78d9..584bdeab7ae4 100644 --- a/docs/docs/dev_docs/contracts/syntax.md +++ b/docs/docs/dev_docs/contracts/syntax.md @@ -2,7 +2,7 @@ [Noir](https://noir-lang.org/) is a language which is agnostic to proof systems and use cases. Rather than baking Aztec-specific keywords and smart contract types directly into Noir (which would break this agnosticism), we have developed a library -- written in Noir -- whose types and methods provide rich smart contract semantics. -On top of [Noir's stdlib](https://noir-lang.org/standard_library/array_methods), we provide [Aztec.nr](https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/noir-libs) for writing contracts on Aztec. +On top of [Noir's stdlib](https://noir-lang.org/standard_library/array_methods), we provide [Aztec.nr](https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/aztec-nr) for writing contracts on Aztec. Aztec.nr contains abstractions which remove the need to understand the low-level Aztec protocol. Notably, it provides: diff --git a/docs/docs/dev_docs/dapps/testing.md b/docs/docs/dev_docs/dapps/testing.md index c8395ae51a68..ec59f1d7516c 100644 --- a/docs/docs/dev_docs/dapps/testing.md +++ b/docs/docs/dev_docs/dapps/testing.md @@ -133,7 +133,7 @@ To query storage directly, you'll need to know the slot you want to access. This Private state in the Aztec Network is represented via sets of [private notes](../../concepts/foundation/state_model.md#private-state). In our token contract example, the balance of a user is represented as a set of unspent value notes, each with their own corresponding numeric value. -#include_code value-note-def yarn-project/noir-libs/value-note/src/value_note.nr rust +#include_code value-note-def yarn-project/aztec-nr/value-note/src/value_note.nr rust We can query the RPC server for all notes encrypted for a given user in a contract slot. For this example, we'll get all notes encrypted for the `owner` user that are stored on the token contract address and on the slot we calculated earlier. To calculate the actual balance, we extract the `value` of each note, which is the first element, and sum them up. diff --git a/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md b/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md index 9bbbbdc3669d..d78a68969fde 100644 --- a/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md +++ b/docs/docs/dev_docs/dapps/tutorials/contract_deployment.md @@ -19,8 +19,8 @@ Then, open the `contracts/private_token/Nargo.toml` configuration file, and add ```toml [dependencies] -aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/noir-aztec" } -value_note = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/value-note" } +aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/aztec-nr/noir-aztec" } +value_note = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/aztec-nr/value-note" } ``` Last, copy-paste the code from the `PrivateToken` contract into `contracts/private_token/main.nr`: diff --git a/docs/docs/dev_docs/getting_started/noir_contracts.md b/docs/docs/dev_docs/getting_started/noir_contracts.md index e6b9e3a96f80..65e27c146430 100644 --- a/docs/docs/dev_docs/getting_started/noir_contracts.md +++ b/docs/docs/dev_docs/getting_started/noir_contracts.md @@ -61,7 +61,7 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/aztec-noir" } +aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/aztec-nr/aztec" } ``` You are now ready to write your own contracts! diff --git a/docs/docs/dev_docs/wallets/writing_an_account_contract.md b/docs/docs/dev_docs/wallets/writing_an_account_contract.md index b1f02e156f7f..4e42ae43efaf 100644 --- a/docs/docs/dev_docs/wallets/writing_an_account_contract.md +++ b/docs/docs/dev_docs/wallets/writing_an_account_contract.md @@ -32,7 +32,7 @@ Public Key: 0x0ede151adaef1cfcc1b3e152ea39f00c5cda3f3857cef00decb049d283672dc71 The important part of this contract is the `entrypoint` function, which will be the first function executed in any transaction originated from this account. This function has two main responsibilities: 1) authenticating the transaction and 2) executing calls. It receives a `payload` with the list of function calls to execute, as well as a signature over that payload. -#include_code entrypoint-struct yarn-project/noir-libs/aztec-noir/src/entrypoint.nr rust +#include_code entrypoint-struct yarn-project/aztec-nr/aztec/src/entrypoint.nr rust :::info Using the `EntrypointPayload` struct is not mandatory. You can package the instructions to be carried out by your account contract however you want. However, the entrypoint payload already provides a set of helper functions, both in Noir and Typescript, that can save you a lot of time when writing a new account contract. @@ -48,7 +48,7 @@ We authenticate the transaction. To do this, we serialise and Pedersen-hash the Last, we execute the calls in the payload struct. The `execute_calls` helper function runs through the private and public calls included in the entrypoint payload and executes them: -#include_code entrypoint-execute-calls yarn-project/noir-libs/aztec-noir/src/entrypoint.nr rust +#include_code entrypoint-execute-calls yarn-project/aztec-nr/aztec/src/entrypoint.nr rust Note the usage of the `_with_packed_args` variant of [`call_public_function` and `call_private_function`](../contracts/functions.md#calling-functions). Due to Noir limitations, we cannot include more than a small number of arguments in a function call. However, we can bypass this restriction by using a hash of the arguments in a function call, which gets automatically expanded to the full set of arguments when the nested call is executed. We call this _argument packing_. diff --git a/yarn-project/aztec-nr/.gitrepo b/yarn-project/aztec-nr/.gitrepo new file mode 100644 index 000000000000..9b54eedeb04f --- /dev/null +++ b/yarn-project/aztec-nr/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/ingydotnet/git-subrepo#readme +; +[subrepo] + remote = git@github.com:AztecProtocol/aztec-nr.git + branch = master + commit = f662901567fa19e205062d84180763f06cddd641 + method = merge + cmdver = 0.4.6 + parent = 8df8fa7351ca79c022e2eb7dddfd7cf0145876df diff --git a/yarn-project/aztec-nr/LICENCE b/yarn-project/aztec-nr/LICENCE new file mode 100644 index 000000000000..7a4a3ea2424c --- /dev/null +++ b/yarn-project/aztec-nr/LICENCE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/yarn-project/aztec-nr/README.md b/yarn-project/aztec-nr/README.md new file mode 100644 index 000000000000..c137de45e0cb --- /dev/null +++ b/yarn-project/aztec-nr/README.md @@ -0,0 +1,66 @@ +
+ + +

Aztec.nr

+ +

+ Aztec Smart Contract Development Framework +

+ +

+ Build Status + Aztec Website + Discord Chat + License +

+
+ + +# Aztec.nr + +`Aztec-nr` is a [Noir](https://noir-lang.org) framework for contract development on [Aztec](aztec.network). + +### Directory Structure +``` +. +├── aztec // The core of the aztec framework +├── easy-private-state // A library for easily creating private state +├── safe-math // A library for safe arithmetic +└── value-note // A library for storing arbitrary values +``` + +## Installing Aztec-nr libraries + +```toml +[package] +name = "your_contract" +authors = ["you! ;) "] +compiler_version = "" +type = "contract" + +[dependencies] +# To install the aztec framework (required to create aztec contracts). +aztec = { git = "https://github.com/AztecProtocol/aztec-nr", tag = "master" , directory = "aztec" } + +# Optional libraries +easy_private_state = { git = "https://github.com/AztecProtocol/aztec-nr", tag = "master" , directory = "easy-private-state" } +safe_math = { git = "https://github.com/AztecProtocol/aztec-nr", tag = "master" , directory = "safe-math" } +value_note = { git = "https://github.com/AztecProtocol/aztec-nr", tag = "master" , directory = "value-note" } +``` + + +## Prerequisites +To use `Aztec.nr` you must have [Noir](https://noir-lang.org/) installed. Noir is a general purpose programming language for creating zero-knowledge-proofs. `Aztec.nr` supercharges the Noir language with Aztec Smart Contract capabilities. + +### Quick Installation +The fastest way to install is with [noirup](https://noir-lang.org/getting_started/nargo_installation#option-1-noirup). + +To use `Aztec-nr` the `aztec` version of `Noir` is required (Note; this version is temporarily required if you would like to use `#[aztec()]` macros). + +Once noirup is installed, you can run the following: +```bash +noirup -v aztec +``` + +For more installation options, please view [Noir's getting started.](https://noir-lang.org/getting_started/nargo_installation) + diff --git a/yarn-project/aztec-nr/assets/Aztec_banner.png b/yarn-project/aztec-nr/assets/Aztec_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..503202966b9ab4495cdc680eab3ed94b641b2dc5 GIT binary patch literal 605722 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 z zFZeoK8JcnZNU|rem)m5Nm8*4y^}|Tf+%jebj%sfQ;L`M21tB$iKm|(XCJdZi;r02z>gepYJYaT<{agSK5R>j`PFOA3% zKKzA3nC`D9`MQe^k2nQfyvIa}teyj%Di_O=pT}ws^U%&0!&}r%Iqqsi8;$;I{gAj_ z6nc9~CO(+^3R7$z=Kf~Zv;|u$25XHbF9e^+)P2!Lu%DBO`Muj2FGdmTbKRcH)(}?P zCA3}0R2Z~)Ru|HykCuGb_?^AG+;`0>A&voRex-Np~HGh28l;DoXzjbEFU(>#DaRtljuD_-N zAxI3K4jkFE+G+3MbiDx-eAO%;5X!{=0lwFss@T4`|0CrCT6?IZvj05N%1P}WogZ

8s2N5ap?1vR`?uSBQKCG6q?8%a`yr%AfA2sJ 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 z z19Ho1;KnI-`B73nog17lE{B}8k=raUg@qIb?sEO4?kIqB^1~Osvukpg{dyo5e~9)c zlPkZJd@dKk0)xMEuEW_u={x3;%e7I4K+XGxvXdVp<;JeA!yDl&KtJRwa-RX8N)-nV zu@{7Ygbr8#aLcx~V6&+)C~r))>7B2A;*F^D?kA);_a1{*82Y5i@Jo+Etfh@J``*{L z7xoxkuukBqN{%8_Q?)Q+uj=u*UuC}CHW^Wq8(H}J={LG>0-q|!C+za~Kt-<5LKyGz zf(uJwthrBYkdoS`e_)vQ+n{cXK;?6B9>P7tsVZrKr2mwO_`L{QWNo!)L)~NmH z3Tpj2AU~%%QA1!x-rQZh2y&(9E<}?VfFU*OLJw~n&Ovl_obO%jCGwE)F|rV?qavA= z05S5P4ok!ha|i4&6E2n3M*8m`31D1Xzq&&C_1s)4+jX<^pHmj0t5%>MuKMmpYTEoi zMb@nVSG21yZk8d0GGAhx1T&#?-&KYDjjYj8Rg9ThM`5K%0>%9xcpl$x4dYzL&$tNp zB@>pR_j3RgnRbIZa&;UDm>m8cFu@rpX6PGm8P5A z&L~6NHYfBz8cyr0#8+=<6317Wo!s`wTy!q8?6ZKKtQ*YmC@3>rSSR|X0{DN1k4>S$ zBch9j$uJ0g&VKYJppMWeo(j!aVMP;^FKn$?2lOUNj~&CZPpFfMp%EyxS=?nF5BcE3Wx)V1R1OERnF=egEz1{u}v6n7oQ@pCl8 zFqQ9vu+E*X~?UDF)53n7RvV5Cf@HQ_w^nV`c06GV>Nd3+C7ugn(OL-%9<+Q zz|ZUzO@U5PURjLOZ38%cqKz-Mh*^O*K~wW3trW=i>_YoZr%CE;jD@O3IqeUvfBrhf z7LJKe$EtRMRD*ECg*|DUU!OkyslnGUAKMS2jO|&TiJ!ZFLt4Ms>9ghOexDlgGi1|h z!4LQiWl6qH?qLibiMSS<+d@$i1L%gGmyRaGt9KZSH<4exKN!s7%vJV+Xc>TbjK~Ga zjxc>50oQuF|9~;1kkwxd-BQ_ky837|)8McKJmjW!-@F98DEkK9;q{OPKGn->oI941 z={6ltOtXYOuO!QfUiM3pIcVN}_wtN968_-yntNmM0E$ZS7mW7n=t{G`r@rrJ%La-b z zeod63v?7WzX!pPXXCOu{q8Dlab|92@HkO((G}ler{XmQerPQ04A_2)4JQ zH&hQRzw?M$+m2TKJJ*BT;nTPN(OiZyOwVLiiEj=dt?f7Q%M@{j4r+^TfBVN`#Ydd` zImiV-#~Z$Vib4n?G&Hj{jv?^R%Z5Ev$I<#=G91{OD)Z3uFa2gNi)ab!yYY{Rc6J}Z zBCDKwc-61a$eL9a9Fx|*Ty_o@0? z;0yBmAem5cRK(wCT}kHG1885Q{D#X;o}DDIyD!_xB0n1XaI}PPL>s3*PXY5rUg!2V zk9r&7Np7PmR$_f+0{5q;FPfK0Q1$i^-5h_c3jbgNhw~_J_vfsLEG-|Zik^t{&%jD7 zt7{p_;Y}*->1r@Y@&r;$K~5f^a9c8Bms#zEyyovn8Y=0-RRIE!bw8EP(XFRE z1bouW6hhe{fIdLsWKdQc3e!pHOIuI(t+I2hdEdg~5$tY_dMGA*xBfmRaFEo6Djm=R zEr8PT=;GeN-#6ROzGF^4JO^}_aG4&99DZTzy!Q)+LjACaK(19%WY(?=G zi*xq_6}r<;B>Q5y$y6So^R#HJ(64I|Q*ygtpDJvqFXtctwq{~LiOgXoq=2tf)ksj> zlB1_Wa`uj6^;Ia9Z8#@uMpi`|(9qEa`|LSq{wyN$J&SScy2bs4#A0{6?CXujO(~p! zjhkZ8--!9eul*?q1A6EUvJLn{YWVgk`VT+%v3j`*}_(* z-%xN$;QOMN?1@?jR#W(6$heHxAfZ2wLrIGj7nUF~c-R|R*?aFeRC9KGpPq;ro0Z7A zsO+%u>;(R0ZI$J-H)X>+4p@(`#owTCoqoai)4(hJhYK^xOxl;UkdYTpBIi3g6-(J* z(eH_mqSqU!jI0yVk_Fy6Qmx|a&uDr_i|dG)3US7(UkGlFE=QKuo^RwAT2FPlcMBiW zl=Po_A|{``_+xCs-oniuQuMKq<>f#mP5TFa64U#jr{eEI__VG}+@;J?Q|qA3;51xv zwN_o4*mZK}+uf0=>Azs>idW({U=b%Sp@A2Bi=OYri1SOLuCb|V-ci;pW2JCf|* zk=IqYRdXxaDOOikkyG5>W60atsqzH@!27!M=XnO1)E>BoejdD z&wb$#?+fqmCCUK)xBCyLJa2u70xn(1mjSMlc=4|gWMC>)T6BdFKtFpuaasr3h+Ck5 z+@V5b=JB=~zi~)@@}ec&BoQrRe(?+&dVez_gG3dECH0>^zGIPTOx<8h(JK{bbei$y zb*SigPg#29`nwW;QT$?Z-jKhoK?qrs=w5aAxV?mbX4xMPHL5fXC50FP)ZbTH7*U0W zP@afw_5BjsJ3&jF8`7R;NjL0-6L7J^;M+LCzm{7UIbpZT^fo+g^MBVJD!a>=o|Ne# zR<0H6qe&;&)S*0i=IJvv^>=9E_OAwVOy@WAJ;0--P_f8D*z0&m@Amo001HP)MDw*m zm5VFgk6{}h&gdjIJirB_{D4j`;YzH@+j3+NX~ok@3zJ}$%0Db~PcWu%MqSC5egg$A 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�)WTYVy| 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 literal 0 HcmV?d00001 diff --git a/yarn-project/noir-libs/aztec-noir/Nargo.toml b/yarn-project/aztec-nr/aztec/Nargo.toml similarity index 100% rename from yarn-project/noir-libs/aztec-noir/Nargo.toml rename to yarn-project/aztec-nr/aztec/Nargo.toml diff --git a/yarn-project/noir-libs/aztec-noir/src/abi.nr b/yarn-project/aztec-nr/aztec/src/abi.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/abi.nr rename to yarn-project/aztec-nr/aztec/src/abi.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/auth.nr b/yarn-project/aztec-nr/aztec/src/auth.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/auth.nr rename to yarn-project/aztec-nr/aztec/src/auth.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/constants_gen.nr b/yarn-project/aztec-nr/aztec/src/constants_gen.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/constants_gen.nr rename to yarn-project/aztec-nr/aztec/src/constants_gen.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/context.nr b/yarn-project/aztec-nr/aztec/src/context.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/context.nr rename to yarn-project/aztec-nr/aztec/src/context.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/entrypoint.nr b/yarn-project/aztec-nr/aztec/src/entrypoint.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/entrypoint.nr rename to yarn-project/aztec-nr/aztec/src/entrypoint.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/lib.nr b/yarn-project/aztec-nr/aztec/src/lib.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/lib.nr rename to yarn-project/aztec-nr/aztec/src/lib.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/log.nr b/yarn-project/aztec-nr/aztec/src/log.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/log.nr rename to yarn-project/aztec-nr/aztec/src/log.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/messaging.nr b/yarn-project/aztec-nr/aztec/src/messaging.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/messaging.nr rename to yarn-project/aztec-nr/aztec/src/messaging.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/messaging/l1_to_l2_message.nr b/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/messaging/l1_to_l2_message.nr rename to yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/messaging/l1_to_l2_message_getter_data.nr b/yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/messaging/l1_to_l2_message_getter_data.nr rename to yarn-project/aztec-nr/aztec/src/messaging/l1_to_l2_message_getter_data.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note.nr b/yarn-project/aztec-nr/aztec/src/note.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note.nr rename to yarn-project/aztec-nr/aztec/src/note.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/lifecycle.nr b/yarn-project/aztec-nr/aztec/src/note/lifecycle.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/lifecycle.nr rename to yarn-project/aztec-nr/aztec/src/note/lifecycle.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_getter.nr b/yarn-project/aztec-nr/aztec/src/note/note_getter.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_getter.nr rename to yarn-project/aztec-nr/aztec/src/note/note_getter.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_getter_options.nr b/yarn-project/aztec-nr/aztec/src/note/note_getter_options.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_getter_options.nr rename to yarn-project/aztec-nr/aztec/src/note/note_getter_options.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_hash.nr b/yarn-project/aztec-nr/aztec/src/note/note_hash.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_hash.nr rename to yarn-project/aztec-nr/aztec/src/note/note_hash.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_header.nr b/yarn-project/aztec-nr/aztec/src/note/note_header.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_header.nr rename to yarn-project/aztec-nr/aztec/src/note/note_header.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_interface.nr b/yarn-project/aztec-nr/aztec/src/note/note_interface.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_interface.nr rename to yarn-project/aztec-nr/aztec/src/note/note_interface.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/note_viewer_options.nr b/yarn-project/aztec-nr/aztec/src/note/note_viewer_options.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/note_viewer_options.nr rename to yarn-project/aztec-nr/aztec/src/note/note_viewer_options.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/note/utils.nr b/yarn-project/aztec-nr/aztec/src/note/utils.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/note/utils.nr rename to yarn-project/aztec-nr/aztec/src/note/utils.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle.nr b/yarn-project/aztec-nr/aztec/src/oracle.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle.nr rename to yarn-project/aztec-nr/aztec/src/oracle.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/arguments.nr b/yarn-project/aztec-nr/aztec/src/oracle/arguments.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/arguments.nr rename to yarn-project/aztec-nr/aztec/src/oracle/arguments.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/call_private_function.nr b/yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/call_private_function.nr rename to yarn-project/aztec-nr/aztec/src/oracle/call_private_function.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/compute_selector.nr b/yarn-project/aztec-nr/aztec/src/oracle/compute_selector.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/compute_selector.nr rename to yarn-project/aztec-nr/aztec/src/oracle/compute_selector.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/context.nr b/yarn-project/aztec-nr/aztec/src/oracle/context.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/context.nr rename to yarn-project/aztec-nr/aztec/src/oracle/context.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/create_commitment.nr b/yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/create_commitment.nr rename to yarn-project/aztec-nr/aztec/src/oracle/create_commitment.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/debug_log.nr b/yarn-project/aztec-nr/aztec/src/oracle/debug_log.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/debug_log.nr rename to yarn-project/aztec-nr/aztec/src/oracle/debug_log.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/enqueue_public_function_call.nr b/yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/enqueue_public_function_call.nr rename to yarn-project/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/get_l1_to_l2_message.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/get_l1_to_l2_message.nr rename to yarn-project/aztec-nr/aztec/src/oracle/get_l1_to_l2_message.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/get_public_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/get_public_key.nr rename to yarn-project/aztec-nr/aztec/src/oracle/get_public_key.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/get_secret_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/get_secret_key.nr rename to yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/logs.nr b/yarn-project/aztec-nr/aztec/src/oracle/logs.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/logs.nr rename to yarn-project/aztec-nr/aztec/src/oracle/logs.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/notes.nr b/yarn-project/aztec-nr/aztec/src/oracle/notes.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/notes.nr rename to yarn-project/aztec-nr/aztec/src/oracle/notes.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/public_call.nr b/yarn-project/aztec-nr/aztec/src/oracle/public_call.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/public_call.nr rename to yarn-project/aztec-nr/aztec/src/oracle/public_call.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/rand.nr b/yarn-project/aztec-nr/aztec/src/oracle/rand.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/rand.nr rename to yarn-project/aztec-nr/aztec/src/oracle/rand.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/oracle/storage.nr b/yarn-project/aztec-nr/aztec/src/oracle/storage.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/oracle/storage.nr rename to yarn-project/aztec-nr/aztec/src/oracle/storage.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/private_call_stack_item.nr b/yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/private_call_stack_item.nr rename to yarn-project/aztec-nr/aztec/src/private_call_stack_item.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/public_call_stack_item.nr b/yarn-project/aztec-nr/aztec/src/public_call_stack_item.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/public_call_stack_item.nr rename to yarn-project/aztec-nr/aztec/src/public_call_stack_item.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars.nr b/yarn-project/aztec-nr/aztec/src/state_vars.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars.nr rename to yarn-project/aztec-nr/aztec/src/state_vars.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars/immutable_singleton.nr b/yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars/immutable_singleton.nr rename to yarn-project/aztec-nr/aztec/src/state_vars/immutable_singleton.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars/map.nr b/yarn-project/aztec-nr/aztec/src/state_vars/map.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars/map.nr rename to yarn-project/aztec-nr/aztec/src/state_vars/map.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars/public_state.nr b/yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars/public_state.nr rename to yarn-project/aztec-nr/aztec/src/state_vars/public_state.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars/set.nr b/yarn-project/aztec-nr/aztec/src/state_vars/set.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars/set.nr rename to yarn-project/aztec-nr/aztec/src/state_vars/set.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/state_vars/singleton.nr b/yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/state_vars/singleton.nr rename to yarn-project/aztec-nr/aztec/src/state_vars/singleton.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types.nr b/yarn-project/aztec-nr/aztec/src/types.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types.nr rename to yarn-project/aztec-nr/aztec/src/types.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/grumpkin_scalar.nr b/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/grumpkin_scalar.nr rename to yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/point.nr b/yarn-project/aztec-nr/aztec/src/types/point.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/point.nr rename to yarn-project/aztec-nr/aztec/src/types/point.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/type_serialisation.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialisation.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/type_serialisation.nr rename to yarn-project/aztec-nr/aztec/src/types/type_serialisation.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/bool_serialisation.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialisation/bool_serialisation.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/bool_serialisation.nr rename to yarn-project/aztec-nr/aztec/src/types/type_serialisation/bool_serialisation.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/field_serialisation.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialisation/field_serialisation.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/field_serialisation.nr rename to yarn-project/aztec-nr/aztec/src/types/type_serialisation/field_serialisation.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/u32_serialisation.nr b/yarn-project/aztec-nr/aztec/src/types/type_serialisation/u32_serialisation.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/type_serialisation/u32_serialisation.nr rename to yarn-project/aztec-nr/aztec/src/types/type_serialisation/u32_serialisation.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/types/vec.nr b/yarn-project/aztec-nr/aztec/src/types/vec.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/types/vec.nr rename to yarn-project/aztec-nr/aztec/src/types/vec.nr diff --git a/yarn-project/noir-libs/aztec-noir/src/utils.nr b/yarn-project/aztec-nr/aztec/src/utils.nr similarity index 100% rename from yarn-project/noir-libs/aztec-noir/src/utils.nr rename to yarn-project/aztec-nr/aztec/src/utils.nr diff --git a/yarn-project/noir-libs/easy-private-state/Nargo.toml b/yarn-project/aztec-nr/easy-private-state/Nargo.toml similarity index 81% rename from yarn-project/noir-libs/easy-private-state/Nargo.toml rename to yarn-project/aztec-nr/easy-private-state/Nargo.toml index eef8798d8c85..c6364218f27d 100644 --- a/yarn-project/noir-libs/easy-private-state/Nargo.toml +++ b/yarn-project/aztec-nr/easy-private-state/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.7.1" type = "lib" [dependencies] -aztec = { path = "../aztec-noir" } +aztec = { path = "../aztec" } value_note = { path = "../value-note" } \ No newline at end of file diff --git a/yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr b/yarn-project/aztec-nr/easy-private-state/src/easy_private_state.nr similarity index 100% rename from yarn-project/noir-libs/easy-private-state/src/easy_private_state.nr rename to yarn-project/aztec-nr/easy-private-state/src/easy_private_state.nr diff --git a/yarn-project/noir-libs/easy-private-state/src/lib.nr b/yarn-project/aztec-nr/easy-private-state/src/lib.nr similarity index 100% rename from yarn-project/noir-libs/easy-private-state/src/lib.nr rename to yarn-project/aztec-nr/easy-private-state/src/lib.nr diff --git a/yarn-project/noir-libs/safe-math/Nargo.toml b/yarn-project/aztec-nr/safe-math/Nargo.toml similarity index 100% rename from yarn-project/noir-libs/safe-math/Nargo.toml rename to yarn-project/aztec-nr/safe-math/Nargo.toml diff --git a/yarn-project/noir-libs/safe-math/src/lib.nr b/yarn-project/aztec-nr/safe-math/src/lib.nr similarity index 100% rename from yarn-project/noir-libs/safe-math/src/lib.nr rename to yarn-project/aztec-nr/safe-math/src/lib.nr diff --git a/yarn-project/noir-libs/safe-math/src/safe_u120.nr b/yarn-project/aztec-nr/safe-math/src/safe_u120.nr similarity index 100% rename from yarn-project/noir-libs/safe-math/src/safe_u120.nr rename to yarn-project/aztec-nr/safe-math/src/safe_u120.nr diff --git a/yarn-project/noir-libs/value-note/Nargo.toml b/yarn-project/aztec-nr/value-note/Nargo.toml similarity index 76% rename from yarn-project/noir-libs/value-note/Nargo.toml rename to yarn-project/aztec-nr/value-note/Nargo.toml index 7f527d67f21c..d0e7bb524610 100644 --- a/yarn-project/noir-libs/value-note/Nargo.toml +++ b/yarn-project/aztec-nr/value-note/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.7.1" type = "lib" [dependencies] -aztec = { path = "../aztec-noir" } \ No newline at end of file +aztec = { path = "../aztec" } \ No newline at end of file diff --git a/yarn-project/noir-libs/value-note/src/balance_utils.nr b/yarn-project/aztec-nr/value-note/src/balance_utils.nr similarity index 100% rename from yarn-project/noir-libs/value-note/src/balance_utils.nr rename to yarn-project/aztec-nr/value-note/src/balance_utils.nr diff --git a/yarn-project/noir-libs/value-note/src/filter.nr b/yarn-project/aztec-nr/value-note/src/filter.nr similarity index 100% rename from yarn-project/noir-libs/value-note/src/filter.nr rename to yarn-project/aztec-nr/value-note/src/filter.nr diff --git a/yarn-project/noir-libs/value-note/src/lib.nr b/yarn-project/aztec-nr/value-note/src/lib.nr similarity index 100% rename from yarn-project/noir-libs/value-note/src/lib.nr rename to yarn-project/aztec-nr/value-note/src/lib.nr diff --git a/yarn-project/noir-libs/value-note/src/utils.nr b/yarn-project/aztec-nr/value-note/src/utils.nr similarity index 100% rename from yarn-project/noir-libs/value-note/src/utils.nr rename to yarn-project/aztec-nr/value-note/src/utils.nr diff --git a/yarn-project/noir-libs/value-note/src/value_note.nr b/yarn-project/aztec-nr/value-note/src/value_note.nr similarity index 100% rename from yarn-project/noir-libs/value-note/src/value_note.nr rename to yarn-project/aztec-nr/value-note/src/value_note.nr diff --git a/yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts b/yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts index 56bc26c92073..6d41291437bd 100644 --- a/yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts +++ b/yarn-project/aztec.js/src/account/entrypoint/entrypoint_payload.ts @@ -5,7 +5,7 @@ import { FunctionCall, PackedArguments, emptyFunctionCall } from '@aztec/types'; import partition from 'lodash.partition'; -// These must match the values defined in yarn-project/noir-libs/aztec-noir/src/entrypoint.nr +// These must match the values defined in yarn-project/aztec-nr/aztec/src/entrypoint.nr export const ACCOUNT_MAX_PRIVATE_CALLS = 2; export const ACCOUNT_MAX_PUBLIC_CALLS = 2; diff --git a/yarn-project/aztec.js/src/utils/cheat_codes.ts b/yarn-project/aztec.js/src/utils/cheat_codes.ts index d5e644e6ff49..fc3fe96c080e 100644 --- a/yarn-project/aztec.js/src/utils/cheat_codes.ts +++ b/yarn-project/aztec.js/src/utils/cheat_codes.ts @@ -234,7 +234,7 @@ export class AztecCheatCodes { */ public computeSlotInMap(baseSlot: Fr | bigint, key: Fr | bigint | AztecAddress): Fr { // Based on `at` function in - // aztec3-packages/yarn-project/noir-libs/aztec-noir/src/state_vars/map.nr + // aztec3-packages/yarn-project/aztec-nr/aztec/src/state_vars/map.nr return Fr.fromBuffer( pedersenPlookupCommitInputs( this.wasm, diff --git a/yarn-project/circuits.js/src/cbind/constants.in.ts b/yarn-project/circuits.js/src/cbind/constants.in.ts index 68bf902704bb..300e676a207e 100644 --- a/yarn-project/circuits.js/src/cbind/constants.in.ts +++ b/yarn-project/circuits.js/src/cbind/constants.in.ts @@ -39,7 +39,7 @@ async function main(): Promise { processEnumNoir(privateStateNoteGeneratorIndexEnum, 'PRIVATE_STATE_NOTE_GENERATOR_INDEX__') + processEnumNoir(privateStateTypeEnum, 'PRIVATE_STATE_TYPE__'); - const noirTargetPath = join(__dirname, '../../../noir-libs/aztec-noir/src/constants_gen.nr'); + const noirTargetPath = join(__dirname, '../../../aztec-nr/aztec/src/constants_gen.nr'); fs.writeFileSync(noirTargetPath, resultNoir); // Solidity diff --git a/yarn-project/noir-contracts/README.md b/yarn-project/noir-contracts/README.md index 33d3ea1518b0..7a227dddf9b8 100644 --- a/yarn-project/noir-contracts/README.md +++ b/yarn-project/noir-contracts/README.md @@ -122,7 +122,7 @@ It has prebuilt binaries and is super easy to install using `noirup` compiler_version = "0.7.1" [dependencies] - aztec = { path = "../../../../noir-libs/aztec-noir" } + aztec = { path = "../../../../aztec-nr/aztec" } ``` 4. Replace the content of the generated `example_contract/src/main.nr` file with your contract code. diff --git a/yarn-project/noir-contracts/scripts/get_all_libraries.sh b/yarn-project/noir-contracts/scripts/get_all_libraries.sh index e1aa684e3faf..3220187ae3c1 100755 --- a/yarn-project/noir-contracts/scripts/get_all_libraries.sh +++ b/yarn-project/noir-contracts/scripts/get_all_libraries.sh @@ -1,3 +1,3 @@ #!/bin/bash -# Utility to get the names of all noir libaries located in ../noir-libs -echo $(ls -d ../noir-libs/*/Nargo.toml | sed -r "s/..\\/noir-libs\\/(.+)\\/Nargo.toml/\\1/") \ No newline at end of file +# Utility to get the names of all noir libaries located in ../aztec-nr +echo $(ls -d ../aztec-nr/*/Nargo.toml | sed -r "s/..\\/aztec-nr\\/(.+)\\/Nargo.toml/\\1/") \ No newline at end of file diff --git a/yarn-project/noir-contracts/scripts/nargo_test.sh b/yarn-project/noir-contracts/scripts/nargo_test.sh index 5635759ff730..8468c19f4928 100755 --- a/yarn-project/noir-contracts/scripts/nargo_test.sh +++ b/yarn-project/noir-contracts/scripts/nargo_test.sh @@ -38,7 +38,7 @@ test() { nargo test --package ${PROJECT_NAME}_contract else echo "Testing library $PROJECT_NAME..." - cd ../noir-libs/$PROJECT_NAME + cd ../aztec-nr/$PROJECT_NAME nargo test fi } diff --git a/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml index 58853dc1a570..566a99dc4887 100644 --- a/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/card_game_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/child_contract/Nargo.toml index 013af3ce22e7..fe50f6194368 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/child_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/docs_example_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/docs_example_contract/Nargo.toml index 7826fffbf0d0..f5870a5a7352 100644 --- a/yarn-project/noir-contracts/src/contracts/docs_example_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/docs_example_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/Nargo.toml index 4b8208cc51be..e8651b9783af 100644 --- a/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/easy_private_token_contract/Nargo.toml @@ -5,6 +5,6 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} -easy_private_state = { path = "../../../../noir-libs/easy-private-state"} \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} +easy_private_state = { path = "../../../../aztec-nr/easy-private-state"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/Nargo.toml index 999b75a218a6..b0e030b78080 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/escrow_contract/Nargo.toml index 4077357a075c..6278ae9ddfbb 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/import_test_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/import_test_contract/Nargo.toml index 21840bab59bb..a00b14498ded 100644 --- a/yarn-project/noir-contracts/src/contracts/import_test_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/import_test_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml index 8233a8c530c6..dbdd8a1c4b2f 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -safe_math = { path = "../../../../noir-libs/safe-math" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +safe_math = { path = "../../../../aztec-nr/safe-math" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/Nargo.toml index 86574e53fc14..cccba64b2ea0 100644 --- a/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/multi_transfer_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/native_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/native_token_contract/Nargo.toml index 42a0a9313a4b..05cf9a92810c 100644 --- a/yarn-project/noir-contracts/src/contracts/native_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/native_token_contract/Nargo.toml @@ -5,6 +5,6 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} non_native = { path = "../non_native_token_contract"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/Nargo.toml index d6c7fef03e18..5e51ed65b25b 100644 --- a/yarn-project/noir-contracts/src/contracts/non_native_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/non_native_token_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/parent_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/parent_contract/Nargo.toml index 850b3ad14e5b..bde7ef065d04 100644 --- a/yarn-project/noir-contracts/src/contracts/parent_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/parent_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/Nargo.toml index 1c0e84969da3..c692b32fad39 100644 --- a/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/pending_commitments_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} diff --git a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/Nargo.toml index 4a8af37b776e..6b07ad277f4c 100644 --- a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/price_feed_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/price_feed_contract/Nargo.toml index be6246ac397b..b414ff04bf76 100644 --- a/yarn-project/noir-contracts/src/contracts/price_feed_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/price_feed_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/Nargo.toml index 9f21c40d77ee..c41c12b43510 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/private_token_airdrop_contract/Nargo.toml @@ -5,5 +5,5 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/private_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/private_token_contract/Nargo.toml index 0eb35564eecc..f3e29ac1bf52 100644 --- a/yarn-project/noir-contracts/src/contracts/private_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/private_token_contract/Nargo.toml @@ -7,6 +7,6 @@ type = "contract" [dependencies] # highlight-next-line:importing-aztec -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} # docs:end:importing-aztec \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/public_token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/public_token_contract/Nargo.toml index 04489c04c7ed..c3098dda9ee1 100644 --- a/yarn-project/noir-contracts/src/contracts/public_token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/public_token_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/Nargo.toml index 84c123fadee5..4ac82f6b7e6e 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml index 77bd89399b3f..9ff8c9659535 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/schnorr_auth_witness_account_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/Nargo.toml index 218d93ac79dc..586e246467dd 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/schnorr_hardcoded_account_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/Nargo.toml index d1eff41f9ae9..d02343f77720 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/schnorr_single_key_account_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/test_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/test_contract/Nargo.toml index 1d564c16ddd4..c4818f6ba32d 100644 --- a/yarn-project/noir-contracts/src/contracts/test_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/test_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/token_contract/Nargo.toml index cece7de949c5..6bc979091721 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/token_contract/Nargo.toml @@ -5,6 +5,6 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } -value_note = { path = "../../../../noir-libs/value-note"} -safe_math = { path = "../../../../noir-libs/safe-math" } \ No newline at end of file +aztec = { path = "../../../../aztec-nr/aztec" } +value_note = { path = "../../../../aztec-nr/value-note"} +safe_math = { path = "../../../../aztec-nr/safe-math" } \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/contracts/uniswap_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/uniswap_contract/Nargo.toml index 21daac464fdb..110b8eb98fe4 100644 --- a/yarn-project/noir-contracts/src/contracts/uniswap_contract/Nargo.toml +++ b/yarn-project/noir-contracts/src/contracts/uniswap_contract/Nargo.toml @@ -5,4 +5,4 @@ compiler_version = "0.1" type = "contract" [dependencies] -aztec = { path = "../../../../noir-libs/aztec-noir" } +aztec = { path = "../../../../aztec-nr/aztec" } From c46b3c8f848e7ff240eb466fa2f3f8aad96dc328 Mon Sep 17 00:00:00 2001 From: Lasse Herskind <16536249+LHerskind@users.noreply.github.com> Date: Wed, 13 Sep 2023 23:25:56 +0100 Subject: [PATCH 04/25] refactor: replace native token in lending contract (#2276) Fixes #2275. - Moves simulators into a separate simulator folder for easier access from other testfiles. - Refactors lending tests to be more similar to the token tests running "invariant" checks on `afterEach` - Burns borrowed asset when repaying --- .../src/e2e_lending_contract.test.ts | 744 +++++++----------- .../end-to-end/src/e2e_token_contract.test.ts | 103 +-- .../end-to-end/src/simulators/index.ts | 2 + .../src/simulators/lending_simulator.ts | 187 +++++ .../src/simulators/token_simulator.ts | 93 +++ .../lending_contract/src/interfaces.nr | 38 +- .../contracts/lending_contract/src/main.nr | 32 +- 7 files changed, 598 insertions(+), 601 deletions(-) create mode 100644 yarn-project/end-to-end/src/simulators/index.ts create mode 100644 yarn-project/end-to-end/src/simulators/lending_simulator.ts create mode 100644 yarn-project/end-to-end/src/simulators/token_simulator.ts diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index efc5b8843d41..d9b31c0315eb 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -4,21 +4,30 @@ import { Account, AuthWitnessAccountContract, AuthWitnessEntrypointWallet, - AztecAddress, CheatCodes, Fr, IAuthWitnessAccountEntrypoint, + SentTx, computeMessageSecretHash, } from '@aztec/aztec.js'; import { CircuitsWasm, CompleteAddress, FunctionSelector, GeneratorIndex, GrumpkinScalar } from '@aztec/circuits.js'; -import { pedersenPlookupCommitInputs, pedersenPlookupCompressWithHashIndex } from '@aztec/circuits.js/barretenberg'; +import { pedersenPlookupCompressWithHashIndex } from '@aztec/circuits.js/barretenberg'; import { DebugLogger } from '@aztec/foundation/log'; -import { LendingContract, NativeTokenContract, PriceFeedContract } from '@aztec/noir-contracts/types'; +import { + LendingContract, + PriceFeedContract, + SchnorrAuthWitnessAccountContract, + TokenContract, +} from '@aztec/noir-contracts/types'; import { AztecRPC, TxStatus } from '@aztec/types'; +import { jest } from '@jest/globals'; + import { setup } from './fixtures/utils.js'; +import { LendingAccount, LendingSimulator, TokenSimulator } from './simulators/index.js'; describe('e2e_lending_contract', () => { + jest.setTimeout(100_000); let aztecNode: AztecNodeService | undefined; let aztecRpcServer: AztecRPC; let wallet: AuthWitnessEntrypointWallet; @@ -26,83 +35,105 @@ describe('e2e_lending_contract', () => { let logger: DebugLogger; let cc: CheatCodes; + const TIME_JUMP = 100; + + let lendingContract: LendingContract; + let priceFeedContract: PriceFeedContract; + let collateralAsset: TokenContract; + let stableCoin: TokenContract; - const WAD = 10n ** 18n; - const BASE = 10n ** 9n; + let lendingAccount: LendingAccount; + let lendingSim: LendingSimulator; + + const waitForSuccess = async (tx: SentTx) => { + const receipt = await tx.wait(); + expect(receipt.status).toBe(TxStatus.MINED); + return receipt; + }; - const deployContracts = async (owner: AztecAddress) => { + const deployContracts = async () => { let lendingContract: LendingContract; let priceFeedContract: PriceFeedContract; - let collateralAsset: NativeTokenContract; - let stableCoin: NativeTokenContract; + let collateralAsset: TokenContract; + let stableCoin: TokenContract; { logger(`Deploying price feed contract...`); - const tx = PriceFeedContract.deploy(wallet).send(); - logger(`Tx sent with hash ${await tx.getTxHash()}`); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); + const receipt = await waitForSuccess(PriceFeedContract.deploy(wallet).send()); logger(`Price feed deployed to ${receipt.contractAddress}`); priceFeedContract = await PriceFeedContract.at(receipt.contractAddress!, wallet); } { logger(`Deploying collateral asset feed contract...`); - const tx = NativeTokenContract.deploy(wallet, 10000n, owner).send(); - logger(`Tx sent with hash ${await tx.getTxHash()}`); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); + const receipt = await waitForSuccess(TokenContract.deploy(wallet).send()); logger(`Collateral asset deployed to ${receipt.contractAddress}`); - collateralAsset = await NativeTokenContract.at(receipt.contractAddress!, wallet); + collateralAsset = await TokenContract.at(receipt.contractAddress!, wallet); } { logger(`Deploying stable coin contract...`); - const tx = NativeTokenContract.deploy(wallet, 0n, owner).send(); - logger(`Tx sent with hash ${await tx.getTxHash()}`); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); + const receipt = await waitForSuccess(TokenContract.deploy(wallet).send()); logger(`Stable coin asset deployed to ${receipt.contractAddress}`); - stableCoin = await NativeTokenContract.at(receipt.contractAddress!, wallet); + stableCoin = await TokenContract.at(receipt.contractAddress!, wallet); } { logger(`Deploying L2 public contract...`); - const tx = LendingContract.deploy(wallet).send(); - logger(`Tx sent with hash ${await tx.getTxHash()}`); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); + const receipt = await waitForSuccess(LendingContract.deploy(wallet).send()); logger(`CDP deployed at ${receipt.contractAddress}`); lendingContract = await LendingContract.at(receipt.contractAddress!, wallet); } + + await waitForSuccess(collateralAsset.methods._initialize(accounts[0]).send()); + await waitForSuccess(collateralAsset.methods.set_minter({ address: lendingContract.address }, 1).send()); + await waitForSuccess(stableCoin.methods._initialize(accounts[0]).send()); + await waitForSuccess(stableCoin.methods.set_minter({ address: lendingContract.address }, 1).send()); + return { priceFeedContract, lendingContract, collateralAsset, stableCoin }; }; - beforeEach(async () => { + beforeAll(async () => { ({ aztecNode, aztecRpcServer, logger, cheatCodes: cc } = await setup(0)); - { - const privateKey = GrumpkinScalar.random(); - const account = new Account(aztecRpcServer, privateKey, new AuthWitnessAccountContract(privateKey)); - const deployTx = await account.deploy(); - await deployTx.wait({ interval: 0.1 }); - wallet = new AuthWitnessEntrypointWallet( - aztecRpcServer, - (await account.getEntrypoint()) as unknown as IAuthWitnessAccountEntrypoint, - await account.getCompleteAddress(), - ); - accounts = await wallet.getAccounts(); - } - }, 100_000); + const privateKey = GrumpkinScalar.random(); + const account = new Account(aztecRpcServer, privateKey, new AuthWitnessAccountContract(privateKey)); + const deployTx = await account.deploy(); + await deployTx.wait({ interval: 0.1 }); + wallet = new AuthWitnessEntrypointWallet( + aztecRpcServer, + (await account.getEntrypoint()) as unknown as IAuthWitnessAccountEntrypoint, + await account.getCompleteAddress(), + ); + accounts = await wallet.getAccounts(); - afterEach(async () => { + ({ lendingContract, priceFeedContract, collateralAsset, stableCoin } = await deployContracts()); + lendingAccount = new LendingAccount(accounts[0].address, new Fr(42)); + + // Also specified in `noir-contracts/src/contracts/lending_contract/src/main.nr` + const rate = 1268391679n; + lendingSim = new LendingSimulator( + cc, + lendingAccount, + rate, + lendingContract, + new TokenSimulator(collateralAsset, logger, [lendingContract.address, ...accounts.map(a => a.address)]), + new TokenSimulator(stableCoin, logger, [lendingContract.address, ...accounts.map(a => a.address)]), + ); + }, 200_000); + + afterAll(async () => { await aztecNode?.stop(); if (aztecRpcServer instanceof AztecRPCServer) { await aztecRpcServer?.stop(); } }); + afterEach(async () => { + await lendingSim.check(); + }); + const hashPayload = async (payload: Fr[]) => { return pedersenPlookupCompressWithHashIndex( await CircuitsWasm.get(), @@ -111,265 +142,59 @@ describe('e2e_lending_contract', () => { ); }; - // Fetch a storage snapshot from the contract that we can use to compare between transitions. - const getStorageSnapshot = async ( - lendingContract: LendingContract, - collateralAsset: NativeTokenContract, - stableCoin: NativeTokenContract, - account: LendingAccount, - ) => { - logger('Fetching storage snapshot 📸 '); - const accountKey = await account.key(); - - const tot = await lendingContract.methods.get_asset(0).view(); - const privatePos = await lendingContract.methods.get_position(accountKey).view(); - const publicPos = await lendingContract.methods.get_position(account.address.toField()).view(); - const totalCollateral = await collateralAsset.methods.public_balance_of(lendingContract.address).view(); - - return { - interestAccumulator: new Fr(tot['interest_accumulator']), - lastUpdatedTs: new Fr(tot['last_updated_ts']), - privateCollateral: new Fr(privatePos['collateral']), - privateStaticDebt: new Fr(privatePos['static_debt']), - privateDebt: new Fr(privatePos['debt']), - publicCollateral: new Fr(publicPos['collateral']), - publicStaticDebt: new Fr(publicPos['static_debt']), - publicDebt: new Fr(publicPos['debt']), - totalCollateral: new Fr(totalCollateral), - stableCoinLending: new Fr(await stableCoin.methods.public_balance_of(lendingContract.address).view()), - stableCoinPublic: new Fr(await stableCoin.methods.public_balance_of(account.address).view()), - stableCoinPrivate: new Fr(await stableCoin.methods.balance_of(account.address).view()), - stableCoinSupply: new Fr(await stableCoin.methods.total_supply().view()), - }; - }; - - // Convenience struct to hold an account's address and secret that can easily be passed around. - // Contains utilities to compute the "key" for private holdings in the public state. - class LendingAccount { - public readonly address: AztecAddress; - public readonly secret: Fr; - - constructor(address: AztecAddress, secret: Fr) { - this.address = address; - this.secret = secret; - } - - public async key(): Promise { - return Fr.fromBuffer( - pedersenPlookupCommitInputs( - await CircuitsWasm.get(), - [this.address, this.secret].map(f => f.toBuffer()), - ), - ); - } - } - - const muldivDown = (a: bigint, b: bigint, c: bigint) => (a * b) / c; - - const muldivUp = (a: bigint, b: bigint, c: bigint) => { - const adder = (a * b) % c > 0n ? 1n : 0n; - return muldivDown(a, b, c) + adder; - }; - - const computeMultiplier = (rate: bigint, dt: bigint) => { - if (dt == 0n) { - return BASE; - } - - const expMinusOne = dt - 1n; - const expMinusTwo = dt > 2 ? dt - 2n : 0n; - - const basePowerTwo = muldivDown(rate, rate, WAD); - const basePowerThree = muldivDown(basePowerTwo, rate, WAD); - - const temp = dt * expMinusOne; - const secondTerm = muldivDown(temp, basePowerTwo, 2n); - const thirdTerm = muldivDown(temp * expMinusTwo, basePowerThree, 6n); - - const offset = (dt * rate + secondTerm + thirdTerm) / (WAD / BASE); - - return BASE + offset; - }; - - // Helper class that emulates the logic of the lending contract. Used to have a "twin" to check values against. - class LendingSimulator { - public accumulator: bigint = BASE; - public time: number = 0; - - private collateral: { [key: string]: Fr } = {}; - private staticDebt: { [key: string]: Fr } = {}; - private stableBalance: { [key: string]: Fr } = {}; - private repaid: bigint = 0n; - - private key: Fr = Fr.ZERO; - - constructor(private cc: CheatCodes, private account: LendingAccount, private rate: bigint) {} - - async prepare() { - this.key = await this.account.key(); - const ts = await this.cc.eth.timestamp(); - this.time = ts + 10 + (ts % 10); - await this.cc.aztec.warp(this.time); - } - - async progressTime(diff: number) { - this.time = this.time + diff; - await this.cc.aztec.warp(this.time); - this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(diff)), BASE); - } - - mintStable(to: Fr, amount: bigint) { - const balance = this.stableBalance[to.toString()] ?? Fr.ZERO; - this.stableBalance[to.toString()] = new Fr(balance.value + amount); - } - - deposit(onBehalfOf: Fr, amount: bigint) { - const coll = this.collateral[onBehalfOf.toString()] ?? Fr.ZERO; - this.collateral[onBehalfOf.toString()] = new Fr(coll.value + amount); - } - - withdraw(owner: Fr, amount: bigint) { - const coll = this.collateral[owner.toString()] ?? Fr.ZERO; - this.collateral[owner.toString()] = new Fr(coll.value - amount); - } - - borrow(owner: Fr, recipient: Fr, amount: bigint) { - const staticDebtBal = this.staticDebt[owner.toString()] ?? Fr.ZERO; - const increase = muldivUp(amount, BASE, this.accumulator); - this.staticDebt[owner.toString()] = new Fr(staticDebtBal.value + increase); - - const balance = this.stableBalance[recipient.toString()] ?? Fr.ZERO; - this.stableBalance[recipient.toString()] = new Fr(balance.value + amount); - } - - repay(owner: Fr, onBehalfOf: Fr, amount: bigint) { - const staticDebtBal = this.staticDebt[onBehalfOf.toString()] ?? Fr.ZERO; - const decrease = muldivDown(amount, BASE, this.accumulator); - this.staticDebt[onBehalfOf.toString()] = new Fr(staticDebtBal.value - decrease); - - const balance = this.stableBalance[owner.toString()] ?? Fr.ZERO; - this.stableBalance[owner.toString()] = new Fr(balance.value - amount); - this.repaid += amount; - } - - check(storage: { [key: string]: Fr }) { - expect(storage['interestAccumulator']).toEqual(new Fr(this.accumulator)); - expect(storage['lastUpdatedTs']).toEqual(new Fr(this.time)); - - // Private values - const keyPriv = this.key.toString(); - expect(storage['privateCollateral']).toEqual(this.collateral[keyPriv] ?? Fr.ZERO); - expect(storage['privateStaticDebt']).toEqual(this.staticDebt[keyPriv] ?? Fr.ZERO); - expect(storage['privateDebt'].value).toEqual( - muldivUp((this.staticDebt[keyPriv] ?? Fr.ZERO).value, this.accumulator, BASE), - ); - - // Public values - const keyPub = this.account.address.toString(); - expect(storage['publicCollateral']).toEqual(this.collateral[keyPub] ?? Fr.ZERO); - expect(storage['publicStaticDebt']).toEqual(this.staticDebt[keyPub] ?? Fr.ZERO); - expect(storage['publicDebt'].value).toEqual( - muldivUp((this.staticDebt[keyPub] ?? Fr.ZERO).value, this.accumulator, BASE), - ); - - const totalCollateral = Object.values(this.collateral).reduce((a, b) => new Fr(a.value + b.value), Fr.ZERO); - expect(storage['totalCollateral']).toEqual(totalCollateral); - - expect(storage['stableCoinLending'].value).toEqual(this.repaid); - expect(storage['stableCoinPublic']).toEqual(this.stableBalance[keyPub] ?? Fr.ZERO); - - // Abusing notation and using the `keyPriv` as if an address for private holdings of stable_coin while it has the same owner in reality. - expect(storage['stableCoinPrivate']).toEqual(this.stableBalance[keyPriv] ?? Fr.ZERO); - - const totalStableSupply = Object.values(this.stableBalance).reduce((a, b) => new Fr(a.value + b.value), Fr.ZERO); - // @todo @lherskind To be updated such that we burn assets on repay instead. - expect(storage['stableCoinSupply'].value).toEqual(totalStableSupply.value + this.repaid); - } - } - - it('Full lending run-through', async () => { - // Gotta use the actual auth witness account here and not the standard wallet. - const recipientFull = accounts[0]; - const recipient = recipientFull.address; - - const { lendingContract, priceFeedContract, collateralAsset, stableCoin } = await deployContracts(recipient); - - const lendingAccount = new LendingAccount(recipient, new Fr(42)); - - const storageSnapshots: { [key: string]: { [key: string]: Fr } } = {}; - - const setPrice = async (newPrice: bigint) => { - const tx = priceFeedContract.methods.set_price(0n, newPrice).send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - }; - - await setPrice(2n * 10n ** 9n); + it('Mint assets for later usage', async () => { + await waitForSuccess(priceFeedContract.methods.set_price(0n, 2n * 10n ** 9n).send()); { - // Minting some collateral in public so we got it at hand. - const tx = collateralAsset.methods.owner_mint_pub(lendingAccount.address, 10000n).send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - - const tx2 = collateralAsset.methods.approve(lendingContract.address, 10000n).send(); - const receipt2 = await tx2.wait(); - expect(receipt2.status).toBe(TxStatus.MINED); - - // Minting some collateral in private so we got it at hand. - const secret = Fr.random(); - const secretHash = await computeMessageSecretHash(secret); - const shieldAmount = 10000n; - const tx3 = stableCoin.methods.owner_mint_priv(shieldAmount, secretHash).send(); - const receipt3 = await tx3.wait(); - expect(receipt3.status).toBe(TxStatus.MINED); - - const tx4 = stableCoin.methods.redeemShield(shieldAmount, secret, recipient).send(); - const receipt4 = await tx4.wait(); - expect(receipt4.status).toBe(TxStatus.MINED); - - const tx5 = stableCoin.methods.approve(lendingContract.address, 10000n).send(); - const receipt5 = await tx5.wait(); - expect(receipt5.status).toBe(TxStatus.MINED); + const assets = [collateralAsset, stableCoin]; + const mintAmount = 10000n; + for (const asset of assets) { + const secret = Fr.random(); + const secretHash = await computeMessageSecretHash(secret); + + const a = asset.methods.mint_public({ address: lendingAccount.address }, mintAmount).send(); + const b = asset.methods.mint_private(mintAmount, secretHash).send(); + + await Promise.all([a, b].map(waitForSuccess)); + await waitForSuccess( + asset.methods.redeem_shield({ address: lendingAccount.address }, mintAmount, secret).send(), + ); + } } - // Also specified in `noir-contracts/src/contracts/lending_contract/src/main.nr` - const rate = 1268391679n; - const lendingSim = new LendingSimulator(cc, lendingAccount, rate); - await lendingSim.prepare(); - // To handle initial mint (we use these funds to refund privately without shielding first). - lendingSim.mintStable(await lendingAccount.key(), 10000n); + lendingSim.mintStableCoinOutsideLoan(lendingAccount.address, 10000n, true); + lendingSim.stableCoin.redeemShield(lendingAccount.address, 10000n); + lendingSim.mintStableCoinOutsideLoan(lendingAccount.address, 10000n, false); - { - // Initialize the contract values, setting the interest accumulator to 1e9 and the last updated timestamp to now. - logger('Initializing contract'); - const tx = lendingContract.methods - .init(priceFeedContract.address, 8000, collateralAsset.address, stableCoin.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['initial'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, - ); + lendingSim.collateralAsset.mintPrivate(10000n); + lendingSim.collateralAsset.redeemShield(lendingAccount.address, 10000n); + lendingSim.collateralAsset.mintPublic(lendingAccount.address, 10000n); + }); - lendingSim.check(storageSnapshots['initial']); - } + it('Initialize the contract', async () => { + await lendingSim.prepare(); + logger('Initializing contract'); + await waitForSuccess( + lendingContract.methods.init(priceFeedContract.address, 8000, collateralAsset.address, stableCoin.address).send(), + ); + }); - { + describe('Deposits', () => { + it('Depositing 🥸 : 💰 -> 🏦', async () => { const depositAmount = 420n; - + const nonce = Fr.random(); const messageHash = await hashPayload([ - FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), - recipientFull.address.toField(), + lendingContract.address.toField(), + collateralAsset.address.toField(), + FunctionSelector.fromSignature('unshield((Field),(Field),Field,Field)').toField(), + lendingAccount.address.toField(), lendingContract.address.toField(), new Fr(depositAmount), + nonce, ]); await wallet.signAndAddAuthWitness(messageHash); - await lendingSim.progressTime(10); - lendingSim.deposit(await lendingAccount.key(), depositAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.depositPrivate(lendingAccount.address, await lendingAccount.key(), depositAmount); // Make a private deposit of funds into own account. // This should: @@ -377,58 +202,76 @@ describe('e2e_lending_contract', () => { // - increase last updated timestamp. // - increase the private collateral. logger('Depositing 🥸 : 💰 -> 🏦'); - const tx = lendingContract.methods - .deposit_private(lendingAccount.secret, lendingAccount.address, 0n, depositAmount, collateralAsset.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_deposit'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods + .deposit_private( + lendingAccount.address, + depositAmount, + nonce, + lendingAccount.secret, + 0n, + collateralAsset.address, + ) + .send(), ); + }); - lendingSim.check(storageSnapshots['private_deposit']); - } - - { + it('Depositing 🥸 on behalf of recipient: 💰 -> 🏦', async () => { const depositAmount = 421n; + const nonce = Fr.random(); const messageHash = await hashPayload([ - FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), - recipientFull.address.toField(), + lendingContract.address.toField(), + collateralAsset.address.toField(), + FunctionSelector.fromSignature('unshield((Field),(Field),Field,Field)').toField(), + lendingAccount.address.toField(), lendingContract.address.toField(), new Fr(depositAmount), + nonce, ]); await wallet.signAndAddAuthWitness(messageHash); - await lendingSim.progressTime(10); - lendingSim.deposit(recipient.toField(), depositAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.depositPrivate(lendingAccount.address, lendingAccount.address.toField(), depositAmount); // Make a private deposit of funds into another account, in this case, a public account. // This should: // - increase the interest accumulator // - increase last updated timestamp. // - increase the public collateral. logger('Depositing 🥸 on behalf of recipient: 💰 -> 🏦'); - const tx = lendingContract.methods - .deposit_private(0n, lendingAccount.address, recipient.toField(), depositAmount, collateralAsset.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_deposit_on_behalf'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods + .deposit_private( + lendingAccount.address, + depositAmount, + nonce, + 0n, + lendingAccount.address, + collateralAsset.address, + ) + .send(), ); + }); - lendingSim.check(storageSnapshots['private_deposit_on_behalf']); - } - - { + it('Depositing: 💰 -> 🏦', async () => { const depositAmount = 211n; - await lendingSim.progressTime(10); - lendingSim.deposit(recipient.toField(), depositAmount); + + const nonce = Fr.random(); + const messageHash = await hashPayload([ + lendingContract.address.toField(), + collateralAsset.address.toField(), + FunctionSelector.fromSignature('transfer_public((Field),(Field),Field,Field)').toField(), + lendingAccount.address.toField(), + lendingContract.address.toField(), + new Fr(depositAmount), + nonce, + ]); + + // Add it to the wallet as approved + const me = await SchnorrAuthWitnessAccountContract.at(accounts[0].address, wallet); + await waitForSuccess(me.methods.set_is_valid_storage(messageHash, 1).send()); + + await lendingSim.progressTime(TIME_JUMP); + lendingSim.depositPublic(lendingAccount.address, lendingAccount.address.toField(), depositAmount); // Make a public deposit of funds into self. // This should: @@ -437,24 +280,31 @@ describe('e2e_lending_contract', () => { // - increase the public collateral. logger('Depositing: 💰 -> 🏦'); - const tx = lendingContract.methods - .deposit_public(lendingAccount.address, depositAmount, collateralAsset.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['public_deposit'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods + .deposit_public(depositAmount, nonce, lendingAccount.address, collateralAsset.address) + .send(), ); - lendingSim.check(storageSnapshots['public_deposit']); - } + }); + describe('failure cases', () => { + it('calling internal _deposit function directly', async () => { + // Try to call the internal `_deposit` function directly + // This should: + // - not change any storage values. + // - fail + + await expect( + lendingContract.methods._deposit(lendingAccount.address.toField(), 42n, collateralAsset.address).simulate(), + ).rejects.toThrow(); + }); + }); + }); - { + describe('Borrow', () => { + it('Borrow 🥸 : 🏦 -> 🍌', async () => { const borrowAmount = 69n; - await lendingSim.progressTime(10); - lendingSim.borrow(await lendingAccount.key(), lendingAccount.address.toField(), borrowAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.borrow(await lendingAccount.key(), lendingAccount.address, borrowAmount); // Make a private borrow using the private account // This should: @@ -463,25 +313,15 @@ describe('e2e_lending_contract', () => { // - increase the private debt. logger('Borrow 🥸 : 🏦 -> 🍌'); - const tx = lendingContract.methods - .borrow_private(lendingAccount.secret, lendingAccount.address, borrowAmount) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_borrow'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods.borrow_private(lendingAccount.secret, lendingAccount.address, borrowAmount).send(), ); + }); - lendingSim.check(storageSnapshots['private_borrow']); - } - - { + it('Borrow: 🏦 -> 🍌', async () => { const borrowAmount = 69n; - await lendingSim.progressTime(10); - lendingSim.borrow(recipient.toField(), lendingAccount.address.toField(), borrowAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.borrow(lendingAccount.address.toField(), lendingAccount.address, borrowAmount); // Make a public borrow using the private account // This should: @@ -490,31 +330,26 @@ describe('e2e_lending_contract', () => { // - increase the public debt. logger('Borrow: 🏦 -> 🍌'); - const tx = lendingContract.methods.borrow_public(lendingAccount.address, borrowAmount).send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['public_borrow'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, - ); - - lendingSim.check(storageSnapshots['public_borrow']); - } + await waitForSuccess(lendingContract.methods.borrow_public(lendingAccount.address, borrowAmount).send()); + }); + }); - { + describe('Repay', () => { + it('Repay 🥸 : 🍌 -> 🏦', async () => { const repayAmount = 20n; + const nonce = Fr.random(); const messageHash = await hashPayload([ - FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), - recipientFull.address.toField(), lendingContract.address.toField(), + stableCoin.address.toField(), + FunctionSelector.fromSignature('burn((Field),Field,Field)').toField(), + lendingAccount.address.toField(), new Fr(repayAmount), + nonce, ]); await wallet.signAndAddAuthWitness(messageHash); - await lendingSim.progressTime(10); - lendingSim.repay(await lendingAccount.key(), await lendingAccount.key(), repayAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.repayPrivate(lendingAccount.address, await lendingAccount.key(), repayAmount); // Make a private repay of the debt in the private account // This should: @@ -523,33 +358,28 @@ describe('e2e_lending_contract', () => { // - decrease the private debt. logger('Repay 🥸 : 🍌 -> 🏦'); - const tx = lendingContract.methods - .repay_private(lendingAccount.secret, lendingAccount.address, 0n, repayAmount, stableCoin.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_repay'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods + .repay_private(lendingAccount.address, repayAmount, nonce, lendingAccount.secret, 0n, stableCoin.address) + .send(), ); + }); - lendingSim.check(storageSnapshots['private_repay']); - } - - { + it('Repay 🥸 on behalf of public: 🍌 -> 🏦', async () => { const repayAmount = 21n; + const nonce = Fr.random(); const messageHash = await hashPayload([ - FunctionSelector.fromSignature('unshieldTokens(Field,Field,Field)').toField(), - recipientFull.address.toField(), lendingContract.address.toField(), + stableCoin.address.toField(), + FunctionSelector.fromSignature('burn((Field),Field,Field)').toField(), + lendingAccount.address.toField(), new Fr(repayAmount), + nonce, ]); await wallet.signAndAddAuthWitness(messageHash); - await lendingSim.progressTime(10); - lendingSim.repay(await lendingAccount.key(), lendingAccount.address.toField(), repayAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.repayPrivate(lendingAccount.address, lendingAccount.address.toField(), repayAmount); // Make a private repay of the debt in the public account // This should: @@ -558,25 +388,32 @@ describe('e2e_lending_contract', () => { // - decrease the public debt. logger('Repay 🥸 on behalf of public: 🍌 -> 🏦'); - const tx = lendingContract.methods - .repay_private(0n, lendingAccount.address, recipient.toField(), repayAmount, stableCoin.address) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_repay_on_behalf'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods + .repay_private(lendingAccount.address, repayAmount, nonce, 0n, lendingAccount.address, stableCoin.address) + .send(), ); + }); - lendingSim.check(storageSnapshots['private_repay_on_behalf']); - } - - { + it('Repay: 🍌 -> 🏦', async () => { const repayAmount = 20n; - await lendingSim.progressTime(10); - lendingSim.repay(lendingAccount.address.toField(), lendingAccount.address.toField(), repayAmount); + + const nonce = Fr.random(); + const messageHash = await hashPayload([ + lendingContract.address.toField(), + stableCoin.address.toField(), + FunctionSelector.fromSignature('burn_public((Field),Field,Field)').toField(), + lendingAccount.address.toField(), + new Fr(repayAmount), + nonce, + ]); + + // Add it to the wallet as approved + const me = await SchnorrAuthWitnessAccountContract.at(accounts[0].address, wallet); + await waitForSuccess(me.methods.set_is_valid_storage(messageHash, 1).send()); + + await lendingSim.progressTime(TIME_JUMP); + lendingSim.repayPublic(lendingAccount.address, lendingAccount.address.toField(), repayAmount); // Make a public repay of the debt in the public account // This should: @@ -585,32 +422,17 @@ describe('e2e_lending_contract', () => { // - decrease the public debt. logger('Repay: 🍌 -> 🏦'); - const tx = lendingContract.methods.repay_public(recipient.toField(), 20n, stableCoin.address).send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['public_repay'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods.repay_public(repayAmount, nonce, lendingAccount.address, stableCoin.address).send(), ); + }); + }); - lendingSim.check(storageSnapshots['public_repay']); - } - - { - // Withdraw more than possible to test the revert. - logger('Withdraw: trying to withdraw more than possible'); - const tx = lendingContract.methods.withdraw_public(recipient, 10n ** 9n).send({ skipPublicSimulation: true }); - await tx.isMined({ interval: 0.1 }); - const receipt = await tx.getReceipt(); - expect(receipt.status).toBe(TxStatus.DROPPED); - } - - { + describe('Withdraw', () => { + it('Withdraw: 🏦 -> 💰', async () => { const withdrawAmount = 42n; - await lendingSim.progressTime(10); - lendingSim.withdraw(recipient.toField(), withdrawAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.withdraw(lendingAccount.address.toField(), lendingAccount.address, withdrawAmount); // Withdraw funds from the public account // This should: @@ -619,23 +441,13 @@ describe('e2e_lending_contract', () => { // - decrease the public collateral. logger('Withdraw: 🏦 -> 💰'); - const tx = lendingContract.methods.withdraw_public(recipient, withdrawAmount).send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['public_withdraw'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, - ); - - lendingSim.check(storageSnapshots['public_withdraw']); - } + await waitForSuccess(lendingContract.methods.withdraw_public(lendingAccount.address, withdrawAmount).send()); + }); - { + it('Withdraw 🥸 : 🏦 -> 💰', async () => { const withdrawAmount = 42n; - await lendingSim.progressTime(10); - lendingSim.withdraw(await lendingAccount.key(), withdrawAmount); + await lendingSim.progressTime(TIME_JUMP); + lendingSim.withdraw(await lendingAccount.key(), lendingAccount.address, withdrawAmount); // Withdraw funds from the private account // This should: @@ -644,41 +456,19 @@ describe('e2e_lending_contract', () => { // - decrease the private collateral. logger('Withdraw 🥸 : 🏦 -> 💰'); - const tx = lendingContract.methods - .withdraw_private(lendingAccount.secret, lendingAccount.address, withdrawAmount) - .send(); - const receipt = await tx.wait(); - expect(receipt.status).toBe(TxStatus.MINED); - storageSnapshots['private_withdraw'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, + await waitForSuccess( + lendingContract.methods.withdraw_private(lendingAccount.secret, lendingAccount.address, withdrawAmount).send(), ); - - lendingSim.check(storageSnapshots['private_withdraw']); - } - - { - // Try to call the internal `_deposit` function directly - // This should: - // - not change any storage values. - // - fail - - const tx = lendingContract.methods - ._deposit(recipient.toField(), 42n, collateralAsset.address) - .send({ skipPublicSimulation: true }); - await tx.isMined({ interval: 0.1 }); - const receipt = await tx.getReceipt(); - expect(receipt.status).toBe(TxStatus.DROPPED); - logger('Rejected call directly to internal function 🧚 '); - storageSnapshots['attempted_internal_deposit'] = await getStorageSnapshot( - lendingContract, - collateralAsset, - stableCoin, - lendingAccount, - ); - expect(storageSnapshots['private_withdraw']).toEqual(storageSnapshots['attempted_internal_deposit']); - } - }, 650_000); + }); + + describe('failure cases', () => { + it('withdraw more than possible to revert', async () => { + // Withdraw more than possible to test the revert. + logger('Withdraw: trying to withdraw more than possible'); + await expect( + lendingContract.methods.withdraw_public(lendingAccount.address, 10n ** 9n).simulate(), + ).rejects.toThrow(); + }); + }); + }); }); diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index 649a53cdee68..7e8defafae48 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -4,7 +4,6 @@ import { Account, AuthWitnessAccountContract, AuthWitnessEntrypointWallet, - AztecAddress, IAuthWitnessAccountEntrypoint, computeMessageSecretHash, } from '@aztec/aztec.js'; @@ -24,6 +23,7 @@ import { AztecRPC, TxStatus } from '@aztec/types'; import { jest } from '@jest/globals'; import { setup } from './fixtures/utils.js'; +import { TokenSimulator } from './simulators/token_simulator.js'; const hashPayload = async (payload: Fr[]) => { return pedersenPlookupCompressWithHashIndex( @@ -35,95 +35,6 @@ const hashPayload = async (payload: Fr[]) => { const TIMEOUT = 60_000; -class TokenSimulator { - private balancesPrivate: Map = new Map(); - private balancePublic: Map = new Map(); - public totalSupply: bigint = 0n; - - constructor(protected token: TokenContract, protected logger: DebugLogger, protected accounts: CompleteAddress[]) {} - - public mintPrivate(to: AztecAddress, amount: bigint) { - this.totalSupply += amount; - } - - public mintPublic(to: AztecAddress, amount: bigint) { - this.totalSupply += amount; - const value = this.balancePublic.get(to) || 0n; - this.balancePublic.set(to, value + amount); - } - - public transferPublic(from: AztecAddress, to: AztecAddress, amount: bigint) { - const fromBalance = this.balancePublic.get(from) || 0n; - this.balancePublic.set(from, fromBalance - amount); - expect(fromBalance).toBeGreaterThanOrEqual(amount); - - const toBalance = this.balancePublic.get(to) || 0n; - this.balancePublic.set(to, toBalance + amount); - } - - public transferPrivate(from: AztecAddress, to: AztecAddress, amount: bigint) { - const fromBalance = this.balancesPrivate.get(from) || 0n; - expect(fromBalance).toBeGreaterThanOrEqual(amount); - this.balancesPrivate.set(from, fromBalance - amount); - - const toBalance = this.balancesPrivate.get(to) || 0n; - this.balancesPrivate.set(to, toBalance + amount); - } - - public shield(from: AztecAddress, amount: bigint) { - const fromBalance = this.balancePublic.get(from) || 0n; - expect(fromBalance).toBeGreaterThanOrEqual(amount); - this.balancePublic.set(from, fromBalance - amount); - } - - public redeemShield(to: AztecAddress, amount: bigint) { - const toBalance = this.balancesPrivate.get(to) || 0n; - this.balancesPrivate.set(to, toBalance + amount); - } - - public unshield(from: AztecAddress, to: AztecAddress, amount: bigint) { - const fromBalance = this.balancesPrivate.get(from) || 0n; - const toBalance = this.balancePublic.get(to) || 0n; - expect(fromBalance).toBeGreaterThanOrEqual(amount); - this.balancesPrivate.set(from, fromBalance - amount); - this.balancePublic.set(to, toBalance + amount); - } - - public burnPrivate(from: AztecAddress, amount: bigint) { - const fromBalance = this.balancesPrivate.get(from) || 0n; - expect(fromBalance).toBeGreaterThanOrEqual(amount); - this.balancesPrivate.set(from, fromBalance - amount); - - this.totalSupply -= amount; - } - - public burnPublic(from: AztecAddress, amount: bigint) { - const fromBalance = this.balancePublic.get(from) || 0n; - expect(fromBalance).toBeGreaterThanOrEqual(amount); - this.balancePublic.set(from, fromBalance - amount); - - this.totalSupply -= amount; - } - - public balanceOfPublic(address: AztecAddress) { - return this.balancePublic.get(address) || 0n; - } - - public balanceOfPrivate(address: AztecAddress) { - return this.balancesPrivate.get(address) || 0n; - } - - public async check() { - expect(await this.token.methods.total_supply().view()).toEqual(this.totalSupply); - - // Check that all our public matches - for (const { address } of this.accounts) { - expect(await this.token.methods.balance_of_public({ address }).view()).toEqual(this.balanceOfPublic(address)); - expect(await this.token.methods.balance_of_private({ address }).view()).toEqual(this.balanceOfPrivate(address)); - } - } -} - describe('e2e_token_contract', () => { jest.setTimeout(TIMEOUT); @@ -173,7 +84,11 @@ describe('e2e_token_contract', () => { asset = await TokenContract.at(receipt.contractAddress!, wallets[0]); } - tokenSim = new TokenSimulator(asset, logger, accounts); + tokenSim = new TokenSimulator( + asset, + logger, + accounts.map(account => account.address), + ); { const initializeTx = asset.methods._initialize({ address: accounts[0].address }).send(); @@ -299,7 +214,7 @@ describe('e2e_token_contract', () => { const tx = asset.methods.mint_private(amount, secretHash).send(); const receipt = await tx.wait(); expect(receipt.status).toBe(TxStatus.MINED); - tokenSim.mintPrivate(accounts[0].address, amount); + tokenSim.mintPrivate(amount); }); it('redeem as recipient', async () => { @@ -976,8 +891,8 @@ describe('e2e_token_contract', () => { caller.address.toField(), asset.address.toField(), FunctionSelector.fromSignature('unshield((Field),(Field),Field,Field)').toField(), - accounts[0].address.toField(), - accounts[1].address.toField(), + from.address.toField(), + to.address.toField(), new Fr(amount), nonce, ]); diff --git a/yarn-project/end-to-end/src/simulators/index.ts b/yarn-project/end-to-end/src/simulators/index.ts new file mode 100644 index 000000000000..bf023483a1b1 --- /dev/null +++ b/yarn-project/end-to-end/src/simulators/index.ts @@ -0,0 +1,2 @@ +export * from './lending_simulator.js'; +export * from './token_simulator.js'; diff --git a/yarn-project/end-to-end/src/simulators/lending_simulator.ts b/yarn-project/end-to-end/src/simulators/lending_simulator.ts new file mode 100644 index 000000000000..37333ab45720 --- /dev/null +++ b/yarn-project/end-to-end/src/simulators/lending_simulator.ts @@ -0,0 +1,187 @@ +// Convenience struct to hold an account's address and secret that can easily be passed around. +import { CheatCodes } from '@aztec/aztec.js'; +import { AztecAddress, CircuitsWasm, Fr } from '@aztec/circuits.js'; +import { pedersenPlookupCommitInputs } from '@aztec/circuits.js/barretenberg'; +import { LendingContract } from '@aztec/noir-contracts/types'; + +import { TokenSimulator } from './token_simulator.js'; + +/** + * Contains utilities to compute the "key" for private holdings in the public state. + */ +export class LendingAccount { + /** The address that owns this account */ + public readonly address: AztecAddress; + /** The secret used for private deposits */ + public readonly secret: Fr; + + constructor(address: AztecAddress, secret: Fr) { + this.address = address; + this.secret = secret; + } + + /** + * Computes the key for the private holdings of this account. + * @returns Key in public space + */ + public async key(): Promise { + return Fr.fromBuffer( + pedersenPlookupCommitInputs( + await CircuitsWasm.get(), + [this.address, this.secret].map(f => f.toBuffer()), + ), + ); + } +} + +const WAD = 10n ** 18n; +const BASE = 10n ** 9n; + +const muldivDown = (a: bigint, b: bigint, c: bigint) => (a * b) / c; + +const muldivUp = (a: bigint, b: bigint, c: bigint) => { + const adder = (a * b) % c > 0n ? 1n : 0n; + return muldivDown(a, b, c) + adder; +}; + +const computeMultiplier = (rate: bigint, dt: bigint) => { + if (dt == 0n) { + return BASE; + } + + const expMinusOne = dt - 1n; + const expMinusTwo = dt > 2 ? dt - 2n : 0n; + + const basePowerTwo = muldivDown(rate, rate, WAD); + const basePowerThree = muldivDown(basePowerTwo, rate, WAD); + + const temp = dt * expMinusOne; + const secondTerm = muldivDown(temp, basePowerTwo, 2n); + const thirdTerm = muldivDown(temp * expMinusTwo, basePowerThree, 6n); + + const offset = (dt * rate + secondTerm + thirdTerm) / (WAD / BASE); + + return BASE + offset; +}; + +/** + * Helper class that emulates the logic of the lending contract. Used to have a "twin" to check values against. + */ +export class LendingSimulator { + /** interest rate accumulator */ + public accumulator: bigint = 0n; + /** the timestamp of the simulator*/ + public time: number = 0; + + private collateral: { [key: string]: Fr } = {}; + private staticDebt: { [key: string]: Fr } = {}; + private borrowed: bigint = 0n; + private mintedOutside: bigint = 0n; + + constructor( + private cc: CheatCodes, + private account: LendingAccount, + private rate: bigint, + /** the lending contract */ + public lendingContract: LendingContract, + /** the collateral asset used in the lending contract */ + public collateralAsset: TokenSimulator, + /** the stable-coin borrowed in the lending contract */ + public stableCoin: TokenSimulator, + ) {} + + async prepare() { + this.accumulator = BASE; + const ts = await this.cc.eth.timestamp(); + this.time = ts + 10 + (ts % 10); + await this.cc.aztec.warp(this.time); + } + + async progressTime(diff: number) { + this.time = this.time + diff; + await this.cc.aztec.warp(this.time); + this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(diff)), BASE); + } + + depositPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint) { + this.collateralAsset.unshield(from, this.lendingContract.address, amount); + this.deposit(onBehalfOf, amount); + } + + depositPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint) { + this.collateralAsset.transferPublic(from, this.lendingContract.address, amount); + this.deposit(onBehalfOf, amount); + } + + private deposit(onBehalfOf: Fr, amount: bigint) { + const coll = this.collateral[onBehalfOf.toString()] ?? Fr.ZERO; + this.collateral[onBehalfOf.toString()] = new Fr(coll.value + amount); + } + + withdraw(owner: Fr, recipient: AztecAddress, amount: bigint) { + const coll = this.collateral[owner.toString()] ?? Fr.ZERO; + this.collateral[owner.toString()] = new Fr(coll.value - amount); + this.collateralAsset.transferPublic(this.lendingContract.address, recipient, amount); + } + + borrow(owner: Fr, recipient: AztecAddress, amount: bigint) { + const staticDebtBal = this.staticDebt[owner.toString()] ?? Fr.ZERO; + const increase = muldivUp(amount, BASE, this.accumulator); + this.staticDebt[owner.toString()] = new Fr(staticDebtBal.value + increase); + + this.stableCoin.mintPublic(recipient, amount); + this.borrowed += amount; + } + + repayPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint) { + this.stableCoin.burnPrivate(from, amount); + this.repay(onBehalfOf, onBehalfOf, amount); + } + + repayPublic(from: AztecAddress, onBehalfOf: Fr, amount: bigint) { + this.stableCoin.burnPublic(from, amount); + this.repay(onBehalfOf, onBehalfOf, amount); + } + + private repay(from: Fr, onBehalfOf: Fr, amount: bigint) { + const staticDebtBal = this.staticDebt[onBehalfOf.toString()] ?? Fr.ZERO; + const decrease = muldivDown(amount, BASE, this.accumulator); + this.staticDebt[onBehalfOf.toString()] = new Fr(staticDebtBal.value - decrease); + + this.borrowed -= amount; + } + + mintStableCoinOutsideLoan(recipient: AztecAddress, amount: bigint, priv = false) { + if (priv) { + this.stableCoin.mintPrivate(amount); + } else { + this.stableCoin.mintPublic(recipient, amount); + } + this.mintedOutside += amount; + } + + async check() { + // Run checks on both underlying assets + await this.collateralAsset.check(); + await this.stableCoin.check(); + + // Check that total collateral equals total holdings by contract. + const totalCollateral = Object.values(this.collateral).reduce((a, b) => new Fr(a.value + b.value), Fr.ZERO); + expect(totalCollateral).toEqual(new Fr(this.collateralAsset.balanceOfPublic(this.lendingContract.address))); + + expect(this.borrowed).toEqual(this.stableCoin.totalSupply - this.mintedOutside); + + const asset = await this.lendingContract.methods.get_asset(0).view(); + expect(asset['interest_accumulator']).toEqual(this.accumulator); + expect(asset['last_updated_ts']).toEqual(BigInt(this.time)); + + for (const key of [this.account.address, await this.account.key()]) { + const privatePos = await this.lendingContract.methods.get_position(key).view(); + expect(new Fr(privatePos['collateral'])).toEqual(this.collateral[key.toString()] ?? Fr.ZERO); + expect(new Fr(privatePos['static_debt'])).toEqual(this.staticDebt[key.toString()] ?? Fr.ZERO); + expect(privatePos['debt']).toEqual( + muldivUp((this.staticDebt[key.toString()] ?? Fr.ZERO).value, this.accumulator, BASE), + ); + } + } +} diff --git a/yarn-project/end-to-end/src/simulators/token_simulator.ts b/yarn-project/end-to-end/src/simulators/token_simulator.ts new file mode 100644 index 000000000000..b28c5480d6eb --- /dev/null +++ b/yarn-project/end-to-end/src/simulators/token_simulator.ts @@ -0,0 +1,93 @@ +/* eslint-disable jsdoc/require-jsdoc */ +import { DebugLogger } from '@aztec/aztec.js'; +import { AztecAddress } from '@aztec/circuits.js'; +import { TokenContract } from '@aztec/noir-contracts/types'; + +export class TokenSimulator { + private balancesPrivate: Map = new Map(); + private balancePublic: Map = new Map(); + public totalSupply: bigint = 0n; + + constructor(protected token: TokenContract, protected logger: DebugLogger, protected accounts: AztecAddress[]) {} + + public mintPrivate(amount: bigint) { + this.totalSupply += amount; + } + + public mintPublic(to: AztecAddress, amount: bigint) { + this.totalSupply += amount; + const value = this.balancePublic.get(to) || 0n; + this.balancePublic.set(to, value + amount); + } + + public transferPublic(from: AztecAddress, to: AztecAddress, amount: bigint) { + const fromBalance = this.balancePublic.get(from) || 0n; + this.balancePublic.set(from, fromBalance - amount); + expect(fromBalance).toBeGreaterThanOrEqual(amount); + + const toBalance = this.balancePublic.get(to) || 0n; + this.balancePublic.set(to, toBalance + amount); + } + + public transferPrivate(from: AztecAddress, to: AztecAddress, amount: bigint) { + const fromBalance = this.balancesPrivate.get(from) || 0n; + expect(fromBalance).toBeGreaterThanOrEqual(amount); + this.balancesPrivate.set(from, fromBalance - amount); + + const toBalance = this.balancesPrivate.get(to) || 0n; + this.balancesPrivate.set(to, toBalance + amount); + } + + public shield(from: AztecAddress, amount: bigint) { + const fromBalance = this.balancePublic.get(from) || 0n; + expect(fromBalance).toBeGreaterThanOrEqual(amount); + this.balancePublic.set(from, fromBalance - amount); + } + + public redeemShield(to: AztecAddress, amount: bigint) { + const toBalance = this.balancesPrivate.get(to) || 0n; + this.balancesPrivate.set(to, toBalance + amount); + } + + public unshield(from: AztecAddress, to: AztecAddress, amount: bigint) { + const fromBalance = this.balancesPrivate.get(from) || 0n; + const toBalance = this.balancePublic.get(to) || 0n; + expect(fromBalance).toBeGreaterThanOrEqual(amount); + this.balancesPrivate.set(from, fromBalance - amount); + this.balancePublic.set(to, toBalance + amount); + } + + public burnPrivate(from: AztecAddress, amount: bigint) { + const fromBalance = this.balancesPrivate.get(from) || 0n; + expect(fromBalance).toBeGreaterThanOrEqual(amount); + this.balancesPrivate.set(from, fromBalance - amount); + + this.totalSupply -= amount; + } + + public burnPublic(from: AztecAddress, amount: bigint) { + const fromBalance = this.balancePublic.get(from) || 0n; + expect(fromBalance).toBeGreaterThanOrEqual(amount); + this.balancePublic.set(from, fromBalance - amount); + + this.totalSupply -= amount; + } + + public balanceOfPublic(address: AztecAddress) { + return this.balancePublic.get(address) || 0n; + } + + public balanceOfPrivate(address: AztecAddress) { + return this.balancesPrivate.get(address) || 0n; + } + + public async check() { + expect(await this.token.methods.total_supply().view()).toEqual(this.totalSupply); + + // Check that all our public matches + for (const address of this.accounts) { + expect(await this.token.methods.balance_of_public({ address }).view()).toEqual(this.balanceOfPublic(address)); + expect(await this.token.methods.balance_of_private({ address }).view()).toEqual(this.balanceOfPrivate(address)); + } + } +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr index c79378d7ecf9..f8b7a9a41b58 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/interfaces.nr @@ -36,36 +36,44 @@ impl Token { Self { address } } - fn transfer_pub(self: Self, context: PublicContext, to: Field, amount: Field) { + fn transfer_public(self: Self, context: PublicContext, from: Field, to: Field, amount: Field, nonce: Field) { let _transfer_return_values = context.call_public_function( self.address, - compute_selector("transfer_pub(Field,Field)"), - [to, amount] + compute_selector("transfer_public((Field),(Field),Field,Field)"), + [from, to, amount, nonce] ); } - fn transfer_from_pub(self: Self, context: PublicContext, from: Field, to: Field, amount: Field) { - let _transfer_return_values = context.call_public_function( + fn mint_public(self: Self, context: PublicContext, to: Field, amount: Field) { + let _return_values = context.call_public_function( self.address, - compute_selector("transfer_from_pub(Field,Field,Field)"), - [from, to, amount] + compute_selector("mint_public((Field),Field)"), + [to, amount] ); } - fn owner_mint_pub(self: Self, context: PublicContext, to: Field, amount: Field) { - let _transfer_return_values = context.call_public_function( - self.address, - compute_selector("owner_mint_pub(Field,Field)"), - [to, amount] + fn burn_public(self: Self, context: PublicContext, from: Field, amount: Field, nonce: Field){ + let _return_values = context.call_public_function( + self.address, + compute_selector("burn_public((Field),Field,Field)"), + [from, amount, nonce] ); } // Private - fn unshield(self: Self, context: &mut PrivateContext, from: Field, to: Field, amount: Field) -> [Field; RETURN_VALUES_LENGTH] { + fn unshield(self: Self, context: &mut PrivateContext, from: Field, to: Field, amount: Field, nonce: Field) -> [Field; RETURN_VALUES_LENGTH] { + context.call_private_function( + self.address, + compute_selector("unshield((Field),(Field),Field,Field)"), + [from, to, amount, nonce] + ) + } + + fn burn(self: Self, context: &mut PrivateContext, from: Field, amount: Field, nonce: Field) -> [Field; RETURN_VALUES_LENGTH] { context.call_private_function( self.address, - compute_selector("unshieldTokens(Field,Field,Field)"), - [from, to, amount] + compute_selector("burn((Field),Field,Field)"), + [from, amount, nonce] ) } } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr index 3683aafe96de..c26af11e3402 100644 --- a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -155,17 +155,17 @@ contract Lending { asset } - // This don't need to be on behalf of self. We should be able to repay on behalf of someone else. #[aztec(private)] fn deposit_private( + from: Field, + amount: Field, + nonce: Field, secret: Field, - asset_owner: Field, on_behalf_of: Field, - amount: Field, collateral_asset: Field, ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); - let _res = Token::at(collateral_asset).unshield(&mut context, asset_owner, context.this_address(), amount); + let _res = Token::at(collateral_asset).unshield(&mut context, from, context.this_address(), amount, nonce); // _deposit(on_behalf_of, amount, collateral_asset) let selector = compute_selector("_deposit(Field,Field,Field)"); let _callStackItem2 = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); @@ -173,13 +173,14 @@ contract Lending { #[aztec(public)] fn deposit_public( - owner: Field, amount: Field, + nonce: Field, + on_behalf_of: Field, collateral_asset: Field, ) -> Field { - Token::at(collateral_asset).transfer_from_pub(context, context.msg_sender(), context.this_address(), amount); + Token::at(collateral_asset).transfer_public(context, context.msg_sender(), context.this_address(), amount, nonce); let selector = compute_selector("_deposit(Field,Field,Field)"); - let return_values = context.call_public_function(context.this_address(), selector, [owner, amount, collateral_asset]); + let return_values = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, collateral_asset]); return_values[0] } @@ -253,7 +254,7 @@ contract Lending { // @todo @LHerskind Support both shielding and transfers (for now just transfer) let collateral_asset = storage.collateral_asset.read(); - Token::at(collateral_asset).transfer_pub(context, recipient, amount); + Token::at(collateral_asset).transfer_public(context, context.this_address(), recipient, amount, 0); 1 } @@ -304,33 +305,34 @@ contract Lending { // @todo @LHerskind Need to support both private and public minting. let stable_coin = storage.stable_coin.read(); - Token::at(stable_coin).owner_mint_pub(context, to, amount); + Token::at(stable_coin).mint_public(context, to, amount); 1 } #[aztec(private)] fn repay_private( + from: Field, + amount: Field, + nonce: Field, secret: Field, - asset_owner: Field, on_behalf_of: Field, - amount: Field, stable_coin: Field, ) { let on_behalf_of = compute_identifier(secret, on_behalf_of, context.msg_sender()); - let _res = Token::at(stable_coin).unshield(&mut context, asset_owner, context.this_address(), amount); + let _res = Token::at(stable_coin).burn(&mut context, from, amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); let _callStackItem = context.call_public_function(context.this_address(), selector, [on_behalf_of, amount, stable_coin]); } #[aztec(public)] fn repay_public( - owner: Field, amount: Field, + nonce: Field, + owner: Field, stable_coin: Field, ) -> Field { - // Should probably just burn the tokens actually :thinking: - Token::at(stable_coin).transfer_from_pub(context, context.msg_sender(), context.this_address(), amount); + Token::at(stable_coin).burn_public(context, context.msg_sender(), amount, nonce); let selector = compute_selector("_repay(Field,Field,Field)"); let return_values = context.call_public_function(context.this_address(), selector, [owner, amount, stable_coin]); From c8a5cfb375b498475503c12cc83fcdba39f2ec5f Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Thu, 14 Sep 2023 00:31:19 +0100 Subject: [PATCH 05/25] feat: build_manifest default tweaks. (#2287) If rebuildPatterns are not provided in build_manifest.json, default to the project dir. Can also exclude empty dependencies. --- build-system/scripts/query_manifest | 35 +++-- build_manifest.json | 120 +++++------------- yarn-project/acir-simulator/package.json | 2 - yarn-project/archiver/package.json | 2 - yarn-project/aztec-node/package.json | 2 - yarn-project/aztec-rpc/package.json | 2 - yarn-project/aztec-sandbox/package.json | 2 - yarn-project/aztec.js/package.json | 2 - yarn-project/circuits.js/package.json | 2 - yarn-project/cli/package.json | 2 - yarn-project/end-to-end/package.json | 2 - yarn-project/ethereum/package.json | 2 - yarn-project/foundation/package.json | 2 - yarn-project/key-store/package.json | 2 - yarn-project/l1-artifacts/package.json | 2 - yarn-project/merkle-tree/package.json | 2 - yarn-project/noir-compiler/package.json | 2 - yarn-project/noir-contracts/package.json | 2 - yarn-project/p2p-bootstrap/package.json | 2 - yarn-project/p2p/package.json | 2 - yarn-project/package.common.json | 2 - yarn-project/prover-client/package.json | 2 - yarn-project/rollup-provider/package.json | 2 - yarn-project/sequencer-client/package.json | 2 - yarn-project/types/package.json | 2 - yarn-project/world-state/package.json | 2 - .../scripts/update_build_manifest.mjs | 106 ---------------- 27 files changed, 57 insertions(+), 252 deletions(-) delete mode 100644 yarn-project/yarn-project-base/scripts/update_build_manifest.mjs diff --git a/build-system/scripts/query_manifest b/build-system/scripts/query_manifest index 51eac1df79d7..85ccbf1e96d2 100755 --- a/build-system/scripts/query_manifest +++ b/build-system/scripts/query_manifest @@ -15,6 +15,7 @@ function get_deps { local TYPE=$(jq -r ".\"$1\".dependencies | type" $MANIFEST) if [ "$TYPE" == "string" ]; then # Execute string as command relative to buildDir to retrieve dependencies. + local BUILD_DIR=$($0 buildDir $1) local CMD=$BUILD_DIR/$(jq -r ".\"$1\".dependencies") if [ ! -f "$CMD" ]; then >&2 echo "Dependency script not found: $CMD" @@ -24,10 +25,11 @@ function get_deps { DEPS=($($CMD $PROJECT_DIR)) elif [ "$TYPE" == "null" ]; then # Execute default script relative to buildDir to retrieve dependencies. + local BUILD_DIR=$($0 buildDir $1) local CMD=$BUILD_DIR/scripts/get_dependencies.sh if [ ! -f "$CMD" ]; then - >&2 echo "Dependency script not found: $CMD" - exit 1 + DEPS=() + return fi local PROJECT_DIR=$($0 projectDir $1) DEPS=($($CMD $PROJECT_DIR)) @@ -43,22 +45,25 @@ function add_rebuild_patterns { local TYPE=$(jq -r ".\"$1\".rebuildPatterns | type" $MANIFEST) if [ "$TYPE" == "string" ]; then local FILE=$(jq -r ".\"$1\".rebuildPatterns" $MANIFEST) - local BUILD_DIR=$($0 buildDir $1) - PATTERNS=(${PATTERNS[@]} $(cat $BUILD_DIR/$FILE)) + local PROJECT_DIR=$($0 projectDir $1) + PATTERNS=(${PATTERNS[@]} $(cat $PROJECT_DIR/$FILE)) elif [ "$TYPE" == "array" ]; then PATTERNS=(${PATTERNS[@]} $(jq -r ".\"$1\".rebuildPatterns | .[]" $MANIFEST)) + elif [ "$TYPE" == "null" ]; then + local PROJECT_DIR=$($0 relativeProjectDir $1) + PATTERNS=(${PATTERNS[@]} "^$PROJECT_DIR/") else - >&2 echo "Missing rebuildPatterns property. Either filename as string, or patterns as array." + >&2 echo "rebuildPatterns must be array, string, or null." exit 1 fi } case "$CMD" in dockerfile) - # In the manifest, the path is relative to buildDir. Return absolute path. - BUILD_DIR=$($0 buildDir $REPO) + # In the manifest, the path is relative to projectDir. Return absolute path. + PROJECT_DIR=$($0 projectDir $REPO) DOCKERFILE=$(jq -r ".\"$REPO\".dockerfile // \"Dockerfile\"" $MANIFEST) - echo $BUILD_DIR/$DOCKERFILE + echo $PROJECT_DIR/$DOCKERFILE ;; buildDir) # In the manifest, the path is relative to the repo root. Return absolute path. @@ -71,10 +76,15 @@ case "$CMD" in echo $ROOT_PATH/$PROJECT_DIR ;; relativeProjectDir) + # Return the relative path as it is in the manifest. jq -r ".\"$REPO\".projectDir // .\"$REPO\".buildDir" $MANIFEST ;; dependencies) - BUILD_DIR=$($0 buildDir $REPO) + # Get dependencies for a given repo. + # If no entry in the manifest file, attempt to call /scripts/get_dependencies.sh if exists, else empty. + # If a string, attempt to call / if exists, else error. + # If an array, the array lists the dependencies. + # Recursively descend "unvisited" dependencies to collect all dependencies. declare -A ALL_DEPS add_deps() { if [[ -v ALL_DEPS[$1] ]]; then @@ -87,11 +97,18 @@ case "$CMD" in done } add_deps $REPO + # Remove ourself as a dependency. + unset ALL_DEPS["$REPO"] for KEY in "${!ALL_DEPS[@]}"; do echo $KEY done | sort ;; rebuildPatterns) + # Get rebuild patterns for a given repo (the file patterns that if changed result in rebuilds). + # First add rebuild patterns for requested repo, then add rebuild patterns for each dependency. + # If no rebuild patterns are given, the result is ["^/"]. + # If a projects rebuildPattern is a string, the rebuild patterns are in /. + # If an array, the array lists the rebuild patterns. DEPS=($($0 dependencies $REPO)) PATTERNS=() add_rebuild_patterns $REPO diff --git a/build_manifest.json b/build_manifest.json index 0f7316595d73..3a24db1ef01f 100644 --- a/build_manifest.json +++ b/build_manifest.json @@ -2,48 +2,40 @@ "barretenberg-x86_64-linux-clang": { "buildDir": "barretenberg/cpp", "dockerfile": "dockerfiles/Dockerfile.x86_64-linux-clang", - "rebuildPatterns": ".rebuild_patterns", - "dependencies": [] + "rebuildPatterns": ".rebuild_patterns" }, "barretenberg-x86_64-linux-clang-assert": { "buildDir": "barretenberg/cpp", "dockerfile": "dockerfiles/Dockerfile.x86_64-linux-clang-assert", - "rebuildPatterns": ".rebuild_patterns", - "dependencies": [] + "rebuildPatterns": ".rebuild_patterns" }, "barretenberg-x86_64-linux-clang-fuzzing": { "buildDir": "barretenberg/cpp", "dockerfile": "dockerfiles/Dockerfile.x86_64-linux-clang-fuzzing", - "rebuildPatterns": ".rebuild_patterns", - "dependencies": [] + "rebuildPatterns": ".rebuild_patterns" }, "barretenberg-x86_64-linux-gcc": { "buildDir": "barretenberg/cpp", "dockerfile": "dockerfiles/Dockerfile.x86_64-linux-gcc", - "rebuildPatterns": ".rebuild_patterns", - "dependencies": [] + "rebuildPatterns": ".rebuild_patterns" }, "barretenberg-wasm-linux-clang": { "buildDir": "barretenberg/cpp", "dockerfile": "dockerfiles/Dockerfile.wasm-linux-clang", - "rebuildPatterns": ".rebuild_patterns", - "dependencies": [] + "rebuildPatterns": ".rebuild_patterns" }, "bb.js": { "buildDir": "barretenberg/ts", - "rebuildPatterns": ["^barretenberg/ts/"], "dependencies": ["barretenberg-wasm-linux-clang"] }, "barretenberg-acir-tests-bb": { "buildDir": "barretenberg/acir_tests", "dockerfile": "Dockerfile.bb", - "rebuildPatterns": ["^barretenberg/acir_tests/"], "dependencies": ["barretenberg-x86_64-linux-clang-assert"] }, "barretenberg-acir-tests-bb.js": { "buildDir": "barretenberg/acir_tests", "dockerfile": "Dockerfile.bb.js", - "rebuildPatterns": ["^barretenberg/acir_tests/"], "dependencies": ["bb.js"] }, "circuits-wasm-linux-clang": { @@ -79,19 +71,14 @@ "docs": { "buildDir": ".", "dockerfile": "docs/Dockerfile", - "rebuildPatterns": ["^docs/", "^.*.cpp$", "^.*.ts$"], - "dependencies": [] + "rebuildPatterns": ["^docs/", "^.*.cpp$", "^.*.ts$"] }, "l1-contracts": { - "buildDir": "l1-contracts", - "dockerfile": "Dockerfile", - "rebuildPatterns": ["^l1-contracts/"], - "dependencies": [] + "buildDir": "l1-contracts" }, "l1-artifacts": { "buildDir": "yarn-project", "projectDir": "yarn-project/l1-artifacts", - "dockerfile": "l1-artifacts/Dockerfile", "rebuildPatterns": ["^l1-contracts/", "^yarn-project/l1-artifacts/"], "dependencies": [] }, @@ -111,92 +98,65 @@ }, "acir-simulator": { "buildDir": "yarn-project", - "projectDir": "yarn-project/acir-simulator", - "dockerfile": "acir-simulator/Dockerfile", - "rebuildPatterns": ["^yarn-project/acir-simulator/"] + "projectDir": "yarn-project/acir-simulator" }, "archiver": { "buildDir": "yarn-project", - "projectDir": "yarn-project/archiver", - "dockerfile": "archiver/Dockerfile", - "rebuildPatterns": ["^yarn-project/archiver/"] + "projectDir": "yarn-project/archiver" }, "cli": { "buildDir": "yarn-project", - "projectDir": "yarn-project/cli", - "dockerfile": "cli/Dockerfile", - "rebuildPatterns": ["^yarn-project/cli/"] + "projectDir": "yarn-project/cli" }, "aztec-rpc": { "buildDir": "yarn-project", - "projectDir": "yarn-project/aztec-rpc", - "dockerfile": "aztec-rpc/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-rpc/"] + "projectDir": "yarn-project/aztec-rpc" }, "aztec-sandbox": { "buildDir": "yarn-project", - "projectDir": "yarn-project/aztec-sandbox", - "dockerfile": "aztec-sandbox/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-sandbox/"] + "projectDir": "yarn-project/aztec-sandbox" }, "aztec.js": { "buildDir": "yarn-project", - "projectDir": "yarn-project/aztec.js", - "dockerfile": "aztec.js/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec.js/"] + "projectDir": "yarn-project/aztec.js" }, "canary-build": { "buildDir": "yarn-project", "projectDir": "yarn-project/canary", - "dockerfile": "canary/Dockerfile.build", - "rebuildPatterns": ["^yarn-project/canary/"] + "dockerfile": "Dockerfile.build" }, "canary": { "buildDir": "yarn-project", - "projectDir": "yarn-project/canary", - "dockerfile": "canary/Dockerfile", - "rebuildPatterns": ["^yarn-project/canary/"] + "projectDir": "yarn-project/canary" }, "circuits.js": { "buildDir": "yarn-project", - "projectDir": "yarn-project/circuits.js", - "dockerfile": "circuits.js/Dockerfile", - "rebuildPatterns": ["^yarn-project/circuits.js/"] + "projectDir": "yarn-project/circuits.js" }, "end-to-end": { "buildDir": "yarn-project", - "projectDir": "yarn-project/end-to-end", - "dockerfile": "end-to-end/Dockerfile", - "rebuildPatterns": ["^yarn-project/end-to-end/"] + "projectDir": "yarn-project/end-to-end" }, "ethereum": { "buildDir": "yarn-project", - "projectDir": "yarn-project/ethereum", - "dockerfile": "ethereum/Dockerfile", - "rebuildPatterns": ["^yarn-project/ethereum/"] + "projectDir": "yarn-project/ethereum" }, "foundation": { "buildDir": "yarn-project", - "projectDir": "yarn-project/foundation", - "dockerfile": "foundation/Dockerfile", - "rebuildPatterns": ["^yarn-project/foundation/"] + "projectDir": "yarn-project/foundation" }, "key-store": { "buildDir": "yarn-project", - "projectDir": "yarn-project/key-store", - "dockerfile": "key-store/Dockerfile", - "rebuildPatterns": ["^yarn-project/key-store/"] + "projectDir": "yarn-project/key-store" }, "merkle-tree": { "buildDir": "yarn-project", - "projectDir": "yarn-project/merkle-tree", - "dockerfile": "merkle-tree/Dockerfile", - "rebuildPatterns": ["^yarn-project/merkle-tree/"] + "projectDir": "yarn-project/merkle-tree" }, "noir-contracts-build": { "buildDir": "yarn-project", "projectDir": "yarn-project/noir-contracts", - "dockerfile": "noir-contracts/Dockerfile.build", + "dockerfile": "Dockerfile.build", "rebuildPatterns": [ "^yarn-project/noir-contracts/", "^yarn-project/aztec-nr/" @@ -205,7 +165,6 @@ "noir-contracts": { "buildDir": "yarn-project", "projectDir": "yarn-project/noir-contracts", - "dockerfile": "noir-contracts/Dockerfile", "rebuildPatterns": [ "^yarn-project/noir-contracts/", "^yarn-project/aztec-nr/" @@ -213,56 +172,39 @@ }, "noir-compiler": { "buildDir": "yarn-project", - "projectDir": "yarn-project/noir-compiler", - "dockerfile": "noir-compiler/Dockerfile", - "rebuildPatterns": ["^yarn-project/noir-compiler/"] + "projectDir": "yarn-project/noir-compiler" }, "p2p": { "buildDir": "yarn-project", - "projectDir": "yarn-project/p2p", - "dockerfile": "p2p/Dockerfile", - "rebuildPatterns": ["^yarn-project/p2p/"] + "projectDir": "yarn-project/p2p" }, "p2p-bootstrap": { "buildDir": "yarn-project", "projectDir": "yarn-project/p2p-bootstrap", - "dockerfile": "p2p/Dockerfile", - "rebuildPatterns": ["^yarn-project/p2p-bootstrap/"] + "dockerfile": "../p2p/Dockerfile" }, "prover-client": { "buildDir": "yarn-project", - "projectDir": "yarn-project/prover-client", - "dockerfile": "prover-client/Dockerfile", - "rebuildPatterns": ["^yarn-project/prover-client/"] + "projectDir": "yarn-project/prover-client" }, "rollup-provider": { "buildDir": "yarn-project", - "projectDir": "yarn-project/rollup-provider", - "dockerfile": "rollup-provider/Dockerfile", - "rebuildPatterns": ["^yarn-project/rollup-provider/"] + "projectDir": "yarn-project/rollup-provider" }, "aztec-node": { "buildDir": "yarn-project", - "projectDir": "yarn-project/aztec-node", - "dockerfile": "aztec-node/Dockerfile", - "rebuildPatterns": ["^yarn-project/aztec-node/"] + "projectDir": "yarn-project/aztec-node" }, "sequencer-client": { "buildDir": "yarn-project", - "projectDir": "yarn-project/sequencer-client", - "dockerfile": "sequencer-client/Dockerfile", - "rebuildPatterns": ["^yarn-project/sequencer-client/"] + "projectDir": "yarn-project/sequencer-client" }, "types": { "buildDir": "yarn-project", - "projectDir": "yarn-project/types", - "dockerfile": "types/Dockerfile", - "rebuildPatterns": ["^yarn-project/types/"] + "projectDir": "yarn-project/types" }, "world-state": { "buildDir": "yarn-project", - "projectDir": "yarn-project/world-state", - "dockerfile": "world-state/Dockerfile", - "rebuildPatterns": ["^yarn-project/world-state/"] + "projectDir": "yarn-project/world-state" } } diff --git a/yarn-project/acir-simulator/package.json b/yarn-project/acir-simulator/package.json index ef6fd4d3bfcc..d11b6d6fafa7 100644 --- a/yarn-project/acir-simulator/package.json +++ b/yarn-project/acir-simulator/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/archiver/package.json b/yarn-project/archiver/package.json index 4dbc4a5465eb..48867bed693f 100644 --- a/yarn-project/archiver/package.json +++ b/yarn-project/archiver/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/aztec-node/package.json b/yarn-project/aztec-node/package.json index ec5beb828633..8e785e5b058b 100644 --- a/yarn-project/aztec-node/package.json +++ b/yarn-project/aztec-node/package.json @@ -12,8 +12,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/aztec-rpc/package.json b/yarn-project/aztec-rpc/package.json index 7ac8adacfc00..78f906e82b54 100644 --- a/yarn-project/aztec-rpc/package.json +++ b/yarn-project/aztec-rpc/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/aztec-sandbox/package.json b/yarn-project/aztec-sandbox/package.json index 041da41d2965..d176756f835f 100644 --- a/yarn-project/aztec-sandbox/package.json +++ b/yarn-project/aztec-sandbox/package.json @@ -14,13 +14,11 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", "build": "yarn clean && tsc -b", "start": "node --no-warnings ./dest/bin", "clean": "rm -rf ./dest .tsbuildinfo", "formatting": "run -T prettier --check ./src && run -T eslint ./src", "formatting:fix": "run -T prettier -w ./src", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build:dev": "tsc -b --watch", "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --passWithNoTests", "run:example:token": "DEBUG='aztec:*' node ./dest/examples/private_token_contract.js", diff --git a/yarn-project/aztec.js/package.json b/yarn-project/aztec.js/package.json index 0a67c34d5b37..44e2441449be 100644 --- a/yarn-project/aztec.js/package.json +++ b/yarn-project/aztec.js/package.json @@ -16,8 +16,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b && webpack", "build:web": "webpack", "build:dev": "tsc -b --watch", diff --git a/yarn-project/circuits.js/package.json b/yarn-project/circuits.js/package.json index b2fbac5e846e..58628aaf169a 100644 --- a/yarn-project/circuits.js/package.json +++ b/yarn-project/circuits.js/package.json @@ -18,8 +18,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/cli/package.json b/yarn-project/cli/package.json index e2541e50de81..fe7da02af0b3 100644 --- a/yarn-project/cli/package.json +++ b/yarn-project/cli/package.json @@ -14,8 +14,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/end-to-end/package.json b/yarn-project/end-to-end/package.json index 1e7e6a34e013..01e14a2ecb11 100644 --- a/yarn-project/end-to-end/package.json +++ b/yarn-project/end-to-end/package.json @@ -4,8 +4,6 @@ "type": "module", "exports": "./dest/index.js", "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/ethereum/package.json b/yarn-project/ethereum/package.json index 82a2402ad328..90e6f2ee7c19 100644 --- a/yarn-project/ethereum/package.json +++ b/yarn-project/ethereum/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/foundation/package.json b/yarn-project/foundation/package.json index 7441da401864..3e8e058f4be7 100644 --- a/yarn-project/foundation/package.json +++ b/yarn-project/foundation/package.json @@ -35,8 +35,6 @@ "./committable": "./dest/committable/index.js" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/key-store/package.json b/yarn-project/key-store/package.json index e9b763702192..d43c019eef9a 100644 --- a/yarn-project/key-store/package.json +++ b/yarn-project/key-store/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/l1-artifacts/package.json b/yarn-project/l1-artifacts/package.json index c1f000e2d95d..57e271c6927f 100644 --- a/yarn-project/l1-artifacts/package.json +++ b/yarn-project/l1-artifacts/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && yarn generate && tsc -b", "clean": "rm -rf ./dest ./generated .tsbuildinfo", "formatting": "run -T prettier --check ./generated && run -T eslint ./generated", diff --git a/yarn-project/merkle-tree/package.json b/yarn-project/merkle-tree/package.json index 163d6fc8dba4..d551bb848682 100644 --- a/yarn-project/merkle-tree/package.json +++ b/yarn-project/merkle-tree/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/noir-compiler/package.json b/yarn-project/noir-compiler/package.json index 7ef409d0bb48..d9efa71dc52b 100644 --- a/yarn-project/noir-compiler/package.json +++ b/yarn-project/noir-compiler/package.json @@ -17,8 +17,6 @@ "aztec-compile": "dest/cli.js" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/noir-contracts/package.json b/yarn-project/noir-contracts/package.json index b9d7e5eb3fbd..0739cee59762 100644 --- a/yarn-project/noir-contracts/package.json +++ b/yarn-project/noir-contracts/package.json @@ -8,8 +8,6 @@ "./types": "./dest/types/index.js" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/p2p-bootstrap/package.json b/yarn-project/p2p-bootstrap/package.json index 89fc049dba2e..646ba2c4abf2 100644 --- a/yarn-project/p2p-bootstrap/package.json +++ b/yarn-project/p2p-bootstrap/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/p2p/package.json b/yarn-project/p2p/package.json index f32130037027..2b8e317e6034 100644 --- a/yarn-project/p2p/package.json +++ b/yarn-project/p2p/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/package.common.json b/yarn-project/package.common.json index d6231d92f893..6b6f74712581 100644 --- a/yarn-project/package.common.json +++ b/yarn-project/package.common.json @@ -1,7 +1,5 @@ { "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/prover-client/package.json b/yarn-project/prover-client/package.json index fb946ce8d2bc..40741c4cc3a5 100644 --- a/yarn-project/prover-client/package.json +++ b/yarn-project/prover-client/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/rollup-provider/package.json b/yarn-project/rollup-provider/package.json index 84d68c96dc8e..abb5e8169708 100644 --- a/yarn-project/rollup-provider/package.json +++ b/yarn-project/rollup-provider/package.json @@ -12,8 +12,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/sequencer-client/package.json b/yarn-project/sequencer-client/package.json index ab89bd8f455a..1018b1e7959f 100644 --- a/yarn-project/sequencer-client/package.json +++ b/yarn-project/sequencer-client/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/types/package.json b/yarn-project/types/package.json index 6aaac90d5e81..78977f0c5f47 100644 --- a/yarn-project/types/package.json +++ b/yarn-project/types/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/world-state/package.json b/yarn-project/world-state/package.json index 36ae514d0ea8..67d3c5a7f363 100644 --- a/yarn-project/world-state/package.json +++ b/yarn-project/world-state/package.json @@ -11,8 +11,6 @@ "tsconfig": "./tsconfig.json" }, "scripts": { - "prepare": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json", - "prepare:check": "node ../yarn-project-base/scripts/update_build_manifest.mjs package.json --check", "build": "yarn clean && tsc -b", "build:dev": "tsc -b --watch", "clean": "rm -rf ./dest .tsbuildinfo", diff --git a/yarn-project/yarn-project-base/scripts/update_build_manifest.mjs b/yarn-project/yarn-project-base/scripts/update_build_manifest.mjs deleted file mode 100644 index b915dd8733d1..000000000000 --- a/yarn-project/yarn-project-base/scripts/update_build_manifest.mjs +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env node -// Updates build manifest for a package based on a package.json -import { existsSync, readFileSync, writeFileSync } from 'fs'; -import { basename, dirname, join, resolve } from 'path'; -import { cwd } from 'process'; - -// Update build_manifest.json with new dependencies -function updateBuildManifest(buildManifestFile, allDependencies, projectKey, options) { - // Check if build_manifest.json exists - if (!existsSync(buildManifestFile)) { - console.error(`Error: ${buildManifestFile} not found (cwd ${cwd()}).`); - process.exit(2); - } - - // Read build_manifest.json - const buildManifestData = JSON.parse(readFileSync(buildManifestFile, 'utf-8')); - - if (projectKey in buildManifestData) { - // Filter package names from dependencies that start with "@aztec/" - const aztecDependencies = Object.keys(allDependencies).filter(packageName => packageName.startsWith('@aztec/')); - - // Update the "dependencies" key in the corresponding section of the buildManifestData - // Take just the folder name component - // Filter out dependencies that are not themselves in the manifest: - const updatedDependencies = aztecDependencies - .map(packageName => packageName.split('/')[1]) - .filter(depProjectKey => !!buildManifestData[depProjectKey]); - - // If we are just checking, throw if dependencies don't match - if (options.checkOnly) { - const currentDependencies = buildManifestData[projectKey]['dependencies']; - if ( - updatedDependencies.length !== currentDependencies.length || - !updatedDependencies.reduce((ret, val, idx) => ret && val === currentDependencies[idx], true) - ) { - console.error( - `Dependencies for project ${projectKey} have changed and the build_manifest needs to be updated. Run yarn prepare on the yarn-project root.`, - `\n Current: ${JSON.stringify(currentDependencies)}`, - `\n Updated: ${JSON.stringify(updatedDependencies)}`, - ); - process.exit(10); - } - } - // Otherwise, update them - else { - buildManifestData[projectKey]['dependencies'] = updatedDependencies; - } - - // Write the updated data back to build_manifest.json - writeFileSync(buildManifestFile, JSON.stringify(buildManifestData, null, 2)); - } else { - console.error(`Error: '${projectKey}' not found in build_manifest.json`); - process.exit(3); - } -} - -// Entry point for the script -function main() { - try { - // Check if the path to the package.json file is provided as a command-line argument - if (process.argv.length === 2) { - console.error(`Usage: ${process.argv[0]} path/to/package.json`); - process.exit(1); - } - - const packageJsonFile = process.argv[2]; - - // Check if package.json exists - if (!existsSync(packageJsonFile)) { - console.error(`Error: ${packageJsonFile} not found.`); - process.exit(2); - } - - // Process options if any - const options = { checkOnly: false }; - for (const arg of process.argv.slice(3)) { - if (arg === '--check') { - options.checkOnly = true; - } else { - console.error(`Unknown option ${arg}`); - process.exit(3); - } - } - - // Read package.json - const packageData = JSON.parse(readFileSync(packageJsonFile, 'utf-8')); - - // Get the directory name of the directory that holds package.json - const projectKey = basename(dirname(resolve(packageJsonFile))); - - // Add the path to the build-manifest.json file - const buildManifestFile = join(dirname(packageJsonFile), '..', '..', 'build_manifest.json'); - - // Update build_manifest.json with the new dependencies - updateBuildManifest( - buildManifestFile, - { ...packageData.dependencies, ...packageData.devDependencies }, - projectKey, - options, - ); - } catch (err) { - console.error(`Failed updating ${resolve(process.argv[2])}`); - console.error(err); - } -} -main(); From 55e57aca63f7faba1ac475d7baee42a0744e5720 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Thu, 14 Sep 2023 02:09:22 +0000 Subject: [PATCH 06/25] git subrepo push --branch=main barretenberg subrepo: subdir: "barretenberg" merged: "ae9f99c3c" upstream: origin: "https://github.com/AztecProtocol/barretenberg" branch: "main" commit: "ae9f99c3c" git-subrepo: version: "0.4.6" origin: "???" commit: "???" [skip ci] --- barretenberg/.gitrepo | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/barretenberg/.gitrepo b/barretenberg/.gitrepo index c7afea8c09a6..875ba73837d4 100644 --- a/barretenberg/.gitrepo +++ b/barretenberg/.gitrepo @@ -5,8 +5,8 @@ ; [subrepo] remote = https://github.com/AztecProtocol/barretenberg - branch = master - commit = 7edb1644d0ae472a70fc3554b7d2cfc6c5496168 - parent = 404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4 + branch = main + commit = ae9f99c3caf0213882d843577374b03871cc7092 + parent = c8a5cfb375b498475503c12cc83fcdba39f2ec5f method = merge cmdver = 0.4.6 From cd8f349a8d1cc9045699e5f116924ca1ed90be72 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Thu, 14 Sep 2023 02:09:25 +0000 Subject: [PATCH 07/25] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "a6b558800" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "a6b558800" git-subrepo: version: "0.4.6" origin: "???" commit: "???" [skip ci] --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index e3df984cbe51..31bff7a92d6b 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = 6905fb906199ab1a69c4c263029f9a0b8708ee4d - parent = 0c3a6271a1d90fa95a0163606e49f432573e66da + commit = a6b558800fa7712fec7045a2d3a238824cf17084 + parent = c8a5cfb375b498475503c12cc83fcdba39f2ec5f method = merge cmdver = 0.4.6 From a1212aee448c059988715ed2f1f51b859bafad0d Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Thu, 14 Sep 2023 11:19:39 +0000 Subject: [PATCH 08/25] Fix build_local unbound var. --- build-system/scripts/build_local | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-system/scripts/build_local b/build-system/scripts/build_local index 4cd91c28f048..c8acf6715c2c 100755 --- a/build-system/scripts/build_local +++ b/build-system/scripts/build_local @@ -8,7 +8,7 @@ set -eu -TARGET_PROJECT=$1 +TARGET_PROJECT=${1:-} ONLY_TARGET=${2:-} if [ -n "${NO_CACHE:-}" ]; then From 0d4c707079ff1ff4212fc3345066b0deded98449 Mon Sep 17 00:00:00 2001 From: Jean M <132435771+jeanmon@users.noreply.github.com> Date: Thu, 14 Sep 2023 14:39:25 +0200 Subject: [PATCH 09/25] chore(circuits): Base rollup cbind msgpack (#2263) Resolves #2096 # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [x] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [x] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [x] Every change is related to the PR description. - [x] 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: ludamad --- circuits/cpp/bootstrap.sh | 9 +- .../cpp/src/aztec3/circuits/abis/packers.hpp | 3 + .../base_or_merge_rollup_public_inputs.hpp | 6 +- .../abis/rollup/base/base_rollup_inputs.hpp | 20 +- .../src/aztec3/circuits/rollup/base/.test.cpp | 160 ++++++------- .../aztec3/circuits/rollup/base/c_bind.cpp | 57 +---- .../src/aztec3/circuits/rollup/base/c_bind.h | 11 +- circuits/cpp/src/aztec3/constants.hpp | 12 +- .../src/core/libraries/ConstantsGen.sol | 3 + .../aztec-nr/aztec/src/constants_gen.nr | 3 + .../circuits.js/src/cbind/circuits.gen.ts | 210 ++++++++++++++++++ .../circuits.js/src/cbind/constants.gen.ts | 3 + yarn-project/circuits.js/src/cbind/types.ts | 2 + yarn-project/circuits.js/src/rollup/index.ts | 2 +- .../src/rollup/rollup_wasm_wrapper.test.ts | 21 +- .../src/rollup/rollup_wasm_wrapper.ts | 22 -- .../src/structs/rollup/base_rollup.ts | 90 +++----- .../circuits.js/src/tests/factories.ts | 58 ++--- .../block_builder/solo_block_builder.test.ts | 6 +- .../src/block_builder/solo_block_builder.ts | 104 +++++++-- .../sequencer-client/src/simulator/rollup.ts | 11 +- yarn-project/types/src/sibling_path.ts | 10 + .../src/world-state-db/merkle_trees.ts | 4 +- 23 files changed, 518 insertions(+), 309 deletions(-) delete mode 100644 yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.ts diff --git a/circuits/cpp/bootstrap.sh b/circuits/cpp/bootstrap.sh index f90114e82a4f..4c829a9570e1 100755 --- a/circuits/cpp/bootstrap.sh +++ b/circuits/cpp/bootstrap.sh @@ -62,5 +62,10 @@ cmake --preset $PRESET -DCMAKE_BUILD_TYPE=RelWithAssert cmake --build --preset $PRESET ${@/#/--target } # Build WASM. -cmake --preset wasm -cmake --build --preset wasm +if [ -n "${WASM_DEBUG:-}" ] ; then + cmake --preset wasm-dbg + cmake --build --preset wasm-dbg +else + cmake --preset wasm + cmake --build --preset wasm +fi diff --git a/circuits/cpp/src/aztec3/circuits/abis/packers.hpp b/circuits/cpp/src/aztec3/circuits/abis/packers.hpp index 8c125d860c4a..fb001b0f049a 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/packers.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/packers.hpp @@ -41,6 +41,9 @@ struct ConstantsPacker { NUM_UNENCRYPTED_LOGS_HASHES_PER_TX, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, KERNELS_PER_BASE_ROLLUP, + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, VK_TREE_HEIGHT, FUNCTION_TREE_HEIGHT, CONTRACT_TREE_HEIGHT, diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp index a72c64f055d9..8b234ac8dc43 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp @@ -14,6 +14,7 @@ const uint32_t MERGE_ROLLUP_TYPE = 1; template struct BaseOrMergeRollupPublicInputs { using fr = typename NCT::fr; using AggregationObject = typename NCT::AggregationObject; + using boolean = typename NCT::boolean; uint32_t rollup_type; // subtree height is always 0 for base. @@ -52,7 +53,10 @@ template struct BaseOrMergeRollupPublicInputs { start_public_data_tree_root, end_public_data_tree_root, calldata_hash); - bool operator==(BaseOrMergeRollupPublicInputs const&) const = default; + boolean operator==(BaseOrMergeRollupPublicInputs const& other) const + { + return msgpack_derived_equals(*this, other); + }; }; } // namespace aztec3::circuits::abis diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_rollup_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_rollup_inputs.hpp index 7e78e21c2509..b2b28ea726d6 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_rollup_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/base/base_rollup_inputs.hpp @@ -13,8 +13,9 @@ namespace aztec3::circuits::abis { template struct BaseRollupInputs { using fr = typename NCT::fr; + using boolean = typename NCT::boolean; - std::array, 2> kernel_data{}; + std::array, KERNELS_PER_BASE_ROLLUP> kernel_data{}; AppendOnlyTreeSnapshot start_private_data_tree_snapshot{}; AppendOnlyTreeSnapshot start_nullifier_tree_snapshot{}; @@ -22,8 +23,8 @@ template struct BaseRollupInputs { fr start_public_data_tree_root{}; AppendOnlyTreeSnapshot start_historic_blocks_tree_snapshot{}; - std::array, 2 * MAX_NEW_NULLIFIERS_PER_TX> low_nullifier_leaf_preimages{}; - std::array, 2 * MAX_NEW_NULLIFIERS_PER_TX> + std::array, MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP> low_nullifier_leaf_preimages{}; + std::array, MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP> low_nullifier_membership_witness{}; // For inserting the new subtrees into their respective trees: @@ -31,12 +32,13 @@ template struct BaseRollupInputs { std::array new_commitments_subtree_sibling_path{}; std::array new_nullifiers_subtree_sibling_path{}; std::array new_contracts_subtree_sibling_path{}; - std::array, 2 * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX> + std::array, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP> new_public_data_update_requests_sibling_paths{}; - std::array, 2 * MAX_PUBLIC_DATA_READS_PER_TX> + std::array, MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP> new_public_data_reads_sibling_paths{}; - std::array, 2> historic_blocks_tree_root_membership_witnesses{}; + std::array, KERNELS_PER_BASE_ROLLUP> + historic_blocks_tree_root_membership_witnesses{}; ConstantRollupData constants{}; @@ -56,7 +58,11 @@ template struct BaseRollupInputs { new_public_data_reads_sibling_paths, historic_blocks_tree_root_membership_witnesses, constants); - bool operator==(BaseRollupInputs const&) const = default; + + boolean operator==(BaseRollupInputs const& other) const + { + return msgpack_derived_equals(*this, other); + }; }; } // namespace aztec3::circuits::abis diff --git a/circuits/cpp/src/aztec3/circuits/rollup/base/.test.cpp b/circuits/cpp/src/aztec3/circuits/rollup/base/.test.cpp index abd6dba76b8b..9e14512f24c0 100644 --- a/circuits/cpp/src/aztec3/circuits/rollup/base/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/rollup/base/.test.cpp @@ -64,67 +64,57 @@ class base_rollup_tests : public ::testing::Test { protected: static void SetUpTestSuite() { barretenberg::srs::init_crs_factory("../barretenberg/cpp/srs_db/ignition"); } - static void run_cbind(BaseRollupInputs& base_rollup_inputs, - BaseOrMergeRollupPublicInputs& expected_public_inputs, - bool compare_pubins = true, - bool assert_no_circuit_failure = true) - { - info("Retesting via cbinds...."); - // TODO(banks12) might be able to get rid of proving key buffer - uint8_t const* pk_buf = nullptr; - size_t const pk_size = base_rollup__init_proving_key(&pk_buf); - (void)pk_size; - // info("Proving key size: ", pk_size); - - // TODO(banks12) might be able to get rid of verification key buffer - uint8_t const* vk_buf = nullptr; - size_t const vk_size = base_rollup__init_verification_key(pk_buf, &vk_buf); - (void)vk_size; - // info("Verification key size: ", vk_size); - - std::vector base_rollup_inputs_vec; - serialize::write(base_rollup_inputs_vec, base_rollup_inputs); - - // uint8_t const* proof_data; - // size_t proof_data_size; - uint8_t const* public_inputs_buf = nullptr; - size_t public_inputs_size = 0; - // info("simulating circuit via cbind"); - uint8_t* const circuit_failure_ptr = - base_rollup__sim(base_rollup_inputs_vec.data(), &public_inputs_size, &public_inputs_buf); - - ASSERT_TRUE(assert_no_circuit_failure ? circuit_failure_ptr == nullptr : circuit_failure_ptr != nullptr); - // info("Proof size: ", proof_data_size); - // info("PublicInputs size: ", public_inputs_size); - - if (compare_pubins) { - BaseOrMergeRollupPublicInputs public_inputs; - uint8_t const* public_inputs_buf_tmp = public_inputs_buf; - serialize::read(public_inputs_buf_tmp, public_inputs); - ASSERT_EQ(public_inputs.calldata_hash.size(), expected_public_inputs.calldata_hash.size()); - for (size_t i = 0; i < public_inputs.calldata_hash.size(); i++) { - ASSERT_EQ(public_inputs.calldata_hash[i], expected_public_inputs.calldata_hash[i]); - } - - std::vector expected_public_inputs_vec; - serialize::write(expected_public_inputs_vec, expected_public_inputs); - - ASSERT_EQ(public_inputs_size, expected_public_inputs_vec.size()); - // Just compare the first 10 bytes of the serialized public outputs - if (public_inputs_size > 10) { - // for (size_t 0; i < public_inputs_size; i++) { - for (size_t i = 0; i < 10; i++) { - ASSERT_EQ(public_inputs_buf[i], expected_public_inputs_vec[i]); - } - } - } - - free((void*)pk_buf); - free((void*)vk_buf); - // free((void*)proof_data); - free((void*)public_inputs_buf); - // info("finished retesting via cbinds..."); - } + // TODO(1998): uncomment once https://github.com/AztecProtocol/aztec-packages/issues/1998 is solved and + // use new pattern such as call_func_and_wrapper from test_helper.hpp + + // static void run_cbind(BaseRollupInputs& base_rollup_inputs, + // BaseOrMergeRollupPublicInputs& expected_public_inputs, + // bool compare_pubins = true, + // bool assert_no_circuit_failure = true) + // { + // info("Retesting via cbinds...."); + + // std::vector base_rollup_inputs_vec; + // serialize::write(base_rollup_inputs_vec, base_rollup_inputs); + + // // uint8_t const* proof_data; + // // size_t proof_data_size; + // uint8_t const* public_inputs_buf = nullptr; + // size_t public_inputs_size = 0; + // // info("simulating circuit via cbind"); + // uint8_t* const circuit_failure_ptr = + // base_rollup__sim(base_rollup_inputs_vec.data(), &public_inputs_size, &public_inputs_buf); + + // ASSERT_TRUE(assert_no_circuit_failure ? circuit_failure_ptr == nullptr : circuit_failure_ptr != nullptr); + // // info("Proof size: ", proof_data_size); + // // info("PublicInputs size: ", public_inputs_size); + + // if (compare_pubins) { + // BaseOrMergeRollupPublicInputs public_inputs; + // uint8_t const* public_inputs_buf_tmp = public_inputs_buf; + // serialize::read(public_inputs_buf_tmp, public_inputs); + // ASSERT_EQ(public_inputs.calldata_hash.size(), expected_public_inputs.calldata_hash.size()); + // for (size_t i = 0; i < public_inputs.calldata_hash.size(); i++) { + // ASSERT_EQ(public_inputs.calldata_hash[i], expected_public_inputs.calldata_hash[i]); + // } + + // std::vector expected_public_inputs_vec; + // serialize::write(expected_public_inputs_vec, expected_public_inputs); + + // ASSERT_EQ(public_inputs_size, expected_public_inputs_vec.size()); + // // Just compare the first 10 bytes of the serialized public outputs + // if (public_inputs_size > 10) { + // // for (size_t 0; i < public_inputs_size; i++) { + // for (size_t i = 0; i < 10; i++) { + // ASSERT_EQ(public_inputs_buf[i], expected_public_inputs_vec[i]); + // } + // } + // } + + // // free((void*)proof_data); + // free((void*)public_inputs_buf); + // // info("finished retesting via cbinds..."); + // } }; TEST_F(base_rollup_tests, native_no_new_contract_leafs) @@ -154,7 +144,8 @@ TEST_F(base_rollup_tests, native_no_new_contract_leafs) ASSERT_EQ(outputs.end_contract_tree_snapshot, expectedEndContractTreeSnapshot); ASSERT_EQ(outputs.start_contract_tree_snapshot, emptyInputs.start_contract_tree_snapshot); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(emptyInputs, outputs); + // TODO(1998): see above + // run_cbind(emptyInputs, outputs); } TEST_F(base_rollup_tests, native_contract_leaf_inserted) @@ -199,7 +190,8 @@ TEST_F(base_rollup_tests, native_contract_leaf_inserted) ASSERT_EQ(outputs.start_contract_tree_snapshot, inputs.start_contract_tree_snapshot); ASSERT_EQ(outputs.end_contract_tree_snapshot, expected_end_contracts_snapshot); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_contract_leaf_inserted_in_non_empty_snapshot_tree) @@ -255,7 +247,8 @@ TEST_F(base_rollup_tests, native_contract_leaf_inserted_in_non_empty_snapshot_tr ASSERT_EQ(outputs.start_contract_tree_snapshot, inputs.start_contract_tree_snapshot); ASSERT_EQ(outputs.end_contract_tree_snapshot, expected_end_contracts_snapshot); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_new_commitments_tree) @@ -297,7 +290,8 @@ TEST_F(base_rollup_tests, native_new_commitments_tree) ASSERT_EQ(outputs.start_private_data_tree_snapshot, inputs.start_private_data_tree_snapshot); ASSERT_EQ(outputs.end_private_data_tree_snapshot, expected_end_commitments_snapshot); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } template NT::fr calc_root(NT::fr leaf, NT::uint32 leafIndex, std::array siblingPath) @@ -477,8 +471,8 @@ TEST_F(base_rollup_tests, native_nullifier_tree_regression) // This test runs after some data has already been inserted into the tree // This test will pre-populate the tree with 6 * KERNEL_NEW_NULLIFIERS_LENGTH values (0 item + 6 * // KERNEL_NEW_NULLIFIERS_LENGTH -1 more) simulating that a rollup inserting two random values has already - // succeeded. Note that this corresponds to 3 (1 already initialized and 2 new ones) base rollups. This rollup then - // adds two further random values that will end up having their low nullifiers point at each other + // succeeded. Note that this corresponds to 3 (1 already initialized and 2 new ones) base rollups. This rollup + // then adds two further random values that will end up having their low nullifiers point at each other std::vector initial_values(6 * MAX_NEW_NULLIFIERS_PER_TX - 1, 0); for (size_t i = 0; i < 2 * MAX_NEW_NULLIFIERS_PER_TX - 1; i++) { initial_values[i] = i + 1; @@ -585,14 +579,14 @@ TEST_F(base_rollup_tests, native_empty_block_calldata_hash) ASSERT_TRUE(compare_field_hash_to_expected(output_calldata_hash, expected_calldata_hash) == true); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_calldata_hash) { - // Execute the base rollup circuit with nullifiers, commitments and a contract deployment. Then check the calldata - // hash against the expected value. + // Execute the base rollup circuit with nullifiers, commitments and a contract deployment. Then check the + // calldata hash against the expected value. std::array, 2> kernel_data = { get_empty_kernel(), get_empty_kernel() }; // Commitments inserted are [1,2,3,4,5,6,7,8 ...]. Nullifiers inserted are [8,9,10,11,12,13,14,15 ...] @@ -630,7 +624,8 @@ TEST_F(base_rollup_tests, native_calldata_hash) ASSERT_EQ(expected_calldata_hash, output_calldata_hash); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_compute_membership_historic_blocks_tree_negative) @@ -676,7 +671,8 @@ TEST_F(base_rollup_tests, native_constants_dont_change) aztec3::circuits::rollup::native_base_rollup::base_rollup_circuit(builder, inputs); ASSERT_EQ(inputs.constants, outputs.constants); EXPECT_FALSE(builder.failed()); - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_constants_dont_match_kernels_chain_id) @@ -730,7 +726,8 @@ TEST_F(base_rollup_tests, native_cbind_0) // @todo Error handling? BaseRollupInputs inputs = base_rollup_inputs_from_kernels({ get_empty_kernel(), get_empty_kernel() }); BaseOrMergeRollupPublicInputs ignored_public_inputs; - run_cbind(inputs, ignored_public_inputs, false); + // TODO(1998): see above + // run_cbind(inputs, ignored_public_inputs, false); } TEST_F(base_rollup_tests, native_single_public_state_read) @@ -765,7 +762,8 @@ TEST_F(base_rollup_tests, native_single_public_state_read) ASSERT_EQ(outputs.end_public_data_tree_root, public_data_tree.root()); ASSERT_EQ(outputs.end_public_data_tree_root, outputs.start_public_data_tree_root); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_single_public_state_write) @@ -803,7 +801,8 @@ TEST_F(base_rollup_tests, native_single_public_state_write) ASSERT_EQ(outputs.end_public_data_tree_root, public_data_tree.root()); ASSERT_NE(outputs.end_public_data_tree_root, outputs.start_public_data_tree_root); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_multiple_public_state_read_writes) @@ -823,7 +822,8 @@ TEST_F(base_rollup_tests, native_multiple_public_state_read_writes) std::array, 2> kernel_data = { get_empty_kernel(), get_empty_kernel() }; - // We set up reads and writes such that the right tx will read or write to indices already modified by the left tx + // We set up reads and writes such that the right tx will read or write to indices already modified by the left + // tx kernel_data[0].public_inputs.end.public_data_reads[0] = make_public_read(fr(1), fr(101)); kernel_data[0].public_inputs.end.public_data_reads[1] = make_public_read(fr(2), fr(102)); kernel_data[0].public_inputs.end.public_data_update_requests[0] = @@ -850,7 +850,8 @@ TEST_F(base_rollup_tests, native_multiple_public_state_read_writes) ASSERT_EQ(outputs.end_public_data_tree_root, public_data_tree.root()); ASSERT_NE(outputs.end_public_data_tree_root, outputs.start_public_data_tree_root); ASSERT_FALSE(builder.failed()) << builder.failure_msgs; - run_cbind(inputs, outputs); + // TODO(1998): see above + // run_cbind(inputs, outputs); } TEST_F(base_rollup_tests, native_invalid_public_state_read) @@ -889,7 +890,8 @@ TEST_F(base_rollup_tests, native_invalid_public_state_read) ASSERT_EQ(outputs.end_public_data_tree_root, public_data_tree.root()); ASSERT_EQ(outputs.end_public_data_tree_root, outputs.start_public_data_tree_root); ASSERT_TRUE(builder.failed()); - run_cbind(inputs, outputs, true, false); + // TODO(1998): see above + // run_cbind(inputs, outputs, true, false); } } // namespace aztec3::circuits::rollup::base::native_base_rollup_circuit diff --git a/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.cpp b/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.cpp index 2a2cbbe1945c..0be1cd67ae31 100644 --- a/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.cpp +++ b/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.cpp @@ -14,62 +14,13 @@ namespace { using Builder = UltraCircuitBuilder; using NT = aztec3::utils::types::NativeTypes; using DummyCircuitBuilder = aztec3::utils::DummyCircuitBuilder; -using aztec3::circuits::abis::BaseOrMergeRollupPublicInputs; using aztec3::circuits::abis::BaseRollupInputs; using aztec3::circuits::rollup::native_base_rollup::base_rollup_circuit; - } // namespace // WASM Cbinds -extern "C" { - -WASM_EXPORT size_t base_rollup__init_proving_key(uint8_t const** pk_buf) -{ - std::vector pk_vec(42, 0); - - auto* raw_buf = (uint8_t*)malloc(pk_vec.size()); - memcpy(raw_buf, (void*)pk_vec.data(), pk_vec.size()); - *pk_buf = raw_buf; - - return pk_vec.size(); -} - -WASM_EXPORT size_t base_rollup__init_verification_key(uint8_t const* pk_buf, uint8_t const** vk_buf) -{ - std::vector vk_vec(42, 0); - // TODO remove when proving key is used - (void)pk_buf; // unused - - auto* raw_buf = (uint8_t*)malloc(vk_vec.size()); - memcpy(raw_buf, (void*)vk_vec.data(), vk_vec.size()); - *vk_buf = raw_buf; - - return vk_vec.size(); -} - -WASM_EXPORT uint8_t* base_rollup__sim(uint8_t const* base_rollup_inputs_buf, - size_t* base_rollup_public_inputs_size_out, - uint8_t const** base_or_merge_rollup_public_inputs_buf) -{ +CBIND(base_rollup__sim, [](BaseRollupInputs const& base_rollup_inputs) { DummyCircuitBuilder builder = DummyCircuitBuilder("base_rollup__sim"); - // TODO accept proving key and use that to initialize builders - // this info is just to prevent error for unused pk_buf - // TODO do we want to accept it or just get it from our factory? - // auto crs_factory = std::make_shared(); - - BaseRollupInputs base_rollup_inputs; - serialize::read(base_rollup_inputs_buf, base_rollup_inputs); - - BaseOrMergeRollupPublicInputs const public_inputs = base_rollup_circuit(builder, base_rollup_inputs); - - // serialize public inputs to bytes vec - std::vector public_inputs_vec; - serialize::write(public_inputs_vec, public_inputs); - // copy public inputs to output buffer - auto* raw_public_inputs_buf = (uint8_t*)malloc(public_inputs_vec.size()); - memcpy(raw_public_inputs_buf, (void*)public_inputs_vec.data(), public_inputs_vec.size()); - *base_or_merge_rollup_public_inputs_buf = raw_public_inputs_buf; - *base_rollup_public_inputs_size_out = public_inputs_vec.size(); - return builder.alloc_and_serialize_first_failure(); -} -} // extern "C" + auto const& public_inputs = base_rollup_circuit(builder, base_rollup_inputs); + return builder.result_or_error(public_inputs); +}); \ No newline at end of file diff --git a/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.h b/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.h index 5f5095f9fa85..dc833dbda13c 100644 --- a/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.h +++ b/circuits/cpp/src/aztec3/circuits/rollup/base/c_bind.h @@ -5,13 +5,4 @@ #include #include -extern "C" { - -WASM_EXPORT size_t base_rollup__init_proving_key(uint8_t const** pk_buf); -WASM_EXPORT size_t base_rollup__init_verification_key(uint8_t const* pk_buf, uint8_t const** vk_buf); -WASM_EXPORT size_t base_rollup__dummy_previous_rollup(uint8_t const** previous_rollup_buf); -WASM_EXPORT uint8_t* base_rollup__sim(uint8_t const* base_rollup_inputs_buf, - size_t* base_rollup_public_inputs_size_out, - uint8_t const** base_or_merge_rollup_public_inputs_buf); -WASM_EXPORT size_t base_rollup__verify_proof(uint8_t const* vk_buf, uint8_t const* proof, uint32_t length); -} \ No newline at end of file +CBIND_DECL(base_rollup__sim); \ No newline at end of file diff --git a/circuits/cpp/src/aztec3/constants.hpp b/circuits/cpp/src/aztec3/constants.hpp index 5437250e474d..4f90a329345d 100644 --- a/circuits/cpp/src/aztec3/constants.hpp +++ b/circuits/cpp/src/aztec3/constants.hpp @@ -73,9 +73,13 @@ constexpr size_t NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; // TODO(961): Use this constant everywhere instead of hard-coded "2". constexpr size_t KERNELS_PER_BASE_ROLLUP = 2; constexpr size_t COMMITMENTS_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_NEW_COMMITMENTS_PER_TX * 32; -constexpr size_t NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_NEW_NULLIFIERS_PER_TX * 32; +constexpr size_t MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_NEW_NULLIFIERS_PER_TX; +constexpr size_t NULLIFIERS_NUM_BYTES_PER_BASE_ROLLUP = MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP * 32; +constexpr size_t MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP = + KERNELS_PER_BASE_ROLLUP * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX; constexpr size_t PUBLIC_DATA_WRITES_NUM_BYTES_PER_BASE_ROLLUP = - KERNELS_PER_BASE_ROLLUP * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX * 64; // old value, new value + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP * 64; // old value, new value +constexpr size_t MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_PUBLIC_DATA_READS_PER_TX; constexpr size_t CONTRACTS_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_NEW_CONTRACTS_PER_TX * 32; constexpr size_t CONTRACT_DATA_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * MAX_NEW_CONTRACTS_PER_TX * 64; // aztec address + eth address (padded to 0x20) @@ -86,7 +90,6 @@ constexpr size_t L2_TO_L1_MSGS_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLL constexpr size_t LOGS_HASHES_NUM_BYTES_PER_BASE_ROLLUP = KERNELS_PER_BASE_ROLLUP * 2 * 32; // 1 for encrypted + 1 for unencrypted - // TREES RELATED CONSTANTS constexpr size_t VK_TREE_HEIGHT = 3; constexpr size_t FUNCTION_TREE_HEIGHT = 4; @@ -100,7 +103,8 @@ constexpr size_t ROLLUP_VK_TREE_HEIGHT = 8; // TODO: update // SUB-TREES RELATED CONSTANTS -constexpr size_t CONTRACT_SUBTREE_HEIGHT = 1; +constexpr size_t CONTRACT_SUBTREE_HEIGHT = + static_cast(log2(MAX_NEW_CONTRACTS_PER_TX * KERNELS_PER_BASE_ROLLUP)); constexpr size_t CONTRACT_SUBTREE_SIBLING_PATH_LENGTH = CONTRACT_TREE_HEIGHT - CONTRACT_SUBTREE_HEIGHT; constexpr size_t PRIVATE_DATA_SUBTREE_HEIGHT = static_cast(log2(KERNELS_PER_BASE_ROLLUP * MAX_NEW_COMMITMENTS_PER_TX)); diff --git a/l1-contracts/src/core/libraries/ConstantsGen.sol b/l1-contracts/src/core/libraries/ConstantsGen.sol index d1c76b84f6ca..f314fbf484c4 100644 --- a/l1-contracts/src/core/libraries/ConstantsGen.sol +++ b/l1-contracts/src/core/libraries/ConstantsGen.sol @@ -38,6 +38,9 @@ library Constants { uint256 internal constant NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; uint256 internal constant NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; uint256 internal constant KERNELS_PER_BASE_ROLLUP = 2; + uint256 internal constant MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP = 128; + uint256 internal constant MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP = 32; + uint256 internal constant MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP = 32; uint256 internal constant VK_TREE_HEIGHT = 3; uint256 internal constant FUNCTION_TREE_HEIGHT = 4; uint256 internal constant CONTRACT_TREE_HEIGHT = 16; diff --git a/yarn-project/aztec-nr/aztec/src/constants_gen.nr b/yarn-project/aztec-nr/aztec/src/constants_gen.nr index 8f680055a4f3..6764ee657c33 100644 --- a/yarn-project/aztec-nr/aztec/src/constants_gen.nr +++ b/yarn-project/aztec-nr/aztec/src/constants_gen.nr @@ -23,6 +23,9 @@ global NUM_ENCRYPTED_LOGS_HASHES_PER_TX: Field = 1; global NUM_UNENCRYPTED_LOGS_HASHES_PER_TX: Field = 1; global NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP: Field = 16; global KERNELS_PER_BASE_ROLLUP: Field = 2; +global MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP: Field = 128; +global MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP: Field = 32; +global MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP: Field = 32; global VK_TREE_HEIGHT: Field = 3; global FUNCTION_TREE_HEIGHT: Field = 4; global CONTRACT_TREE_HEIGHT: Field = 16; diff --git a/yarn-project/circuits.js/src/cbind/circuits.gen.ts b/yarn-project/circuits.js/src/cbind/circuits.gen.ts index 3a257d984b1e..5dabbdef88f6 100644 --- a/yarn-project/circuits.js/src/cbind/circuits.gen.ts +++ b/yarn-project/circuits.js/src/cbind/circuits.gen.ts @@ -11,6 +11,7 @@ import { Address, AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, + BaseRollupInputs, CallContext, CircuitError, CombinedAccumulatedData, @@ -35,6 +36,7 @@ import { MergeRollupInputs, NativeAggregationState, NewContractData, + NullifierLeafPreimage, OptionallyRevealedData, Point, PreviousKernelData, @@ -2264,6 +2266,42 @@ export function fromAppendOnlyTreeSnapshot(o: AppendOnlyTreeSnapshot): MsgpackAp }; } +interface MsgpackNullifierLeafPreimage { + leaf_value: Buffer; + next_value: Buffer; + next_index: number; +} + +export function toNullifierLeafPreimage(o: MsgpackNullifierLeafPreimage): NullifierLeafPreimage { + if (o.leaf_value === undefined) { + throw new Error('Expected leaf_value in NullifierLeafPreimage deserialization'); + } + if (o.next_value === undefined) { + throw new Error('Expected next_value in NullifierLeafPreimage deserialization'); + } + if (o.next_index === undefined) { + throw new Error('Expected next_index in NullifierLeafPreimage deserialization'); + } + return new NullifierLeafPreimage(Fr.fromBuffer(o.leaf_value), Fr.fromBuffer(o.next_value), o.next_index); +} + +export function fromNullifierLeafPreimage(o: NullifierLeafPreimage): MsgpackNullifierLeafPreimage { + if (o.leafValue === undefined) { + throw new Error('Expected leafValue in NullifierLeafPreimage serialization'); + } + if (o.nextValue === undefined) { + throw new Error('Expected nextValue in NullifierLeafPreimage serialization'); + } + if (o.nextIndex === undefined) { + throw new Error('Expected nextIndex in NullifierLeafPreimage serialization'); + } + return { + leaf_value: toBuffer(o.leafValue), + next_value: toBuffer(o.nextValue), + next_index: o.nextIndex, + }; +} + interface MsgpackConstantRollupData { start_historic_blocks_tree_roots_snapshot: MsgpackAppendOnlyTreeSnapshot; private_kernel_vk_tree_root: Buffer; @@ -2331,6 +2369,172 @@ export function fromConstantRollupData(o: ConstantRollupData): MsgpackConstantRo }; } +interface MsgpackBaseRollupInputs { + kernel_data: Tuple; + start_private_data_tree_snapshot: MsgpackAppendOnlyTreeSnapshot; + start_nullifier_tree_snapshot: MsgpackAppendOnlyTreeSnapshot; + start_contract_tree_snapshot: MsgpackAppendOnlyTreeSnapshot; + start_public_data_tree_root: Buffer; + start_historic_blocks_tree_snapshot: MsgpackAppendOnlyTreeSnapshot; + low_nullifier_leaf_preimages: Tuple; + low_nullifier_membership_witness: Tuple; + new_commitments_subtree_sibling_path: Tuple; + new_nullifiers_subtree_sibling_path: Tuple; + new_contracts_subtree_sibling_path: Tuple; + new_public_data_update_requests_sibling_paths: Tuple, 32>; + new_public_data_reads_sibling_paths: Tuple, 32>; + historic_blocks_tree_root_membership_witnesses: Tuple; + constants: MsgpackConstantRollupData; +} + +export function toBaseRollupInputs(o: MsgpackBaseRollupInputs): BaseRollupInputs { + if (o.kernel_data === undefined) { + throw new Error('Expected kernel_data in BaseRollupInputs deserialization'); + } + if (o.start_private_data_tree_snapshot === undefined) { + throw new Error('Expected start_private_data_tree_snapshot in BaseRollupInputs deserialization'); + } + if (o.start_nullifier_tree_snapshot === undefined) { + throw new Error('Expected start_nullifier_tree_snapshot in BaseRollupInputs deserialization'); + } + if (o.start_contract_tree_snapshot === undefined) { + throw new Error('Expected start_contract_tree_snapshot in BaseRollupInputs deserialization'); + } + if (o.start_public_data_tree_root === undefined) { + throw new Error('Expected start_public_data_tree_root in BaseRollupInputs deserialization'); + } + if (o.start_historic_blocks_tree_snapshot === undefined) { + throw new Error('Expected start_historic_blocks_tree_snapshot in BaseRollupInputs deserialization'); + } + if (o.low_nullifier_leaf_preimages === undefined) { + throw new Error('Expected low_nullifier_leaf_preimages in BaseRollupInputs deserialization'); + } + if (o.low_nullifier_membership_witness === undefined) { + throw new Error('Expected low_nullifier_membership_witness in BaseRollupInputs deserialization'); + } + if (o.new_commitments_subtree_sibling_path === undefined) { + throw new Error('Expected new_commitments_subtree_sibling_path in BaseRollupInputs deserialization'); + } + if (o.new_nullifiers_subtree_sibling_path === undefined) { + throw new Error('Expected new_nullifiers_subtree_sibling_path in BaseRollupInputs deserialization'); + } + if (o.new_contracts_subtree_sibling_path === undefined) { + throw new Error('Expected new_contracts_subtree_sibling_path in BaseRollupInputs deserialization'); + } + if (o.new_public_data_update_requests_sibling_paths === undefined) { + throw new Error('Expected new_public_data_update_requests_sibling_paths in BaseRollupInputs deserialization'); + } + if (o.new_public_data_reads_sibling_paths === undefined) { + throw new Error('Expected new_public_data_reads_sibling_paths in BaseRollupInputs deserialization'); + } + if (o.historic_blocks_tree_root_membership_witnesses === undefined) { + throw new Error('Expected historic_blocks_tree_root_membership_witnesses in BaseRollupInputs deserialization'); + } + if (o.constants === undefined) { + throw new Error('Expected constants in BaseRollupInputs deserialization'); + } + return new BaseRollupInputs( + mapTuple(o.kernel_data, (v: MsgpackPreviousKernelData) => toPreviousKernelData(v)), + toAppendOnlyTreeSnapshot(o.start_private_data_tree_snapshot), + toAppendOnlyTreeSnapshot(o.start_nullifier_tree_snapshot), + toAppendOnlyTreeSnapshot(o.start_contract_tree_snapshot), + Fr.fromBuffer(o.start_public_data_tree_root), + toAppendOnlyTreeSnapshot(o.start_historic_blocks_tree_snapshot), + mapTuple(o.low_nullifier_leaf_preimages, (v: MsgpackNullifierLeafPreimage) => toNullifierLeafPreimage(v)), + mapTuple(o.low_nullifier_membership_witness, (v: MsgpackMembershipWitness16) => toMembershipWitness16(v)), + mapTuple(o.new_commitments_subtree_sibling_path, (v: Buffer) => Fr.fromBuffer(v)), + mapTuple(o.new_nullifiers_subtree_sibling_path, (v: Buffer) => Fr.fromBuffer(v)), + mapTuple(o.new_contracts_subtree_sibling_path, (v: Buffer) => Fr.fromBuffer(v)), + mapTuple(o.new_public_data_update_requests_sibling_paths, (v: Tuple) => + mapTuple(v, (v: Buffer) => Fr.fromBuffer(v)), + ), + mapTuple(o.new_public_data_reads_sibling_paths, (v: Tuple) => + mapTuple(v, (v: Buffer) => Fr.fromBuffer(v)), + ), + mapTuple(o.historic_blocks_tree_root_membership_witnesses, (v: MsgpackMembershipWitness16) => + toMembershipWitness16(v), + ), + toConstantRollupData(o.constants), + ); +} + +export function fromBaseRollupInputs(o: BaseRollupInputs): MsgpackBaseRollupInputs { + if (o.kernelData === undefined) { + throw new Error('Expected kernelData in BaseRollupInputs serialization'); + } + if (o.startPrivateDataTreeSnapshot === undefined) { + throw new Error('Expected startPrivateDataTreeSnapshot in BaseRollupInputs serialization'); + } + if (o.startNullifierTreeSnapshot === undefined) { + throw new Error('Expected startNullifierTreeSnapshot in BaseRollupInputs serialization'); + } + if (o.startContractTreeSnapshot === undefined) { + throw new Error('Expected startContractTreeSnapshot in BaseRollupInputs serialization'); + } + if (o.startPublicDataTreeRoot === undefined) { + throw new Error('Expected startPublicDataTreeRoot in BaseRollupInputs serialization'); + } + if (o.startHistoricBlocksTreeSnapshot === undefined) { + throw new Error('Expected startHistoricBlocksTreeSnapshot in BaseRollupInputs serialization'); + } + if (o.lowNullifierLeafPreimages === undefined) { + throw new Error('Expected lowNullifierLeafPreimages in BaseRollupInputs serialization'); + } + if (o.lowNullifierMembershipWitness === undefined) { + throw new Error('Expected lowNullifierMembershipWitness in BaseRollupInputs serialization'); + } + if (o.newCommitmentsSubtreeSiblingPath === undefined) { + throw new Error('Expected newCommitmentsSubtreeSiblingPath in BaseRollupInputs serialization'); + } + if (o.newNullifiersSubtreeSiblingPath === undefined) { + throw new Error('Expected newNullifiersSubtreeSiblingPath in BaseRollupInputs serialization'); + } + if (o.newContractsSubtreeSiblingPath === undefined) { + throw new Error('Expected newContractsSubtreeSiblingPath in BaseRollupInputs serialization'); + } + if (o.newPublicDataUpdateRequestsSiblingPaths === undefined) { + throw new Error('Expected newPublicDataUpdateRequestsSiblingPaths in BaseRollupInputs serialization'); + } + if (o.newPublicDataReadsSiblingPaths === undefined) { + throw new Error('Expected newPublicDataReadsSiblingPaths in BaseRollupInputs serialization'); + } + if (o.historicBlocksTreeRootMembershipWitnesses === undefined) { + throw new Error('Expected historicBlocksTreeRootMembershipWitnesses in BaseRollupInputs serialization'); + } + if (o.constants === undefined) { + throw new Error('Expected constants in BaseRollupInputs serialization'); + } + return { + kernel_data: mapTuple(o.kernelData, (v: PreviousKernelData) => fromPreviousKernelData(v)), + start_private_data_tree_snapshot: fromAppendOnlyTreeSnapshot(o.startPrivateDataTreeSnapshot), + start_nullifier_tree_snapshot: fromAppendOnlyTreeSnapshot(o.startNullifierTreeSnapshot), + start_contract_tree_snapshot: fromAppendOnlyTreeSnapshot(o.startContractTreeSnapshot), + start_public_data_tree_root: toBuffer(o.startPublicDataTreeRoot), + start_historic_blocks_tree_snapshot: fromAppendOnlyTreeSnapshot(o.startHistoricBlocksTreeSnapshot), + low_nullifier_leaf_preimages: mapTuple(o.lowNullifierLeafPreimages, (v: NullifierLeafPreimage) => + fromNullifierLeafPreimage(v), + ), + low_nullifier_membership_witness: mapTuple(o.lowNullifierMembershipWitness, (v: MembershipWitness16) => + fromMembershipWitness16(v), + ), + new_commitments_subtree_sibling_path: mapTuple(o.newCommitmentsSubtreeSiblingPath, (v: Fr) => toBuffer(v)), + new_nullifiers_subtree_sibling_path: mapTuple(o.newNullifiersSubtreeSiblingPath, (v: Fr) => toBuffer(v)), + new_contracts_subtree_sibling_path: mapTuple(o.newContractsSubtreeSiblingPath, (v: Fr) => toBuffer(v)), + new_public_data_update_requests_sibling_paths: mapTuple( + o.newPublicDataUpdateRequestsSiblingPaths, + (v: Tuple) => mapTuple(v, (v: Fr) => toBuffer(v)), + ), + new_public_data_reads_sibling_paths: mapTuple(o.newPublicDataReadsSiblingPaths, (v: Tuple) => + mapTuple(v, (v: Fr) => toBuffer(v)), + ), + historic_blocks_tree_root_membership_witnesses: mapTuple( + o.historicBlocksTreeRootMembershipWitnesses, + (v: MembershipWitness16) => fromMembershipWitness16(v), + ), + constants: fromConstantRollupData(o.constants), + }; +} + interface MsgpackBaseOrMergeRollupPublicInputs { rollup_type: number; rollup_subtree_height: Buffer; @@ -2981,6 +3185,12 @@ export function publicKernelSim(wasm: IWasmModule, arg0: PublicKernelInputs): Ci callCbind(wasm, 'public_kernel__sim', [fromPublicKernelInputs(arg0)]), ); } +export function baseRollupSim(wasm: IWasmModule, arg0: BaseRollupInputs): CircuitError | BaseOrMergeRollupPublicInputs { + return ((v: MsgpackCircuitError | MsgpackBaseOrMergeRollupPublicInputs) => + isCircuitError(v) ? toCircuitError(v) : toBaseOrMergeRollupPublicInputs(v))( + callCbind(wasm, 'base_rollup__sim', [fromBaseRollupInputs(arg0)]), + ); +} export function mergeRollupSim( wasm: IWasmModule, arg0: MergeRollupInputs, diff --git a/yarn-project/circuits.js/src/cbind/constants.gen.ts b/yarn-project/circuits.js/src/cbind/constants.gen.ts index 03cfb3742251..1631800e6337 100644 --- a/yarn-project/circuits.js/src/cbind/constants.gen.ts +++ b/yarn-project/circuits.js/src/cbind/constants.gen.ts @@ -24,6 +24,9 @@ export const NUM_ENCRYPTED_LOGS_HASHES_PER_TX = 1; export const NUM_UNENCRYPTED_LOGS_HASHES_PER_TX = 1; export const NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP = 16; export const KERNELS_PER_BASE_ROLLUP = 2; +export const MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP = 128; +export const MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP = 32; +export const MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP = 32; export const VK_TREE_HEIGHT = 3; export const FUNCTION_TREE_HEIGHT = 4; export const CONTRACT_TREE_HEIGHT = 16; diff --git a/yarn-project/circuits.js/src/cbind/types.ts b/yarn-project/circuits.js/src/cbind/types.ts index dfe90681ffc9..5c2d7c9f8b57 100644 --- a/yarn-project/circuits.js/src/cbind/types.ts +++ b/yarn-project/circuits.js/src/cbind/types.ts @@ -119,6 +119,8 @@ export { TxRequest, PreviousRollupData, AppendOnlyTreeSnapshot, + BaseRollupInputs, + NullifierLeafPreimage, BaseOrMergeRollupPublicInputs, ConstantRollupData, MergeRollupInputs, diff --git a/yarn-project/circuits.js/src/rollup/index.ts b/yarn-project/circuits.js/src/rollup/index.ts index be38690e08af..acb407b5c0f1 100644 --- a/yarn-project/circuits.js/src/rollup/index.ts +++ b/yarn-project/circuits.js/src/rollup/index.ts @@ -1 +1 @@ -export * from './rollup_wasm_wrapper.js'; +export { baseRollupSim, mergeRollupSim, rootRollupSim } from '../cbind/circuits.gen.js'; diff --git a/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.test.ts b/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.test.ts index c7c4d945fcff..4ec49ae2ac23 100644 --- a/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.test.ts +++ b/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.test.ts @@ -1,22 +1,23 @@ import { AggregationObject, + BaseOrMergeRollupPublicInputs, CircuitError, MergeRollupInputs, RootRollupInputs, RootRollupPublicInputs, VerificationKey, + baseRollupSim, + mergeRollupSim, + rootRollupSim, } from '../index.js'; import { makeBaseRollupInputs, makeMergeRollupInputs, makeRootRollupInputs } from '../tests/factories.js'; import { CircuitsWasm } from '../wasm/circuits_wasm.js'; -import { RollupWasmWrapper, mergeRollupSim, rootRollupSim } from './rollup_wasm_wrapper.js'; describe('rollup/rollup_wasm_wrapper', () => { let wasm: CircuitsWasm; - let rollupWasm: RollupWasmWrapper; beforeAll(async () => { wasm = await CircuitsWasm.get(); - rollupWasm = new RollupWasmWrapper(wasm); }); const makeBaseRollupInputsForCircuit = () => { @@ -54,11 +55,13 @@ describe('rollup/rollup_wasm_wrapper', () => { // Task to repair this test: https://github.com/AztecProtocol/aztec-packages/issues/1586 it.skip('calls base_rollup__sim', () => { const input = makeBaseRollupInputsForCircuit(); + const output = baseRollupSim(wasm, input); + expect(output instanceof BaseOrMergeRollupPublicInputs).toBeTruthy(); - const output = rollupWasm.simulateBaseRollup(input); - expect(output.startContractTreeSnapshot).toEqual(input.startContractTreeSnapshot); - expect(output.startNullifierTreeSnapshot).toEqual(input.startNullifierTreeSnapshot); - expect(output.startPrivateDataTreeSnapshot).toEqual(input.startPrivateDataTreeSnapshot); + const publicInputs = output as BaseOrMergeRollupPublicInputs; + expect(publicInputs.startContractTreeSnapshot).toEqual(input.startContractTreeSnapshot); + expect(publicInputs.startNullifierTreeSnapshot).toEqual(input.startNullifierTreeSnapshot); + expect(publicInputs.startPrivateDataTreeSnapshot).toEqual(input.startPrivateDataTreeSnapshot); }); it('calls merge_rollup__sim', () => { @@ -104,7 +107,9 @@ describe('rollup/rollup_wasm_wrapper', () => { for (const rd of input.previousRollupData) { rd.vk = VerificationKey.makeFake(); rd.baseOrMergeRollupPublicInputs.endAggregationObject = AggregationObject.makeFake(); - rd.baseOrMergeRollupPublicInputs = rollupWasm.simulateBaseRollup(makeBaseRollupInputsForCircuit()); + const output = baseRollupSim(wasm, makeBaseRollupInputsForCircuit()); + expect(output instanceof BaseOrMergeRollupPublicInputs).toBeTruthy(); + rd.baseOrMergeRollupPublicInputs = output as BaseOrMergeRollupPublicInputs; } fixPreviousRollupInputs(input); diff --git a/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.ts b/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.ts deleted file mode 100644 index 429d34bb666f..000000000000 --- a/yarn-project/circuits.js/src/rollup/rollup_wasm_wrapper.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BaseOrMergeRollupPublicInputs, BaseRollupInputs } from '../index.js'; -import { callWasm } from '../utils/call_wasm.js'; -import { CircuitsWasm } from '../wasm/circuits_wasm.js'; - -export { mergeRollupSim, rootRollupSim } from '../cbind/circuits.gen.js'; - -/** - * A wrapper around `CircuitsWasm` used to expose only the functions relevant for rollup circuits. - */ -export class RollupWasmWrapper { - constructor(private wasm: CircuitsWasm) {} - - /** - * Simulates the base rollup circuit from its inputs. - * @param baseRollupInputs - Inputs to the circuit. - * @returns The result of the simulation. Since the circuits are recursive the result is in a form which can be used - * as an input of the next iteration. - */ - public simulateBaseRollup(baseRollupInputs: BaseRollupInputs): BaseOrMergeRollupPublicInputs { - return callWasm(this.wasm, 'base_rollup__sim', baseRollupInputs, BaseOrMergeRollupPublicInputs); - } -} diff --git a/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts b/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts index 7f3fed8f22fd..dce0afd133d7 100644 --- a/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts +++ b/yarn-project/circuits.js/src/structs/rollup/base_rollup.ts @@ -1,19 +1,19 @@ import { Fr } from '@aztec/foundation/fields'; -import { BufferReader } from '@aztec/foundation/serialize'; +import { BufferReader, Tuple } from '@aztec/foundation/serialize'; import { - CONTRACT_TREE_HEIGHT, + CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, HISTORIC_BLOCKS_TREE_HEIGHT, - MAX_NEW_COMMITMENTS_PER_TX, - MAX_NEW_CONTRACTS_PER_TX, - MAX_NEW_NULLIFIERS_PER_TX, - MAX_PUBLIC_DATA_READS_PER_TX, - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + KERNELS_PER_BASE_ROLLUP, + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, + NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, - PRIVATE_DATA_TREE_HEIGHT, + PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH, PUBLIC_DATA_TREE_HEIGHT, } from '../../cbind/constants.gen.js'; -import { FieldsOf, assertItemsLength, assertMemberLength } from '../../utils/jsUtils.js'; +import { FieldsOf } from '../../utils/jsUtils.js'; import { serializeToBuffer } from '../../utils/serialize.js'; import { GlobalVariables } from '../global_variables.js'; import { PreviousKernelData } from '../kernel/previous_kernel_data.js'; @@ -118,26 +118,11 @@ export class ConstantRollupData { * Inputs to the base rollup circuit. */ export class BaseRollupInputs { - /** - * Height of the private data subtree which is to be inserted into the private data tree. - * Note: There are notes from 2 kernels being processed here so kernel new commitments length is multiplied by 2. - */ - public static PRIVATE_DATA_SUBTREE_HEIGHT = Math.log2(MAX_NEW_COMMITMENTS_PER_TX * 2); - /** - * Height of the contract subtree which is to be inserted into the contract tree. - */ - public static CONTRACT_SUBTREE_HEIGHT = Math.log2(MAX_NEW_CONTRACTS_PER_TX * 2); - /** - * Height of the nullifier subtree which is to be inserted into the nullifier tree. - */ - public static NULLIFIER_SUBTREE_HEIGHT = Math.log2(MAX_NEW_NULLIFIERS_PER_TX * 2); - constructor( /** * Data of the 2 kernels that preceded this base rollup circuit. */ - public kernelData: [PreviousKernelData, PreviousKernelData], - + public kernelData: Tuple, /** * Snapshot of the private data tree at the start of the base rollup circuit. */ @@ -163,70 +148,55 @@ export class BaseRollupInputs { * The nullifiers which need to be updated to perform the batch insertion of the new nullifiers. * See `StandardIndexedTree.batchInsert` function for more details. */ - public lowNullifierLeafPreimages: NullifierLeafPreimage[], + public lowNullifierLeafPreimages: Tuple, /** * Membership witnesses for the nullifiers which need to be updated to perform the batch insertion of the new * nullifiers. */ - public lowNullifierMembershipWitness: MembershipWitness[], - + public lowNullifierMembershipWitness: Tuple< + MembershipWitness, + typeof MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP + >, /** * Sibling path "pointing to" where the new commitments subtree should be inserted into the private data tree. */ - public newCommitmentsSubtreeSiblingPath: Fr[], + public newCommitmentsSubtreeSiblingPath: Tuple, /** * Sibling path "pointing to" where the new nullifiers subtree should be inserted into the nullifier tree. */ - public newNullifiersSubtreeSiblingPath: Fr[], + public newNullifiersSubtreeSiblingPath: Tuple, /** * Sibling path "pointing to" where the new contracts subtree should be inserted into the contract tree. */ - public newContractsSubtreeSiblingPath: Fr[], + public newContractsSubtreeSiblingPath: Tuple, /** * Sibling paths of leaves which are to be affected by the public data update requests. * Each item in the array is the sibling path that corresponds to an update request. */ - public newPublicDataUpdateRequestsSiblingPaths: Fr[][], + public newPublicDataUpdateRequestsSiblingPaths: Tuple< + Tuple, + typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP + >, /** * Sibling paths of leaves which are to be read by the public data reads. * Each item in the array is the sibling path that corresponds to a read request. */ - public newPublicDataReadsSiblingPaths: Fr[][], + public newPublicDataReadsSiblingPaths: Tuple< + Tuple, + typeof MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP + >, /** * Membership witnesses of historic blocks referred by each of the 2 kernels. */ - public historicBlocksTreeRootMembershipWitnesses: [ + public historicBlocksTreeRootMembershipWitnesses: Tuple< MembershipWitness, - MembershipWitness, - ], - + typeof KERNELS_PER_BASE_ROLLUP + >, /** * Data which is not modified by the base rollup circuit. */ public constants: ConstantRollupData, - ) { - assertMemberLength(this, 'lowNullifierLeafPreimages', 2 * MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength(this, 'lowNullifierMembershipWitness', 2 * MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength( - this, - 'newCommitmentsSubtreeSiblingPath', - PRIVATE_DATA_TREE_HEIGHT - BaseRollupInputs.PRIVATE_DATA_SUBTREE_HEIGHT, - ); - assertMemberLength( - this, - 'newNullifiersSubtreeSiblingPath', - NULLIFIER_TREE_HEIGHT - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, - ); - assertMemberLength( - this, - 'newContractsSubtreeSiblingPath', - CONTRACT_TREE_HEIGHT - BaseRollupInputs.CONTRACT_SUBTREE_HEIGHT, - ); - assertMemberLength(this, 'newPublicDataUpdateRequestsSiblingPaths', 2 * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX); - assertMemberLength(this, 'newPublicDataReadsSiblingPaths', 2 * MAX_PUBLIC_DATA_READS_PER_TX); - assertItemsLength(this, 'newPublicDataUpdateRequestsSiblingPaths', PUBLIC_DATA_TREE_HEIGHT); - assertItemsLength(this, 'newPublicDataReadsSiblingPaths', PUBLIC_DATA_TREE_HEIGHT); - } + ) {} static from(fields: FieldsOf): BaseRollupInputs { return new BaseRollupInputs(...BaseRollupInputs.getFields(fields)); diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 2bbd35a704ef..8f6a1cbb6014 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -10,6 +10,7 @@ import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, BaseRollupInputs, + CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, CONTRACT_TREE_HEIGHT, CallContext, CircuitType, @@ -29,6 +30,7 @@ import { G1AffineElement, HISTORIC_BLOCKS_TREE_HEIGHT, HistoricBlockData, + KERNELS_PER_BASE_ROLLUP, KernelCircuitPublicInputs, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, MAX_NEW_COMMITMENTS_PER_CALL, @@ -36,6 +38,7 @@ import { MAX_NEW_CONTRACTS_PER_TX, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_TX, + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, MAX_NEW_NULLIFIERS_PER_CALL, MAX_NEW_NULLIFIERS_PER_TX, MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX, @@ -43,20 +46,24 @@ import { MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, + MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_READS_PER_TX, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MAX_READ_REQUESTS_PER_CALL, MAX_READ_REQUESTS_PER_TX, MembershipWitness, MergeRollupInputs, + NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NUM_FIELDS_PER_SHA256, NewContractData, NullifierLeafPreimage, OptionallyRevealedData, + PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH, PRIVATE_DATA_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, Point, @@ -876,10 +883,7 @@ export function makeMergeRollupInputs(seed = 0): MergeRollupInputs { * @returns A base rollup inputs. */ export function makeBaseRollupInputs(seed = 0): BaseRollupInputs { - const kernelData: [PreviousKernelData, PreviousKernelData] = [ - makePreviousKernelData(seed + 0x100), - makePreviousKernelData(seed + 0x200), - ]; + const kernelData = makeTuple(KERNELS_PER_BASE_ROLLUP, x => makePreviousKernelData(seed + (x + 1) * 0x100)); const startPrivateDataTreeSnapshot = makeAppendOnlyTreeSnapshot(seed + 0x100); const startNullifierTreeSnapshot = makeAppendOnlyTreeSnapshot(seed + 0x200); @@ -887,41 +891,37 @@ export function makeBaseRollupInputs(seed = 0): BaseRollupInputs { const startPublicDataTreeRoot = fr(seed + 0x400); const startHistoricBlocksTreeSnapshot = makeAppendOnlyTreeSnapshot(seed + 0x500); - const lowNullifierLeafPreimages = range(2 * MAX_NEW_NULLIFIERS_PER_TX, seed + 0x1000).map( + const lowNullifierLeafPreimages = makeTuple( + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, x => new NullifierLeafPreimage(fr(x), fr(x + 0x100), x + 0x200), + seed + 0x1000, ); - const lowNullifierMembershipWitness = range(2 * MAX_NEW_NULLIFIERS_PER_TX, seed + 0x2000).map(x => - makeMembershipWitness(NULLIFIER_TREE_HEIGHT, x), + const lowNullifierMembershipWitness = makeTuple( + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, + x => makeMembershipWitness(NULLIFIER_TREE_HEIGHT, x), + seed + 0x2000, ); - const newCommitmentsSubtreeSiblingPath = range( - PRIVATE_DATA_TREE_HEIGHT - BaseRollupInputs.PRIVATE_DATA_SUBTREE_HEIGHT, - seed + 0x3000, - ).map(x => fr(x)); + const newCommitmentsSubtreeSiblingPath = makeTuple(PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH, fr, seed + 0x3000); + const newNullifiersSubtreeSiblingPath = makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, fr, seed + 0x4000); + const newContractsSubtreeSiblingPath = makeTuple(CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, fr, seed + 0x5000); - const newNullifiersSubtreeSiblingPath = range( - NULLIFIER_TREE_HEIGHT - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, - seed + 0x4000, - ).map(x => fr(x)); - - const newContractsSubtreeSiblingPath = range( - CONTRACT_TREE_HEIGHT - BaseRollupInputs.CONTRACT_SUBTREE_HEIGHT, - seed + 0x5000, - ).map(x => fr(x)); - - const newPublicDataUpdateRequestsSiblingPaths = range(2 * MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, seed + 0x6000).map( - x => range(PUBLIC_DATA_TREE_HEIGHT, x).map(fr), + const newPublicDataUpdateRequestsSiblingPaths = makeTuple( + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, + x => makeTuple(PUBLIC_DATA_TREE_HEIGHT, fr, x), + seed + 0x6000, ); - const newPublicDataReadsSiblingPaths = range(2 * MAX_PUBLIC_DATA_READS_PER_TX, seed + 0x6000).map(x => - range(PUBLIC_DATA_TREE_HEIGHT, x).map(fr), + const newPublicDataReadsSiblingPaths = makeTuple( + MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, + x => makeTuple(PUBLIC_DATA_TREE_HEIGHT, fr, x), + seed + 0x6000, ); - const historicBlocksTreeRootMembershipWitnesses: BaseRollupInputs['historicBlocksTreeRootMembershipWitnesses'] = [ - makeMembershipWitness(HISTORIC_BLOCKS_TREE_HEIGHT, seed + 0x7000), - makeMembershipWitness(HISTORIC_BLOCKS_TREE_HEIGHT, seed + 0x8000), - ]; + const historicBlocksTreeRootMembershipWitnesses = makeTuple(KERNELS_PER_BASE_ROLLUP, x => + makeMembershipWitness(HISTORIC_BLOCKS_TREE_HEIGHT, seed + x * 0x1000 + 0x7000), + ); const constants = makeConstantBaseRollupData(0x100); diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index 8f715f94a51d..6f1b23c9c934 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -1,7 +1,6 @@ import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, - BaseRollupInputs, CircuitsWasm, Fr, GlobalVariables, @@ -11,6 +10,7 @@ import { MAX_NEW_NULLIFIERS_PER_TX, MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, + NULLIFIER_SUBTREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, Proof, PublicDataUpdateRequest, @@ -138,7 +138,7 @@ describe('sequencer/solo_block_builder', () => { await expectsDb.batchInsert( MerkleTreeId.NULLIFIER_TREE, flatMap(txs, tx => tx.data.end.newNullifiers.map(x => x.toBuffer())), - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, + NULLIFIER_SUBTREE_HEIGHT, ); for (const write of txs.flatMap(tx => tx.data.end.publicDataUpdateRequests)) { await expectsDb.updateLeaf(MerkleTreeId.PUBLIC_DATA_TREE, write.newValue.toBuffer(), write.leafIndex.value); @@ -411,7 +411,7 @@ describe('sequencer/solo_block_builder', () => { await builderDb.batchInsert( MerkleTreeId.NULLIFIER_TREE, updateVals.map(v => toBufferBE(v, 32)), - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, + NULLIFIER_SUBTREE_HEIGHT, ); const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts index 10285ee6256e..0435ef2eea42 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts @@ -2,17 +2,29 @@ import { AppendOnlyTreeSnapshot, BaseOrMergeRollupPublicInputs, BaseRollupInputs, + CONTRACT_SUBTREE_HEIGHT, + CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, CircuitsWasm, ConstantRollupData, GlobalVariables, HISTORIC_BLOCKS_TREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_HEIGHT, L1_TO_L2_MSG_SUBTREE_SIBLING_PATH_LENGTH, + MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_READS_PER_TX, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, + MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, MergeRollupInputs, + NULLIFIER_SUBTREE_HEIGHT, + NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, NULLIFIER_TREE_HEIGHT, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, NullifierLeafPreimage, + PRIVATE_DATA_SUBTREE_HEIGHT, + PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH, + PUBLIC_DATA_TREE_HEIGHT, PreviousKernelData, PreviousRollupData, Proof, @@ -593,22 +605,38 @@ export class SoloBlockBuilder implements BlockBuilder { } protected async processPublicDataUpdateRequests(tx: ProcessedTx) { - const newPublicDataUpdateRequestsSiblingPaths: Fr[][] = []; - for (const publicDataUpdateRequest of tx.data.end.publicDataUpdateRequests) { - const index = publicDataUpdateRequest.leafIndex.value; + const newPublicDataUpdateRequestsSiblingPaths: Tuple< + Tuple, + typeof MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + > = makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, () => makeTuple(PUBLIC_DATA_TREE_HEIGHT, Fr.zero)); + for (const i in tx.data.end.publicDataUpdateRequests) { + const index = tx.data.end.publicDataUpdateRequests[i].leafIndex.value; + await this.db.updateLeaf( + MerkleTreeId.PUBLIC_DATA_TREE, + tx.data.end.publicDataUpdateRequests[i].newValue.toBuffer(), + index, + ); const path = await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, index); - await this.db.updateLeaf(MerkleTreeId.PUBLIC_DATA_TREE, publicDataUpdateRequest.newValue.toBuffer(), index); - newPublicDataUpdateRequestsSiblingPaths.push(path.toFieldArray()); + const array = path.toFieldArray(); + newPublicDataUpdateRequestsSiblingPaths[i] = makeTuple(PUBLIC_DATA_TREE_HEIGHT, j => + j < array.length ? array[j] : Fr.ZERO, + ); } return newPublicDataUpdateRequestsSiblingPaths; } protected async getPublicDataReadsSiblingPaths(tx: ProcessedTx) { - const newPublicDataReadsSiblingPaths: Fr[][] = []; - for (const publicDataRead of tx.data.end.publicDataReads) { - const index = publicDataRead.leafIndex.value; + const newPublicDataReadsSiblingPaths: Tuple< + Tuple, + typeof MAX_PUBLIC_DATA_READS_PER_TX + > = makeTuple(MAX_PUBLIC_DATA_READS_PER_TX, () => makeTuple(PUBLIC_DATA_TREE_HEIGHT, Fr.zero)); + for (const i in tx.data.end.publicDataReads) { + const index = tx.data.end.publicDataReads[i].leafIndex.value; const path = await this.db.getSiblingPath(MerkleTreeId.PUBLIC_DATA_TREE, index); - newPublicDataReadsSiblingPaths.push(path.toFieldArray()); + const array = path.toFieldArray(); + newPublicDataReadsSiblingPaths[i] = makeTuple(PUBLIC_DATA_TREE_HEIGHT, j => + j < array.length ? array[j] : Fr.ZERO, + ); } return newPublicDataReadsSiblingPaths; } @@ -626,13 +654,22 @@ export class SoloBlockBuilder implements BlockBuilder { const startHistoricBlocksTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.BLOCKS_TREE); // Get the subtree sibling paths for the circuit - const newCommitmentsSubtreeSiblingPath = await this.getSubtreeSiblingPath( + const newCommitmentsSubtreeSiblingPathArray = await this.getSubtreeSiblingPath( MerkleTreeId.PRIVATE_DATA_TREE, - BaseRollupInputs.PRIVATE_DATA_SUBTREE_HEIGHT, + PRIVATE_DATA_SUBTREE_HEIGHT, ); - const newContractsSubtreeSiblingPath = await this.getSubtreeSiblingPath( + + const newCommitmentsSubtreeSiblingPath = makeTuple(PRIVATE_DATA_SUBTREE_SIBLING_PATH_LENGTH, i => + i < newCommitmentsSubtreeSiblingPathArray.length ? newCommitmentsSubtreeSiblingPathArray[i] : Fr.ZERO, + ); + + const newContractsSubtreeSiblingPathArray = await this.getSubtreeSiblingPath( MerkleTreeId.CONTRACT_TREE, - BaseRollupInputs.CONTRACT_SUBTREE_HEIGHT, + CONTRACT_SUBTREE_HEIGHT, + ); + + const newContractsSubtreeSiblingPath = makeTuple(CONTRACT_SUBTREE_SIBLING_PATH_LENGTH, i => + i < newContractsSubtreeSiblingPathArray.length ? newContractsSubtreeSiblingPathArray[i] : Fr.ZERO, ); // Update the contract and private data trees with the new items being inserted to get the new roots @@ -658,11 +695,17 @@ export class SoloBlockBuilder implements BlockBuilder { const rightPublicDataReadSiblingPaths = await this.getPublicDataReadsSiblingPaths(right); const rightPublicDataUpdateRequestsSiblingPaths = await this.processPublicDataUpdateRequests(right); - const newPublicDataReadsSiblingPaths = [...leftPublicDataReadSiblingPaths, ...rightPublicDataReadSiblingPaths]; - const newPublicDataUpdateRequestsSiblingPaths = [ - ...leftPublicDataUpdateRequestsSiblingPaths, - ...rightPublicDataUpdateRequestsSiblingPaths, - ]; + const newPublicDataReadsSiblingPaths = makeTuple(MAX_PUBLIC_DATA_READS_PER_BASE_ROLLUP, i => + i < MAX_PUBLIC_DATA_READS_PER_TX + ? leftPublicDataReadSiblingPaths[i] + : rightPublicDataReadSiblingPaths[i - MAX_PUBLIC_DATA_READS_PER_TX], + ); + + const newPublicDataUpdateRequestsSiblingPaths = makeTuple(MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_BASE_ROLLUP, i => + i < MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX + ? leftPublicDataUpdateRequestsSiblingPaths[i] + : rightPublicDataUpdateRequestsSiblingPaths[i - MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX], + ); // Update the nullifier tree, capturing the low nullifier info for each individual operation const newNullifiers = [...left.data.end.newNullifiers, ...right.data.end.newNullifiers]; @@ -670,7 +713,7 @@ export class SoloBlockBuilder implements BlockBuilder { const [nullifierWitnessLeaves, newNullifiersSubtreeSiblingPath] = await this.db.batchInsert( MerkleTreeId.NULLIFIER_TREE, newNullifiers.map(fr => fr.toBuffer()), - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, + NULLIFIER_SUBTREE_HEIGHT, ); if (nullifierWitnessLeaves === undefined) { throw new Error(`Could not craft nullifier batch insertion proofs`); @@ -682,6 +725,8 @@ export class SoloBlockBuilder implements BlockBuilder { MembershipWitness.fromBufferArray(l.index, assertLength(l.siblingPath.toBufferArray(), NULLIFIER_TREE_HEIGHT)), ); + const newNullifiersSubtreeSiblingPathArray = newNullifiersSubtreeSiblingPath.toFieldArray(); + return BaseRollupInputs.from({ constants, startNullifierTreeSnapshot, @@ -691,14 +736,25 @@ export class SoloBlockBuilder implements BlockBuilder { startHistoricBlocksTreeSnapshot, newCommitmentsSubtreeSiblingPath, newContractsSubtreeSiblingPath, - newNullifiersSubtreeSiblingPath: newNullifiersSubtreeSiblingPath.toFieldArray(), + newNullifiersSubtreeSiblingPath: makeTuple(NULLIFIER_SUBTREE_SIBLING_PATH_LENGTH, i => + i < newNullifiersSubtreeSiblingPathArray.length ? newNullifiersSubtreeSiblingPathArray[i] : Fr.ZERO, + ), newPublicDataUpdateRequestsSiblingPaths, newPublicDataReadsSiblingPaths, - lowNullifierLeafPreimages: nullifierWitnessLeaves.map( - ({ leafData }) => - new NullifierLeafPreimage(new Fr(leafData.value), new Fr(leafData.nextValue), Number(leafData.nextIndex)), + lowNullifierLeafPreimages: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => + i < nullifierWitnessLeaves.length + ? new NullifierLeafPreimage( + new Fr(nullifierWitnessLeaves[i].leafData.value), + new Fr(nullifierWitnessLeaves[i].leafData.nextValue), + Number(nullifierWitnessLeaves[i].leafData.nextIndex), + ) + : new NullifierLeafPreimage(Fr.ZERO, Fr.ZERO, 0), + ), + lowNullifierMembershipWitness: makeTuple(MAX_NEW_NULLIFIERS_PER_BASE_ROLLUP, i => + i < lowNullifierMembershipWitnesses.length + ? lowNullifierMembershipWitnesses[i] + : this.makeEmptyMembershipWitness(NULLIFIER_TREE_HEIGHT), ), - lowNullifierMembershipWitness: lowNullifierMembershipWitnesses, kernelData: [this.getKernelDataFor(left), this.getKernelDataFor(right)], historicBlocksTreeRootMembershipWitnesses: [ await this.getHistoricTreesMembershipWitnessFor(left), diff --git a/yarn-project/sequencer-client/src/simulator/rollup.ts b/yarn-project/sequencer-client/src/simulator/rollup.ts index 3c971f147942..99fe554bcc6d 100644 --- a/yarn-project/sequencer-client/src/simulator/rollup.ts +++ b/yarn-project/sequencer-client/src/simulator/rollup.ts @@ -4,9 +4,9 @@ import { CircuitError, CircuitsWasm, MergeRollupInputs, - RollupWasmWrapper, RootRollupInputs, RootRollupPublicInputs, + baseRollupSim, mergeRollupSim, rootRollupSim, } from '@aztec/circuits.js'; @@ -17,11 +17,9 @@ import { RollupSimulator } from './index.js'; * Implements the rollup circuit simulator using the wasm circuits implementation. */ export class WasmRollupCircuitSimulator implements RollupSimulator { - private rollupWasmWrapper: RollupWasmWrapper; private wasm: CircuitsWasm; constructor(wasm: CircuitsWasm) { - this.rollupWasmWrapper = new RollupWasmWrapper(wasm); this.wasm = wasm; } @@ -39,7 +37,12 @@ export class WasmRollupCircuitSimulator implements RollupSimulator { * @returns The public inputs as outputs of the simulation. */ baseRollupCircuit(input: BaseRollupInputs): Promise { - return Promise.resolve(this.rollupWasmWrapper.simulateBaseRollup(input)); + const result = baseRollupSim(this.wasm, input); + if (result instanceof CircuitError) { + throw new CircuitError(result.code, result.message); + } + + return Promise.resolve(result); } /** * Simulates the merge rollup circuit from its inputs. diff --git a/yarn-project/types/src/sibling_path.ts b/yarn-project/types/src/sibling_path.ts index 4323ca30818c..450546b898e1 100644 --- a/yarn-project/types/src/sibling_path.ts +++ b/yarn-project/types/src/sibling_path.ts @@ -1,3 +1,4 @@ +import { makeTuple } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; import { Tuple, @@ -80,6 +81,15 @@ export class SiblingPath { return this.data.map(buf => Fr.fromBuffer(buf)); } + /** + * Convert Sibling Path object into a tuple of field elements. + * @returns A tuple representation of the sibling path. + */ + public toTuple(): Tuple { + const array = this.toFieldArray(); + return makeTuple(array.length as N, i => array[i], 0); + } + /** * Deserializes a SiblingPath from a buffer. * @param buf - A buffer containing the buffer representation of SiblingPath. diff --git a/yarn-project/world-state/src/world-state-db/merkle_trees.ts b/yarn-project/world-state/src/world-state-db/merkle_trees.ts index b4cd63846a76..5d01d107f4bf 100644 --- a/yarn-project/world-state/src/world-state-db/merkle_trees.ts +++ b/yarn-project/world-state/src/world-state-db/merkle_trees.ts @@ -1,11 +1,11 @@ import { - BaseRollupInputs, CONTRACT_TREE_HEIGHT, CircuitsWasm, Fr, GlobalVariables, HISTORIC_BLOCKS_TREE_HEIGHT, L1_TO_L2_MSG_TREE_HEIGHT, + NULLIFIER_SUBTREE_HEIGHT, NULLIFIER_TREE_HEIGHT, PRIVATE_DATA_TREE_HEIGHT, PUBLIC_DATA_TREE_HEIGHT, @@ -562,7 +562,7 @@ export class MerkleTrees implements MerkleTreeDb { // Sync the indexed trees await (this.trees[MerkleTreeId.NULLIFIER_TREE] as StandardIndexedTree).batchInsert( l2Block.newNullifiers.map(fr => fr.toBuffer()), - BaseRollupInputs.NULLIFIER_SUBTREE_HEIGHT, + NULLIFIER_SUBTREE_HEIGHT, ); // Sync the public data tree From 0247b859d88781740fa990801a24881c09c5ca3c Mon Sep 17 00:00:00 2001 From: Jean M <132435771+jeanmon@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:03:35 +0200 Subject: [PATCH 10/25] chore(circuits): removing assertMemberLength on Tuple objects (#2296) Resolves #2295 # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [x] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [x] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [x] Every change is related to the PR description. - [x] 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). --- .../kernel/combined_accumulated_data.ts | 31 ++----------------- .../structs/kernel/previous_kernel_data.ts | 6 ++-- .../src/structs/kernel/private_kernel.ts | 7 ++--- .../structs/private_circuit_public_inputs.ts | 15 ++------- .../structs/public_circuit_public_inputs.ts | 14 ++------- .../read_request_membership_witness.ts | 3 +- 6 files changed, 12 insertions(+), 64 deletions(-) diff --git a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts index aa7b25af1d08..507aa13d8689 100644 --- a/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/combined_accumulated_data.ts @@ -14,7 +14,7 @@ import { MAX_READ_REQUESTS_PER_TX, NUM_FIELDS_PER_SHA256, } from '../../cbind/constants.gen.js'; -import { assertMemberLength, makeTuple } from '../../index.js'; +import { makeTuple } from '../../index.js'; import { serializeToBuffer } from '../../utils/serialize.js'; import { AggregationObject, AztecAddress, EthAddress, Fr, FunctionData } from '../index.js'; @@ -346,21 +346,7 @@ export class CombinedAccumulatedData { * All the public data reads made in this transaction. */ public publicDataReads: Tuple, - ) { - assertMemberLength(this, 'readRequests', MAX_READ_REQUESTS_PER_TX); - assertMemberLength(this, 'newCommitments', MAX_NEW_COMMITMENTS_PER_TX); - assertMemberLength(this, 'newNullifiers', MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength(this, 'nullifiedCommitments', MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength(this, 'privateCallStack', MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX); - assertMemberLength(this, 'publicCallStack', MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX); - assertMemberLength(this, 'newL2ToL1Msgs', MAX_NEW_L2_TO_L1_MSGS_PER_TX); - assertMemberLength(this, 'encryptedLogsHash', NUM_FIELDS_PER_SHA256); - assertMemberLength(this, 'unencryptedLogsHash', NUM_FIELDS_PER_SHA256); - assertMemberLength(this, 'newContracts', MAX_NEW_CONTRACTS_PER_TX); - assertMemberLength(this, 'optionallyRevealedData', MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX); - assertMemberLength(this, 'publicDataUpdateRequests', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX); - assertMemberLength(this, 'publicDataReads', MAX_PUBLIC_DATA_READS_PER_TX); - } + ) {} toBuffer() { return serializeToBuffer( @@ -527,18 +513,7 @@ export class FinalAccumulatedData { * All the optionally revealed data in this transaction. */ public optionallyRevealedData: Tuple, - ) { - assertMemberLength(this, 'newCommitments', MAX_NEW_COMMITMENTS_PER_TX); - assertMemberLength(this, 'newNullifiers', MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength(this, 'nullifiedCommitments', MAX_NEW_NULLIFIERS_PER_TX); - assertMemberLength(this, 'privateCallStack', MAX_PRIVATE_CALL_STACK_LENGTH_PER_TX); - assertMemberLength(this, 'publicCallStack', MAX_PUBLIC_CALL_STACK_LENGTH_PER_TX); - assertMemberLength(this, 'newL2ToL1Msgs', MAX_NEW_L2_TO_L1_MSGS_PER_TX); - assertMemberLength(this, 'encryptedLogsHash', NUM_FIELDS_PER_SHA256); - assertMemberLength(this, 'unencryptedLogsHash', NUM_FIELDS_PER_SHA256); - assertMemberLength(this, 'newContracts', MAX_NEW_CONTRACTS_PER_TX); - assertMemberLength(this, 'optionallyRevealedData', MAX_OPTIONALLY_REVEALED_DATA_LENGTH_PER_TX); - } + ) {} toBuffer() { return serializeToBuffer( diff --git a/yarn-project/circuits.js/src/structs/kernel/previous_kernel_data.ts b/yarn-project/circuits.js/src/structs/kernel/previous_kernel_data.ts index 0b9628c7bb27..0fb608900e47 100644 --- a/yarn-project/circuits.js/src/structs/kernel/previous_kernel_data.ts +++ b/yarn-project/circuits.js/src/structs/kernel/previous_kernel_data.ts @@ -1,7 +1,7 @@ import { BufferReader, Tuple } from '@aztec/foundation/serialize'; import { privateKernelDummyPreviousKernel } from '../../cbind/circuits.gen.js'; -import { CircuitsWasm, VK_TREE_HEIGHT, assertMemberLength, makeTuple } from '../../index.js'; +import { CircuitsWasm, VK_TREE_HEIGHT, makeTuple } from '../../index.js'; import { serializeToBuffer } from '../../utils/serialize.js'; import { Fr } from '../index.js'; import { Proof, makeEmptyProof } from '../proof.js'; @@ -34,9 +34,7 @@ export class PreviousKernelData { * Sibling path of the previous kernel's vk in a tree of vks. */ public vkPath: Tuple, - ) { - assertMemberLength(this, 'vkPath', VK_TREE_HEIGHT); - } + ) {} /** * Serialize this as a buffer. diff --git a/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts b/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts index d75b2bca6d1d..d68f3540ac4c 100644 --- a/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts +++ b/yarn-project/circuits.js/src/structs/kernel/private_kernel.ts @@ -8,7 +8,7 @@ import { MAX_READ_REQUESTS_PER_CALL, MAX_READ_REQUESTS_PER_TX, } from '../../cbind/constants.gen.js'; -import { FieldsOf, assertMemberLength } from '../../utils/jsUtils.js'; +import { FieldsOf } from '../../utils/jsUtils.js'; import { serializeToBuffer } from '../../utils/serialize.js'; import { PrivateCallStackItem } from '../call_stack_item.js'; import { Fr } from '../index.js'; @@ -62,10 +62,7 @@ export class PrivateCallData { * The hash of the ACIR of the function being invoked. */ public acirHash: Fr, - ) { - assertMemberLength(this, 'privateCallStackPreimages', MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL); - assertMemberLength(this, 'readRequestMembershipWitnesses', MAX_READ_REQUESTS_PER_CALL); - } + ) {} /** * Serialize into a field array. Low-level utility. diff --git a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts index b3e79a07b6fc..c89729ee4185 100644 --- a/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/private_circuit_public_inputs.ts @@ -11,7 +11,7 @@ import { NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH, } from '../cbind/constants.gen.js'; -import { FieldsOf, assertMemberLength, makeTuple } from '../utils/jsUtils.js'; +import { FieldsOf, makeTuple } from '../utils/jsUtils.js'; import { serializeToBuffer } from '../utils/serialize.js'; import { CallContext } from './call_context.js'; import { HistoricBlockData } from './index.js'; @@ -99,18 +99,7 @@ export class PrivateCircuitPublicInputs { * Version of the instance. */ public version: Fr, - ) { - assertMemberLength(this, 'returnValues', RETURN_VALUES_LENGTH); - assertMemberLength(this, 'readRequests', MAX_READ_REQUESTS_PER_CALL); - assertMemberLength(this, 'newCommitments', MAX_NEW_COMMITMENTS_PER_CALL); - assertMemberLength(this, 'newNullifiers', MAX_NEW_NULLIFIERS_PER_CALL); - assertMemberLength(this, 'nullifiedCommitments', MAX_NEW_NULLIFIERS_PER_CALL); - assertMemberLength(this, 'privateCallStack', MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL); - assertMemberLength(this, 'publicCallStack', MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL); - assertMemberLength(this, 'newL2ToL1Msgs', MAX_NEW_L2_TO_L1_MSGS_PER_CALL); - assertMemberLength(this, 'encryptedLogsHash', NUM_FIELDS_PER_SHA256); - assertMemberLength(this, 'unencryptedLogsHash', NUM_FIELDS_PER_SHA256); - } + ) {} /** * Create PrivateCircuitPublicInputs from a fields dictionary. * @param fields - The dictionary. diff --git a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts index 523b9c225267..310323b15973 100644 --- a/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts +++ b/yarn-project/circuits.js/src/structs/public_circuit_public_inputs.ts @@ -10,10 +10,9 @@ import { MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, - NUM_FIELDS_PER_SHA256, RETURN_VALUES_LENGTH, } from '../cbind/constants.gen.js'; -import { FieldsOf, assertMemberLength, makeTuple } from '../utils/jsUtils.js'; +import { FieldsOf, makeTuple } from '../utils/jsUtils.js'; import { serializeToBuffer } from '../utils/serialize.js'; import { CallContext } from './call_context.js'; import { HistoricBlockData } from './index.js'; @@ -206,16 +205,7 @@ export class PublicCircuitPublicInputs { * Address of the prover. */ public proverAddress: AztecAddress, - ) { - assertMemberLength(this, 'returnValues', RETURN_VALUES_LENGTH); - assertMemberLength(this, 'publicCallStack', MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL); - assertMemberLength(this, 'newCommitments', MAX_NEW_COMMITMENTS_PER_CALL); - assertMemberLength(this, 'newNullifiers', MAX_NEW_NULLIFIERS_PER_CALL); - assertMemberLength(this, 'newL2ToL1Msgs', MAX_NEW_L2_TO_L1_MSGS_PER_CALL); - assertMemberLength(this, 'contractStorageUpdateRequests', MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL); - assertMemberLength(this, 'contractStorageReads', MAX_PUBLIC_DATA_READS_PER_CALL); - assertMemberLength(this, 'unencryptedLogsHash', NUM_FIELDS_PER_SHA256); - } + ) {} /** * Create PublicCircuitPublicInputs from a fields dictionary. diff --git a/yarn-project/circuits.js/src/structs/read_request_membership_witness.ts b/yarn-project/circuits.js/src/structs/read_request_membership_witness.ts index f0af8311d592..4735559598f1 100644 --- a/yarn-project/circuits.js/src/structs/read_request_membership_witness.ts +++ b/yarn-project/circuits.js/src/structs/read_request_membership_witness.ts @@ -3,7 +3,7 @@ import { Fr } from '@aztec/foundation/fields'; import { BufferReader, Tuple } from '@aztec/foundation/serialize'; import { MAX_NEW_COMMITMENTS_PER_CALL, PRIVATE_DATA_TREE_HEIGHT } from '../cbind/constants.gen.js'; -import { assertMemberLength, makeTuple, range } from '../utils/jsUtils.js'; +import { makeTuple, range } from '../utils/jsUtils.js'; import { serializeToBuffer } from '../utils/serialize.js'; import { MembershipWitness } from './membership_witness.js'; @@ -33,7 +33,6 @@ export class ReadRequestMembershipWitness { */ public hintToCommitment: Fr, ) { - assertMemberLength(this, 'siblingPath', PRIVATE_DATA_TREE_HEIGHT); if (hintToCommitment.value > MAX_NEW_COMMITMENTS_PER_CALL) { throw new Error( `Expected ReadRequestMembershipWitness' hintToCommitment(${hintToCommitment}) to be <= NEW_COMMITMENTS_LENGTH(${MAX_NEW_COMMITMENTS_PER_CALL})`, From 1dcef5370c4b02e4cc8a532e07d0788de81d44f4 Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Thu, 14 Sep 2023 14:15:51 +0000 Subject: [PATCH 11/25] Fix full bootstrap_docker.sh --- build-system/scripts/build_local | 4 ++-- build_manifest.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build-system/scripts/build_local b/build-system/scripts/build_local index c8acf6715c2c..71ee4a5ef141 100755 --- a/build-system/scripts/build_local +++ b/build-system/scripts/build_local @@ -38,7 +38,7 @@ for E in ${PROJECTS[@]}; do ARR=(${E//:/ }) PROJECT_DIR_NAME=${ARR[0]} WORKING_DIR=${ARR[1]} - DOCKERFILE=${ARR[2]} + DOCKERFILE=${ARR[2]:-Dockerfile} REPO=${ARR[3]:-$PROJECT_DIR_NAME} LAUNCH=${ARR[4]:-} @@ -66,7 +66,7 @@ for E in ${PROJECTS[@]}; do echo time docker build ${ADDITIONAL_ARGS:-} --build-arg ARG_COMMIT_HASH=$COMMIT_HASH -f $DOCKERFILE -t $ECR_DEPLOY_URL/$REPO:latest . - retry docker tag $ECR_DEPLOY_URL/$REPO:latest aztecprotocol/$REPO:latest + docker tag $ECR_DEPLOY_URL/$REPO:latest aztecprotocol/$REPO:latest if [ "$PROJECT_DIR_NAME" = "$TARGET_PROJECT" ]; then if [ -n "$LAUNCH" ]; then diff --git a/build_manifest.sh b/build_manifest.sh index 9cd3810f645b..7bb4a28db558 100755 --- a/build_manifest.sh +++ b/build_manifest.sh @@ -26,9 +26,9 @@ PROJECTS=( # circuits-x86_64-linux-clang-assert:circuits/cpp:./dockerfiles/Dockerfile.x86_64-linux-clang-assert:circuits-x86_64-linux-clang-assert circuits-wasm-linux-clang:circuits/cpp:./dockerfiles/Dockerfile.wasm-linux-clang:circuits-wasm-linux-clang l1-contracts:l1-contracts - noir-contracts:yarn-project:DockerFile.build:noir-contracts-build + noir-contracts:yarn-project:noir-contracts/Dockerfile.build:noir-contracts-build + yarn-project-base:yarn-project:yarn-project-base/Dockerfile noir-contracts:yarn-project - yarn-project-base:yarn-project end-to-end:yarn-project aztec-sandbox:yarn-project ) From f40c37afced00c8f507b7f7f39dad591d0c1861e Mon Sep 17 00:00:00 2001 From: Charlie Lye Date: Thu, 14 Sep 2023 14:23:50 +0000 Subject: [PATCH 12/25] Disable the webkit test has intermittent failures (unrepoducible on mainframe, await non-experimental playwright release) --- barretenberg/acir_tests/Dockerfile.bb.js | 4 +++- barretenberg/acir_tests/run_acir_tests_browser.sh | 4 +--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/barretenberg/acir_tests/Dockerfile.bb.js b/barretenberg/acir_tests/Dockerfile.bb.js index 161a7166ffb0..3a8b0522976d 100644 --- a/barretenberg/acir_tests/Dockerfile.bb.js +++ b/barretenberg/acir_tests/Dockerfile.bb.js @@ -19,4 +19,6 @@ RUN BIN=../ts/dest/node/main.js FLOW=all_cmds ./run_acir_tests.sh 1_mul RUN BROWSER=chrome THREAD_MODEL=mt ./run_acir_tests_browser.sh double_verify_proof # Run 1_mul through bb.js on chrome/webkit testing single threaded browser support. RUN BROWSER=chrome THREAD_MODEL=st ./run_acir_tests_browser.sh 1_mul -RUN BROWSER=webkit THREAD_MODEL=st ./run_acir_tests_browser.sh 1_mul \ No newline at end of file +# Commenting for now as fails intermittently. Unreproducable on mainframe. +# See https://github.com/AztecProtocol/aztec-packages/issues/2104 +#RUN BROWSER=webkit THREAD_MODEL=st ./run_acir_tests_browser.sh 1_mul \ No newline at end of file diff --git a/barretenberg/acir_tests/run_acir_tests_browser.sh b/barretenberg/acir_tests/run_acir_tests_browser.sh index da81b9e1f698..22830656250e 100755 --- a/barretenberg/acir_tests/run_acir_tests_browser.sh +++ b/barretenberg/acir_tests/run_acir_tests_browser.sh @@ -9,9 +9,7 @@ cleanup() { trap cleanup SIGINT SIGTERM # Skipping firefox because this headless firefox is so slow. -# Skipping webkit as well due to intermittent errors, see https://github.com/AztecProtocol/aztec-packages/issues/2104 -#export BROWSER=${BROWSER:-chrome,webkit} -export BROWSER=${BROWSER:-chrome} +export BROWSER=${BROWSER:-chrome,webkit} # Can be "mt" or "st". THREAD_MODEL=${THREAD_MODEL:-mt} From 80c9b77c3e6adc755ec80f02a7f8261a7e8581c4 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:08:57 +0200 Subject: [PATCH 13/25] chore(subrepo): push aztec-nr, update default branches (#2300) Wrong target branch on some repos, pushed bb to main not master (i copied the flow for docs which did use main). Manually pushed aztec-nr, it failed last night as the bot did not have write perms --- .github/workflows/mirror_repos.yml | 6 +++--- yarn-project/aztec-nr/.gitrepo | 4 ++-- yarn-project/aztec-nr/README.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/mirror_repos.yml b/.github/workflows/mirror_repos.yml index f93244bbce2a..7712b17ec3c3 100644 --- a/.github/workflows/mirror_repos.yml +++ b/.github/workflows/mirror_repos.yml @@ -50,7 +50,7 @@ jobs: git config --global user.name AztecBot git config --global user.email tech@aztecprotocol.com - if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=main; then + if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=master; then git fetch # in case a commit came after this git rebase origin/master git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]" @@ -71,7 +71,7 @@ jobs: git config --global user.name AztecBot git config --global user.email tech@aztecprotocol.com - if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=main; then + if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=master; then git fetch # in case a commit came after this git rebase origin/master git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]" @@ -92,7 +92,7 @@ jobs: git config --global user.name AztecBot git config --global user.email tech@aztecprotocol.com - if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=main; then + if ./scripts/git_subrepo.sh push $SUBREPO_PATH --branch=master; then git fetch # in case a commit came after this git rebase origin/master git commit --amend -m "$(git log -1 --pretty=%B) [skip ci]" diff --git a/yarn-project/aztec-nr/.gitrepo b/yarn-project/aztec-nr/.gitrepo index 9b54eedeb04f..634493055c9c 100644 --- a/yarn-project/aztec-nr/.gitrepo +++ b/yarn-project/aztec-nr/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:AztecProtocol/aztec-nr.git branch = master - commit = f662901567fa19e205062d84180763f06cddd641 + commit = d6bea82a92949b51e70ca5e9061252f9ccfe0c7e method = merge cmdver = 0.4.6 - parent = 8df8fa7351ca79c022e2eb7dddfd7cf0145876df + parent = 62376ba4513fffdd96fd0b85c2b5884ec8bb224f diff --git a/yarn-project/aztec-nr/README.md b/yarn-project/aztec-nr/README.md index c137de45e0cb..b5f09142a4ab 100644 --- a/yarn-project/aztec-nr/README.md +++ b/yarn-project/aztec-nr/README.md @@ -4,7 +4,7 @@

Aztec.nr

- Aztec Smart Contract Development Framework + Aztec Smart Contract Framework

@@ -18,7 +18,7 @@ # Aztec.nr -`Aztec-nr` is a [Noir](https://noir-lang.org) framework for contract development on [Aztec](aztec.network). +`Aztec-nr` is a [Noir](https://noir-lang.org) framework for smart contracts on [Aztec](aztec.network). ### Directory Structure ``` From 8b76a124390102574efcc8078bc9bc47c8e7ba35 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:32:33 +0200 Subject: [PATCH 14/25] chore: bump nargo to 0.11.1-aztec.0 (#2298) Bumps noir version --- yarn-project/aztec.js/src/abis/ecdsa_account_contract.json | 2 +- .../aztec.js/src/abis/schnorr_account_contract.json | 2 +- .../src/abis/schnorr_auth_witness_account_contract.json | 2 +- .../src/abis/schnorr_single_key_account_contract.json | 2 +- yarn-project/noir-compiler/src/noir-version.json | 4 ++-- yarn-project/noir-contracts/README.md | 7 +++++++ 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 4a6b52f79749..75d64f6bbd5d 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -153,7 +153,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "H4sIAAAAAAAA/+1dB3wU1fPfy6WQhN47QaS32xSSSAtFFFCkKaKCQEgQQbCAFQR7F3tHrNgLdrGLvXf92XsXu9j5z0vmkclyROBmjp0/bz+f+czbd3vvfae88t3bu6tfy/MWZXgVRwQkBSQVy/Y8LXCejuW0yrdVXG+OpiDNQJqDtCDvs6+3BGkF0hqkDb6eQl5vC9IOJAekPemvA0gtcr5t4Lxj4LxT4Lxz4LxL4Lxr4Lxb4Lx74LxH4Lxn4LxX4Lx34DwWOPcD57mB87zAeX7gvCBw3idwXhg4LwqcFwfOtwuc9w2c9wuc9w+cDwicDwyclwTOBwXOBwfOhwTOhwbOtw+cDwuc7xA43zFwPjxwPiJwPjJwvlPgfOfA+ajA+S6B89GB8zGB87GB83GB8/GB810D57sFzicEzncPnE8MnO8RON8zcL5X4HxS4Hxy4HzvwPmUwPnUwPk0PDfzQ9SrzBdzmHnAjH0z3s0YN+O6i1c5fs2YNePUjE0zHs0YNOPOjDUzvsyYMuPIjB0zXswYMePCjAWT/ybnTZ6b3Db5bHJ4IPZt8tPkpMlDk3sm30yOmbwyuWTyx+SMyROTGyYfTA7sgrEegzEdh7HbFWM0AWMxEX2+J/p2Evpwb/TVVPSJ8Y+Ze3PQH2a+/dernHONbo66BeqWqFuhbo26Deq2qNuhzkHdHvU2qDug3hZ1R9SdUHdG3QV1V9TdUHdH3QN1T9S9UPdGHUPto85FnYc6H3UBaa8UZLpXmStmHUlB39j6oM/64HsLURehLka9Heq+qPuh7o96AOqBqEtQD0I9GPUQ1ENRb496GOodUO+IejjqEahHot4J9c6oR6HeBfVo1GNQj0U9DvV41LsSn5WBlKPP0ojPbD09IqhLUOfF+uTnlxXmlvl5/tRYbvG0ooJYfsG0PkV+kV9QVDA9tygvr6wov6iweFpxYazYz88r88sLivPKY5XHDNJWLMFDEuc+SnDOVIJzXyU4ZynBOVsJzv2U4JyjBOdcJTj3V4LzACU4D1SC8yAlOOcpwTlfCc6DleA8RAnOQ5XgPIwRZ5CrGY5sOMsE1Lujnoh6D9R7ot4L9STUk1HvjXoK6qmop6GegXof1DNR74t6FurZqPdDPQf1XNT7oz4A9YGoD0I9D/V81AejPgT1oagP86q42uEgR3iVPM34xnI1Wy8Z2wWejhxcqATnkUpwLlKCc7ESnEcpwXm0EpzHKMF5rBKcxynBebwSnCcowXmix793q4/tmfvvZg9Thvpw1AtQL0R9JOpFqBejPgr10aiPQX0s6uNQH4/6BNQnelV7p5NATvYq907mI267d7L1Uazf0FHC4xtfru386YJtlwm2XS7XdkFMsG3BWBbkpmM7ZizlYPkUkFNBTgM5HWQJyBkgZ4KcBXI2yDkg54KcB3I+yAUgF4JcBHIxyCUgS0EuBVkGchnI5SBXgFwJchXI1SDLQa4BuRbkOpDrA1huALkR5CaQm0FuAbkVZAXIbSC3g9wBcifIXSB3g9wDci/ISpD7QO4HeQDkQZCHQB4GeQTkUZBVII+BPA7yBMiTIE+BPA3yDGJ4FvVzqJ9H/YJXdSzDQZ3pVX6ObA7rW1Nnx3waqbOvp5I6+3qU1NnXU0idfT1C6uzrXqB/c5SgjiV4pHvrrwmxBA9jcwNihxfH3kgcv6TE8Z99PS2O/2g87Os2LnXx9UwBf2Uzt2kwZnnVj0jgvISUs4n9tQXsqyNgX+1NsK8Osa+ugH31BOyruwn21SP21Rewr4GAffU3wb4GxL6GAvYxt+mbNhsJ4GzC22ahiUNjb+Pj0ITEoamAfc2Y2zRtNCf4ra0WezZ5vRmxrTkvDj9C+rTt2vPmpN8WrP3mVowzar85aopvC4KlJSuWyvhyr52mjVYEv7XVYs8mr2cS21rx4qiIb0uvuk/teSvSr7OftV9nv+fsd/Y7+539zn5nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sd/Y7+539ybffC1wT71mMlgE7BJ5DqPFZjJZiPqp8FoPab46ansWgedOaFYvcsxhtCH5rq8WeTV6nudiGF0dFfFt71X1qz9uQfp39rP06+z1nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sT779XuCaeM9itA7YIfAcQo3PYrSW63e9WMWzv00cHBKx2pD9bZz9zn5nv0C/fsXvHtF+zVHTs1gUS1tWLJXPYknEtx3Bb2212LPJ6zS+7XhxVMS3rVfdp/a8HenX2c/ar7Pfc/Y7+539zn5nv7Pf2e/sd/Y7+539zn5nv7Pf2e/sd/Y7+539YbA/m7yeQrAw32f3a7q/3zYOlmiIsKSGCEtaiLCkhwhLRoiw1AoRlswQYckKEZbsEGGpHSIsdUKEpW6IsNQLEZb6IcLSIERYGoYIS6MQYWkcIixNQoSlaYiwNAsRluYhwtIiRFhahghLqxBhaR0iLILPim0ylsgWxpLprf9cXSZ5PYXU2fsB9P9bc7BM/7+1PZbp/7duQ+y0dR2wnEHqtsVyLVLXkZSt7oTlLFLXGcu1SV0XLNcldV2xXJ/UdcNyQ1LXHcuNSF0PLDcmdT2x3JTUWb9RP1u/tSN11m85pM76rT2ps37bhtRZv3UgddZv25I66zfqR+u3TqTO5mVnUmd92YXU2f1/V1Jn/duN1Nn9cHdSZ33eg9TZ/aH1o7E/Eq163V5Lc7FnnHZsmY4p23cJ6lhiR8WYov2UkHPbVxbB0CMEWNqECEvrEGFpFSIsLUOEpUWIsDQPEZZmIcLSNERYmoQIS+MQYWkUIiwNQ4SlQYiw1A8RlnohwlI3RFjqhAhL7RBhyQ4RlqwQYckMEZZaIcKSESIs6SHCkhYiLKkhwhINEZaUOFgknsmx9y/MYe8xtCY4LKZuBEdXZp+YNrrEwdGV4LD9dyE4OvPiyDVtdIqDozPBYfvvRHB05MWRZ9rYNg6OjgSH7X9bgqMDL45808Y2cXB0IDhs//R+Z3teHAWmjZw4ONoTHLb/HIKD+dmxPqaNtnFwtCM4bP9tCY5evDiqPcNWce/Qqxqntq8oueYXnEzMvpLe66b3Lntjmd73jGGZ3jP1sUzvt+Zimd6rzcNyDqmr6R5xb1Jn14QYqbNrlk/q7JqaS+rsmm/7z8DrLDctsW0nduSavizHtEdNnz/Qe+qWs9PP5pvw4qvIkcYBLPbc9pVNMNSXw1KYvYG+7ZFC+m4s4Acv4Ad7NI6DJRoiLKkhwpIWIizpIcKSESIstUKEJTNEWLJChCU7RFhqhwhLnRBhqRsiLPVChKV+iLA0CBGWhiHC0ihEWCJbGMuGnvWxr9PnK5qQstX2M0f6zE2zgJ2mzn5mS5/DsZ8p1yF19jNv+myO/Uy+Hqmz918akLqUOLbZvSrFbveM9Nkcu3drRursHqo5qbN7mRakzu4pWpI66yP6P57WRxa76fP8jPXtTIljJ23HlmnuSPzfJu2nhJzbvugzLa1CgKVRiLA0DBGWBiHCUj9EWOqFCEvdEGGpEyIstUOEJTtEWLJChCUzRFhqhQhLRoiwpIcIS1qIsKSGCEs0RFhS4mBpwYul4qMLu7c2h93rtiA44v23fDNmHJEAjhzSL/1+VVPmWJg2msSxn3Iq238TwThQbmfbNuPi0qic7QKfPVbEkf4+9iJiF/3dDol+2wb6bRrol37WlI7XWKz2vVFyzfXRqjgsx3IWaY9+JyUn0BflwvY1+xlfewHbbR+2P+vz9sT29sT2HPKe5sR2e80txPZuGVXvY/7svtC0YT+PTSG4OxCszM8tVHwMS59bsO1vQ+o6k7KdE+x76HMNnQlOibmJ4rD9099f7xoHZ7znQLoSnN14cVbkH8URIf3avqLkmgdIbnUluSUR525x/NeR+KIHc5/0+2nUH/QoIWX63BTz8xcF9PtYG4OlF8HSmxdLTGrvEiP4ra0WezZ5nX4XOcaLo2I/19ur7lN7HiP9OvtZ+3X2e85+LfbTZ9e6b2Es2QRDTzksBdlecvKA+pZypy8Jd/KZbTNt5jPbYWJnnxE0xyJiVz7xn0S/eYF+/UC/kUAMFxGs9r1Rcs2hGVVx+IFwJ9seHQN9eO2p2IMVeNWPmvY9fQiWIlYsuRW5WbgJWIoIlmJWLJV7sO2Y2zRt9CX4ra0WezZ5fTtiW19eHBXzXrFX3af2vC/p19nP2q+z33P2O/ud/c5+Z7+z39nv7Hf2O/ud/c5+Z7+z39nv7Hf2O/ud/c5+Z7+z39nv7Hf2O/ud/c7+5NufSeoKtjCWbIKhUAxLbizbi58HzDbnZgZsNkdNz3lQLP2ZbTZY+m0Clv4EywBWLHLPnAwk+K2tFns2eZ2OuYG8OCryfIBX3af2fCDp19nP2q+z33P2O/ud/c5+Z7+z39nv7Hf2O/ud/c5+Z7+z39nv7Hf2O/ud/c5+Z7+z39nv7Hf2O/ud/c7+5NufSeqKtzAW+ixIPzEslc+cxMuDFqz9rJ8H9rdV6G+3xsPBaq9f+YxHCattlc+wDAq0aeqGxKkb7FU/anrWZQh531AsDyC+GcZqR+Vv6+xA2i8hfQwh9Tvy9uvTfiMotg9bHyXl0rSqa+115rd7/iV+GkjaG47lFLxmxzjXbE/KtB373mDZxtH6J5u8Ttsa+h/40sn7SlDHEjsq/DmMYC0h58MJnt3SqjAM5cWQS32aiu3aHBoqZ3uM5oTN4WBcTP0IAZ/bfm0O2z5sfZSUD7M/ak6uM4fNK4s5i/jLXmfmg3jjUsKmYcSmEnI+gtRv6Bo6XuLZOIzYuEOc62rySzZ5fYeN7Ie+h+aghN+o7SXk3PZlxkQ5GX8SvzNn7aa/M7dAbMz75QJrQ4zOI+ZYROyi41yi3+GBfocG+g2ul4sIVvteum6NI78zdyzGIYu0R59zlvh95pFe1WH3X/S3421ujiQ4tOy/RgbaNHU7x6nbyat+1LT/2pm8bxSWRxDfjGa1ozLnxpD2S0gfO5P6sbz9+rRfu3bZPmx9lJSXkv2Xvc7ub6yf6N5qHJbt/mtsnGt2IWXajn1vsGzjaP2TTV6nbY36D3zp5H0lqGOJHRX+HE2wlpDzcQTPGWQuHsWLIZf61O6/bA6NkrM9RnPC5nAwLqZ+vIDPbb82h20ftj5KyreT/df4quK6vLKYs4i/7HVmPog3LiVsGk1sKiHn40n9hq6h4yWejaOJjWPiXFeTX7LJ62M2sh/6HpqDEn6jtpeQc9uXGROXkfE3hhdDLN4cMDLgL4k9WLw1ZGggDqZ+F157fTrXGrdSHLavKLnmPvR9HSE/mDbirRe2HzquxwnGg3+9rtzvUNs8r+Z9DJ2Pd2XFUpnnu5H2S0gftN8JvP36tF8739s+bH2UlF8g8/2EquK6vbfFbPJifJzraHlc4D3Z5PXxwjbvSnCUkHPbl5nXVm1gbbO4hxLcwfnY5JaNG+Ujkuu1bXdsADP93uU4MSyV98CDfZt+JP7jhcbDcjDbT9YGcGjhYMG4mLrd4tTRHDZHTXPXbuR9NsfpvDKR1Y7K+WwP0n4J6YPOc3vy9uvTfu18Zvuw9VFSXk04mL3OchzrJ8qv9sKy5WB7xrlmd1Km7dj3Bss2jtY/2eR12taE/8CXTt5XgjqW2FHhz4kEawk534vg+YjsAZnn61zqU8vBbA5NkLM9RnPC5nAwLqZ+koDPbb82h20ftj5Kyqnp3rpjUlVxXV5ZzFnEX/Y6Mx/EG5cSNk0kNpWQ80mkfkPX0PESz8aJxMY94lxXk1+yyet7bGQ/9D00ByX8Rm0vIee2LzMmfhS+B27tpvfAM9Kr+pTY70uMZ7r/XOStn19S/e4e6HdooN/germIYLXvpetWL3IPvB7GIYu0R5+7YM7Jir9+mexVHXb/ZfsxOOzcNJng0LL/mhxo09RNiVO3t1f9qGn/NYW8byqW6dpSympHZc5NJ+2XkD6mkPoy3n592q9du2wftj5Kyl3Sq66119n9jfUT3VuVY9nuv8riXDONlGk79r3Bso2j9U82eZ22NfU/8KWT95WgjiV2VPizlGAtIeflBE8rMhdP5cWQS31q919T8HyqnO0xmhM2h4NxMfUzBHxu+7U5bPuw9VFSHkD2XzOqiuvyymLOIv6y15n5IN64lLCplNhUQs5nkPoNXUPHSzwbS4mN0+NcV5Nfssnr0zeyH/oemoMSfqO2l5Bz25cZE93J+JvOiyEWbw6YHPCX1D3w4BoyNBAHqXvgNqb2HrjFQe+B22uGoe8l74Hb+cYcNhfpPXCLZZpgPPjn2Mr9DrXN82rex5QT+5jHWkWe70PaLyF90H5n8vbr037tfG/7sPVRUp5I5vuZVcV1e2+L2eRFWZzraHla4D3Z5PUyYZvp/FpCzm1fZl4bRWwti4Ob3gO3r9uxYHLLxo3yEYk954bm6DKCrziAnR9L5T3wYN9ZpI5+FsA8fipomM1Rc1heFi8f6Thjzq2K30WkOMxR05wyk2CZJYBl303AMotg2U8Ay+xNwLIfwTJXAMucTcAyl2A5QADL/puA5QCC5SABLAduAhbbv3nfPCzTsTWfF1/FXDcvgMWe276yCYZyMSyVc12wb+qHfcX63ng/WAzTtqAfZov1vfF+sBjKBLH8lx/mhMAPFkOzLeiH/UPgB4uh0xb0w4Eh8IPFkJJkP2SRuoak7w68fRfSPo2NTbDcgfTJzd9Nm4cw22Hy5mCv+lHTunwIse8wXiwVPPVw0n4J6YP2ewSzX2m/lqfaPmx9lJRvJtztiKriuryzmE0uHhrnOlo+OPCebPL6ocI2H0ZwlJBz25fhqVcSWw+Ng5uOefs6fY5a4nsihxActv+mpE/mvKwYI9R2c9Q0Rg4jWJjjVjFGFpD2S0gftN+FzH6n/doxYvuw9VFSfoTkzcKq4rq8sZjNGDk8znW0HBxD2eT1w4VtpmO1hJzbvswYuYvYengc3IcQ3PZ1yh8kxggd27Z/OkaY87JijFDbzVHTGDmCYGGOW8UYOZK0X0L6oP0uYvY77deOEduHrY+S8mskbxZVFdfljcVsxsiCONfRcnAMZZPXFwjbTMdqCTm3fZkx8jSxdUEc3HT9s69TbikxRujYtv3TMcKclxVjhNpujprGyEKChTluFWNkMWm/hPRB+z2K2e+0XztGbB+2PkrKX5C8OaqquC5vLGYzRo6Mcx0tB8dQNnn9SGGb6VgtIee2LzNG3iW2HhkHN13/7Ov0voPEGKFj2/ZPxwhzXlaMEWq7OWoaI4sIFua4VYyRo0n7JaQP2u8xzH6n/doxYvuw9VFS/pPkzTFVxXV5YzGbMbI4znW0HBxD2eT1xcI207FaQs5tX2aMfE9sXRwHN13/7Ov0npTEGKFj2/ZPxwhzXlaMkcVe9aOmMXIUwcIct4oxcixpv4T0Qfs9jrdfn/Zrx4jtw9ZHSblORpU/jqsqrssbi9mMkaPjXEfLiwPvySavHy1sMx2rJeTc9mXGSAqx9eg4uOn6Z1/vRHBLjBE6tm3/dIww52XFGKG2m6OmMXIMwcIct4oxcjxpv4T0Qfs9gdnvtF87Rmwftj5Kyjkkb06oKq7LG4vZjJFj41xHy8ExlE1eP1bYZjpWS8i57cuMkSbE1mPj4Kbrn33d3ss2uWXjRu8xHytgy4bG+7EEX8MAdgEshdlx+jZ+7Eqel++WUdW/xBxCfWHvtzclMbF1dL9wabSyTHOWPjMjgZPm38QAToGcrza/2Hbtdx1tX3TsB+cgOjdJPHN4IraVFsBBnzm01xRhDtXB85O8qsN+V4jOQycGrjM2nMxqQ+WzfBSH9Sc9Skj5ZILlVFYslbE+jbRfQvqg/Z7O269P+7Vrie3D1kdJeTiZX0+vKq4bgxazieEpca6j5ZMC78kmr58ibPOpBEcJObd9mTlmALH1lDi46Xfb7Os2b01u2bjReekUAVtO9qrbcnIAM32W7yQxLJXPdQT7pt+Fo3tZ+124LPIe6d8hozEchprO36fx9hmLl2eDsEzHXHDcW5ynknqJ+dvmeloAB52/7TWTAvP3Eq/qGIza4s4i71tCbDiD1YbK+ZvisP6kRwkpn0GwnMWKpTLWZ5P2S0gftN9zePv1ab92/rZ92PooKc8hc9o5VcV1Y9BiNjE8M851tLwk8J5s8vqZwjafRXCUkHPbl5ljSomtZ8bBPYzgtq/bvDW5ZeNG56UzBWw5w6tuyxkBzPT3SJaIYamcv4N909/zPIX4dgH5HUn7nu5e1UH93Rt1N1J3Nim3DrzHtHlW4DqBPCrIDOAwR03zxzkEy3m8WCrmj/NJ+yWkD9rvBbz9+rRfO3/YPmx9lJRPIWPqgqriuhywmE0Mz41zHS2fHXhPNnn9XGGbzyM4Ssi57cvk+GJi67lxcPcmuO3rZxHcEnsYOv/a/ilXtji6ExzMuVrhv3MD/rPnNJbdA/4SwFKQHafvTOIbuh58Ga3Ckc2Kwy9M96r2RlxtGjtqe9WPmuYn238tFHPMKJs3au68soMi5P22Tfv5SRZpI4WUo+Q9qd76ONLi1KXHqcvw1j9qkXImKWeT92UFcJrr6mK5NqmzmO1rGd76fmJL/jQEn4PtmUXRbNTN5tlsHswCbSZDs5iZycAkv0lCk6QmQc1EaiaZC0EuArkY5BKQpSCXgiwDuQzkcpArQK4EuQrkapDlINeAXAtyHcj1XmUQMgmeG0BuBLkJ5GaQW0BuBVkBchvI7SB3gNwJchfI3SD3gNwLshLkPpD7QR4AeRDkIZCHQR4BeRRkFchjII+DPAHyJMhTIE+DPONVP1ICvs+L9cnPLyvMLfPz/Kmx3OJpRQWx/IJpfYr8Ir+gqGB6blFeXllRflFh8bTiwlixn59X5pcXFOeVo/NTGOP4HF9bMWpzJGBzLLHDf4HRf1EvzsAQwPy8x7sxsseLpJwayDFz2AkrXcAmL9BP0I91PcFJRypILwq0+5LHl7BSdr/EH6NYMEECbfuxBI5TgjgTaO1UxviYpzaS5L9YIlaf5sXBuZmtnc7ovx+S67/Y5lq9xNsAzs1o7QxG//2YfP/FNsfqM70acG5ia2cx+u+nLeO/2KZafbb3Hzg3obVzGP3385bzX2xTrD7X2wicG9naeYz++2XL+i+2sVaf720kzo1o7QJG//265f0X2xirL/Q2Aed/tHYRo/9+C4f/Yv9l9cXeJuKsobVLGP23Jjz+i9Vk9VJvM3BuoLVLGf33e7j8F9uQ1cu8zcQZp7XLGP33R/j8F4tn9eVeAjgDrV3B6L8/w+m/WNDqK70EcZLWrmL031/h9V+MWn21x4ATW1vO6L+/w+2/mLX6Go8JJ7R2LaP//gm//8zhX8fYFr3nlKj//lXiP8b7RP6PjP5bq8R/jPc5/J8Z/Wc+qtTgP0ae7v/K6L+IEv8x8kx/DaP/UpT4j5En+X8w+i+qxH+M+3z/L0b/pSrxH+M+1f+H0X9pSvzHuM/y1zL6L12J/xj3CT5dMxP1X4YS/zGuc36U0X+1lPiPcZ720xj9l6nEf4zzjJ/B6L8sJf5jHCd+JqP/spPkv0RxvswYC8ac8bOTl38JPX91g8f3/NWNjHHtmtzxu9lW3+TxPX91M6P/uiV//tssq2/x+J6/upXRf923zPqxyVav8Piev7qN0X89ttz6u0lW3+7xPX91B6P/em7Z/ctGW32ntxE4N7K1uxj912vL7/82yuq7vY3EuRGt3cPov97h2D//p9X3epuA8z9aW8nov1h4+EeNVt/nbSLOGlq7n9F/frj42watfsDbDJwbaO1BRv/lho//xrX6IW8zccZp7WFG/+WF8/7BelY/4iWAM9Dao4z+yw/v/ZdqVq/yEsRJWnuM0X8F4b5/tc7qxz0GnNjaE4z+6xP++38VVj/pMeGE1p5i9F+hkvunTzO21ZXx/mmREv8x3ifyuzP6r1iJ/xjvc/g9Gf23nRL/MfJ0vzej//oq8R8jz/R9Rv/1U+I/Rp7k5zH6r78S/zHu8/0CRv8NUOI/xn2qX8jov4FK/Me4z/KLGf1XosR/jPsEvy+j/wYp8R/jOuf3Z/TfYCX+Y5yn/YGM/huixH+M84w/iNF/Q5X4j3Gc+EMY/be9kuevXmGMBWPO+Jz+s7/+aH8V0jxz9q9X+SOFRr+C+hnUz6I2x6sgr+F7za8+pgTq6RFhjs3rjLGxPrD4X0cbXyW2vgHyJtqaTa619fTgzsO3GG3V+Bxgov77n7f1jeO3vOrj+H/ehsfx2yDv4Htrk9y29fTgHsfvenLj+F208W1i63sg76Otdci1tj7YRgq+9z3U5gcsPwD5ENuoS6619cE2nsf3foDa5PdHIB9jG/XItbaeHinMPn+Jsa1PBOJnfxG5KfqrGermqFugbom6FerWqNugbou6Heoc1O1Rb0P0pyCfYTzqE5/b+hSv+g+Fcv++5ad8bcVysJ3PQb4A+RLkK5CvQb4B+RbkO5DVIN+D/ADyI8hPID+D/ALyK8hvIGtAfgf5A+RPkL9A/gb5B323Fp0RAUkBiYKkgqThz9JH0HcGSy2v6vyLwPmXgfOvAudfB86/CZx/Gzj/LnC+OnD+feD8h8D5j4HznwLnPwfOfwmc/xo4/y1wviZw/nvg/I/A+Z+B878C538Hzv8JnP8bOF8bODcFeh4JnKcEzqOB89TAeVqk+q+Fm4Ob39Axk+g89jljW6Uh3xeVlZsj5n/B1JaJxZeM/pseev9VNO1/lXhbuWiz/zWj/8rC7L/8dTj9bxJrK0Zs9r9l9F95WP2XWw2n/93mtxUL2OyvZvTfjBD6r0/5ejj97zevraI4Nvs/MPpvn7D5ryguTv/HTW+rcAM2+z8x+m9mmPxXuEGc/s+b1lZuDTb7vzD6b9+w+K+wRpz+rxvfVul/2Oz/xui/WWHwX+F/4vTXbFxbsY2w2f+d0X+zt7T/YhuF0//jv9sq2Eib/T8Z/bfflvRf/kbj9P+qsa388k2w2f+b0X9ztpT/CjcJp//Phtsq2kSb/X8Z/Td3C/ivuHyTcfpr47cV2wybfXPjg8t/+yfbf7HNwulH1rfZ30yb/RRG/x2QTP9N32ycfrS6zXkJ2OynMvrvwCT5L7c8IZx+WoTvXmIp4/MNByl5PoTxPptfxui/eUr8x3ifyJ/B6L/5SvzHeJ/Dn8nov4OV+I+Rp/uzGP13iBL/MfJMfz9G/x2qxH+MPMmfy+i/w5T4j3Gf7x/A6L/DlfiPcZ/qH8TovyOU+I9xn+XPZ/TfAiX+Y9wn+Icw+m+hEv8xrnP+YYz+O1KJ/xjnaf8IRv8tUuI/xnnGX8jov8VK/Mc4TnzGnPE5/WeeB23gVT47ao40fL4xis87RvA5R3Mv2dxDN/fkzWcR5rMN85mO+YzIfDZmPmsznzGazyzNZ7Xms1/zmbf5DN08O2CeRTDPYJhnOsyzLObZGPNMkHnGyDxb9YVX+QwlPbifxU7f/HuI6z1PEvWqPy+7IcyxxA4/ne8eYIzizSAnqahTyOt2LKUL2OQF+gn6sW6cOtbOJYKUEeFvtxbjTW8pu2tF2GNUbVKX9GkswSPqVQ2UeAdPP7kxxrbX+xE6OdzwoRdpMxMDmUXyJRN1ilc1+aSjjhDfmglqLWkrQnSEtLGWvCfeNZENtJNJ6uz76xIsjD6JCUyoMdEJ0z7xbgL4oFf1BHwWGUgeCQLtO+F/0mCcALNrGPib2nayVv9sodW/tlv9eYNUW2D1rxPy1d/YXUdo9efe+mchVu52l4WUygZxcuZSXcbHEjj9Zxcmg2+QV/1IcGFaj/5xLkxZbP7MrXHnnCjOegrpcz2hBbS+W0B5g1RfYAFtEPIF1NjdQBl9bpAE+iyx+G8mZkm6vMWoeEN0cKPNpOKDvfVjFaTig73/puLx2nFUfMPHOireMFLlTHPeKA4V5/6RmSzG1b8h48TcSGhwc09CDSPJmeATxdmYEaeZLBp46x/cfuBe5BpHwo+xiVA+sSdUU4W0oakQbWjmaANvkJoJ0IbmIacNxu7mymhD862bNvhx4KqjDS3QwS0dbdBJG1oEaENLZbShBePE3FJocHNPQi2U0IZWjB8KaKUNrSLhx9haC21oo5A2tBGiDW0dbeANUlsB2tAu5LTB2N1OGW1ot3XThtw4cNXRhhx0cHtHG3TShpwAbWivjDbkME7M7YUGN/cklKOENmzDhzNXK23YJhJ+jB200IZtFdKGbYVoQ0dHG3iD1FGANnQKOW0wdndSRhs6bd20IS8OXHW0oTM6uIujDTppQ+cAbeiijDZ0ZpyYuwgNbu5JqLMS2tCVD2eeVtrQNRJ+jN200IbuCmlDdyHa0MPRBt4g9RCgDT1DThuM3T2V0YaeWzdtyI8DVx1t6IUO7u1og07a0CtAG3orow29GCfm3kKDm3sS6qWENsT4cOZrpQ2xSPgx+lpoQ65C2pArRBvyHG3gDVKeAG3IDzltMHbnK6MN+Vs3bSiIA1cdbShAB/dxtEEnbSgI0IY+ymhDAePE3EdocHNPQgVKaEMhH84CrbShMBJ+jEVaaEOxQtpQLEQbtnO0gTdI2wnQhr4hpw3G7r7KaEPfrZs29IkDVx1t6IcO7u9og07a0C9AG/orow39GCfm/kKDm3sS6qeENgzgw9lHK20YEAk/xoFaaEOJQtpQIkQbBjnawBukQQK0YXDIaYOxe7Ay2jB466YNhXHgqqMNQ9DBQx1t0EkbhgRow1BltGEI48Q8VGhwc09CQ5TQhu35cBZqpQ3bR8KPcZgW2rCDQtqwgxBt2NHRBt4g7ShAG4aHnDYYu4crow3Dt27aUBQHrjraMAIdPNLRBp20YUSANoxURhtGME7MI4UGN/ckNEIJbdiJD2eRVtqwUyT8GHfWQhtGKaQNo4Rowy6ONvAGaRcB2jA65LTB2D1aGW0YvXXThuI4cNXRhjHo4LGONuikDWMCtGGsMtowhnFiHis0uLknoTFKaMM4PpzFWmnDuEj4MY7XQht2VUgbdhWiDbs52sAbpN0EaMOEkNMGY/cEZbRhwtZNG6bGgauONuyODp7oaINO2rB7gDZMVEYbdmecmCcKDW7uSWh3JbRhDz6cU7XShj0i4ce4pxbasJdC2rCXEG2Y5GgDb5AmCdCGySGnDcbuycpow+StmzZMiwNXHW3YGx08xdEGnbRh7wBtmKKMNuzNODFPERrc3JPQ3kpow1Q+nNO00oapkfBjnKaFNpQqpA2lQrRhuqMNvEGaLkAbykJOG4zdZcpoQ9nWTRtK48BVRxvK0cEzHG3QSRvKA7RhhjLaUM44Mc8QGtzck1C5EtqwDx/OUq20YZ9I+DHO1EIb9lVIG/YVog2zHG3gDdIsAdowO+S0wdg9WxltmL1104bpceCqow37oYPnONqgkzbsF6ANc5TRhv0YJ+Y5QoObexLaTwltmMuHc7pW2jA3En6M+2uhDQcopA0HCNGGAx1t4A3SgQK04aCQ0wZj90HKaMNBWzdtKIsDVx1tmIcOnu9og07aMC9AG+Yrow3zGCfm+UKDm3sSmqeENhzMh7NMK204OBJ+jIdooQ2HKqQNhwrRhsMcbeAN0mECtOHwkNMGY/fhymjD4Vs3bSiPA1cdbTgCHbzA0QadtOGIAG1YoIw2HME4MS8QGtzck9ARSmjDQj6c5Vppw8JI+DEeqYU2LFJIGxYJ0YbFjjbwBmmxAG04KuS0wdh9lDLacNRWTRt8zq39FqMNR6ODj3G0QSdtODpAG45RRhuOZpyYjxEa3NyT0NFKaMOxbDj9mFbacGwk/BiP00IbjldIG44Xog0nONrAG6QTBGjDiSGnDcbuE5XRhhO3btrgx4GrjjachA4+2dEGnbThpABtOFkZbTiJcWI+WWhwc09CJymhDafw0QZfK204JRJ+jKdqoQ2nKaQNpwnRhtMdbeAN0ukCtGFJyGmDsXuJMtqwZOumDblx4KqjDWegg890tEEnbTgjQBvOVEYbzmCcmM8UGtzck9AZSmjDWXy0IVcrbTgrEn6MZ2uhDecopA3nCNGGcx1t4A3SuQK04byQ0wZj93nKaMN5WzdtyIsDVx1tOB8dfIGjDTppw/kB2nCBMtpwPuPEfIHQ4OaehM5XQhsu5KMNeVppw4WR8GO8SAttuFghbbhYiDZc4mgDb5AuEaANS0NOG4zdS5XRhqVbN23IjwNXHW24FB28zNEGnbTh0gBtWKaMNlzKODEvExrc3JPQpUpow2V8tCFfK224LBJ+jJdroQ1XKKQNVwjRhisdbeAN0pUCtOGqkNMGY/dVymjDVVs3bSiIA1cdbbgaHbzc0QadtOHqAG1Yrow2XM04MS8XGtzck9DVSmjDNXy0oUArbbgmEn6M12qhDdcppA3XCdGG6x1t4A3S9QK04YaQ0wZj9w3KaMMNWzdt6BMHrjracCM6+CZHG3TShhsDtOEmZbThRsaJ+Sahwc09Cd2ohDbczEcb+milDTdHwo/xFi204VaFtOFWIdqwwtEG3iCtEKANt4WcNhi7b1NGG27bumlDYRy46mjD7ejgOxxt0Ekbbg/QhjuU0YbbGSfmO4QGN/ckdLsS2nAnH20o1Eob7oyEH+NdWmjD3Qppw91CtOEeRxt4g3SPAG24N+S0wdh9rzLacO/WTRuK4sBVRxtWooPvc7RBJ21YGaAN9ymjDSsZJ+b7hAY39yS0UgltuJ+PNhRppQ33R8KP8QEttOFBhbThQSHa8JCjDbxBekiANjwcctpg7H5YGW14eOumDcVx4KqjDY+ggx91tEEnbXgkQBseVUYbHmGcmB8VGtzck9AjSmjDKj7aUKyVNqyKhB/jY1pow+MKacPjQrThCUcbeIP0hABteDLktMHY/aQy2vDk1k0bpsaBq442PIUOftrRBp204akAbXhaGW14inFiflpocHNPQk8poQ3P8NGGqVppwzOR8GN8VgtteE4hbXhOiDY872gDb5CeF6ANL4ScNhi7X1BGG17YumnDtDhw1dGGF9HBLznaoJM2vBigDS8pow0vMk7MLwkNbu5J6EUltOFlPtowTStteDkSfoyvaKENryqkDa8K0YbXHG3gDdJrArTh9ZDTBmP368pow+tbN20ojQNXHW14Ax38pqMNOmnDGwHa8KYy2vAG48T8ptDg5p6E3lBCG97iow2lWmnDW5HwY/yfFtrwtkLa8LYQbXjH0QbeIL0jQBveDTltMHa/q4w2vLt104bpceCqow3voYPfd7RBJ214L0Ab3ldGG95jnJjfFxrc3JPQe0powwd8tGG6VtrwQST8GD/UQhs+UkgbPhKiDR872sAbpI8FaMMnIacNxu5PlNGGT7Zu2lAWB6462vApOvgzRxt00oZPA7ThM2W04VPGifkzocHNPQl9qoQ2fM5HG8q00obPI+HH+IUW2vClQtrwpRBt+MrRBt4gfSVAG74OOW0wdn+tjDZ8vXXThvI4cNXRhm/Qwd862qCTNnwToA3fKqMN3zBOzN8KDW7uSegbJbThOz7aUK6VNnwXCT/G1ZwY7Qyfgw02gYpaoFuj7oC6G2ofdRHqgaiHod4Z9XjUe6Kehnom6v1RH4L6SNTHoT4V9dmoL0J9OeprUd+C+i7UD6B+DPWzqF9B/T/UH6L+AvVq1NYP38P5DyA/gvwE8jPILyC/gvwGsgbkd5A/QP4E+Qvkb5B/QP4FWYszdAQkBSQKkgqSBpIOkgFSCyQTJAskG6Q2SB2QuuY6eHvDEOExb6f+OQXPT0V9GurTUS9BfQbqM1Gfhfps1OegPhf1eajPR30B6gtRX4T6YtSXoF6K+lLUy1Bfhvpy1FegvhL1VaivRr0c9TWor0V9HerrA364Ac9vRH0T6ptR34L6VtQrUN+G+nbUd6C+E/VdqO9GfQ/qe1GvRH0f6vtRP4D6QdQPoX4Y9SOoH0W9CvVjqB9H/QTqJ1E/hfpp1M+gLkE/dMDzbVF3RN0JdWfUXVB3Rd0NdXfUPVD3RN0LdW/UMdQ+6lzUeajzUReg7oO6EHUR6mLU26Hui7of6v6oB6AeSOw1ehDqwaiHoB6KenvUw1DvgHpH1MNRj0A9EvVOqHdGPQr1LqhHox6DeizqcajHo94V9W6oJ6DeHfVE1Hug3hP1XqgnoZ6Mem/UU1BPRT3N89abN835D6h/RP0T6p9R/4L6V9S/oV6D+nfUf6D+E/VfqP9G/Q/qf1GvRW3mOqMjqFNQR1Gnok5DnY46A3Ut1Jmos1Bno66Nug7quqjrWQqFB/fib9q3bSW64UvWrbi2fG1VuxVXn/ja3YpLsM226FDudhswJqyU3Q1S2GO00be4YokdrINLEmdLJTibevyTldGLsdwQcq0RSGOQJiBNQZqBNAdpAdISpBVIa5A2IG1B2oHkgLQH2QakA8i2IB1BOoF0BukC0hWkG0h3kB4gPUF6gfQGiYGYe4G5IHkg+SAFIH1ACkGKQIpBtgPpC9IPpD/IAJCBZgyDDAIZDDIEZCjI9iDDQHYA2RFkOMgIkJEgO4HsDDIKZBeQ0SBjQMaCjAMZD7IryG4gE0B2B5kIsgfIniB7gUwCmQyyN8gUkKkg00BKQaaDlIGUg8wA2QdkJsi+ILNAZoPsBzIHZC7I/iAHgBwIchDIPJD5IAeDHAJyKMhhIIeDHAGyAGQhyJEgi0AWgxwFcjTIMSDHghwHcjzICSAngpwEcjLIKSCngpwGcjrIEpAzQM5MqcrbeqjNbc/g4pXprX8LNdOrvriZQ8utUUNmaxE7vIC99jZvOmu/RTHTV5pX/QguyiVx/GmwNsJy6dTZs0cfOPPgqfPKhs2fUzpv5tw5dFjb5hejjsYxL1ifSlyRgeU0Umffl0F0JIi/BHWiaypdn2OJHX4a+m0xtufmOjfXSeXtWSmJt1VWXnkkiwhRzLEED4r3bOJrR4QSbNMEyTiUu91zUviSX8ruc1LYYyS6WT+HcUAli7A1TpHxLXPccgXbrvZMwrl4ch6p3JRnEtZ668cq4lV/JmGt99/PJMRrxz2TsOFj3TMJJoD/eFXPJJyXsn6nKYG+E50Az2WcTM8nbflFebm5hXnmuqLpMT9/emluUW7u9Gn5sdLY1NLcsuJ8v7g8Pzc/r3R66TRoc6pfHiufWlpcXlTZVrJ2EucL7SQucDsJ3iBdILCTuDDkOwlj94VCOwluGnEeYuVu9yLmAWrcadoMsKr1HvaKJXZU250kSqs4J+nzhHZN3HG/WCEtvVhoMbnELSa8QbpEYDFZGvLFxNi9VBktXaqQljZxtLQaLb0UT5Y5WqqTll4aoKXLkkBLL2WcTC9TSEsvE9pJXO52ErxBulxgJ3FFyHcSxu4rlNDSZYiVu90rBWjplUmgpU0YaRXnJL1MCS29SiEtvUpoMbnaLSa8QbpaYDFZHvLFxNi9XBktXa6QljZ1tLQaLb0GT651tFQnLb0mQEuvTQItvYZxMr1OIS29Tmgncb3bSfAG6XqBncQNId9JGLtvUEJLr0Ws3O3eKEBLb0wCLW3KSKs4J+lrldDSmxTS0puEFpOb3WLCG6SbBRaTW0K+mBi7b1FGS29RSEtbOlpajZbeiicrHC3VSUtvDdDSFUmgpbcyTqa3KaSltwntJG53OwneIN0usJO4I+Q7CWP3HUpo6QrEyt3unQK09M4k0NKWjLSKc5JeoYSW3qWQlt4ltJjc7RYT3iDdLbCY3BPyxcTYfY8yWnqPQlraytHSarT0XjxZ6WipTlp6b4CWrkwCLb2XcTK9TyEtvU9oJ3G/20nwBul+gZ3EAyHfSRi7H1BCS1ciVu52HxSgpQ8mgZa2YqRVnJP0SiW09CGFtPQhocXkYbeY8AbpYYHF5JGQLybG7keU0dJHFNLS1o6WVqOlj+LJKkdLddLSRwO0dFUSaOmjjJPpYwpp6WNCO4nH3U6CN0iPC+wkngj5TsLY/YQSWroKsXK3+6QALX0yCbS0NSOt4pykVymhpU8ppKVPCS0mT7vFhDdITwssJs+EfDExdj+jjJY+o5CWnuloaTVa+iyePOdoqU5a+myAlj6XBFr6LONk+rxCWvq80E7iBbeT4A3SCwI7iRdDvpMwdr+ohJY+h1i5231JgJa+lARaeiYjreKcpJ8T2jVxL0ycfzz4ckq45zfzJ4AvC4ydyzPCPWeYP5iSsPuKjOTkeCyxw2eMj3+FcKxjiR0VfyApEeurQ57jjYRyfLmSHGeMj7885DneVCjHrwt5jrcRyvHrleQ4Y3z860Oe489hrD3edkWwrlCEdaUirKuSiDXROcTAlJibbgr5OG0mNCffrGROZoyPf3PIY91cKNYrkhTrEPFcn9NmEw9zg9feADZc4F+v8i/2jF6G+lrUWSCvQPnVlMp/lG5MfGXrbZv2k5Nm+N7mqFugXoF6JepVqBuAvAbl17GPJqQPWx/s4yR878moT0F9KurTUJ+OujbIG1B+E/toSvqw9baP/Unf5r1tULdF3Q51Dur2qLdB3QH1tqg7ou6EujPqLqi7ou6GujvqHqh7ou6FujfqGGofdS7qPNT5qAtQ90FdiLoIdTHq7VD3Rd0PdX/UA1APRF2CehDqwaiHoB6KenvUw1DvgHpH1MNRj0A9EvVOqHdGPQr1LqhHox6DeizqcajHo94V9W6oJ6DeHfVE1Hug3hP1XqgnoZ6Mem/UU1BPRT0NdSnq6ajLUJejnoF6H9QzUe+Lehbq2aj3Qz0H9VzU+6M+APWBqA9CPQ/1fNQHoz4E9aGoD0N9OOojUC9AvRD1kagXoV6M+ijUR6M+BvWxqI9DfTzqE1CfiPoN1EtQn2HHA8hbUP4fjtlmZMzaejtm7b3yhvjeV1C/hbohyNtQfgfbak7asvXJ+oCvncc7n9vj3ZSqsvuAL8E226FDudt9LyXcH/AZu99LYY9R0h7B4RxckjhbKcHZzOOfrIxejOX3Idc+APkQ5COQj0E+AfkU5DOQz0G+APkS5CuQr0G+AfkW5DuQ1SDfg/wA8iPITyA/g/wC8ivIbyBrQH4H+QPkT5C/QP4G+ccsDiBrUyqTMwKSAhIFSQVJA0kHyQCpBZIJkgWSDVIbpA5IXZB6IPVBGoA0BGkE0hikCUhTkGYgzUFagLQEaQXSGqQNSFuQdiA5IO1BtgHpALItSEeQTiCdQbqAdAXpBtIdpAdIT5BeIL1BzADzQXJB8kDyQQpA+oAUghSBFINsB9IXpB9If5ABIANBSkAGgQwGGQIyFGR7kGEgO4DsCDIcZATISJCdQHYGGQWyC8hokDEgY0HGgYwH2RVkN5AJILuDTATZA2RPkL1AJpEJoR5q81hWcPHK9NZ/xCvTW/8Dcy2PbpkNSC1ihxew1z6Gls7ab1HM9JXmVT+Ci3JJHH8arI2wXDp19uzRB848eOq8smHz55TOmzl3Dh3WtvnFqKNxzAvWpxJXZGA5jdTZ92UQHQniL0Gd6JpK1+dYYodvjGjhubnOzXXV5zqJvJ0c5Xu4J+olhwhRzLEED4p3b+JrR4QSbNMEyTiUu90pUb7kl7J7SpQ9RqKb9SmMAyrqJYewfZgi41vmuCXtOxNT0enTiPPddyZ42kzKdyZMAOl3JqZF5b8zMZVxMi0lbWn5zkSp0E5iuttJ8AZpusBOoizkOwljd5nQToKbRkxDrNztljMPUDMITZvBW0BR5tjR3UmitIpzkp4W5c0je3DHfYZCWjpDaDHZxy0mvEHaR2AxmRnyxcTYPVMZLZ2pkJZ+5GhpNVq6Lzp9lqOlOmnpvgFaOisJtHRfxsl0tkJaOltoJ7Gf20nwBmk/gZ3EnJDvJIzdc5TQ0lmIlbvduQK0dG4SaOlHjLSUc5KepYSW7q+Qlu4vtJgc4BYT3iAdILCYHBjyxcTYfaAyWnqgQlr6saOl1WjpQej0eY6W6qSlBwVo6bwk0NKDGCfT+Qpp6XyhncTBbifBG6SDBXYSh4R8J2HsPkQJLZ2HWLnbPVSAlh6aBFr6MSMt5Zyk5ymhpYcppKWHCS0mh7vFhDdIhwssJkeEfDExdh+hjJYeoZCWfu5oaTVaugCdvtDRUp20dEGAli5MAi1dwDiZHqmQlh4ptJNY5HYSvEFaJLCTWBzynYSxe7ESWroQsXK3e5QALT0qCbT0c0ZayjlJL1RCS49WSEuPFlpMjnGLCW+QjhFYTI4N+WJi7D5WGS09ViEt/cLR0mq09Dh0+vGOluqkpccFaOnxSaClxzFOpicopKUnCO0kTnQ7Cd4gnSiwkzgp5DsJY/dJSmjp8YiVu92TBWjpyUmgpV8w0lLOSfp4JbT0FIW09BShxeRUt5jwBulUgcXktJAvJsbu05TR0tMU0tIvHS2tRktPR6cvcbRUJy09PUBLlySBlp7OOJmeoZCWniG0kzjT7SR4g3SmwE7irJDvJIzdZymhpUsQK3e7ZwvQ0rOTQEu/ZKSlnJP0EiW09ByFtPQcocXkXLeY8AbpXIHF5LyQLybG7vOU0dLzFNLSSUITLHPckkZLz0enX+BoqU5aen6All6QBFp6PuNkeqFCWnqh0E7iIreT4A3SRQI7iYtDvpMwdl+shJZegFi5271EgJZekgRaOomRVnFO0hcI7Zq4FybOPx5cGg33/Gb+BHCpwNi5PSPcc4b5gykJu+9Q8g/rjPHx7wj5P6y3Esrxu0Oe4x8I5fg9SnKcMT7+PSHP8WZCOX5fyHP8K6Ecv19JjjPGx78/5Dlu9o9Lk8RJYokd/kJFWI9XhHVJErEmOoeYsS4xNz0U8nH6idCc/LCSOZkxPv7DIY/1p0KxXpWkWIeI5/qcNpt4mBu89gaw4QL/epV/sWf0LNTzUGeBXArlZdHKf5RuSXxl622b9pOTT7DNT1F/hnohtnk86iWoG4BcBuXLsY9WpA9bH+xjV3zvbqgnoN4d9UTUe6CuDXIFlK/EPlqTPmy97WN/0rd571eI/2vU36D+FvV3qFej/h71D6h/RP0T6p9R/4L6V9S/oV6D+nfUf6D+E/VfqP9G/Q/qf1GvRe0h/gjqFNRR1Kmo01Cno85AXQt1ps0F1NnWp6jroK6Luh7q+ja+qBuiboS6MeomqJuiboa6OeoWqFuiboW6Neo2qNuiboc6B3V71Nug7oB6W9QdUXdC3Rl1F9RdUXdD3R11D9Q9UfdC3Rt1DLWPOhd1Hup81AWo+6AuRF2Euhj1dqj7ou6Huj/qAagHoi5BPQj1YNRDUA9FvT3qYah3QL0j6uGoR6AeiXon1DujHoV6F9SjUY9BPRb1ONTjUV+Bek/Ue1l/g1wF5atxzLbxqsasrbdj1m793sfcvxTbuMrmHshyKF+DbbUlbdl6enCvW9dGN7utWKAtk05J+SCSYo4leFC81xFfuw8iE2zTBOm6KH+710f5kl/K7uuj7DESfaTpesYBFfWS80jTyykyvk0wbr5g2+v1RSenG9DpNxLnu0eaeNpMyiNNJoAPelWPNN1IBqVHgkD7TnQCvIFxMr2phklkU9tO1k7iJqGdxM1uJ8EbpJsFdhK3hHwnYey+RWgnwU0jbkSs3O0+LnRbLZqgT4M4OXPpVr5JyX+c+RadmcQMvkFe9SNRfwZx091dorSUc5G7MSqTj9zjZoVCWr9CaDG+zS3GvEG6TWAxvj3ki7Gx+/YkLcaxxA5/qRDWZFH7RCbZ8upHaRy4ItReIoZMbcXoZHcHBvDOzbxNMDiOzcHbBIO9/75NEK+d/1e3CcKcEHYnd0e0KjDm/M4k7Ow4HzC/k3HRuItv0im3/ryL+FMiH24UYFxPhusByvV2o8buOwTsfirkD44au+8UsPvpkDLs4ELOOW/QHE/Uf8+E1H+Bw2fMb58xZ/xnlDw4dQfjWnM3Yy6bNiTWlrujMnMYZ6wlPlN8O0XgCyhK7hrdqwTnSiU472PEaR4OMl9+tHewTE6ZeBlf3BeNjz+W2FExHkS+rMLol1T0S/Dgan9DuRFL7PDvj4Yf4wNC44x9cV7KuDg/GPLFWWpQPhTyxdnYvFzA7hdD/o0FMwgfFLD7pSQRl4S/RcM4Hhlj7XP6T3gRW/cxFHduPqRgEXtYahHjHpCPuF2R/4iChHqUG6MWGrtKCe16jHHF0DqQHlMwkB7XMjM/wQc0V2tCPaEgoZ7UklBP8QHN05pQTylIqKc5MSbrObocvraqPUf3DHlkxD1Hl2CbOehQ7nafDflzdMbuZxU/m5bjeUnZA8cSO/zWSnA29/gnK6NrY/k5SIrnQV4AeRHkJZCXQV4BeRXkNZDXQd4AeZMkUD3U5pm04GSX6a3/fFumt/7vpGp5bs18tFSL2OEF7LXP4KXz9ltq+krzqh/BSbwkjj8N1hZYLptzwPyy+WWj50+bPbN02Pw5pfNmzp0zZOrs2TQZbCc2KaJxjAzWpxKHZGA5jdTZ92UQvcGH/xKdiZ9lZLTGiBwv8REiYedbDKtXsv9g5a0o/wxmjv+57RZvkP4nsN16O+TbLWP320JfW7CHpE9jCR7J2ha+IHXngRdn0v5g5R10+rub+TUD92sEGz6S8msEJoD0D1beja7fKfdTHO8wTqbvkba0/MHKe0I7iffdToI3SO8L7CQ+CPlOwtj9gdBOgptGvItYudv9kHmAmkFo2gzeOOB+9v8FRlrFOUm/q+QD5Y8U0tKPhBaTj91iwhukjwUWk09CvpgYuz9RRks/UUhLX3S0tBot/RSd/pmjpTpp6acBWvpZEmjpp4yT6ecKaennQjuJL9xOgjdIXwjsJL4M+U7C2P2lElr6GWLlbvcrAVr6VRJo6YuMtIpzkv5MCS39WiEt/VpoMfnGLSa8QfpGYDH5NuSLibH7W2W09FuFtPQlR0ur0dLv0OmrHS3VSUu/C9DS1Umgpd8xTqbfK6Sl3wvtJH5wOwneIP0gsJP4MeQ7CWP3j0po6WrEyt3uTwK09Kck0NKXGGkV5yS9Wgkt/VkhLf1ZaDH5xS0mvEH6RWAx+TXki4mx+1dltPRXhbT0NUdLq9HS39Dpaxwt1UlLfwvQ0jVJoKW/MU6mvyukpb8L7ST+cDsJ3iD9IbCT+DPkOwlj959KaOkaxMrd7l8CtPSvJNDS1xhpFeckvUYJLf1bIS39W2gx+cctJrxB+kdgMfk35IuJsftfZbT0X4W09HVHS6vR0rWUY+LhaClPm0mhpWsDtNRERZqWrmWcTCOp+mgpxRxL8KB4U8ggdDuJBNs0QUpJ5W83mhrunYSxO5rKHiMRWuohVu52U5kHqBmEpk1pWvo6I63inKS9VN48sgd33NNS+fyXrMUkTWgxSXeLCW+Q0gUWk4yQLybG7gyhxcQekj6NJXgki5a+4WhpNVpaC3Mu09FSnbTUBJDS0swk0NJajJNplkJamiW0k8h2OwneIGUL7CRqh3wnYeyurYSWZiJW7nbrCNDSOkmgpW8w0lLOSTpTiJZyL0ycvyNfNzXc81sOtFFXYOy8GvK/lDe//Cxh92tJ+kvvWGKHzxgf/7WQ/4tka6EcfzPkOf68UI6/pSTHGePjvxXyHG8ulOPvhDzH3xTK8XeV5DhjfPx3Q57jazDWHm+7IlgN89aCNTOJWBMdl2b8SIz3D0Ke+y8LzXMfKpnnGOPjfxjyWL8iFOtPkhTrEHFHn9NmEw9z09ROlWZ//a9X+f8ARn+GejXqLJB6cHH91Mq/T2pPfGXrbZv204iX8b2voH4V9RrUpnOjM1E3MALlhtjHNqQPW08P7pxqpORRg8ZKcDZJ5c9Xe3+xEeZMY9RNbC6BNIVyM8yhDiSHbL2kzc2VxKaFEpwtBXOoOeZMC9QtSQ61gnJrzKFtSQ7Zekmb2yiJTVslONsJ5lAbzJm2qNuRHMqBcnvMoY4kh2y9pM3bKIlNByU4txXMoW0wZzqg3pbkUEcod8Ic6kRyyNZL2txZSWy6KMHZVTCHOmPOdEHdleRQNyh3xxzqTHLI1kva3ENJbHoqwdlLMId6YM70RN2L5FBvKMcwh7qQHLL1kjb7SmKTqwRnnmAO+ZgzuajzSA7lQ7kAc6grySFbL2lzHyWxKVSCs0gwh/pgzhSiLiI5VAzl7TCHupEcsvWSNvdVEpt+SnD2F8yhvpgz/VD3Jzk0AMoDMYe6kxyy9ZI2lyiJzSAlOAcL5lAJ5swg1INJDg2B8lDMoR4kh2y9pM3bK4nNMCU4dxDMoe0xZ4ah3oHk0I5QHo451JPkkK2XtHmEktiMVIJzJ8EcGoE5MxL1TiSHdobyKMyhXiSHbL2kzbsoic1oJTjHCObQLpgzo1GPITk0FsrjMId6kxyy9ZI2j1cSm12V4NxNMIfGY87sino3kkMToLw75lCM5JCtl7R5opLY7KEE556COTQRc2YP1HuSHNoLypMwh3ySQ7Ze0ubJSmKztxKcUwRzaDLmzN6op5AcmgrlaZhDuSSHbL2kzaVKYjNdIDbWz6UYi+moa4GUQbkcY5JHrrX1krbOUBKTfQRjMgNjsQ+JyUwo74sxySfX2npJW2cpiclswZjMwljMJjHZD8pzMCYF5FpbL2nrXCUx2V8wJnMxFvuTmBwA5QMxJn3ItbZe0taDlMRknmBMDsJYzCMxmQ/lgzEmheRaWy9p6yFKYnKoYEwOwVgcSmJyGJQPx5gUkWttvaStRyiJyQLBmByBsVhAYrIQykdiTIrJtbZe0tZFSmKyWDAmizAWi0lMjoLy0RiT7ci1tl7S1mOUxORYwZgcg7E4lsTkOCgfjzHpS6619ZK2nqAkJicKxuQEjMWJJCYnQflkjEk/cq2tl7T1FCUxOVUwJqdgLE4lMTkNyqdjTPqTa229pK1LlMTkDMGYLMFYnEFiciaUz8KYDCDX2npJW89WEpNzBGNyNsbiHBKTc6F8HsZkILnW1kvaer6SmFwgGJPzMRYXkJhcCOWLMCYl5FpbL2nrxUpicolgTC7GWFxCYrIUypdiTAaRa229pK3LlMTkMsGYLMNYXEZicjmUr8CYDCbX2npJW69UEpOrlOC8WgnO5UpwXqME57VKcF6nBOf1SnDeoATnjUpw3qQE581KcN6iBOetSnCuUILzNiU4b1eC8w4lOO9UgvMuJTjvVoLzHiU471WCc6USnPcpwXm/EpwPKMH5oBKcDynB+bASnI8owfmoEpyrlOB8TAnOx5XgfEIJzieV4HxKCc6nleB8RgnOZ5XgfE4JzueV4HxBCc4XleB8SQnOl5XgfEUJzleV4HxNCc7XleB8QwnONwWehZmA7TXAZ2DexP8muBLPr0J9NerlqJuiboU6B3VH1N1Q90adj7oY9QDUQ1DviHpn1GNRT0C9F+qpqMtQz0S9H+oDUM9HfRjqhaiPQn0c6pNQn4b6TNTnor4Q9VLUl6O+BvW1qK9DfT3qG1DfiPom1DejvgX1rahXoL4N9e2o70B9J+q7UN+N+h7U96Jeifo+1PejfgD1g6gfQv0w6kdQP4p6FerHUD+O+gnUT6J+CvXTqJ9B/Szq51A/j/oF1C+ifgn1y6hfQf0q6tdQv476DZunqM3v170F5f+lVj6zNcSrembL1ge/P/8c5ng9bOMt1A1B3obyO9jWUNKWrU/WH0q393jHuj3eTa0q22IKed39ofQmtNkeHcrd7nupfIuGlN3vpbLHqOLf2qPe+keYB5ckzjZKcLbw+Ccro2tj+X3ItQ9APgT5CORjkE9APgX5DORzkC9AvgT5iuRlPdTmh1GCk10mybUIqaOToTnSSbmEyUaByTVmFqxaxA4vYG9dr/qfUzH1W2r6SvOqH8FJvCSOPw3WFlgum3PA/LL5ZaPnT5s9s3TY/Dml82bOnTNk6uzZNBlsJzYponGMDNanEodkYDmN1Nn3ZRAdCVpRgjrRmfg9vu27b4zY3kt8hEjY+TXD6mX/sj5Z262vU/lnMHN847ZbvEH6RmC79W3It1vG7m8FtlseOSR9GkvwSNa28MNUGd8yxy1XsG2fTk7fYc6tJrlntxYpXtVElk7iYeNk3rLWWz9WEVJOwWuiNVwT2UA7dItj32+3OMw+EdmuiU6+EXSuCeA/2JE5X526fqcpgb4TnQC/Y5xMvydt+UV5ubmFeea6oukxP396aW5Rbu70afmx0tjU0tyy4ny/uDw/Nz+vdHrpNGhzql8eK59aWlxeVNlWsnYS3wvtJH5wOwneIP0gsJP4MeQ7CWP3j0I7CW4asRqxcrf7E/MANYPQtBm8cRBljt2HjLSKc5JeLbRr4o77zwpp6c9Ci8kvbjHhDdIvAovJryFfTIzdvyqjpb8qpKUfOVpajZb+hjm3xtFSnbT0twAtXZMEWvob42T6u0Ja+rvQTuIPt5PgDdIfAjuJP0O+kzB2/6mElq5BrNzt/iVAS/9KAi39iJFWcU7Sa5TQ0r8V0tK/hRaTf9xiwhukfwQWk39DvpgYu/9VRkv/VUhLP3a0tBotXWtzjjwN5WgpT5tJoaVrA7TUBFKalq5lnEwjafpoKcUcS/CgeFPIIHQ7iQTbNEFKSeNvN5oW7p2EsTuaxh4jEVrqIVbudlOZB6gZhKZNaVr6MSOt4pykvTTePLIHd9zT0vj8l6zFJE1oMUl3iwlvkNIFFpOMkC8mxu4MocXEHpI+jSV4JIuWfu5oaTVaWgtzLtPRUp201ASQ0tLMJNDSWoyTaZZCWpoltJPIdjsJ3iBlC+wkaod8J2Hsrq2ElmYiVu526wjQ0jpJoKWfM9JSzkk6UwktrauQltYVWkzqucWEN0j1BBaT+iFfTIzd9ZXR0voKaekXjpZWo6UNMOcaOlqqk5Y2CNDShkmgpQ0YJ9NGCmlpI6GdRGO3k+ANUmOBnUSTkO8kjN1NlNDShoiVu92mArS0aRJo6ReMtJRzkm6ohJY2U0hLmwktJs3dYsIbpOYCi0mLkC8mxu4WymhpC4W09EtHS6vR0paYc60cLdVJS1sGaGmrJNDSloyTaWuFtLS10E6ijdtJ8AapjcBOom3IdxLG7rZKaGkrxMrdbjsBWtouCbT0S0ZayjlJtxKipdwLE+fvyOekhXt+aw9t5AiMnc8ywj1nmF9+lrD784zk5HgsscNnjI//uXCsY4kdFf8HIBHrr0Ke4x8I5fjXSnKcMT7+1yHP8RZCOf5dyHP8K6EcX60kxxnj468OeY6bp+1yksRJYokdfkNFWFslEWui49KMH4nx/mPIc/8ToXnuJyXzHGN8/J9CHutPhWL9a5JiHSLu6HPabOJhbpram6pmf23+AHE16jWozZeVjc4CaQ/lbdIqf91kGPGVrbdt2k8jPsE2PkX9GepMbLMh6laoG4B0gPK22McOpA9bTw/unOqo5FGDTkpwdk7jz1d7f7Ej5kwn1J1Rm0/IukC5K+bQjiSHbL2kzd2UxKa7Epw9BHOoG+ZMd9Q9SA71hHIvzKHhJIdsvaTNvZXEJqYEpy+YQ70xZ2KofZJDuVDOwxwaQXLI1kvanK8kNgVKcPYRzKF8zJkC1H1IDhVCuQhzaCTJIVsvaXOxkthspwRnX8EcKsac2Q51X5JD/aDcH3NoJ5JDtl7S5gFKYjNQCc4SwRwagDkzEHUJyaFBUB6MObQzySFbL2nzECWxGaoE5/aCOTQEc2Yo6u1JDg2D8g6YQ6NIDtl6SZt3VBKb4UpwjhDMoR0xZ4ajHkFyaCSUd8Ic2oXkkK2XtHlnJbEZpQTnLoI5tDPmzCjUu5AcGg3lMZhDo0kO2XpJm8cqic04JTjHC+bQWMyZcajHkxzaFcq7YQ6NITlk6yVtnqAkNrsrwTlRMIcmYM7sjnoiyaE9oLwn5tBYkkO2XtLmvZTEZpISnJMFc2gvzJlJqCeTHNobylMwh8aRHLL1kjZPVRKbaUpwlgrm0FTMmWmoS0kOTYdyGebQeJJDtl7S5nIlsZmhBOc+gjlUjjkzA/U+JIdmQnlfzKFdSQ7ZekmbZymJzWwlOPcTzKFZmDOzUe9HcmgOlOdiDu1GcsjWS9q8v5LYHKAE54GCObQ/5swBqA8kOXQQlOdhDk0gOWTrJW2eryQ2BwvExvp5PsbiYNS1QA6B8qEYk93JtbZe0tbDlMTkcMGYHIaxOJzE5AgoL8CYTCTX2npJWxcqicmRgjFZiLE4ksRkEZQXY0z2INfaeklbj1ISk6MFY3IUxuJoEpNjoHwsxmRPcq2tl7T1OCUxOV4wJsdhLI4nMTkByidiTPYi19p6SVtPUhKTkwVjchLG4mQSk1OgfCrGZBK51tZL2nqakpicLhiT0zAWp5OYLIHyGRiTyeRaWy9p65lKYnKWYEzOxFicRWJyNpTPwZjsTa619ZK2nqskJucJxuRcjMV5JCbnQ/kCjMkUcq2tl7T1QiUxuUgwJhdiLC4iMbkYypdgTKaSa229pK1LlcTkUsGYLMVYXEpisgzKl2FMppFrbb2krZcrickVgjG5HGNxBYnJlVC+CmNSSq619ZK2Xq0kJssFY3I1xmI5ick1UL4WYzKdXGvrJW29TklMrheMyXUYi+tJTG6A8o0YkzJyra2XtPUmJTG5WTAmN2EsbiYxuQXKt2JMysm1tl7S1hVKYnKbYExWYCxuIzG5Hcp3YExmkGttvaStdyqJyV1KcN6tBOc9SnDeqwTnSiU471OC834lOB9QgvNBJTgfUoLzYSU4H1GC81ElOFcpwfmYEpyPK8H5hBKcTyrB+ZQSnE8rwfmMEpzPKsH5nBKczyvB+YISnC8qwfmSEpwvK8H5ihKcryrB+ZoSnK8rwfmGEpxvKsH5lhKc/1OC820lON9RgvNdJTjfU4LzfSU4P1CC80MlOD9SgvNjJTg/UYLzUyU4P1OC83MlOL9QgvNLJTi/EngWZgK21wGfgfkK/6PgTjy/C/XdqO9B3QV1T9S5qAtR90M9CPUw1CNRj0a9K+o9UO+NejrqmajnoD4I9SGoj0C9CPUxqE9AfQrqJajPRn0+6otRL0N9JeprUN+A+hbUt6O+F/VK1Pehvh/1A6gfRP0Q6odRP4L6UdSrUD+G+nHUT6B+EvVTqJ9G/QzqZ1E/h/p51C+gfhH1S6hfRv0K6ldRv4b6ddRvoH4T9Vuo/4f6bdTvoH4X9Xuo30f9AeoPUX+E+mPUn6D+FPVnqD9H/QXqL22eou4O8jWUv0mrfGZrH6/qmS1bH/z+/PuY4+2xja9RNwT5FsrfYVszSVu2nh7c43t12ma3FQu05Sfrj69XM89J9vie+Nr98XWCbZogfZ/G3+4PaXzJL2X3D2nsMapxkY8ldlTzaSzBI+pVDRRJzHVTZXybYNx8wbbX64tOTj9izv1Eci8TdYpXNZGlk3jYOJnJbq23fqwipJyC10RruCaygXYySZ19f12ChdEnMYHJOSY6+UbQuSaAD2JH5vwnMig9EgTad6IT4I+Mk+nPNUwim9p2snYSPwvtJH5xOwneIP0isJP4NeQ7CWP3r0I7CW4a8RNi5W53jdBfTkYT9GkQJ2cu/cY3KflrmP++0kxiBt8gr/qRqD+DuOnuLlFayrnI/ZQmk4/s40YhrV8jtBj/7hZj3iD9LrAY/xHyxdjY/UeSFuNYYoefI4Q1WdQ+kUm2vPpRGgeuCLWXiCFTWzE62f2JefHXZt4mGBzH5uBtgsHef98miNfO/6vbBGFOCLuT+zOtKjDm/K8k7OwY7fD/Ylw0/uabdMqtP/8m/pTIh58EGNcfGbKLW6K7UWP3nwJ2/xkuu9fDZ+z+S8Duv0LKsIMLOee8QXM84XkjpP4LHD5jfvuMOeNL+Y/7VvmfjGvNP4y5bNqQWFv+SZOZwzhjLfGZ4tup/Hb/q+Su0VolOA0j0IAzwojT8LV9vao7WCanTLyMLyLp8fHHEjsqxkOOwDyQwuiXVPRL8OBqf0O5EUvs8FPSw48xKjTO2BfnHMbFOTU93Iuz1KBMSw/34mxs/lbA7kitcNttBqHJSfZJuJbM4I4y40xnHI+MsfY5/Se8iK37GIo7N9MULGLpUosY94DMcLsiP0NBQtXixqiFxmYqoV1ZjCuG1oGUpWAgZWuZmWvzAc3VmlC1FSRUHS0JVZcPaJ7WhKqrIKHqaUmo+kqW5gZKcDZUgrNRyG/avARtvCFgd1rIb9p8BG18ImB3upKbNo0Zt+CMsfal/Mcd5yZK5p+mSnA2U4KzuRKcLZTgbKkEZyslOFsrwdlGCc62SnC2U4IzRwnO9kpwbqMEZwclOLdVgrOjEpydlODsrARnFyU4uyrB2U0Jzu5KcPZQgrOnEpy9lODsrQRnTAlOXwnOXCU485TgzFeCs0AJzj5KcBYqwVmkBGexEpzbKcHZVwnOfkpw9leCc4ASnAOV4CxRgnOQEpyDleAcogTnUCU4t1eCc5gSnDsowbmjEpzDleAcoQTnSCU4d1KCc2clOEcpwbmLEpyjleAcowTnWCU4xynBOV4Jzl2V4NxNCc4JSnDurgTnRCU491CCc08lOPdSgnOSEpyTleDcWwnOKUpwTlWCc5oSnKUh/x7ceymetyoq8JMMIf8e3FKw+VEBu7OUfA9uOuP34Bhj7WcpyJvHBfKmLOTzhLH7SQG7yxXY/bSA3TPCvi6kel6mwI+71Qn5+DY/5ldLwO66StaFfRjXBcZY+3UV5E22QN7MVPDjl3UE7N5Xgd31BOyepYTXzFaCcz8lOOcowTlXCc79leA8QAnOA5XgPEgIZ0oAZyyxo+LPtblsnqfE5hRGm+crsTnKaPPBSmxOZbT5ECU2pzHafKgSm9MZbT5Mic0nMdp8uBKb6W84JmrzEUpsbsBo8wIlNjdktHmhEpsbMdp8pBKbGzPavEiJzU0YbV6sxOamjDYfpcTmZow2H63E5uaMNh+jxOYWjDYfq8Tmlow2H6fE5laMNh+vxObWjDafoMTmNow2n6jE5raMNp+kxOZ2jDafrMTmHEabT1Fic3tGm09VYvM2jDafpsTmDow2n67E5m0ZbV6ixOaOjDafocTmTow2n6nE5s6MNp+lxOYujDafrcTmrow2n6PE5m6MNp+rxObujDafp8TmHow2n6/E5p6MNl+gxOZejDZfqMTm3ow2X6TE5hijzRcrsdlntPkSJTbnMtq8VInNeYw2X6rE5nxGm5cpsbmA0ebLlNjch9Hmy5XYXMho8xVKbC5itPlKJTYXM9p8lRKbt2O0+WolNvdltHm5Epv7Mdp8jRKb+zPafK0Smwcw2nydEpsHMtp8vRKbSxhtvkGJzYMYbb5Ric2DGW2+SYnNQxhtvlmJzUMZbb5Fic3bM9p8qxKbhzHavEKJzTsw2nybEpt3ZLT5diU2D2e0+Q4lNo9gtPlOJTaPZLT5LiU278Ro891KbN6Z0eZ7lNg8itHme5XYvAujzSuV2Dya0eb7lNg8htHm+5XYPJbR5geU2DyO0eYHldg8ntHmh5TYvCujzQ8rsXk3RpsfUWLzBEabH1Vi8+6MNq9SYvNERpsfU2LzHow2P67E5j0ZbX5Cic17Mdr8pBKbJzHa/JQSmycz2vy0Epv3ZrT5GSU2T2G0+VklNk9ltPk5JTZPY7T5eSU2lzLa/IISm6cz2vyiEpvLGG1+SYnN5Yw2v6zE5hmMNr+ixOZ9GG1+VYnNMxltfk2Jzfsy2vy6EptnMdr8hhKbZzPa/KYSm/djtPktJTbPYbT5f0psnsto89tKbN6f0eZ3lNh8AKPN7yqx+UBGm99TYvNBjDa/r8TmDI/P5g+U2FyL0eYPldicyWjzR0pszmK0+WMlNmcz2vyJEptrM9r8qRKb6zDa/JkSm+sy2vy5EpvrMdr8hRKb6zPa/KUSmxsw2vyVEpsbMtr8tRKbGzHa/I0Smxsz2vytEpubMNr8HaPNTbCdCNps/hPS/Eei+c9A6MYzfNDwI8MXzP7Z7CfN/srsN8z6a9YjMz+b+cqMX5PPJr6m3Z2x7aYgzUCag7QAaQnSCqQ1SBuQtiDtQHJA2oNsA9IBZFuQjiCdQDqDdAHpCtINpDtID5CeIL1AehtfgPggucbHIPkgBSB9QApBikCKQbYD6QvSD6Q/yACQgRifQSCDQYaADAXZHmQYyA4gO4IMBxkBMhJkJ7RxFMguIKNBxoCMBRkHMh5kV5DdQCaA7A4yEWQPkD1B9gKZBDIZZG+QKSBTQaaBHI6+M/+fav5P1Py/pvm/SfP/i+b/CM3/85n/qzP/32b+z8z8v5f5vyvz/0/m/5DM/wOZ/8sx/x9j/k/F/L+I+b8N8/8T5v8YzP8TmN/rN79fb37P3fy+ufm9b/P71+b3oM3vI5vfCza/n2t+T9b8vqr5vVHz+5vm9yjN7zOa3ys0v99nfs/O/L6b+b0z8/tf5vewzO9Dmd9LMr8fZH5Px/y+jPm9FfP7I+b3OMzvU5jfazC/X2C+z2++326+722+/2y+D2y+H2u+L2q+P2m+T2i+X2e+b2a+f2W+j2S+n2O+r2K+v2G+z2Ce7zfPu5vnv83z0Ob5YPO8rHl+1DxPaZ4vNM/bmefPzPNY5vkk87yOeX7FPM9hnm8wn/ebz7/N58Hm81HzeaH5/Mx8nmQ+XzGfN5j77+Z+tLk/a+5Xmvt35n6Wub9j7ncY/m/4sOGHhi8Z/mD202Z/afZbZv9h1mOzPpn52sxfZjzb4/8APanBABWRBwA=", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index 916ede6ff828..c62a7310ed20 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -141,7 +141,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json index c39c83865deb..46d5ab7f0d46 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_auth_witness_account_contract.json @@ -341,7 +341,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json index 0c68b9d55c98..7204bb7aead3 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json @@ -96,7 +96,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-compiler/src/noir-version.json b/yarn-project/noir-compiler/src/noir-version.json index 211245f347ec..0a9f0a3fafb0 100644 --- a/yarn-project/noir-compiler/src/noir-version.json +++ b/yarn-project/noir-compiler/src/noir-version.json @@ -1,4 +1,4 @@ { - "tag": "aztec", - "commit": "f173c05cbff96dfc48a22cc2f1f76396b968d5a0" + "tag": "0.11.1-aztec.0", + "commit": "2103b2ffb640fe457b24be09b6d63fe6ee1c6ac1" } diff --git a/yarn-project/noir-contracts/README.md b/yarn-project/noir-contracts/README.md index 7a227dddf9b8..0b2fb8e44c48 100644 --- a/yarn-project/noir-contracts/README.md +++ b/yarn-project/noir-contracts/README.md @@ -30,6 +30,13 @@ It has prebuilt binaries and is super easy to install using `noirup` noirup -v aztec ``` +> Pinning Aztec flavoured noir releases +> Aztec noir is released with semver alongside noir. If you would like to pin to a specific version you can run: +> ```bash +> noirup -v -aztec. +> ``` +> e.g `noirup -v 0.11.1-aztec.0` + ### Building from source (If working with custom features) - Install [noirup](https://github.com/noir-lang/noirup) From 5e53345270873a3af2b47f6f078e3b4f1cc973d0 Mon Sep 17 00:00:00 2001 From: Jean M <132435771+jeanmon@users.noreply.github.com> Date: Thu, 14 Sep 2023 18:08:43 +0200 Subject: [PATCH 15/25] chore(circuits): clean up of some superfluous header includes (#2302) A cleanup PR consisting mainly in removing superfluous header includes. # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [x] If the pull request requires a cryptography review (e.g. cryptographic algorithm implementations) I have added the 'crypto' tag. - [x] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [x] 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). --- circuits/cpp/src/aztec3/circuits/abis/c_bind.h | 2 -- .../src/aztec3/circuits/abis/call_stack_item.hpp | 1 - .../aztec3/circuits/abis/contract_storage_read.hpp | 1 - .../abis/private_circuit_public_inputs.hpp | 1 - .../circuits/abis/public_circuit_public_inputs.hpp | 1 - .../abis/rollup/merge/merge_rollup_inputs.hpp | 1 - .../abis/rollup/merge/previous_rollup_data.hpp | 1 - .../abis/rollup/root/root_rollup_public_inputs.hpp | 3 --- circuits/cpp/src/aztec3/circuits/abis/types.hpp | 6 ------ .../src/aztec3/circuits/kernel/public/.test.cpp | 14 ++++---------- .../src/aztec3/circuits/kernel/public/c_bind.cpp | 8 ++++---- .../src/aztec3/circuits/kernel/public/common.cpp | 2 ++ .../src/aztec3/circuits/kernel/public/common.hpp | 13 ++----------- .../cpp/src/aztec3/circuits/kernel/public/init.hpp | 1 - ...blic_kernel_circuit_private_previous_kernel.cpp | 9 ++++++--- ...ublic_kernel_circuit_public_previous_kernel.cpp | 9 ++++++--- 16 files changed, 24 insertions(+), 49 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/abis/c_bind.h b/circuits/cpp/src/aztec3/circuits/abis/c_bind.h index 94bcc9047926..285aa0298a9b 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/c_bind.h +++ b/circuits/cpp/src/aztec3/circuits/abis/c_bind.h @@ -1,5 +1,3 @@ -#include "aztec3/circuits/hash.hpp" - #include #include diff --git a/circuits/cpp/src/aztec3/circuits/abis/call_stack_item.hpp b/circuits/cpp/src/aztec3/circuits/abis/call_stack_item.hpp index 0065c62643bb..f964abe594a3 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/call_stack_item.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/call_stack_item.hpp @@ -6,7 +6,6 @@ #include "aztec3/circuits/abis/types.hpp" #include "aztec3/utils/msgpack_derived_equals.hpp" -#include "aztec3/utils/msgpack_derived_output.hpp" #include "aztec3/utils/types/circuit_types.hpp" #include "aztec3/utils/types/convert.hpp" #include "aztec3/utils/types/native_types.hpp" diff --git a/circuits/cpp/src/aztec3/circuits/abis/contract_storage_read.hpp b/circuits/cpp/src/aztec3/circuits/abis/contract_storage_read.hpp index 0f9ea0a3fcee..0748759a494c 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/contract_storage_read.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/contract_storage_read.hpp @@ -1,5 +1,4 @@ #pragma once -#include "aztec3/utils/msgpack_derived_output.hpp" #include "aztec3/utils/types/circuit_types.hpp" #include "aztec3/utils/types/convert.hpp" #include "aztec3/utils/types/native_types.hpp" diff --git a/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp index b216cd17529b..7894c8bb9d96 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/private_circuit_public_inputs.hpp @@ -9,7 +9,6 @@ #include "aztec3/utils/types/convert.hpp" #include "aztec3/utils/types/native_types.hpp" -#include "barretenberg/common/serialize.hpp" #include namespace aztec3::circuits::abis { diff --git a/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp index 0784704c192b..75d2b804020d 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/public_circuit_public_inputs.hpp @@ -6,7 +6,6 @@ #include "../../constants.hpp" #include "aztec3/circuits/abis/historic_block_data.hpp" -#include "aztec3/utils/msgpack_derived_output.hpp" #include "aztec3/utils/types/circuit_types.hpp" #include "aztec3/utils/types/native_types.hpp" diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/merge_rollup_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/merge_rollup_inputs.hpp index b1ea045ad28c..bf1c30dc2919 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/merge_rollup_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/merge_rollup_inputs.hpp @@ -1,5 +1,4 @@ #pragma once -#include "aztec3/circuits/abis/append_only_tree_snapshot.hpp" #include "aztec3/circuits/abis/rollup/merge/previous_rollup_data.hpp" #include diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/previous_rollup_data.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/previous_rollup_data.hpp index 0a6cc5e0f609..53b2de8ce626 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/previous_rollup_data.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/merge/previous_rollup_data.hpp @@ -1,5 +1,4 @@ #pragma once -#include "aztec3/circuits/abis/append_only_tree_snapshot.hpp" #include "aztec3/circuits/abis/membership_witness.hpp" #include "aztec3/circuits/abis/rollup/base/base_or_merge_rollup_public_inputs.hpp" #include "aztec3/constants.hpp" diff --git a/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp b/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp index 96603192162a..18cfbb5fc201 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/rollup/root/root_rollup_public_inputs.hpp @@ -3,9 +3,6 @@ #include "aztec3/circuits/abis/append_only_tree_snapshot.hpp" #include "aztec3/circuits/abis/global_variables.hpp" #include "aztec3/constants.hpp" -#include "aztec3/utils/types/circuit_types.hpp" -#include "aztec3/utils/types/convert.hpp" -#include "aztec3/utils/types/native_types.hpp" #include diff --git a/circuits/cpp/src/aztec3/circuits/abis/types.hpp b/circuits/cpp/src/aztec3/circuits/abis/types.hpp index 5fdcba476ebb..e0601e48fc04 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/types.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/types.hpp @@ -2,12 +2,6 @@ #include "private_circuit_public_inputs.hpp" #include "public_circuit_public_inputs.hpp" -#include "aztec3/constants.hpp" -#include "aztec3/utils/array.hpp" -#include "aztec3/utils/types/circuit_types.hpp" -#include "aztec3/utils/types/convert.hpp" -#include "aztec3/utils/types/native_types.hpp" - #include namespace aztec3::circuits::abis { diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp index 53befdfc941a..8f89b495ed20 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp @@ -6,12 +6,8 @@ #include "aztec3/circuits/abis/call_stack_item.hpp" #include "aztec3/circuits/abis/combined_accumulated_data.hpp" #include "aztec3/circuits/abis/combined_constant_data.hpp" -#include "aztec3/circuits/abis/contract_deployment_data.hpp" -#include "aztec3/circuits/abis/function_data.hpp" -#include "aztec3/circuits/abis/historic_block_data.hpp" -#include "aztec3/circuits/abis/kernel_circuit_public_inputs.hpp" +#include "aztec3/circuits/abis/contract_storage_update_request.hpp" #include "aztec3/circuits/abis/previous_kernel_data.hpp" -#include "aztec3/circuits/abis/private_circuit_public_inputs.hpp" #include "aztec3/circuits/abis/public_kernel/public_call_data.hpp" #include "aztec3/circuits/abis/public_kernel/public_kernel_inputs.hpp" #include "aztec3/circuits/abis/tx_context.hpp" @@ -26,7 +22,7 @@ #include -namespace { +namespace aztec3::circuits::kernel::public_kernel { using DummyCircuitBuilder = aztec3::utils::DummyCircuitBuilder; using aztec3::circuits::abis::public_kernel::PublicKernelInputs; using NT = aztec3::utils::types::NativeTypes; @@ -34,6 +30,8 @@ using aztec3::circuits::abis::CallContext; using aztec3::circuits::abis::CallStackItem; using aztec3::circuits::abis::CombinedAccumulatedData; using aztec3::circuits::abis::CombinedConstantData; +using aztec3::circuits::abis::ContractStorageRead; +using aztec3::circuits::abis::ContractStorageUpdateRequest; using aztec3::circuits::abis::HistoricBlockData; using aztec3::circuits::abis::NewContractData; using aztec3::circuits::abis::OptionallyRevealedData; @@ -45,10 +43,6 @@ using aztec3::circuits::abis::TxContext; using aztec3::circuits::abis::TxRequest; using aztec3::circuits::abis::public_kernel::PublicCallData; using aztec3::utils::source_arrays_are_in_target; -} // namespace - -namespace aztec3::circuits::kernel::public_kernel { - using PublicCallStackItem = CallStackItem; template diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/c_bind.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/c_bind.cpp index 6471eb6654de..33fa83c4f3cf 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/c_bind.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/c_bind.cpp @@ -14,16 +14,14 @@ namespace { using Builder = UltraCircuitBuilder; using NT = aztec3::utils::types::NativeTypes; -using DummyCircuitBuilder = aztec3::utils::DummyCircuitBuilder; +using DummyBuilder = aztec3::utils::DummyCircuitBuilder; using aztec3::circuits::abis::KernelCircuitPublicInputs; using aztec3::circuits::abis::public_kernel::PublicKernelInputs; using aztec3::circuits::kernel::public_kernel::native_public_kernel_circuit_private_previous_kernel; using aztec3::circuits::kernel::public_kernel::native_public_kernel_circuit_public_previous_kernel; -} // namespace // WASM Cbinds - -CBIND(public_kernel__sim, [](PublicKernelInputs public_kernel_inputs) { +CBIND(public_kernel__sim, [](PublicKernelInputs const& public_kernel_inputs) { DummyBuilder builder = DummyBuilder("public_kernel__sim"); KernelCircuitPublicInputs const result = public_kernel_inputs.previous_kernel.public_inputs.is_private @@ -31,3 +29,5 @@ CBIND(public_kernel__sim, [](PublicKernelInputs public_kernel_inputs) { : native_public_kernel_circuit_public_previous_kernel(builder, public_kernel_inputs); return builder.result_or_error(result); }); + +} // namespace diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/common.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/common.cpp index c0e1338f0a58..bd08b4c5bdbf 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/common.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/common.cpp @@ -7,6 +7,8 @@ namespace aztec3::circuits::kernel::public_kernel { +using aztec3::utils::array_pop; + void common_initialise_end_values(PublicKernelInputs const& public_kernel_inputs, KernelCircuitPublicInputs& circuit_outputs) { diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp index 32ff40c4c5a1..7ee34f3d6144 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp @@ -2,8 +2,6 @@ #include "init.hpp" -#include "aztec3/circuits/abis/contract_storage_read.hpp" -#include "aztec3/circuits/abis/contract_storage_update_request.hpp" #include "aztec3/circuits/abis/kernel_circuit_public_inputs.hpp" #include "aztec3/circuits/abis/public_data_update_request.hpp" #include "aztec3/circuits/abis/public_kernel/public_kernel_inputs.hpp" @@ -11,25 +9,18 @@ #include "aztec3/utils/array.hpp" #include "aztec3/utils/dummy_circuit_builder.hpp" +namespace aztec3::circuits::kernel::public_kernel { + using NT = aztec3::utils::types::NativeTypes; -using aztec3::circuits::abis::ContractStorageRead; -using aztec3::circuits::abis::ContractStorageUpdateRequest; using aztec3::circuits::abis::KernelCircuitPublicInputs; using aztec3::circuits::abis::PublicDataRead; using aztec3::circuits::abis::PublicDataUpdateRequest; using aztec3::circuits::abis::public_kernel::PublicKernelInputs; using DummyBuilder = aztec3::utils::DummyCircuitBuilder; -using aztec3::circuits::check_membership; -using aztec3::circuits::compute_public_data_tree_index; -using aztec3::circuits::compute_public_data_tree_value; -using aztec3::circuits::root_from_sibling_path; using aztec3::utils::array_length; -using aztec3::utils::array_pop; using aztec3::utils::array_push; using aztec3::utils::push_array_to_array; -namespace aztec3::circuits::kernel::public_kernel { - /** * @brief Validate that all pre-images on the call stack hash to equal the accumulated data * @tparam The type of kernel input diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/init.hpp b/circuits/cpp/src/aztec3/circuits/kernel/public/init.hpp index 5a7e60acb778..f859a77ea937 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/init.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/init.hpp @@ -1,5 +1,4 @@ #pragma once -#include "aztec3/circuits/abis/public_kernel/public_kernel_inputs.hpp" #include "aztec3/circuits/apps/oracle_wrapper.hpp" #include "aztec3/circuits/recursion/aggregator.hpp" #include "aztec3/oracle/oracle.hpp" diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_private_previous_kernel.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_private_previous_kernel.cpp index fa5b8f2563bd..5ec0470d1bb0 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_private_previous_kernel.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_private_previous_kernel.cpp @@ -4,13 +4,18 @@ #include "aztec3/circuits/abis/kernel_circuit_public_inputs.hpp" #include "aztec3/circuits/abis/public_kernel/public_kernel_inputs.hpp" -#include "aztec3/constants.hpp" #include "aztec3/utils/array.hpp" #include "aztec3/utils/circuit_errors.hpp" #include "aztec3/utils/dummy_circuit_builder.hpp" +// Purpose of this anonymous namespace is to avoid to clash with the validate_inputs() +// counterpart defined in native_public_kernel_circuit_public_previous_kernel.cpp namespace { using CircuitErrorCode = aztec3::utils::CircuitErrorCode; +using aztec3::circuits::kernel::public_kernel::NT; +using DummyBuilder = aztec3::utils::DummyCircuitBuilder; +using aztec3::circuits::abis::public_kernel::PublicKernelInputs; +using aztec3::utils::array_length; /** * @brief Validates the kernel circuit inputs specific to having a private previous kernel @@ -32,11 +37,9 @@ void validate_inputs(DummyBuilder& builder, PublicKernelInputs const& public namespace aztec3::circuits::kernel::public_kernel { using aztec3::circuits::abis::KernelCircuitPublicInputs; -using aztec3::circuits::abis::public_kernel::PublicKernelInputs; using aztec3::circuits::kernel::public_kernel::common_initialise_end_values; using aztec3::circuits::kernel::public_kernel::common_validate_kernel_execution; -using DummyBuilder = aztec3::utils::DummyCircuitBuilder; /** * @brief Entry point for the native public kernel circuit with a private previous kernel diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_public_previous_kernel.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_public_previous_kernel.cpp index 3f36e9a0ae71..5fc62e690d37 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_public_previous_kernel.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/native_public_kernel_circuit_public_previous_kernel.cpp @@ -5,11 +5,16 @@ #include "aztec3/circuits/abis/kernel_circuit_public_inputs.hpp" #include "aztec3/circuits/abis/public_kernel/public_kernel_inputs.hpp" -#include "aztec3/utils/array.hpp" #include "aztec3/utils/dummy_circuit_builder.hpp" +// Purpose of this anonymous namespace is to avoid to clash with the validate_inputs() +// counterpart defined in native_public_kernel_circuit_private_previous_kernel.cpp namespace { using CircuitErrorCode = aztec3::utils::CircuitErrorCode; +using aztec3::circuits::kernel::public_kernel::NT; +using DummyBuilder = aztec3::utils::DummyCircuitBuilder; +using aztec3::circuits::abis::public_kernel::PublicKernelInputs; + /** * @brief Validates the kernel circuit inputs specific to having a public previous kernel * @param builder The circuit builder @@ -27,10 +32,8 @@ void validate_inputs(DummyBuilder& builder, PublicKernelInputs const& public namespace aztec3::circuits::kernel::public_kernel { using aztec3::circuits::abis::KernelCircuitPublicInputs; -using aztec3::circuits::abis::public_kernel::PublicKernelInputs; using aztec3::circuits::kernel::public_kernel::common_validate_kernel_execution; -using DummyBuilder = aztec3::utils::DummyCircuitBuilder; /** * @brief Entry point for the native public kernel circuit with a public previous kernel From 26ab88fd5b8d5be7f20cd6f6e4335d344f2219c7 Mon Sep 17 00:00:00 2001 From: Dan Lee <142251406+dan-aztec@users.noreply.github.com> Date: Thu, 14 Sep 2023 10:03:21 -0700 Subject: [PATCH 16/25] feat: cli "unbox" command (#2029) forking Leila's PR which has much nicer frontend, and copying over the sandbox interaction logic from my PR. currently has everything in a single folder inside `boxes/`, when we add another one i think we can refactor the web stuff out so that it's mostly just a `config.ts` and maybe some pinned artifacts like the ContractAbi that change with each box. there's a bit of hacking around changing paths and package version values inside the `unbox` command, which copies files directly from github (so the user doesnt need the full monorepo). since the command pulls from github directly, it's harder to test this - i've been working with a manual copy of `boxes/private-token` to mimic the copy functionality. the monorepo subpackage does build, but since the command has dependency on github, will need to test post commit to make sure everything works. image # Checklist: Remove the checklist to signal you've completed it. Enable auto-merge if the PR is ready to merge. - [ ] I have reviewed my diff in github, line by line and removed unexpected formatting changes, testing logs, or commented-out code. - [x] Every change is related to the PR description. - [x] 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 --- yarn-project/README.md | 2 + yarn-project/aztec.js/package.json | 4 +- .../boxes/private-token/.eslintrc.cjs | 61 + yarn-project/boxes/private-token/.gitignore | 24 + .../boxes/private-token/.prettierrc.json | 6 + yarn-project/boxes/private-token/Dockerfile | 15 + yarn-project/boxes/private-token/README.md | 95 + yarn-project/boxes/private-token/package.json | 96 + .../boxes/private-token/postcss.config.cjs | 6 + .../boxes/private-token/src/@types/index.d.ts | 4 + .../src/app/components/banner.tsx | 43 + .../src/app/components/button.tsx | 28 + .../app/components/contract_function_form.tsx | 168 + .../private-token/src/app/components/index.ts | 5 + .../src/app/components/popup.tsx | 42 + .../src/app/components/spinner.tsx | 20 + .../src/app/components/wallet_dropdown.tsx | 58 + .../boxes/private-token/src/app/contract.tsx | 91 + .../boxes/private-token/src/app/home.tsx | 68 + .../boxes/private-token/src/app/index.css | 60 + .../boxes/private-token/src/app/index.html | 13 + .../boxes/private-token/src/app/index.tsx | 11 + .../src/artifacts/PrivateToken.ts | 106 + .../src/artifacts/private_token_contract.json | 158 + .../private-token/src/assets/aztec_logo.svg | 8 + .../private-token/src/assets/favicon.ico | Bin 0 -> 4286 bytes .../boxes/private-token/src/config.ts | 14 + .../private-token/src/contracts/Nargo.toml | 9 + .../src/contracts/src/interface.nr | 67 + .../private-token/src/contracts/src/main.nr | 101 + .../src/scripts/call_contract_function.ts | 30 + .../src/scripts/deploy_contract.ts | 22 + .../boxes/private-token/src/scripts/index.ts | 4 + .../boxes/private-token/src/scripts/util.ts | 37 + .../src/scripts/view_contract_function.ts | 20 + .../src/tests/privatetoken.frontend.test.ts | 144 + .../boxes/private-token/tailwind.config.cjs | 39 + .../boxes/private-token/tsconfig.dest.json | 12 + .../boxes/private-token/tsconfig.json | 52 + .../boxes/private-token/webpack.config.js | 95 + yarn-project/cli/package.json | 2 + yarn-project/cli/src/index.ts | 13 + yarn-project/cli/src/unbox.ts | 303 ++ yarn-project/package.json | 2 + yarn-project/yarn-project-base/Dockerfile | 1 + yarn-project/yarn.lock | 3117 ++++++++++++++++- 46 files changed, 5200 insertions(+), 76 deletions(-) create mode 100644 yarn-project/boxes/private-token/.eslintrc.cjs create mode 100644 yarn-project/boxes/private-token/.gitignore create mode 100644 yarn-project/boxes/private-token/.prettierrc.json create mode 100644 yarn-project/boxes/private-token/Dockerfile create mode 100644 yarn-project/boxes/private-token/README.md create mode 100644 yarn-project/boxes/private-token/package.json create mode 100644 yarn-project/boxes/private-token/postcss.config.cjs create mode 100644 yarn-project/boxes/private-token/src/@types/index.d.ts create mode 100644 yarn-project/boxes/private-token/src/app/components/banner.tsx create mode 100644 yarn-project/boxes/private-token/src/app/components/button.tsx create mode 100644 yarn-project/boxes/private-token/src/app/components/contract_function_form.tsx create mode 100644 yarn-project/boxes/private-token/src/app/components/index.ts create mode 100644 yarn-project/boxes/private-token/src/app/components/popup.tsx create mode 100644 yarn-project/boxes/private-token/src/app/components/spinner.tsx create mode 100644 yarn-project/boxes/private-token/src/app/components/wallet_dropdown.tsx create mode 100644 yarn-project/boxes/private-token/src/app/contract.tsx create mode 100644 yarn-project/boxes/private-token/src/app/home.tsx create mode 100644 yarn-project/boxes/private-token/src/app/index.css create mode 100644 yarn-project/boxes/private-token/src/app/index.html create mode 100644 yarn-project/boxes/private-token/src/app/index.tsx create mode 100644 yarn-project/boxes/private-token/src/artifacts/PrivateToken.ts create mode 100644 yarn-project/boxes/private-token/src/artifacts/private_token_contract.json create mode 100644 yarn-project/boxes/private-token/src/assets/aztec_logo.svg create mode 100644 yarn-project/boxes/private-token/src/assets/favicon.ico create mode 100644 yarn-project/boxes/private-token/src/config.ts create mode 100644 yarn-project/boxes/private-token/src/contracts/Nargo.toml create mode 100644 yarn-project/boxes/private-token/src/contracts/src/interface.nr create mode 100644 yarn-project/boxes/private-token/src/contracts/src/main.nr create mode 100644 yarn-project/boxes/private-token/src/scripts/call_contract_function.ts create mode 100644 yarn-project/boxes/private-token/src/scripts/deploy_contract.ts create mode 100644 yarn-project/boxes/private-token/src/scripts/index.ts create mode 100644 yarn-project/boxes/private-token/src/scripts/util.ts create mode 100644 yarn-project/boxes/private-token/src/scripts/view_contract_function.ts create mode 100644 yarn-project/boxes/private-token/src/tests/privatetoken.frontend.test.ts create mode 100644 yarn-project/boxes/private-token/tailwind.config.cjs create mode 100644 yarn-project/boxes/private-token/tsconfig.dest.json create mode 100644 yarn-project/boxes/private-token/tsconfig.json create mode 100644 yarn-project/boxes/private-token/webpack.config.js create mode 100644 yarn-project/cli/src/unbox.ts diff --git a/yarn-project/README.md b/yarn-project/README.md index df9eeeafcf76..2561fc4b85ab 100644 --- a/yarn-project/README.md +++ b/yarn-project/README.md @@ -38,3 +38,5 @@ To add a new package, make sure to add it to the `build_manifest.json`, to the ` - `package.json` - `README.md` - `tsconfig.json` + +You may also need to modify the [Dockerfile](yarn-project/yarn-project-base/Dockerfile) to copy your new `package.json` into the container to get CI to pass. diff --git a/yarn-project/aztec.js/package.json b/yarn-project/aztec.js/package.json index 44e2441449be..87846f730cb9 100644 --- a/yarn-project/aztec.js/package.json +++ b/yarn-project/aztec.js/package.json @@ -5,8 +5,8 @@ "type": "module", "exports": { "node": "./dest/index.js", - "default": "./dest/main.js", - "import": "./dest/index.js" + "import": "./dest/index.js", + "default": "./dest/main.js" }, "typedocOptions": { "entryPoints": [ diff --git a/yarn-project/boxes/private-token/.eslintrc.cjs b/yarn-project/boxes/private-token/.eslintrc.cjs new file mode 100644 index 000000000000..93359038995a --- /dev/null +++ b/yarn-project/boxes/private-token/.eslintrc.cjs @@ -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', + }, +}; diff --git a/yarn-project/boxes/private-token/.gitignore b/yarn-project/boxes/private-token/.gitignore new file mode 100644 index 000000000000..a547bf36d8d1 --- /dev/null +++ b/yarn-project/boxes/private-token/.gitignore @@ -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 +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/yarn-project/boxes/private-token/.prettierrc.json b/yarn-project/boxes/private-token/.prettierrc.json new file mode 100644 index 000000000000..7c3bbec68481 --- /dev/null +++ b/yarn-project/boxes/private-token/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 120, + "arrowParens": "avoid" +} diff --git a/yarn-project/boxes/private-token/Dockerfile b/yarn-project/boxes/private-token/Dockerfile new file mode 100644 index 000000000000..ecdb1d7ba079 --- /dev/null +++ b/yarn-project/boxes/private-token/Dockerfile @@ -0,0 +1,15 @@ +FROM 278380418400.dkr.ecr.eu-west-2.amazonaws.com/yarn-project-base AS builder + +COPY . . + +WORKDIR /usr/src/yarn-project/boxes/private-token +RUN yarn build && yarn formatting + +# this feels wrong +RUN yarn cache clean +RUN yarn workspaces focus --production > /dev/null + +FROM node:18-alpine +COPY --from=builder /usr/src/yarn-project/boxes/private-token /usr/src/yarn-project/boxes/private-token +WORKDIR /usr/src/yarn-project/boxes/private-token +ENTRYPOINT ["yarn"] \ No newline at end of file diff --git a/yarn-project/boxes/private-token/README.md b/yarn-project/boxes/private-token/README.md new file mode 100644 index 000000000000..272fc2cdfbc4 --- /dev/null +++ b/yarn-project/boxes/private-token/README.md @@ -0,0 +1,95 @@ +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 PrivateToken` command so that the repository is copied with needed modifications from the monorepo subpackage. + +Some contract specific settings for `PrivateToken` are in a [config](src/config.ts) will require manual updates depending on your changes to the source code. `aztec-cli` can be installed with `npm i -g @aztec/cli`, if you don't have it already. + +## Setup + +Dependencies can be installed from the root of the package: + +```bash +yarn +yarn install:noir +yarn install:sandbox +yarn build +``` + +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` which executes + +```bash +curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash + +noirup -v aztec +``` + +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` which executes + +```bash +docker pull aztecprotocol/aztec-sandbox:latest +``` + +## Getting started + +After `yarn build` 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 the PrivateToken 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 - PrivateToken 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 + |— private_token_contract.json + |— private_token.ts + |— tests + | A simple end2end test deploying and testing the PrivateToken on a local sandbox + | using the front end helper methods in app/scripts/ + | The test requires the sandbox and anvil to be running (yarn start:sandbox). + |- privatetoken.test.ts +``` + +Most relevant to you is likely `src/contracts/main.nr` (and the build config `src/contracts/Nargo.toml`). This contains the example PrivateToken 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 with `yarn compile` which is an alias for + +```bash +aztec-cli compile src/contracts --outdir ../artifacts --typescript ../artifacts +``` + +This will generate a [Contract ABI](https://www.alchemy.com/overviews/what-is-an-abi-of-a-smart-contract-examples-and-usage) and TypeScript class for the Aztec smart contract in `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 PrivateTokenContractAbiJson from 'PrivateToken.json' assert { type: 'json' }; +// need to update the relative import to +import PrivateTokenContractAbiJson from './PrivateToken.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 :) diff --git a/yarn-project/boxes/private-token/package.json b/yarn-project/boxes/private-token/package.json new file mode 100644 index 000000000000..730dcde145d5 --- /dev/null +++ b/yarn-project/boxes/private-token/package.json @@ -0,0 +1,96 @@ +{ + "name": "private-token", + "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.js": "workspace:^", + "@aztec/circuits.js": "workspace:^", + "@aztec/cli": "workspace:^", + "@aztec/foundation": "workspace:^", + "formik": "^2.4.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "serve": "^14.2.1", + "tailwindcss": "^3.3.3", + "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", + "style-loader": "^3.3.3", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.4", + "ts-node": "^10.9.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" +} diff --git a/yarn-project/boxes/private-token/postcss.config.cjs b/yarn-project/boxes/private-token/postcss.config.cjs new file mode 100644 index 000000000000..95cd618b13f4 --- /dev/null +++ b/yarn-project/boxes/private-token/postcss.config.cjs @@ -0,0 +1,6 @@ +const tailwindcss = require('tailwindcss'); +const autoprefixer = require('autoprefixer'); + +module.exports = { + plugins: [tailwindcss('./tailwind.config.cjs'), autoprefixer], +}; diff --git a/yarn-project/boxes/private-token/src/@types/index.d.ts b/yarn-project/boxes/private-token/src/@types/index.d.ts new file mode 100644 index 000000000000..091d25e21017 --- /dev/null +++ b/yarn-project/boxes/private-token/src/@types/index.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg' { + const content: any; + export default content; +} diff --git a/yarn-project/boxes/private-token/src/app/components/banner.tsx b/yarn-project/boxes/private-token/src/app/components/banner.tsx new file mode 100644 index 000000000000..6157e1c93d1b --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/banner.tsx @@ -0,0 +1,43 @@ +interface Props { + background: string; + direction: string; + animated?: boolean; +} + +/** + * + * @param background - background color, either "black" or "purple" + * @returns a moving banner repeating the word PRIVACY + */ +export function Banner({ background, direction, animated }: Props) { + // Determine direction + const start = !animated ? '' : direction === 'reverse' ? 'animate-marquee' : 'animate-marquee3'; + const end = !animated ? '' : direction === 'reverse' ? 'animate-marquee2' : 'animate-marquee4'; + + // Apply relevant color styles + const containerStyles = + background === 'black' + ? `relative flex overflow-x-hidden bg-indigo-950 text-orange-100` + : `relative flex overflow-x-hidden bg-orange-100 text-indigo-950`; + + return ( +

+
+ {/* Generate text elements */} + {Array.from({ length: 50 }, (_, index) => ( + + PRIVACY + + ))} +
+
+ {/* Generate text elements */} + {Array.from({ length: 50 }, (_, index) => ( + + PRIVACY + + ))} +
+
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/components/button.tsx b/yarn-project/boxes/private-token/src/app/components/button.tsx new file mode 100644 index 000000000000..4ac24cadb538 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/button.tsx @@ -0,0 +1,28 @@ +import { Spinner } from './spinner.js'; + +interface Props { + children: string; + isLoading?: boolean; + disabled?: boolean; + onClick?: () => void; +} + +export function Button({ children, isLoading, disabled, onClick }: Props) { + return ( + + ); +} diff --git a/yarn-project/boxes/private-token/src/app/components/contract_function_form.tsx b/yarn-project/boxes/private-token/src/app/components/contract_function_form.tsx new file mode 100644 index 000000000000..89dade558b91 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/contract_function_form.tsx @@ -0,0 +1,168 @@ +import { AztecAddress, CompleteAddress, Fr } from '@aztec/aztec.js'; +import { ContractAbi, FunctionAbi } from '@aztec/foundation/abi'; +import { useFormik } from 'formik'; +import * as Yup from 'yup'; +import { CONTRACT_ADDRESS_PARAM_NAMES, DEFAULT_PUBLIC_ADDRESS, rpcClient } from '../../config.js'; +import { callContractFunction, deployContract, viewContractFunction } from '../../scripts/index.js'; +import { convertArgs } from '../../scripts/util.js'; +import { Button } from './index.js'; + +type NoirFunctionYupSchema = { + // hack: add `any` at the end to get the array schema to typecheck + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [key: string]: Yup.NumberSchema | Yup.ArraySchema | Yup.BooleanSchema | any; +}; + +type NoirFunctionFormValues = { + [key: string]: string | number | number[] | boolean; +}; + +function generateYupSchema(functionAbi: FunctionAbi) { + const parameterSchema: NoirFunctionYupSchema = {}; + const initialValues: NoirFunctionFormValues = {}; + for (const param of functionAbi.parameters) { + if (CONTRACT_ADDRESS_PARAM_NAMES.includes(param.name)) { + // these are hex strings instead, but yup doesn't support bigint so we convert back to bigint on execution + parameterSchema[param.name] = Yup.string().required(); + initialValues[param.name] = DEFAULT_PUBLIC_ADDRESS; + continue; + } + switch (param.type.kind) { + case 'field': + parameterSchema[param.name] = Yup.number().required(); + initialValues[param.name] = 100; + break; + // not really needed for private token, since we hide the nullifier helper method which has the array input + case 'array': + // eslint-disable-next-line no-case-declarations + const arrayLength = param.type.length; + parameterSchema[param.name] = Yup.array() + .of(Yup.number()) + .min(arrayLength) + .max(arrayLength) + .transform(function (value: number[], originalValue: string) { + if (typeof originalValue === 'string') { + return originalValue.split(',').map(Number); + } + return value; + }); + initialValues[param.name] = Array(arrayLength).fill( + CONTRACT_ADDRESS_PARAM_NAMES.includes(param.name) ? DEFAULT_PUBLIC_ADDRESS : 200, + ); + break; + case 'boolean': + parameterSchema[param.name] = Yup.boolean().required(); + initialValues[param.name] = false; + break; + } + } + return { validationSchema: Yup.object().shape(parameterSchema), initialValues }; +} + +async function handleFunctionCall( + contractAddress: AztecAddress | undefined, + contractAbi: ContractAbi, + functionName: string, + args: any, + wallet: CompleteAddress, +) { + const functionAbi = contractAbi.functions.find(f => f.name === functionName)!; + const typedArgs: any[] = convertArgs(functionAbi, args); + + if (functionName === 'constructor' && !!wallet) { + if (functionAbi === undefined) { + throw new Error('Cannot find constructor in the ABI.'); + } + // hack: addresses are stored as string in the form to avoid bigint compatibility issues with formik + // convert those back to bigints before sending + + // for now, dont let user change the salt. requires some change to the form generation if we want to let user choose one + // since everything is currently based on parsing the contractABI, and the salt parameter is not present there + const salt = Fr.random(); + return await deployContract(wallet, contractAbi, typedArgs, salt, rpcClient); + } + + if (functionAbi.functionType === 'unconstrained') { + return await viewContractFunction(contractAddress!, contractAbi, functionName, typedArgs, rpcClient, wallet); + } else { + return await callContractFunction(contractAddress!, contractAbi, functionName, typedArgs, rpcClient, wallet); + } +} + +interface ContractFunctionFormProps { + wallet: CompleteAddress; + contractAddress?: AztecAddress; + contractAbi: ContractAbi; + functionAbi: FunctionAbi; + title?: string; + buttonText?: string; + isLoading: boolean; + disabled: boolean; + onSubmit: () => void; + onSuccess: (result: any) => void; + onError: (msg: string) => void; +} + +export function ContractFunctionForm({ + wallet, + contractAddress, + contractAbi, + functionAbi, + title, + buttonText = 'Submit', + isLoading, + disabled, + onSubmit, + onSuccess, + onError, +}: ContractFunctionFormProps) { + const { validationSchema, initialValues } = generateYupSchema(functionAbi); + const formik = useFormik({ + initialValues: initialValues, + validationSchema: validationSchema, + onSubmit: async (values: any) => { + onSubmit(); + try { + const result = await handleFunctionCall(contractAddress, contractAbi, functionAbi.name, values, wallet); + onSuccess(result); + } catch (e: any) { + onError(e.message); + } + }, + }); + + return ( +
+

{title || `${functionAbi.name} (${functionAbi.functionType})`}

+
+
+ {functionAbi.parameters.map(input => ( +
+ +
+ +
+ {formik.touched[input.name] && formik.errors[input.name] && ( +
{formik.errors[input.name]?.toString()}
+ )} +
+ ))} +
+
+ +
+
+
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/components/index.ts b/yarn-project/boxes/private-token/src/app/components/index.ts new file mode 100644 index 000000000000..e1b6f869eb06 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/index.ts @@ -0,0 +1,5 @@ +export * from './banner.js'; +export * from './button.js'; +export * from './contract_function_form.js'; +export * from './popup.js'; +export * from './spinner.js'; diff --git a/yarn-project/boxes/private-token/src/app/components/popup.tsx b/yarn-project/boxes/private-token/src/app/components/popup.tsx new file mode 100644 index 000000000000..c4214c944003 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/popup.tsx @@ -0,0 +1,42 @@ +import { Button } from './button.js'; + +interface Props { + children: string; + buttonText?: string; + isWarning?: boolean; + onClose?: () => void; +} + +export function Popup({ children, buttonText = 'Close', isWarning = false, onClose }: Props) { + return ( +
+
+
+
+
+ {isWarning && ( + + )} +
{children}
+ +
+
+
+
+
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/components/spinner.tsx b/yarn-project/boxes/private-token/src/app/components/spinner.tsx new file mode 100644 index 000000000000..10fc7bb60ff8 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/spinner.tsx @@ -0,0 +1,20 @@ +export function Spinner() { + return ( + + ); +} diff --git a/yarn-project/boxes/private-token/src/app/components/wallet_dropdown.tsx b/yarn-project/boxes/private-token/src/app/components/wallet_dropdown.tsx new file mode 100644 index 000000000000..deff55b6ffd0 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/components/wallet_dropdown.tsx @@ -0,0 +1,58 @@ +import { CompleteAddress } from '@aztec/aztec.js'; +import { useEffect, useState } from 'react'; +import { rpcClient } from '../../config.js'; + +interface Props { + selected: CompleteAddress | undefined; + onSelectChange: (value: CompleteAddress) => void; + onError: (msg: string) => void; +} + +export function WalletDropdown({ selected, onSelectChange, onError }: Props) { + const [wallets, setOptions] = useState(); + + useEffect(() => { + if (wallets) { + return; + } + const loadOptions = async () => { + const fetchedOptions = await rpcClient.getAccounts(); + setOptions(fetchedOptions); + onSelectChange(fetchedOptions[0]); + }; + loadOptions().catch(e => { + setOptions([]); + onError(e.message); + }); + }); + + return ( +
+
+
+ {'Active Wallet: '} + {!wallets && 'loading...'} +
+ {!!wallets && ( + + )} +
+ {!!selected &&
{selected.address.toString()}
} +
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/contract.tsx b/yarn-project/boxes/private-token/src/app/contract.tsx new file mode 100644 index 000000000000..4108b0b38d27 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/contract.tsx @@ -0,0 +1,91 @@ +import { AztecAddress, CompleteAddress } from '@aztec/aztec.js'; +import { FunctionAbi } from '@aztec/foundation/abi'; +import { useState } from 'react'; +import { FILTERED_FUNCTION_NAMES, contractAbi } from '../config.js'; +import { ContractFunctionForm, Popup } from './components/index.js'; + +const functionTypeSortOrder = { + secret: 0, + open: 1, + unconstrained: 2, +}; + +interface Props { + wallet: CompleteAddress; + onDeploy: () => void; +} + +export function Contract({ wallet, onDeploy }: Props) { + const [contractAddress, setContractAddress] = useState(); + const [processingFunction, setProcessingFunction] = useState(''); + const [errorMsg, setError] = useState(''); + const [result, setResult] = useState(''); + + const handleSubmitForm = (functionName: string) => setProcessingFunction(functionName); + const handleContractDeployed = (address: AztecAddress) => { + setContractAddress(address); + setResult(`Contract deployed at: ${address}`); + }; + const handleResult = (returnValues: any) => { + // TODO: Serialise returnValues to string according to the returnTypes defined in the function abi. + setResult(`Return values: ${returnValues}`); + }; + const handleClosePopup = () => { + setResult(''); + setError(''); + setProcessingFunction(''); + onDeploy(); + }; + + const constructorAbi = contractAbi.functions.find(f => f.name === 'constructor')!; + const hasResult = !!(result || errorMsg); + + return ( +
+
+
{`${contractAbi.name} Noir Smart Contract`}
+ {!!contractAddress &&
{`Contract address: ${contractAddress}`}
} +
+ {!contractAddress && ( + handleSubmitForm('constructor')} + onSuccess={handleContractDeployed} + onError={setError} + /> + )} + {!!contractAddress && ( +
+ {contractAbi.functions + .filter(f => f.name !== 'constructor' && !f.isInternal && !FILTERED_FUNCTION_NAMES.includes(f.name)) + .sort((a, b) => functionTypeSortOrder[a.functionType] - functionTypeSortOrder[b.functionType]) + .map((functionAbi: FunctionAbi) => ( + handleSubmitForm(functionAbi.name)} + onSuccess={handleResult} + onError={setError} + /> + ))} +
+ )} + {!!(errorMsg || result) && ( + + {errorMsg || result} + + )} +
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/home.tsx b/yarn-project/boxes/private-token/src/app/home.tsx new file mode 100644 index 000000000000..5eab48a13087 --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/home.tsx @@ -0,0 +1,68 @@ +import { CompleteAddress } from '@aztec/aztec.js'; +import { useState } from 'react'; +import { Banner, Spinner } from './components/index.js'; +import { WalletDropdown } from './components/wallet_dropdown.js'; +import { Contract } from './contract.js'; + +const ANIMATED_BANNER = true; + +export function Home() { + const [isLoadingWallet, setIsLoadingWallet] = useState(true); + const [selectedWallet, setSelectedWallet] = useState(); + const [selectWalletError, setSelectedWalletError] = useState(''); + const [isContractDeployed, setIsContractDeployed] = useState(false); + + const handleSelectWallet = (address: CompleteAddress | undefined) => { + setSelectedWallet(address); + setIsLoadingWallet(false); + }; + + const handleSelectWalletError = (msg: string) => { + setSelectedWalletError(msg); + setIsLoadingWallet(false); + }; + + return ( +
+
+ + +
+ +
+
+
+ Aztec +
+
+ +
+
+
+ {isLoadingWallet && ( +
+ +
+ )} + {!isLoadingWallet && !!selectedWallet && ( +
+ {!!selectWalletError && `Failed to load accounts: ${selectWalletError}`} + {!selectWalletError && setIsContractDeployed(true)}/>} +
+ )} + {!isLoadingWallet && !selectedWallet && `${selectWalletError} ${selectedWallet}`} +
+
+ +
+
+ + +
+
+ ); +} diff --git a/yarn-project/boxes/private-token/src/app/index.css b/yarn-project/boxes/private-token/src/app/index.css new file mode 100644 index 000000000000..84cd8b41763e --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/index.css @@ -0,0 +1,60 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; + overflow-x: hidden; + + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; +} + +body { + color: rgb(var(--foreground-rgb)); + background: linear-gradient(to bottom, transparent, rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb)); +} + +#root { + width: 100%; + max-width: 1280px; + margin: 0 auto; + padding: 0rem; + text-align: center; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + } +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } +} diff --git a/yarn-project/boxes/private-token/src/app/index.html b/yarn-project/boxes/private-token/src/app/index.html new file mode 100644 index 000000000000..57ece0ccf91c --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/index.html @@ -0,0 +1,13 @@ + + + + + + + Private Token Noir Smart Contract + + +
+ + + diff --git a/yarn-project/boxes/private-token/src/app/index.tsx b/yarn-project/boxes/private-token/src/app/index.tsx new file mode 100644 index 000000000000..c5f7c020418f --- /dev/null +++ b/yarn-project/boxes/private-token/src/app/index.tsx @@ -0,0 +1,11 @@ +import * as React from 'react'; +import * as ReactDOM from 'react-dom/client'; +import { Home } from './home.js'; +import './index.css'; + +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); +root.render( + + + , +); diff --git a/yarn-project/boxes/private-token/src/artifacts/PrivateToken.ts b/yarn-project/boxes/private-token/src/artifacts/PrivateToken.ts new file mode 100644 index 000000000000..09f9be3854ed --- /dev/null +++ b/yarn-project/boxes/private-token/src/artifacts/PrivateToken.ts @@ -0,0 +1,106 @@ +/* Autogenerated file, do not edit! */ + +/* eslint-disable */ +import { + AztecAddress, + CompleteAddress, + ContractBase, + ContractFunctionInteraction, + ContractMethod, + DeployMethod, + FieldLike, + Wallet, +} from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { Point } from '@aztec/foundation/fields'; +import { AztecRPC, PublicKey } from '@aztec/types'; + +import PrivateTokenContractAbiJson from './private_token_contract.json' assert { type: 'json' }; + +export const PrivateTokenContractAbi = PrivateTokenContractAbiJson as unknown as ContractAbi; + +/** + * Type-safe interface for contract PrivateToken; + */ +export class PrivateTokenContract extends ContractBase { + private constructor( + /** The deployed contract's complete address. */ + completeAddress: CompleteAddress, + /** The wallet. */ + wallet: Wallet, + ) { + super(completeAddress, PrivateTokenContractAbi, wallet); + } + + /** + * Creates a contract instance. + * @param address - The deployed contract's address. + * @param wallet - The wallet to use when interacting with the contract. + * @returns A promise that resolves to a new Contract instance. + */ + public static async at( + /** The deployed contract's address. */ + address: AztecAddress, + /** The wallet. */ + wallet: Wallet, + ) { + const extendedContractData = await wallet.getExtendedContractData(address); + if (extendedContractData === undefined) { + throw new Error('Contract ' + address.toString() + ' is not deployed'); + } + return new PrivateTokenContract(extendedContractData.getCompleteAddress(), wallet); + } + + /** + * Creates a tx to deploy a new instance of this contract. + */ + public static deploy(rpc: AztecRPC, initial_supply: FieldLike, owner: FieldLike) { + return new DeployMethod( + Point.ZERO, + rpc, + PrivateTokenContractAbi, + Array.from(arguments).slice(1), + ); + } + + /** + * Creates a tx to deploy a new instance of this contract using the specified public key to derive the address. + */ + public static deployWithPublicKey(rpc: AztecRPC, publicKey: PublicKey, initial_supply: FieldLike, owner: FieldLike) { + return new DeployMethod( + publicKey, + rpc, + PrivateTokenContractAbi, + Array.from(arguments).slice(2), + ); + } + + /** + * Returns this contract's ABI. + */ + public static get abi(): ContractAbi { + return PrivateTokenContractAbi; + } + + /** Type-safe wrappers for the public methods exposed by the contract. */ + public methods!: { + /** compute_note_hash_and_nullifier(contract_address: field, nonce: field, storage_slot: field, preimage: array) */ + compute_note_hash_and_nullifier: (( + contract_address: FieldLike, + nonce: FieldLike, + storage_slot: FieldLike, + preimage: FieldLike[], + ) => ContractFunctionInteraction) & + Pick; + + /** getBalance(owner: field) */ + getBalance: ((owner: FieldLike) => ContractFunctionInteraction) & Pick; + + /** mint(amount: field, owner: field) */ + mint: ((amount: FieldLike, owner: FieldLike) => ContractFunctionInteraction) & Pick; + + /** transfer(amount: field, recipient: field) */ + transfer: ((amount: FieldLike, recipient: FieldLike) => ContractFunctionInteraction) & + Pick; + }; +} diff --git a/yarn-project/boxes/private-token/src/artifacts/private_token_contract.json b/yarn-project/boxes/private-token/src/artifacts/private_token_contract.json new file mode 100644 index 000000000000..83ba8d8f7faf --- /dev/null +++ b/yarn-project/boxes/private-token/src/artifacts/private_token_contract.json @@ -0,0 +1,158 @@ +{ + "name": "PrivateToken", + "functions": [ + { + "name": "compute_note_hash_and_nullifier", + "functionType": "unconstrained", + "isInternal": false, + "parameters": [ + { + "name": "contract_address", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "nonce", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "storage_slot", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "preimage", + "type": { + "kind": "array", + "length": 3, + "type": { + "kind": "field" + } + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "array", + "length": 4, + "type": { + "kind": "field" + } + } + ], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "constructor", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "initial_supply", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "getBalance", + "functionType": "unconstrained", + "isInternal": false, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/+2dBXQcR771ZySP7VZLZpRJZralMfOYmZnZDjuJ7TgO2WFmZmZmZtpsNpvNJrsb5ix/D/Yxf6/HdaOr3s6sfVIVXb+tPifxv2+P6v5uVfVUazQzXZxKpdKpPVsx1bxBy5l/K7/fVpW211Yl8xZR/adue/4NYnq01aU6Z4mjrv1+qswQa5CQs4E5XseubzbyKk6lEudAvN9S5B+xZOyyVAap6j4oJp96dn3yczI+L7APr5AYMg5ZwgRvBz7ZIJY52gqNM7O4GOf61D7+DSz3bZp80C724cX9n3HIEiZ4O/DJBrHM0VZonJnFxTiXmLZ4vEPLfZsmH7SL/ZD+BUPGIUuY4O3AJxvEMkdboXFmllK7LPlxLjNtlZBPA8t9myYftIv9BpQTDKUOWcIEbwc+2SCWOdoKjTOzuBjnhqatMvJpZLlv0+SDdrEPL+7/UocsYYK3A59sEMscbYXGmVlcjHNj01ZD8mliuW/T5IN2sQ8v7v9ShyxhgrcDn2wQyxxthcaZWVysz01NW43Jp5nlvk2TD9rFPry4/zMOWcIEbwc+2SCWOdoKjTOzuBjn5qatpuTTwnLfpskH7WIfXtz/GYcsYYK3A59sEMscbYXGmVlcjHNL01Zz8mlluW/T5IN2sQ8v7v+MQ5YwwduBTzaIZY62QuPMLC7GubVpqyX5lFvu2zT5oF3sw4v7P+OQJUzwduCTDWKZo63QODOLi3FuY9pqTT5tLfdtmnzQLvbhxf2fccgSJng78MkGsczRVmicmcXFOLczbbUhn/aW+zZNPmgX+/Di/s84ZAkTvB34ZINY5mgrNM7M4mKcO5i22pFPheW+TZMP2sU+vLj/Mw5ZwgRvBz5Z7ltshca5glhcjHNH01YH8ulkuW/T5IN2sQ8v7v+MQ5YwwduBTzaIZY62QuPMLC7GubNpqyP5dLHct2nyQbvYhxf3f8YhS5jg7cAnG8QyR1uhcWYWF+Pc1bTVmXy6We7bNPmgXezDi/s/45AlTPB24JMNYpmjrdA4M4uLce5u2upKPj0s922afNAu9uHF/Z9xyBImeDvwyQaxzNFWaJyZxcU49zRtdSefXpb7Nk0+aBf78OL+zzhkCRO8Hfhkg1jmaCs0zszSxy7LwIil9z6w9CGWvnZZKl3M46iNfsSPrGAP6TjPrX52OfLzvG+qZp9ivx/5+vxWfX3+1P6TPyCtZy2z8FrQ2x3LwDCVPA8s+2SDWOZoK/Q873JORiz9TVt9yafSrk9+nPvH8mEfXtz/GYcsYYK3A59sEMscbYXGmVmyVlkG5Me5ah9YssQywCqLu2uLgcSPrGAP6TjPrYF2OfLzfECqZp9ifyD5+vxWfX3+lM/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/Dmf3+f3+X1+n9/n9/l9fp/f5/f5fX6f33r+gLT+tczCnwWpcsYyoDJMJc8Dy5mzQSxztBX6nIfLORmxDDJtDSCfwXZ98uM8KJYP+/Di/s84ZAkTvB34ZINY5mgrNM7MMtQqSzY/zkP2gWUosQyzyuLus0XDiR9ZwR7ScZ5bw+1y5Of5sFTNPsX+cPL1+a36+vwpn9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9/h8+f0DaoFpm4feCDHHGks2/tyhpHljOnA1imaOt0Ps8XM7JiGWEaWsY+Yy065Mf5xGxfNiHF/d/xiFLmODtwCcbxDJHW6FxZpbRdlny90QYtQ8so4lljF0WZ+8tYn5kBXtIx3lu5exy5Of5mFTNPo33n8/v8/815w9IG1HLLLwWjHLHkr8nQtI8sOyT5b7FVuh5nllcXFuMNW2NIZ9xdn3y4zw2lgn78OL+zzhkCRO8Hfhkg1jmaCs0zswywSpLVX6cx+8DywRimWiVxd21xSTiR1awh3Sc59Ykuxz5eT4xVbNPsT+JfH1+q74+f8rn9/l9fp/f5/f5fX6f3+f3+X1+n18vf0Da2Fpm4deCxjtjqcr/3TJpHljOnA1imaOt0Os8LudkxDLZtDWRfKbY9cmP8+RYPuzDi/s/45AlTPB24JMNYpmjrdA4M8s0qyx7Xlucug8s04hlulUWd68tziB+ZAV7SMd5bs2wy5Gf59NTNfsU+zPI1+e36uvzp3x+n9/n9/l9fp/f5/f5fX6f3+f3+fXyB6RNrmUWfi1oqjOWPa8tJs0Dy5mzQSxztBV6ncflnIxYZpq2ppPPLLs++XGeGcuHfXhx/2ccsoQJ3g58skEsc7QVGmdmmeOAZfY+sMwhlrl2WZy9tjiP+JEV7CEd57k1zy5Hfp7PTdXsU+zPI9+/5vwBaTNrmYWfC2a7Y8mGqeR5YNsniGWOtkLnucs5GbHMN23NJZ8Fdn3y4zw/lg/78OL+zzhkCRO8Hfhkg1jmaCs0zsyyyAHLwn1gWUQsi+2yOFtblhA/soI9pOM8t5bY5cjP88Wpmn2K/SXk+9ecPyBtfi2z8HPBQncs+bUlaR7Y9glimaOt0Hnuck5GLEtNW4vJZ5ldn/w4L43lwz68uP8zDlnCBG8HPtkgljnaCo0zs7gY5+WmraXks8Jy36bJB+1iH17c/xmHLGGCtwOfbBDLHG2FxplZXIzzStPWcvJZZblv0+SDdrEPL+7/jEOWMMHbgU82iGWOtkLjzCwuxnm1aWsl+ayx3Ldp8kG72IcX93/GIUuY4O3AJ8t9i63QOK8hFhfjvNa0tZp81lnu2zT5oF3sw4v7P+OQJUzwduCTDWKZo63QODOLi3Feb9paSz4bLPdtmnzQLvbhxf2fccgSJng78MkGsczRVmicmcXFOG80ba0nn02W+zZNPmgX+/Di/s84ZAkTvB34ZINY5mgrNM7M4mKcN5u2NpLPAZb7Nk0+aBf78OL+zzhkCRO8Hfhkg1jmaCs0zsziYpwPNG1tJp+DLPdtmnzQLvbhxf2fccgSJng78MkGsczRVmicmcXFOB9s2jqQfA6x3Ldp8kG72IcX93/GIUuY4O3AJxvEMkdboXFmFhfjfKhp62DyOcxy36bJB+1iH17c/xmHLGGCtwOfbBDLHG2FxplZXIzzFtPWoeRzuOW+TZMP2sU+vLj/Mw5ZwgRvBz7ZIJY52gqNM7O4GOcjTFtbyOdIy32bJh+0i314cf9nHLKECd4OfLJBLHO0FRpnZim1y5If562mrSPIZ5vlvk2TD9rFPry4/0sdsoQJ3g58skEsc7QVGmdmcTHO201bW8nnKMt9myYftIt9eHH/lzpkCRO8Hfhkg1jmaCs0zsziYpx3mLa2k8/Rlvs2TT5oF/vw4v4vdcgSJng78MkGsczRVmicmcXF+rzTtLWDfI6x3Ldp8kG72IcX93/GIUuY4O3AJxvEMkdboXFmFhfjfKxpayf5HGe5b9Pkg3axDy/u/4xDljDB24FPNohljrZC48wsLsb5eNPWseRzguW+TZMP2sU+vLj/Mw5ZwgRvBz7ZIJY52gqNM7O4GOddpq3jyWe35b5Nkw/axT68uP8zDlnCBG8HPlnuW2yFxnk3sbgY5xNNW7vI5yTLfZsmH7SLfXhx/2ccsoQJ3g58skEsc7QVGmdmcTHOJ5u2TiSfUyz3bZp80C724cX9n3HIEiZ4O/DJBrHM0VZonJnFxTifato6mXxOs9y3afJBu9iHF/d/xiFLmODtwCcbxDJHW6FxZhYX43y6aetU8jnDct+myQftYh9e3P8ZhyxhgrcDn2wQyxxthcaZWVyM85mmrdPJ5yzLfZsmH7SLfXhx/2ccsoQJ3g58skEsc7QVGmdmcTHOZ5u2ziSfcyz3bZp80C724cX9n3HIEiZ4O/DJBrHM0VZonJnFxTifa9o6m3zOs9y3afJBu9iHF/d/xiFLmODtwCcbxDJHW6FxZhYX43y+aetc8rnAct+myQftYh9e3P8ZhyxhgrcDn2wQyxxthcaZWVyM84WmrfPJ5yLLfZsmH7SLfXhx/2ccsoQJ3g58skEsc7QVGmdmcTHOF5u2LiSfSyz3bZp80C724cX9n3HIEiZ4O/DJBrHM0VZonJnFxThfatq6mHwus9y3afJBu9iHF/d/xiFLmODtwCcbxDJHW6FxZhYX43y5aetS8rnCct+myQftYh9e3P8ZhyxhgrcDn2wQyxxthcaZWa6yy5K/x/GV+8ByFbFcbZfF2XcuXEP8yAr2kI7z3LrGLkd+nl+dqtmn2L+GfH1+q74+f2r/yR+Qdnkts/BacKU7lvw9jpPmgWWfbBDLHG2FnuddzsmI5VrT1tXkc51dn/w4XxvLh314cf9nHLKECd4OfLJBLHO0FRpnZrnBKks2P87X7wPLDcRyo1UWd9cWNxE/soI9pOM8t26yy5Gf5zemavYp9m8iX5/fqq/Pn/L5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f/4fMHpF1byyz8XpDrnbFk8/chTZoHljNng1jmaEvH9nNUu5yTEcvNpq0byecWuz75cb45lg/78OL+zzhkCRO8Hfhkg1jmaCs0zsxym1WWqvw437oPLLcRy+1WWdy9t+gO4kdWsId0nOfWHXY58vP89lTNPsX+HeTr81v19flTPr/P7/P7/D6/z+/z+/w+v8/v8/v8evkD0m6uZRZ+LehWZyxV+dcWk+aB5czZIJY52gq9zuNyTkYsd5q2biefu+z65Mf5zlg+7MOL+z/jkCVM8Hbgkw1imaOt0Dgzyz1WWfa8tnj3PrDcQyz3WmVx99rifcSPrGAP6TjPrfvscuTn+b2pmn2K/fvI1+e36uvzp3x+n9/n9/l9fp/f5/f5fX6f3+f3+fXyB6TdWcss/FrQ3c5Y9ry2mDQPLGfOBrHM0VbodR6XczJiud+0dS/5PGDXJz/O98fyYR9e3P8ZhyxhgrcDn2wQyxxthcaZWR6yyrLntcUH94HlIWJ52CqLu9cWHyF+ZAV7SMd5bj1ilyM/zx9O1exT7D9Cvj6/VV+fP+Xz+/w+v8/v8/v8Pr/P7/P7/D6/z6+XPyDt/lpm4deCHnTGsue1xaR5YDlzNohljrZCr/O4nJMRy6OmrYfJ5zG7PvlxfjSWD/vw4v7POGQJE7wd+GSDWOZoKzTOzPKEXZb8vZwe3weWJ4jlSbsszl5bfIr4kRXsIR3nufWUXY78PH8yVbNPsf8U+fr8Vn19/tT+kz8g7dFaZuG14HF3LPl7OSXNA8s+2SCWOdoKPc+7nJMRy9OmrSfJ5xm7PvlxfjqWD/vw4v7POGQJE7wd+GSDWOZoKzTOzPKcXZb8tcWz+8DyHLE8b5fF2bXFC8SPrGAP6TjPrRfscuTn+fOpmn2K/RfI1+e36uvzp/af/AFpT9cyC68Fz7pjyV9bJM0Dyz5Z7ltshZ7nXyAWF9cWL5q2niefl+z65Mf5xVg+7MOL+z/jkCVM8Hbgkw1imaOt0DgzyysOWF7eB5ZXiOVVuyzOri1eI35kBXtIx3luvWaXIz/PX03V7FPsv0a+f835A9JerGUWfi542R1LNkwlzwPbPkEsc7QVOs9dzsmI5XXT1qvk8yO7Pvlxfj2WD/vw4v7POGQJE7wd+GSDWOZoKzTOzOJinN8wbb1OPj+23Ldp8kG72IcX93/GIUuY4O3AJxvEMkdboXFmFhfj/KZp6w3y+Ynlvk2TD9rFPry4/zMOWcIEbwc+2SCWOdoKjTOzuBjnt0xbb5LPTy33bZp80C724cX9n3HIEiZ4O/DJBrHM0VZonJnFxTi/bdp6i3x+Zrlv0+SDdrEPL+7/jEOWMMHbgU82iGWOtkLjzCwuxvkd09bb5PNzy32bJh+0i314cf9nHLKECd4OfLJBLHO0FRpnZnExzu+att4hn/cs922afNAu9uHF/Z9xyBImeDvwyQaxzNFWaJyZxcU4/8K09S75/NJy36bJB+1iH17c/xmHLGGCtwOfbBDLHG2FxplZfmWXJf862fuW+zFq4wPiR1awh3T8fcr2gWWONHmiXewz396yFtUyq6vx/9Bum/n5zX0abYXm94eU7yPLLKX/20a9VPW4ov143/LYunjd9BPKC0/4lPzvfx+b+pMfiKMOefJz6md2PfPz+lPTVtr891lC1s8d+H5G+ZgDXsX0mLr19/xbZnhK7fJUumrT7nhls1GbX9htc0DU5pd22xwYtfmV3TYHRW1+bbfNwVGb39htc0iYqt74eevXdudXVaHnbHgxS7EQSx0hlowQS10hlnpCLPWFWAIhlhIhllCIpVSIpUyIpYEQS0MhlkZCLI2FWJoIsTQVYmkmxNJciKWFEEtLIZZWQiythVjKhVjaCLG0FWJpJ8TSXoilgxBLhRBLRyGWTkIsnYVYugixdBVi6SbE0l2IpYcQS08hll5CLL2FWPoIsfQVYuknxNJfiKVSiKVKiCUrxDJAiGWgEMsgIZbBQixDhFiGCrEME2IZLsQyQohlpBDLKCGW0UIsY4RYckIsY4VYxgmxjBdimSDEMlGIZZIQy2QhlilCLFOFWKYJsUwXYpkhxDJTiGWWEMtsIZY5QixzhVjmCbHMF2JZIMSyUIhlkRDLYiGWJUIsS4VYlgmxLBdiWSHEslKIZZUQy2ohljVCLGuFWNYJsawXYtkgxLJRiGWTEMtmIZYDhFgOFGI5SIjlYCGWQ4RYDhViOUyIZYsQy+FCLEcIsRwpxLJViGWbEMt2IZajhFh2CLEcLcSyU4jlGCGWY4VYjhNiOV6I5QQhll1CLLuFWE4UYjlJiOVkIZZThFhOFWI5TYjldCGWM4RYzhRiOUuI5WwhlnOEWM4VYjlPiOV8IZYLhFguFGK5SIjlYiGWS4RYLhViuUyI5XIhliuEWK4UYrlKiOVqIZZrhFiuFWK5TojleiGWG4RYbhRiuUmI5WYhlluEWG4VYrlNiOV2IZY7hFjuFGK5S4jlbiGWe4RY7hViuU+I5X4hlgeEWB4UYnlIiOVhIZZHhFgeFWJ5TIjlcSGWJ4RYnhRieUqI5WkhlmeEWJ4VYnlOiOV5IZYXhFheFGJ5SYjlZSGWV4RYXhViec38q8DyuhDLj4RY3hBi+bEQy5tCLD8RYnlLiOWnQixvC7H8TIjlHSGWnwuxvCvE8p4Qyy+EWH4pxPIrIZb3hVg+EGL5UIjlIyGWj4VYPhFi+VSI5TMhls+FWL4QYvlSiOUrIZavhVi+EWJJ1zJLQAwp0nC8lLTfmPpg0n5r6kNJ+52pt5D2e1MfQdofTL2VtD+aejtp/8/UO0j7G1PvJO1vTX0saX9n6uNJ+3tT7yLtT6Y+kbR/MPXJpP2jqU8l7Z9MfTpp/2zqM0n7F1OfTdq/mvpc0v7N1OeT9u+mvpC0/zD1xaT9p6kvJe2/TH05af9t6qtJ+x9TX0saJseNpKWNdjNpRUa7nbRio91JWh2j3Utaxmj3k1bXaA+TVs9oj5JW32hPkhYY7WnSSoz2PGmh0V4krdRor5JWZrTXSWtgtDdIa2i0N0lrZLS3SGtstLdJa2K0d0hrarR3SWtmND4vmxutmLQWRqtLWkuj1SetldFKSGtttDLSyo3WkLQ2RmtMWlujNSWtndGak9beaC1J62C01qRVGK0NaR2N1o60TkbrQFpno3UkrYvROpPW1WhdSetmtO6kdTdaT9J6GK0vaT2N1p+0XkYbQFpvow0irY/RhpHW12gjSOtntDGk9TfaWNIqjTaRNCwMk0nLGm06aQOMNpO0gUabS9ogo80nbbDRFpM2xGhLSRtqtOWkDTPaStKGG201aSOMtpa0kUZbT9ooo20kbbTRNpM2xmgHkpYz2sekjTXaZ6SNM9oXpI032pekTTDaV6RNNNrXpE0y2jekFZma126c878hrY6pf0taxtS/Iw3PDb8nrZ6p/0Aani/+SFpg6v9HGp5D/oY0XOv8LWl47vo70vBc8/ekNTD1n0jD888/kIZ7yf8jaXhO+ifScG/1fyYNz1P/QhruNf6vpOG5699Iw723/500PJ/9B2m4F/V/kobnuP8iDfdm/m/S8Lz3P6ThXsVYm/PPsZBIw717i0jD82MxaRVGq0NaR6NlSOtktLqk4Xm0Hmm412l90r59biWtm9FKSMPzbUga7oVZSlpPo5WRhntDNiCtt9EakoZ7JTYiDc/fjUnDvQObkIbn9Kak4V56zUjDPe2ak4Z7y7UgDetBS9Jwr7VWpGGNaE0a7j1WThruAdaGNNyLqy1pWF/akYZ7U7UnDWtOB9Jwr6YK0nDPpI6k4d5FnUjDetWZtJzRupA21mhdSRtntG6k4R4z3UnDvV56kIb1rydpk4zWizSsib1Jw71A+pA21Wh9ScO9MfqRhvW0P2m4V0QlaVhjq0jDvROypOEeBgNIw70EBpKG9XkQafhu/cGkYc0eQhq+a34oafjO92Gk4bvXh5OG9X4Eafgu8pGk4RpgFGn4bu7RpOG6YAxp+K7qHGm4VhhLGr67eRxpuH4YT9oao00gba3RJpK2zmhYm6M1dXCD6uN4LNZpXse5HdTmn/w6DO+c0Sq/35afRuyTo314lRADjtUmyzdCLF8LsXwlxPKlEMsXQiyfC7F8JsTyqRDLJ0IsHwuxfCTE8qEQywdCLO8LsfxKiOWXQiy/EGJ5T4jlXSGWnwuxvCPE8jMhlreFWH4qxPKWEMtPhFjeFGL5sRDLG0IsPxJieV2I5TUhlleFWF4RYnlZiOUlIZYXhVheEGJ5XojlOSGWZ4VYnhFieVqI5SkhlieFWJ4QYnlciOUxIZZHhVgeEWJ5WIjlISGWB4VYHhBiuV+I5T4hlnuFWO4RYrlbiOUuIZY7hVjuEGK5XYjlNiGWW4VYbhFiuVmI5SYhlhuFWG4QYrleiOU6IZZrhViuEWK5WojlKiGWK4VYrhBiuVyI5TIhlkuFWC4RYrlYiOUiIZYLhVguEGI5X4jlPCGWc4VYzhFiOVuI5SwhljOFWM4QYjldiOU0IZZThVhOEWI5WYjlJCGWE4VYdgux7BJiOUGI5XghluOEWI4VYjlGiGWnEMvRQiw7hFiOEmLZLsSyTYhlqxDLkUIsRwixHC7EskWI5TAhlkOFWA4RYjlYiOUgIZYDhVgOEGLZLMSySYhloxDLBiGW9UIs64RY1gqxrBFiWS3EskqIZaUQywohluVCLMuEWJYKsSwRYlksxLJIiGWhEMsCIZb5QizzhFjmCrHMEWKZLcQyS4hlphDLDCGW6UIs04RYpgqxTBFimSzEMkmIZaIQywQhlvFCLOOEWMYKseSEWMYIsYwWYhklxDJSiGWEEMtwIZZhQixDhViGCLEMFmIZJMQyUIhlgBBLVoilSoilUoilvxBLPyGWvkIsfYRYegux9BJi6SnE0kOIpbsQSzchlq5CLF2EWDoLsXQSYukoxFIhxNJBiKW9EEs7IZa2QixthFjKhVhaC7G0EmJpKcTSQoiluRBLMyGWpkIsTYRYGguxNBJiaSjE0kCIpUyIpVSIJRRiKRFiCYRY6gux1BNiqSvEkhFiqSPEUizEUhRjCej4JNLwOByrZ7jxWaqcHe5KPPemyDPy2WDXpyqdqrnlqIYXsxQLsdQRYskIsdQVYqknxFJfiCUQYikRYgmFWEqFWMqEWBoIsTQUYmkkxNJYiKWJEEtTIZZmQizNhVhaCLG0FGJpJcTSWoilXIiljRBLWyGWdkIs7YVYOgixVAixdBRi6STE0lmIpYsQS1chlm5CLN2FWHoIsfQUYuklxNJbiKWPEEtfIZZ+Qiz9hVgqhViqhFiyQiwDhFgGCrEMEmIZLMQyRIhlqBDLMCGW4UIsI4RYRgqxjBJiGS3EMkaIJSfEMlaIZZwQy3ghlglCLBOFWCYJsUwWYpkixDJViGWaEMt0IZYZQiwzhVhmCbHMFmKZI8QyV4hlnhDLfCGWBUIsC4VYFgmxLBZiWSLEslSIZZkQy3IhlhVCLCuFWFYJsawWYlkjxLJWiGWdEMt6IZZ0LbMExJAiDceLSMM90IpJ22TqOqThHnIZ0g6gnNBwD756pB1k6vqkHUw1/sU9FktIwz0gQ9Jwj8pS0nAPzTLScI/PBqThHqQNScM9UhuRhnu4NiYN95htQhrugduUNNyjtxlpuIdwc9Jwj+MWpOEezC1Jwz2iW5GGe1i3Jg332C4nDfcAb0Ma7lHeljTcQ70dabtN3Z60E03dgbSTTF1B2smm7kjaKabuRNqppu5M2mmm7kLa6abuStoZpu5G2pmm7k7aWabuQdrZpu5J2jmm7kXauabuTdp5pu5D2vmm7kvaBabuR9qFpu5P2kWmriTtYlNXkXaJqbOkXWrqAaRdZuqBpF1u6kGkXWHqwaRdaeohpF1l6qGkXW3qYaRdY+rhpF1r6hGkXWfqkaRdb+pRpN1g6tGk3WjqMaTdZOocaTebeixpt5h6HGm3mno8abeZegJpt5t6Iml3mHoSaXeaejJpd5l6Cml3m3oqafeYehpp95p6Omn3mXoGafebeiZpD5h6FmkPmno2aQ+Zeg5pD5t6LmmPmHoeaY+aej5pj5l6AWmPm3ohaU+YehFpT5p6MWlPmXoJaU+beilpz5h6GWnPmno5ac+ZegVpz5t6JWkvmHoVaS+aejVpL5l6DWkvm3otaa+Yeh1pr5p6PWlYn3k9x/q8kTSsz5tIw/q8mTSszweQhvX5QNKwPh9EGtZnXq+xPh9CGtbnQ0nD+nwYaVift5CG9flw0rA+H0Ea1ucjScP6vJU0rM/bSMP6vJ00rM9HkYb1eQdpWJ+PJg3r807SsD4fQxrW52NJw/p8HGlYn48nDevzCaRhfd5FGtbn3aRhfT6RtApTn0Qa1ueTScP6fAppWJ9PJQ3r82mkYX0+nTSsz2eQhvX5TNKwPp9FWk9Tn00a1udzSMP6fC5pWJ/PIw3r8/mkYX2+gDSszxeShvX5ItKwPl9MGtbnS0jD+nwpaVifLyMN6/PlpGF9voI0rM9Xkob1+SrSsD5fTRrW52tIw/p8LWlYn68jDevz9aRhfb6BNKzPN5KWM/VNpGF9vpk0rM+3kIb1+VbSsD7fRhrW59tJw/p8B2lYn+8kDevzXaRNNfXdpGF9voc0rM/3kob1+T7SsD7fTxrW5wdIw/r8IGlYnx8iDevzw6RhfX6ENKzPj5KG9fkx0rA+P04a1ucnSMP6/CRpWJ+fIg3r89OkYX1+hjSsz8+ShvX5OdKwPj9PGtbnF0jD+vwiaWtM/RJpWJ9fJg3r8yukYX3Geh2tswsbVx/HY/l361cT2kHNrxHAO2f+rfx+W/41AvbJ0T68SojhFQGW9UIs64RY1gqxrBFiWS3EskqIZaUQywohluVCLMuEWJYKsSwRYlksxLJIiGWhEMsCIZb5QizzhFjmCrHMEWKZLcQyS4hlphDLDCGW6UIs04RYpgqxTBFimSzEMkmIZaIQywQhlvFCLOOEWMYKseSEWMYIsYwWYhklxDJSiGWEEMtwIZZhQixDhViGCLEMFmIZJMQyUIhlgBBLVoilSoilUoilvxBLPyGWvkIsfYRYegux9BJi6SnE0kOIpbsQSzchlq5CLF2EWDoLsXQSYukoxFIhxNJBiKW9EEs7IZa2QixthFjKhVhaC7G0EmJpKcTSQoiluRBLMyGWpkIsTYRYGguxNBJiaSjE0kCIpUyIpVSIJRRiKRFiCYRY6gux1BNiqSvEkhFiqSPEUizEUhRj4c+Tv0paUexncc/xjXa5s5HXhlTNLR3bz1G9kfpwk12WyogFn23fQD4H2PXJj9XmWD7swyskhk0OWcIEbwc+2SCWOdoKjTOzHOSA5cB9YDmIWA5xwHLwPrAcQiyHOWA5dB9YDiOWwx2wbNkHlsOJ5UgHLEfsA8uRxLLNLsuwiGXrPrBsI5btdlkqozaPstxm1MYO4kdWsId0/CjKtsMuR/45enuqZp9if4c733z+o/9C/qMTOI7+AfMfTb6212Bu/y/l3ySQ38X839v8Rwnk9/Pfqq+f/yk///3837v8tT3/A9I21zIL/x631R3LsDD1w8wD7tsDBfoWDC7n3Hf1re0xDGKZo63Q7xDMstMui7PfIY4hfmQFe0jHeQ05xi5Hfm7tTNXsU+wfQ74u1pC9zb9DIL9l33z+Y/9C/mMTOI79AfMfS74u5v/e5j9KIL+L+b+3+XcI5Pfz36qvn/8pP//3l/kfkHZwLbOExLDdHUv+d4ikeeDidwj4HCrQt2DY5JDlu/rW8nX72oDa30I+xzno22NjfYv946hvwbDTIUuY4M39cIRAP4Bh/Q/cDw58hgWxzNFW6PdUZjneLouz31NPIH5kBXtIx/k65QS7HPm5dXyqZp9i/wTydXGdsrf5dwjkd/Fa597m3ySQ389/q75+/qf8/Pfzf+/y+/n/fy+/gyz5a0bOEm2Frhk53y4H+Vw8Z+wmfmQFe0jH+Tljt12O/JzZlarZp9jfTb4unjN272X+HQL5Xby2tXsv8x8jkN/Pf6u+fv6n/PzfvZf5/fyv/fx/7fPfxTWj7dey+f7aRcRu+XqwqtB1KI8ftmIhljpCLBkhlrpCLPWEWOoLsQRCLCVCLKEQS6kQS5kQSwMhloZCLI2EWBoLsTQRYmkqxNJMiKW5EEsLIZaWQiythFhaC7GUC7G0EWJpK8TSToilvRBLByGWCiGWjkIsnYRYOguxdBFi6SrE0k2IpbsQSw8hlp5CLL2EWHoLsfQRYukrxNJPiKW/EEulEEuVEEtWiGWAEMtAIZZBQiyDhViGCLEMFWIZJsQyXIhlhBDLSCGWUUIso4VYxgix5IRYxgqxjBNiGS/EMkGIZaIQyyQhlslCLFOEWKYKsUwTYpkuxDJDiGWmEMssIZbZQixzhFjmCrHME2KZL8SyQIhloRDLIiGWxUIsS4RYlgqxLBNiWS7EskKIZaUQyyohltVCLGuEWNYKsawTYlkvxLJBiGWjEMsmIZbNQiwHCLEcKMRykBDLwUIshwixHCrEcpgQyxYhlsOFWI4QYjlSiGWrEMs2IZbtQixHCbHsEGI5WohlpxDLMUIsxwqxHCfEcrwQi8Pvd9tnlnQtswSpP/8uvICOF5G229TFpJ1o6jqknWTqDGknU05op5i6Hmmnmro+aadRjX9PN3UJaWeYOiTtTFOXknaWqctIO9vUDUg7x9QNSTvX1I1IO8/UjUk739RNSLvA1E1Ju9DUzUi7yNTNSbvY1C1Iu8TULUm71NStSLvM1K1Ju9zU5aRdYeo2pF1p6rakXWXqdqRdber2pF1j6g6kXWvqCtKuM3VH0q43dSfSbjB1Z9JuNHUX0m4ydVfSbjZ1N9JuMXV30m41dQ/SbjN1T9JuN3Uv0u4wdW/S7jR1H9LuMnVf0u42dT/S7jF1f9LuNXUlafeZuoq0+02dJe0BUw8g7UFTDyTtIVMPIu1hUw8m7RFTDyHtUVMPJe0xUw8j7XFTDyftCVOPIO1JU48k7SlTjyLtaVOPJu0ZU48h7VlT50h7ztRjSXve1ONIe8HU40l70dQTSHvJ1BNJe9nUk0h7xdSTSXvV1FNIe83UU0l73dTTSPuRqaeT9oapZ5D2Y1PPJO1NU88i7Semnk3aW6aeQ9pPTT2XtLdNPY+0n5l6PmnvmHoBaT839ULS3jX1ItLeM/Vi0n5h6iWk/dLUS0n7lamXkfa+qZeT9oGpV5D2oalXkvaRqVeR9rGpV5P2ianXkPapqdeS9pmp15H2uan5PjFfmHoTaV+a+njSvkp43Nem3knaN6ZeTxquAfiaAdcAu0nDNcCJpOEa4CTScA1wMmm4BjiFNFwDnEoargH4mgDXAKeThmuAM0jDNcCZpOEa4CzScA1wNmm4BjiHNFwDnEsargHOIw3XAOeThmuAC0jDNcCFpOEa4CLScA1wMWm4BriENFwDXEoargEuIw3XAJeThmuAK0jDNcCVpOEa4CrScA1wNWm4BriGtApTX0sargGuIw3XANeThmuAG0jDNcCNpOEa4CbScA1wM2m4BriFNFwD3EpaT1PfRhquAW4nDdcAd5CGa4A7ScM1wF2k4RrgbtJwDXAPabgGuJc0XAPcRxquAe4nDdcAD5CGa4AHScM1wEOk4RrgYdJwDfAIabgGeJQ0XAM8RhquAR4nDdcAT5CGa4AnScM1wFOk4RrgadJwDfAMaTlTP0sargGeIw3XAM+ThmuAF0jDNcCLpOEa4CXScA3wMmm4BniFNFwDvEraVFO/RhquAV4nDdcAPyIN1wBvkIZrgB+ThmuAN0nDNcBPSMM1wFuk4Rrgp6ThGuBt0nAN8DPScA3wDmm4Bvg5abgGeJc0XAO8RxquAX5BGq4BfkkargF+RRquAd4nDdcAH5CGa4APScM1wEek4RrgY9LWmPoT0nAN8ClpuAb4jDSsz5+Thr+Hf0Ea/i79JWm4BviKNPyd9mvS8PdSXBNEa/mG8urjeCy/RvBNQjuo+bUOeOfMv5Xfb8u/1sE+OdqHVwkxfC3AcoIQy/FCLMcJsRwrxHKMEMtOIZajhVh2CLEcJcSyXYhlmxDLViGWI4VYjhBiOVyIZYsQy2FCLIcKsRwixHKwEMtBQiwHCrEcIMSyWYhlkxDLRiGWDUIs64VY1gmxrBViWSPEslqIZZUQy0ohlhVCLMuFWJYJsSwVYlkixLJYiGWREMtCIZYFQizzhVjmCbHMFWKZI8QyW4hllhDLTCGWGUIs04VYpgmxTBVimSLEMlmIZZIQy0QhlglCLOOFWMYJsYwVYskJsYwRYhktxDJKiGWkEMsIIZbhQizDhFiGCrEMEWIZLMQySIhloBDLACGWrBBLlRBLpRBLfyGWfkIsfYVY+gix9BZi6SXE0lOIpYcQS3chlm5CLF2FWLoIsXQWYukkxNJRiKVCiKWDEEt7IZZ2QixthVjaCLGUC7G0FmJpJcTSUoilhRBLcyGWZkIsTYVYmgixNBZiaSTE0lCIpYEQS5kQS6kQSyjEUiLEEgix1BdiqSfEUleIJSPEUkeIpViIpSiBZZNdlsqk73KLxqNni2rPL+x6ro3a/NRyjqgfP09Vb7so16fUfy58P4v5fhHzjR7zJTHsIlb8bDE9Znp59ThU0Th8YpV9QH64PyZ2fNcOfEoow8fECW1wi2rOyeXVP4PHbqDMO62yV66N+vSjavT8a3LrTc3fP4jvUcJj+buSi4jvA7t8Bb8r+YMElmIhljpCLBkhlrpCLPWEWOoLsQRCLCVCLKEQS6kQS5kQSwMhloZCLI2EWBoLsTQRYmkqxNJMiKW5EEsLIZaWQiythFhaC7GUC7G0EWJpK8TSToilvRBLByGWCiGWjkIsnYRYOguxdDH/KrB0FWLpJsTSXYilhxBLTyGWXkIsvYVY+gix9BVi6SfE0l+IpVKIpUqIJSvEMkCIZaAQyyAhlsFCLEOEWIYKsQwTYhkuxDJCiGWkEMsoIZbRQixjhFhyQixjhVjGCbGMF2KZIMQyUYhlkhDLZCGWKUIsU4VYpgmxTBdimSHEMlOIZZYQy2whljlCLHOFWOYJscwXYlkgxLJQiGWREMtiIZYlQixLhViWCbEsF2JZIcSyUohllRDLaiGWNUIsa4VY1gmxrBdi2SDEslGIZZMQy2YhlgOEWA4UYjlIiOVgIZZDhFgOFWI5TIhlixDL4UIsRwixHCnEslWIZZsQy3YhlqOEWHYIsRwtxLJTiOUYIZZjhViOE2I5XojlBCGWD4VYPhJi+ViI5RMhlk+FWD4TYvlciOULIZYvhVi+EmL5WojlGyGWdC2zBMSQIg3Hi0h739TFpP3K1HVI+6WpM6T9gnJCe8/U9Uh719T1Sfs51fj3HVOXkPYzU4ekvW3qUtJ+auoy0t4ydQPSfmLqhqS9aepGpP3Y1I1Je8PUTUj7kambkva6qZuR9pqpm5P2qqlbkPaKqVuS9rKpW5H2kqlbk/aiqctJe8HUbUh73tRtSXvO1O1Ie9bU7Ul7xtQdSHva1BWkPWXqjqQ9aepOpD1h6s6kPW7qLqQ9ZuqupD1q6m6kPWLq7qQ9bOoepD1k6p6kPWjqXqQ9YOrepN1v6j6k3WfqvqTda+p+pN1j6v6k3W3qStLuMnUVaXeaOkvaHaYeQNrtph5I2m2mHkTaraYeTNotph5C2s2mHkraTaYeRtqNph5O2g2mHkHa9aYeSdp1ph5F2rWmHk3aNaYeQ9rVps6RdpWpx5J2panHkXaFqceTdrmpJ5B2maknknapqSeRdompJ5N2samnkHaRqaeSdqGpp5F2gamnk3a+qWeQdp6pZ5J2rqlnkXaOqWeTdrap55B2lqnnknamqeeRdoap55N2uqkXkHaaqReSdqqpF5F2iqkXk3ayqZeQdpKpl5J2oqmXkbbb1MtJ22XqFaT92tQrSfuNqVeR9ltTrybtd6ZeQ9rvTb2WtD+Yeh1pfzT1h6Rhfeb1HOvz+6Rhff4VaViff0ka1udfkIb1+T3SsD6/SxrWZ16vsT6/QxrW55+RhvX5bdKwPv+UNKzPb5GG9fknpGF9fpM0rM8/Jg3r8xukYX3+EWlYn18nDevza6RhfX6VNKzPr5CG9fll0rA+v0Qa1ucXScP6/AJpWJ+fJw3r83OkYX1+ljSsz8+QVmHqp0nD+vwUaVifnyQN6/MTpGF9fpw0rM+PkYb1+VHSsD4/QhrW54dJ62nqh0jD+vwgaVifHyAN6/P9pGF9vo80rM/3kob1+R7SsD7fTRrW57tIw/p8J2lYn+8gDevz7aRhfb6NNKzPt5KG9fkW0rA+30wa1uebSMP6fCNpWJ9vIA3r8/WkYX2+jjSsz9eShvX5GtJypr6aNKzPV5GG9flK0rA+X0Ea1ufLScP6fBlpWJ8vJQ3r8yWkYX2+mLSppr6INKzPF5KG9fkC0rA+n08a1ufzSMP6fC5pWJ/PIQ3r89mkYX0+izSsz2eShvX5DNKwPp9OGtbn00jD+nwqaVifTyEN6/PJpGF9Pok0rM8nkob1eTdpWJ93kYb1+dekYX3+DWlYn39L2hpT/440rM+/Jw3r8x9Iw3u2sF5H6+zCxtXH8Vj+3fqPCe2g5tcI4J0z/1Z+vy3/GgH75GgfXiXE8AcBlm+EWL4WYvlKiOVLIZYvhFg+F2L5TIjlUyGWT4RYPhZi+UiI5UMhlhOEWI4XYjlOiOVYIZZjhFh2CrEcLcSyQ4jlKCGW7UIs24RYtgqxHCnEcoQQy+FCLFuEWA4TYjlUiOUQIZaDhVgOEmI5UIjlACGWzUIsm4RYNgqxbBBiWS/Esk6IZa0QyxohltVCLKuEWFYKsawQYlkuxLJMiGWpEMsSIZbFQiyLhFgWCrEsEGKZL8QyT4hlrhDLHCGW2UIss4RYZgqxzBBimS7EMk2IZaoQyxQhlslCLJOEWCYKsUwQYhkvxDJOiGWsEEtOiGWMEMtoIZZRQiwjhVhGCLEMF2IZJsQyVIhliBDLYCGWQUIsA4VYBgixZIVYqoRYKoVY+gux9BNi6SvE0keIpbcQSy8hlp5CLD2EWLoLsXQTYukqxNJFiKWzEEsnIZaOQiwVQiwdhFjaC7G0E2JpK8TSRoilXIiltRBLKyGWlkIsLYRYmguxNBNiaSrE0kSIpbEQSyMhloZCLA2EWMqEWEqFWEIhlhIhlkCIpb4QSz0hlrpCLBkhljpCLMVCLEUxFj4ebfhOFnxnF3+vJ98j8bcO+H9HHDnah1dIDL93yBImeEfzaXJ5dT/G+ySgx/L3qhXF2qlnmH9jl3kIe0Se+L4s+ETbLqq/iXFFmX4de1wxaXPLq/thDfXDrlg/uMq2u0C2yPMku575P22emKre4H8Saaek/rw/T6T+PDnhcVyj7/h7AvHdgtyfp1nOliYftIt9ePG5dopDljDBm+eYq7Hl/JhPJ9E4QDuVmHq2qO4bbEXUNwda5kynam45quHFLMVCLHWEWDJCLHWFWOoJsdQXYgmEWEqEWEIhllIhljIhlgZCLA2FWBoJsTQWYmkixNJUiKWZEEtzIZYWQiwthVhaCbG0FmIpF2JpI8TSVoilnRBLeyGWDkIsFUIsHYVYOgmxdBZi6SLE0lWIpZsQS3chlh5CLD2FWHoJsfQWYukjxNJXiKWfEEt/IZZKIZYqIZasEMsAIZaBQiyDhFgGC7EMEWIZKsQyTIhluBDLCCGWkUIso4RYRguxjBFiyQmxjBViGSfEMl6IZYIQy0QhlklCLJOFWKYIsUwVYpkmxDJdiGWGEMtMIZZZQiyzhVjmCLHMFWKZJ8QyX4hlgRDLQiGWRUIsi4VYlgixLBViWSbEslyIZYUQy0ohllVCLKuFWNYIsawVYlknxLJeiGWDEMtGIZZNQiybhVgOEGJJ1zJLQAwp0nB8BWkHmXolaQebehVpuN/watJwP+Q1pOF+zWtJw/2k15GG+12vJw334+bPZON+4RtJw/3MN5GG+61vJg33gz+AtCJTc1/hc5cHkYbPPx5MGj6HeAhp+DzgoaThc3mHkYbPx20hLTD14aTh82JHkIa5dSRp+PzUVtLwOaZtpOHzROiLKMM/t60+jscW0c9sT2gHNc9teOfMv5Xfb8vPbfbJ0T68SohhmwDLAUIsm4VYNgmxbBRi2SDEsl6IZZ0Qy1ohljVCLKuFWFYJsawUYlkhxLJciGWZEMtSIZYlQiyLhVgWCbEsFGJZIMQyX4hlnhDLXCGWOUIss4VYZgmxzBRimSHEMl2IZZoQy1QhlilCLJOFWCYJsUwUYpkgxDJeiGWcEMtYIZacEMsYIZbRQiyjhFhGCrGMEGIZLsQyTIhlqBDLECGWwUIsg4RYBgqxDBBiyQqxVAmxVAqx9Bdi6SfE0leIpY8QS28hll5CLD2FWHoIsXQXYukmxNJViKWLEEtnIZZOQiwdhVgqhFg6CLG0F2JpJ8TSVogF31eswFIuxNJaiKWVEEtLIZYWQizNhViaCbE0FWJpIsTSWIilkRBLQyGWBkIsZUIspUIsoRBLiRBLIMRSX4ilnhBLXSGWjBBLHSGWYiGWohgLf850O2lFsZ+N5vx33U+0oYMsvOWohtd33U+0tlnqCLFkhFjqCrHUE2KpL8QSCLGUCLGEQiylQixlQiwNhFjStczyXd+LwcfxL35vLyGtcSxTpOF1j1LSihJ8sRY3Ig1rYmPSsDah3Wj/3s7Vx5sZvYh+Bq+PFZOG1+/qkNaS2oTG9z2MZ2pGGhibk4YsLUhD5pak4XWqVgm+PCfwMznzb+X32/Jzgn1ytA8v/j6JVgIsDYRYyoRYSoVYQiGWEiGWQIilvhBLPSGWukIsGSGWOkIsxUIsRQksLayyDBzM1yYpYuItRzXfw7q5VZbKyqjNZpbbjNpoTfzICvaQjjejbK3tcuTHvHmqZp9iv7U733z+8r+QvzyBo/wHzF/u8/v8Pr/P7/M7Wf/2Nn8zgfx+/lv19flTPr/P7/PvL/n9+mfV18//lM/v8/v8Pv/+kd+vf1Z9/fxP+fw+v8/v8+8f+f36Z9XXz/+Uz+/z+/w+//6R369/Vn39/E/5/D6/z+/z7x/5/fpn1dfP/5TP7/P7/D7//pHfr39Wff38T/n8Pr/P7/PvH/n9+mfV18//lM/v8/v8Pv/+kd+vf1Z9/fxP+fw+v8/v8+8f+e36bhgYxHyjrdD32zBLG6sse77fxsX4tiV+ZAV7SMd5fNva5ciPb5tUzT7Fflvy9fmt+vr8KZ/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+XM+v8/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/D6/z+/z+/wpn9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6rvj5/yuf3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9/pzP7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pr/P7/P7/D6/z+/z+/w+v8/v8/v8Pn/K5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9+qr8+f8vl9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5fX6f3+f3+X1+n9/n9/l9fp/f5/f5ff4fNn9Ix4uIpY0DllSMJZXQL9iKhVjqCLFkhFjqCrHUE2KpL8QSCLGUCLGEQiylQixlQiwNhFgaCrE0EmJpLMTSRIilqRBLMyGW5kIsLYRYWgqxtBJiaS3EUi7Ekq5lloAYUqTheBFp+F2zmLR2pq5DWntTZ0jrQDmhVZi6HmkdTV2ftE6mbkJaZ1M3Jq2LqRuR1tXUDUnrZuqmpHU3dRlpPUzdgLSepm5JWi9TNycN/cb9jH5rSxr6rR1p6Lf2pKHfOpCGfqsgDf3WkTT87tCJNFzDdyYN87ILabim7Uoa+qgbaeij7qShz3uQhrHpSRrGEP0Y5W/atfo4HstzsVdCO6j5nIJ3zvxb+f22/DnFPjnah1cJMfQUYCkXYmktxNJKiKWlEEsLIZbmQizNhFiaCrE0EWJpLMTSSIiloRBLAyGWMiGWUiGWUIilRIglEGKpL8RST4ilrhBLRoiljhBLsRBLUYwloOO9SCuK/Ww9w13PLneWf99PET9vOar5b6b17bJU8usH/HfiErs++bEKYvmwD6+QGOo7ZAkTvB34ZINY5mgrNM7MUmqXZQC//rM3LPy3zjK7LJUu5nHURgPiR9Yy2sdxnlsN7HLk53lZqmafYp//TurzW/Xdr/Lza6xBLbPwc2HojmVAmEqeB5Z9skEsc7QVep5jlkaWM/Nr5HvDwu8XaGyXJf+c28Rym1EbTYkfWcEe0nH+m39Tuxz5ed44VbNPsc9/3/f5rfruV/n571BltczCz4UN3bHkn3N/iHnAfYu2o99F/9S52rOFZc+on/F6fbTtIgZ+v4gL3+Yx3+KYbzrW37uIFT9bTI+5s0t1n/0b9VlLu+z5tbFFquZWaD3i97pYfu99fm1stQ8s/P6Scrsszn4f4ff0IyvYQzru+n3I5amafYr9NuTr81v13a/yB6S5fq/dX2IJicHh+9vya2PSPLDskw1imaNtb963FbG0s5w5Ymm7DyztiKW9XZb8c24Hy21GbVQQP7KCPaTj/H61Crsc+XnePlWzT7FfQb4+v1Xf/Sp/QFp5LbPwc2Fbdyz559ykeeDi9xH48O8jA7tUe3a27Bn1c8dU9baLGDqn3Pp2ivlmYr7pWH/vIlb8bDE9Zjr9PjLC1CWxHND4vaTQ8F7SMtK6mboFaXgvaTm10SPGzu/7ZC/83Y7ft9rb1Py+1T6m5vetxv/OF2nxv1dGGv6eyn8jRN/2Jg39AS/83RCPyZl/K7/fluU82Aqt38zYK8ZYl7Ja4ss/1/SKscTfxxsSQx13LMPCBG8HPtkgljnaCo1Job9BR3x97fLlx6RHjAX78OK+yjhkCRO8HfhUJmVun+Dbz4Fv35gv+hNeaarrfsd4RHql5b6PfPubtjIxDngV02M2mSfbMsNTZZdnQIq8imh84BNtA6jGcwV+Jlo/srHHRZwDLfdbnAP+A0kbnMA5gDgHxR4XcQ6xy5mNc4BzCGnDEjgHE+fQ2OOi+YA+3kbXBLfSNQEey68bjLCbLf976/BUza3Qc+wIYhlllyV/jo+m9nPkwb5j7PpWsW/a/AcP6MVUn4KLJXpctGG8wByN4ciEx3E9PPYzIR0f6TjzKOLI0T68ovm4k7KOTODm3/9wHOdkNLcwbjyHRzrIMiJVM8uIGDO/9jXcHUv+97C4dwlp/Puo5fMnfy7zGEVboXN5FLFYnl+VaWoL5/KYBN+xdn2r2BfnctyjmOpraH6PrS6/HS8wR2M4OuFxXMfP9ZCOj3acmZ9TcrQPr+hcvpCyjk7g5nMZx7FuRXML48ZzeLSDLN/1vDSa+Mpj7A5Y8udy3JvXaFfXRJwfYzKQxgHaKGLi118sn8v538N4vkRboeeVMcSai/Wf63Me7WIfXjyni9yx5H83jns78Mly32IrNCbwj35uXOx4xDfeLl9+TMbFWLAPL+6rYocsYYK3A5/KpMyNE3wnOPAdH/NFf8IrTXXd7xgPV78bTzRtZWIc/LsxHvPKD/C7MbyKaHz4d+PJVOO5Aj8TXQdMij3O1TrAHPDn342nJnBOJs4psce5+t14agIn/248PYFzKnFOiz0umg/o45/T78YNu1b/DB7Lr43PoJz4d5bdvPlr7Jmpmluh591ZxDLHLkv+vJ9L7efIg33n2fWtYl9cY8MDejHVX9F157zq8tsxBHM0hrMTHsf1zNjPhHR8tuPMc4gjR/vwiubo+5R1dgL3DOLGcZyn0dyaRTWyzHaQZVaqZpZZMWZ+7/pMdyz5a+y4dwlp/HcuHl/8O9cyT5SZxznaCp3ffP7Nt8uSP78XUPs58mDfhXZ9q9gX5zc8oBdT/Z805xdWl9+OIZijMZyX8Diu58R+JqTj8xxnnk8cOdqHV3R+//13PJeBm88fHMf6Fs0tjBu/T9rl8zPanRtj5vdJz3HHkj+/494lqZrzF/9aPn+qeF2KtvrkO5/GZEGML9IWJvAtcsDHcz9H+/Diz20ucMgSJnjzNZera1zOj2txfq0DGp+D/N53y+/rz/9e3SRVcyv0/M+fgcD70PnzGM0t91n8vfm51J+//z0khkbOWAYODr/DGxu/ztLMqnfh7+drlsBSLMRSR4glI8RSV4ilnhBLfSGWQIilRIglFGIpFWIpE2JpIMTSUIilkRBLYyGWJkIsTYVY0rXMEqSSv3cZx4tI4+8Vxr/8PmloLWM5+TOUpaThs5L8HRP4WzR/BwU+a8TfnYz3//P3LhclZMO1KrPjmrEFabh24+9TxjVUK9JwLdOaNFxT8PvD0Uf82TX0Edgjz993S/1ZzqKEnNwOap47lj9rWuNeT/ibcJtYTv5+4TYCLE2FWJoIsTQWYmkkxNJQiKWBEEuZEEupEEsoxFIixBIIsdQXYqknxFJXiCUjxFJHiKVYiKUogcXFfU35u1Xi9zDle0bwdyxY/r6Z/N+GmaOCfPm7ZSx/R0/+bzbNE/Lz71Twb+5wHPh3O7QdnRcP0N+rLH/Hw1oHn9vOjyN/hnwX5aqg/nPh2yHm2y7my39rwmebwYqfLabHPNO1ehyeoPdqoT2+B1HHmBf/Loxj+KxvJwfZ4QEG9Hknyt6JslfQz7Si7HjMi5T99W7VP9fFLnv+ozX4/HYRcXch1m52PfPv8cNnwVPUfmfS+DOheE7Az/Dn0XsQp4vnJuaAP38vV68ETv4+656xxzn4rHl+/jFHmnzhVUyPeZvm1ms0t1yMc+/Un/dfN+oLy58n3ufP3fPnePvbZcm/96vfPrD0JxbL75uudHXtwu9zjn9GOaTj/J1wlt+Dnb+eq0zV7FPsV5Gvz2/Vd7/KH5DWp5ZZ+Hs1+rljyb9X7oeYB9y3fO38d3TtnLWcLWpzkOUc0djx9wfsolyDqP9c+A6M+WZjvunYGO4iVvxsMT3mzW7V4/CvdO2M9vgccPG8wJ/XgCf/TovvMhhCHC6u34YmcPDvlvAfShwuroOGJXB0I4749zlEHMMtcwQxjmgrdD3i8HPtWf4s/96wOPxcbpY/i7w3LPHvlLDNMmYfWHLEMs4By9h9YBlHLJY/k5hnGb8PLPCPfg6fIeNza5JdvhqfS0S72IdXSAyDHbKECd7cDyME+gEMQ2qxH0YJ9AMYhtZiP4wR6AcwtKzFfhgr0A9g6F6L/TBeoB/AUPQD90MJafx+vcl2vYewJ7/uyp8Bn2I5b9TmNKttDhwczZupqZpboXV5GuWbYTdf/vco/mxpjjzY1/JnuKvYF59vhAf0Yqqnd0t9u/HnZjHvwMyfS+fHcT019jP8+dfpjjPPII4c7cMr+t0zR1mnJ3DzOY/jU4jbxe+E04gD/i3I0+683HOOcPZoK3SO8PcOWB63/DnCn3vOkQf7Wv5ugSr2xTkS/4xrMdWraN7w56cxb8AcnSMzEx7HdfwcCun4TMeZv+tz8fCKzpH5lHVmAvc04sZx/v3BxTnC5zb8+RyxOy/3nCP+ezD27XswjqB583/9ezA2Uda9/R4M168t8rkNfz5H7M7LPecIZ4+2QueIw8/h58+R+dR+jjzYd4HlfmdfnCPwgF5M9Sk0bxZUl9/Om6TvEODHcR0/h0I6PtdxZj5Xc7QPr/x3q1LWuQncvP7hOL/u4OIc4XMb/nyO2J2Xe84Rzh5thc4R/g4Qy+OWP0f4ex9yqT//bohId/k9EDhH4AG9mOrLad4sqi6/nTdgjs6R+QmP4zp+DoV0fL7jzHyu5mifv3/iHMo6P4Gb1z8cd/3+x6TvfeFzxO683HOOcPZoK3SOOPyekPw5spjaz5EH+y6x3O/si3MEHtCLqb6L5s2S6vLbeQPm6BxZmPA4ruPnUEjHFzrOzOdqjvbhFZ0j11PWhQncvP7hOL9e6eIc4XMb/nyO2J2Xe84Rzh5thc6RRcRiedzy58hSaj9HHuy7zHK/sy/OEXhAL6b6WZo3y6rLb+cNmKNzZHHC47iOn0MhHV/sODOfqznah1d0jjxEWRcncPP6h+N4LTuaWxg3fo15sYMs33W+Lya+JjF2+yx7vtsn7s3vP42/z9nFcwj3BV5v588/Q+PrhQfovTPg5veX8lzBe4X4Pa88p9vGfiZqc2nscVH25Xaz59+HyhzRVui5bDmxrLTLkn8uW0Xt58iDfVfb9a1iXzyXwQN6MdWf0vm9urr8dg6AORrDFQmP43pZ7GdCOr7CceaVxJGjfXhFc/xdyroigZvfz4njvB65OFeXEwf8+VwFB7+PzfJczfffilj/YZ/Hsk+svxywDAgTvPl9l+iv+PsuQ6scGwZGbZZZbjPKgc84Yyv0/AT/+qnqz7pu3rht1pZtG7em6efR5nvm3xJqo4jqYvqZOglaJkGrm6DVi2lgxBZQHdLPlcQ4o8fhs/D8XSFgxrF6qT/vJ6uTPxUzQF1ENR/PmLR4s978bVuOXLt5Y8XWQ7Zsq6isOOx//7/2kEO27Ni4oV8FH9tacej2rdsqtm5be+S2ik1Hbjm0oqrf/wetGq5C4ecGAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "mint", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "transfer", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "recipient", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + } + ], + "debug": { + "debugSymbols": [ + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7", + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7", + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7", + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7", + "eJyrVsrJT04syczPK1ayqq6tBQAz9wY7" + ], + "fileMap": {} + } +} diff --git a/yarn-project/boxes/private-token/src/assets/aztec_logo.svg b/yarn-project/boxes/private-token/src/assets/aztec_logo.svg new file mode 100644 index 000000000000..64a3648326da --- /dev/null +++ b/yarn-project/boxes/private-token/src/assets/aztec_logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/yarn-project/boxes/private-token/src/assets/favicon.ico b/yarn-project/boxes/private-token/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1c85cef482e601f1fe5e291df4e97a3aef958676 GIT binary patch literal 4286 zcmcJRv2KGf5QdEy7&=g?Qb*#kQ<4XWRK_Ig17!$p1Hj$6IXcY0Os7Ar&J z%yag+Ws^k_r?_#M-5c9%UC6S@R*$ivC6tCK>`)p8*eCL99>hI?4eM(k#@MJ{C=FBC zp)^R?zBRb8eQA)eciHlb`s@pASjyqllTvo4*Jo>RW&6-Dmpw-Vv2(DikA8Cu z^uuy)E3Wvr5`~{C6m+4|1HBSaVqz)1=1Ki7{1dOc5Cq73Mdt zjz3BLeo31}lO57}vq`E$78gw#MRiidRa_+n&!U>=JmYh`hSzco$8rwN#W~yD%wQHX GiTwx67ZB?J literal 0 HcmV?d00001 diff --git a/yarn-project/boxes/private-token/src/config.ts b/yarn-project/boxes/private-token/src/config.ts new file mode 100644 index 000000000000..264052da3a4f --- /dev/null +++ b/yarn-project/boxes/private-token/src/config.ts @@ -0,0 +1,14 @@ +import { AztecRPC, createAztecRpcClient } from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { PrivateTokenContractAbi } from './artifacts/PrivateToken.js'; // update this if using a different contract + +export const contractAbi: ContractAbi = PrivateTokenContractAbi; + +const SANDBOX_URL: string = process.env.SANDBOX_URL || 'http://localhost:8080'; +export const rpcClient: AztecRPC = createAztecRpcClient(SANDBOX_URL); + +export const CONTRACT_ADDRESS_PARAM_NAMES = ['owner', 'contract_address', 'recipient']; +export const FILTERED_FUNCTION_NAMES = ['compute_note_hash_and_nullifier']; + +// ALICE smart contract wallet public key, available on sandbox by default +export const DEFAULT_PUBLIC_ADDRESS: string = '0x0c8a6673d7676cc80aaebe7fa7504cf51daa90ba906861bfad70a58a98bf5a7d'; diff --git a/yarn-project/boxes/private-token/src/contracts/Nargo.toml b/yarn-project/boxes/private-token/src/contracts/Nargo.toml new file mode 100644 index 000000000000..a5e601e16207 --- /dev/null +++ b/yarn-project/boxes/private-token/src/contracts/Nargo.toml @@ -0,0 +1,9 @@ +[package] +name = "private_token_contract" +authors = [""] +compiler_version = "0.1" +type = "contract" + +[dependencies] +aztec = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/noir-aztec" } +value_note = { git="https://github.com/AztecProtocol/aztec-packages", tag="master", directory="yarn-project/noir-libs/value-note" } \ No newline at end of file diff --git a/yarn-project/boxes/private-token/src/contracts/src/interface.nr b/yarn-project/boxes/private-token/src/contracts/src/interface.nr new file mode 100644 index 000000000000..1eee266adcb8 --- /dev/null +++ b/yarn-project/boxes/private-token/src/contracts/src/interface.nr @@ -0,0 +1,67 @@ +/* Autogenerated file, do not edit! */ + +use dep::std; +use dep::aztec::context::{ PrivateContext, PublicContext }; +use dep::aztec::constants_gen::RETURN_VALUES_LENGTH; + + + +// Interface for calling PrivateToken functions from a private context +struct PrivateTokenPrivateContextInterface { + address: Field, +} + +impl PrivateTokenPrivateContextInterface { + fn at(address: Field) -> Self { + Self { + address, + } + } + + fn mint( + self, + context: &mut PrivateContext, + amount: Field, + owner: Field + ) -> [Field; RETURN_VALUES_LENGTH] { + let mut serialised_args = [0; 2]; + serialised_args[0] = amount; + serialised_args[1] = owner; + + context.call_private_function(self.address, 0x1535439c, serialised_args) + } + + + fn transfer( + self, + context: &mut PrivateContext, + amount: Field, + recipient: Field + ) -> [Field; RETURN_VALUES_LENGTH] { + let mut serialised_args = [0; 2]; + serialised_args[0] = amount; + serialised_args[1] = recipient; + + context.call_private_function(self.address, 0xc0888d22, serialised_args) + } + +} + + + + +// Interface for calling PrivateToken functions from a public context +struct PrivateTokenPublicContextInterface { + address: Field, +} + +impl PrivateTokenPublicContextInterface { + fn at(address: Field) -> Self { + Self { + address, + } + } + +} + + diff --git a/yarn-project/boxes/private-token/src/contracts/src/main.nr b/yarn-project/boxes/private-token/src/contracts/src/main.nr new file mode 100644 index 000000000000..292d2e7e704d --- /dev/null +++ b/yarn-project/boxes/private-token/src/contracts/src/main.nr @@ -0,0 +1,101 @@ +contract PrivateToken { + use dep::std::option::Option; + use dep::value_note::{ + balance_utils, + utils::{increment, decrement}, + value_note::{VALUE_NOTE_LEN, ValueNote, ValueNoteMethods}, + }; + use dep::aztec::{ + context::{PrivateContext, PublicContext, Context}, + note::{ + note_header::NoteHeader, + utils as note_utils, + }, + state_vars::{map::Map, set::Set}, + }; + + struct Storage { + // maps an aztec address to its balance + balances: Map>, + } + + impl Storage { + fn init(context: Context) -> pub Self { + Storage { + balances: Map::new( + context, + 1, // Storage slot + |context, slot| { + Set::new(context, slot, ValueNoteMethods) + }, + ), + } + } + } + + // Constructs the contract and sets `initial_supply` which is fully owned by `owner`. + #[aztec(private)] + fn constructor( + initial_supply: Field, + owner: Field + ) { + let storage = Storage::init(Context::private(&mut context)); + // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. + let owner_balance = storage.balances.at(owner); + if (initial_supply != 0) { + increment(owner_balance, initial_supply, owner); + } + } + + // Mints `amount` of tokens to `owner`. + #[aztec(private)] + fn mint( + amount: Field, + owner: Field + ) { + let storage = Storage::init(Context::private(&mut context)); + + // Insert new note to a set of user notes and emit the newly created encrypted note preimage via oracle call. + let owner_balance = storage.balances.at(owner); + increment(owner_balance, amount, owner); + } + + // Transfers `amount` of tokens from msg_sender to a `recipient`. + #[aztec(private)] + fn transfer( + amount: Field, + recipient: Field, + ) { + let storage = Storage::init(Context::private(&mut context)); + let sender = context.msg_sender(); + + // Pick from the set of sender's notes to spend amount. + let sender_balance = storage.balances.at(sender); + decrement(sender_balance, amount, sender); + + // Creates new note for the recipient. + let recipient_balance = storage.balances.at(recipient); + increment(recipient_balance, amount, recipient); + } + + // Helper function to get the balance of a user ("unconstrained" is a Noir alternative of Solidity's "view" function). + unconstrained fn getBalance( + owner: Field, + ) -> Field { + let storage = Storage::init(Context::none()); + + // Get the set of notes owned by the user. + let owner_balance = storage.balances.at(owner); + + // Return the sum of all notes in the set. + balance_utils::get_balance(owner_balance) + } + + // Computes note hash and nullifier. + // Note 1: Needs to be defined by every contract producing logs. + // Note 2: Having it in all the contracts gives us the ability to compute the note hash and nullifier differently for different kind of notes. + unconstrained fn compute_note_hash_and_nullifier(contract_address: Field, nonce: Field, storage_slot: Field, preimage: [Field; VALUE_NOTE_LEN]) -> [Field; 4] { + let note_header = NoteHeader { contract_address, nonce, storage_slot }; + note_utils::compute_note_hash_and_nullifier(ValueNoteMethods, note_header, preimage) + } +} \ No newline at end of file diff --git a/yarn-project/boxes/private-token/src/scripts/call_contract_function.ts b/yarn-project/boxes/private-token/src/scripts/call_contract_function.ts new file mode 100644 index 000000000000..04fa7209f235 --- /dev/null +++ b/yarn-project/boxes/private-token/src/scripts/call_contract_function.ts @@ -0,0 +1,30 @@ +import { AztecAddress, AztecRPC, CompleteAddress, Contract } from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { getWallet } from './util.js'; + +export async function callContractFunction( + address: AztecAddress, + abi: ContractAbi, + functionName: string, + typedArgs: any[], // for the exposed functions, this is an array of field elements Fr[] + rpc: AztecRPC, + wallet: CompleteAddress, +) { + // selectedWallet is how we specify the "sender" of the transaction + const selectedWallet = await getWallet(wallet, rpc); + + // TODO: switch to the generated typescript class? + const contract = await Contract.at(address, abi, selectedWallet); + + const returnVal = await contract.methods[functionName](...typedArgs) + .send() + .wait(); + + if (returnVal.error) { + throw new Error(returnVal.error); + } + + return `Transaction (${returnVal.txHash}) ${returnVal.status} on block ${ + returnVal.blockNumber + } (hash ${returnVal.blockHash?.toString('hex')})!`; +} diff --git a/yarn-project/boxes/private-token/src/scripts/deploy_contract.ts b/yarn-project/boxes/private-token/src/scripts/deploy_contract.ts new file mode 100644 index 000000000000..2285937d2e14 --- /dev/null +++ b/yarn-project/boxes/private-token/src/scripts/deploy_contract.ts @@ -0,0 +1,22 @@ +import { AztecAddress, CompleteAddress, DeployMethod, Fr } from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { AztecRPC } from '@aztec/types'; + +export async function deployContract( + activeWallet: CompleteAddress, + contractAbi: ContractAbi, + typedArgs: Fr[], // encode prior to passing in + salt: Fr, + client: AztecRPC, +): Promise { + const tx = new DeployMethod(activeWallet.publicKey, client, contractAbi, typedArgs).send({ + contractAddressSalt: salt, + }); + await tx.wait(); + const receipt = await tx.getReceipt(); + if (receipt.contractAddress) { + return receipt.contractAddress; + } else { + throw new Error(`Contract not deployed (${receipt.toJSON()})`); + } +} diff --git a/yarn-project/boxes/private-token/src/scripts/index.ts b/yarn-project/boxes/private-token/src/scripts/index.ts new file mode 100644 index 000000000000..a5d6bcf1a9b2 --- /dev/null +++ b/yarn-project/boxes/private-token/src/scripts/index.ts @@ -0,0 +1,4 @@ +export * from './call_contract_function.js'; +export * from './deploy_contract.js'; +export { getWallet } from './util.js'; +export * from './view_contract_function.js'; diff --git a/yarn-project/boxes/private-token/src/scripts/util.ts b/yarn-project/boxes/private-token/src/scripts/util.ts new file mode 100644 index 000000000000..b5f8f09d0d01 --- /dev/null +++ b/yarn-project/boxes/private-token/src/scripts/util.ts @@ -0,0 +1,37 @@ +import { AccountWallet, Fr, getSandboxAccountsWallets } from '@aztec/aztec.js'; +import { FunctionAbi, encodeArguments } from '@aztec/foundation/abi'; +import { AztecRPC, CompleteAddress } from '@aztec/types'; + +export function convertArgs(functionAbi: FunctionAbi, args: any): Fr[] { + const untypedArgs = functionAbi.parameters.map(param => { + switch (param.type.kind) { + case 'field': + // hack: addresses are stored as string in the form to avoid bigint compatibility issues with formik + // convert those back to bigints before turning into Fr + return BigInt(args[param.name]); + default: + // they are all fields in the privatetoken contract, need more testing on other types + return args[param.name]; + } + }); + + const typedArgs = encodeArguments(functionAbi, untypedArgs); + return typedArgs; +} + +/** + * terminology is confusing, but the `account` points to a smart contract's public key information + * while the "wallet" has the account's private key and is used to sign transactions + * we need the "wallet" to actually submit transactions using the "account" identity + * @param account + * @param rpc + * @returns + */ +export async function getWallet(account: CompleteAddress, rpc: AztecRPC): Promise { + const accountWallets: AccountWallet[] = await getSandboxAccountsWallets(rpc); + const selectedWallet: AccountWallet = accountWallets.find(w => w.getAddress().equals(account.address))!; + if (!selectedWallet) { + throw new Error(`Wallet for account ${account.address.toShortString()} not found in the RPC server.`); + } + return selectedWallet; +} diff --git a/yarn-project/boxes/private-token/src/scripts/view_contract_function.ts b/yarn-project/boxes/private-token/src/scripts/view_contract_function.ts new file mode 100644 index 000000000000..2d0e47d2d2ce --- /dev/null +++ b/yarn-project/boxes/private-token/src/scripts/view_contract_function.ts @@ -0,0 +1,20 @@ +import { AztecAddress, AztecRPC, CompleteAddress, Contract } from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { getWallet } from './util.js'; + +export async function viewContractFunction( + address: AztecAddress, + abi: ContractAbi, + functionName: string, + typedArgs: any[], + rpc: AztecRPC, + wallet: CompleteAddress, +) { + // we specify the account that is calling the view function by passing in the wallet to the Contract + const selectedWallet = await getWallet(wallet, rpc); + const contract = await Contract.at(address, abi, selectedWallet); + + // TODO: see if we can remove the {from: wallet.address}? + const viewResult = await contract.methods[functionName](...typedArgs).view({ from: wallet.address }); + return viewResult; +} diff --git a/yarn-project/boxes/private-token/src/tests/privatetoken.frontend.test.ts b/yarn-project/boxes/private-token/src/tests/privatetoken.frontend.test.ts new file mode 100644 index 000000000000..fa067e3e25a2 --- /dev/null +++ b/yarn-project/boxes/private-token/src/tests/privatetoken.frontend.test.ts @@ -0,0 +1,144 @@ +import { + AccountWallet, + AztecAddress, + AztecRPC, + CompleteAddress, + Contract, + Fr, + Wallet, + createAztecRpcClient, + makeFetch, + waitForSandbox, +} from '@aztec/aztec.js'; +import { FunctionAbi } from '@aztec/foundation/abi'; +import { createDebugLogger } from '@aztec/foundation/log'; +import { PrivateTokenContract } from '../artifacts/PrivateToken.js'; +import { rpcClient } from '../config.js'; +import { callContractFunction, deployContract, getWallet, viewContractFunction } from '../scripts/index.js'; +import { convertArgs } from '../scripts/util.js'; + +const logger = createDebugLogger('aztec:http-rpc-client'); + +const INITIAL_BALANCE = 444n; +const TRANSFER_AMOUNT = 44n; +const MINT_AMOUNT = 11n; + +// assumes sandbox is running locally, which this script does not trigger +// as well as anvil. anvil can be started with yarn test:integration +const setupSandbox = async () => { + const { SANDBOX_URL = 'http://localhost:8080' } = process.env; + const aztecRpc = createAztecRpcClient(SANDBOX_URL, makeFetch([1, 2, 3], true)); + await waitForSandbox(aztecRpc); + return aztecRpc; +}; + +const getFunctionAbi = (contractAbi: any, functionName: string) => { + const functionAbi = contractAbi.functions.find((f: FunctionAbi) => f.name === functionName); + if (!functionAbi) throw new Error(`Function ${functionName} not found in abi`); + return functionAbi; +}; + +async function deployZKContract(owner: CompleteAddress, wallet: Wallet, rpcClient: AztecRPC) { + logger('Deploying PrivateToken contract...'); + const constructorArgs = { + // eslint-disable-next-line camelcase + initial_supply: INITIAL_BALANCE, + owner: owner.address, + }; + const constructorAbi = getFunctionAbi(PrivateTokenContract.abi, 'constructor'); + const typedArgs = convertArgs(constructorAbi, constructorArgs); + + const contractAddress = await deployContract(owner, PrivateTokenContract.abi, typedArgs, Fr.random(), rpcClient); + + logger(`L2 contract deployed at ${contractAddress}`); + const contract = await PrivateTokenContract.at(contractAddress, wallet); + return contract; +} + +async function getBalance(contractAddress: AztecAddress, privateTokenContract: Contract, owner: CompleteAddress) { + const getBalanceAbi = getFunctionAbi(PrivateTokenContract.abi, 'getBalance'); + const viewArgs = { owner: owner.address }; + const typedArgs = convertArgs(getBalanceAbi, viewArgs); + + return await viewContractFunction( + contractAddress, + privateTokenContract.abi, + 'getBalance', + typedArgs, + rpcClient, + owner, + ); +} + +async function mint( + contractAddress: AztecAddress, + privateTokenContract: Contract, + from: CompleteAddress, + to: CompleteAddress, + amount: bigint, +) { + const getBalanceAbi = getFunctionAbi(PrivateTokenContract.abi, 'mint'); + const mintArgs = { amount, owner: to.address }; + const typedArgs = convertArgs(getBalanceAbi, mintArgs); + + return await callContractFunction(contractAddress, privateTokenContract.abi, 'mint', typedArgs, rpcClient, from); +} + +async function transfer( + contractAddress: AztecAddress, + privateTokenContract: Contract, + from: CompleteAddress, + to: CompleteAddress, + amount: bigint, +) { + const getBalanceAbi = getFunctionAbi(PrivateTokenContract.abi, 'transfer'); + const transferArgs = { amount, recipient: to.address }; + const typedArgs = convertArgs(getBalanceAbi, transferArgs); + + return await callContractFunction(contractAddress, privateTokenContract.abi, 'transfer', typedArgs, rpcClient, from); +} + +describe('ZK Contract Tests', () => { + let wallet: AccountWallet; + let owner: CompleteAddress; + let account2: CompleteAddress; + let _account3: CompleteAddress; + let privateTokenContract: Contract; + let contractAddress: AztecAddress; + let rpcClient: AztecRPC; + + beforeAll(async () => { + rpcClient = await setupSandbox(); + const accounts = await rpcClient.getAccounts(); + [owner, account2, _account3] = accounts; + + wallet = await getWallet(owner, rpcClient); + + privateTokenContract = await deployZKContract(owner, wallet, rpcClient); + contractAddress = privateTokenContract.address; + }, 60000); + + test('Initial balance is correct', async () => { + const balance = await getBalance(contractAddress, privateTokenContract, owner); + expect(balance).toEqual(INITIAL_BALANCE); + }, 40000); + + test('Balance after mint is correct', async () => { + const mintTx = mint(contractAddress, privateTokenContract, owner, owner, MINT_AMOUNT); + await mintTx; + + const balanceAfterMint = await getBalance(contractAddress, privateTokenContract, owner); + expect(balanceAfterMint).toEqual(INITIAL_BALANCE + MINT_AMOUNT); + }, 40000); + + test('Balance after transfer is correct for both sender and receiver', async () => { + const transferTx = transfer(contractAddress, privateTokenContract, owner, account2, TRANSFER_AMOUNT); + await transferTx; + + const balanceAfterTransfer = await getBalance(contractAddress, privateTokenContract, owner); + expect(balanceAfterTransfer).toEqual(INITIAL_BALANCE + MINT_AMOUNT - TRANSFER_AMOUNT); + + const receiverBalance = await getBalance(contractAddress, privateTokenContract, account2); + expect(receiverBalance).toEqual(TRANSFER_AMOUNT); + }, 40000); +}); diff --git a/yarn-project/boxes/private-token/tailwind.config.cjs b/yarn-project/boxes/private-token/tailwind.config.cjs new file mode 100644 index 000000000000..25a9d03b9aca --- /dev/null +++ b/yarn-project/boxes/private-token/tailwind.config.cjs @@ -0,0 +1,39 @@ +module.exports = { + content: ['./src/app/**/*.{html,tsx}'], + theme: { + extend: { + colors: { + 'aztec-purple': '#646cff', + }, + animation: { + marquee: 'marquee 120s linear infinite', + marquee2: 'marquee2 120s linear infinite', + marquee3: 'marquee3 120s linear infinite', + marquee4: 'marquee4 120s linear infinite', + }, + keyframes: { + marquee: { + '0%': { transform: 'translateX(0%)' }, + '100%': { transform: 'translateX(-100%)' }, + }, + marquee2: { + '0%': { transform: 'translateX(100%)' }, + '100%': { transform: 'translateX(0%)' }, + }, + marquee3: { + '0%': { transform: 'translateX(-100%)' }, + '100%': { transform: 'translateX(0%)' }, + }, + marquee4: { + '0%': { transform: 'translateX(0%)' }, + '100%': { transform: 'translateX(100%)' }, + }, + }, + backgroundImage: { + 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', + 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', + }, + }, + }, + plugins: [], +}; diff --git a/yarn-project/boxes/private-token/tsconfig.dest.json b/yarn-project/boxes/private-token/tsconfig.dest.json new file mode 100644 index 000000000000..d388fae53372 --- /dev/null +++ b/yarn-project/boxes/private-token/tsconfig.dest.json @@ -0,0 +1,12 @@ +{ + "extends": ".", + "references": [ + { "path": "../../aztec.js" }, + { "path": "../../cli" }, + { "path": "../../foundation" }, + { "path": "../../noir-compiler" }, + { "path": "../../noir-contracts" }, + { "path": "../../types" } + ], + "exclude": ["src/**/*.test.ts"] +} diff --git a/yarn-project/boxes/private-token/tsconfig.json b/yarn-project/boxes/private-token/tsconfig.json new file mode 100644 index 000000000000..5d087f2521d2 --- /dev/null +++ b/yarn-project/boxes/private-token/tsconfig.json @@ -0,0 +1,52 @@ +{ + "compilerOptions": { + "rootDir": "src", + "outDir": "dest", + "tsBuildInfoFile": ".tsbuildinfo", + "target": "es2020", + "lib": [ + "esnext", + "dom", + "DOM.Iterable" + ], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "declaration": true, + "allowSyntheticDefaultImports": true, + "allowJs": true, + "esModuleInterop": true, + "downlevelIteration": true, + "inlineSourceMap": true, + "declarationMap": true, + "importHelpers": true, + "resolveJsonModule": true, + "composite": true, + "skipLibCheck": true, + "jsx": "react-jsx" + }, + "include": [ + "src", + "src/**/*.json" + ], + "references": [ + { + "path": "../../aztec.js" + }, + { + "path": "../../circuits.js" + }, + { + "path": "../../cli" + }, + { + "path": "../../foundation" + }, + { + "path": "../../noir-compiler" + }, + { + "path": "../../types" + } + ] +} diff --git a/yarn-project/boxes/private-token/webpack.config.js b/yarn-project/boxes/private-token/webpack.config.js new file mode 100644 index 000000000000..e65a4134d913 --- /dev/null +++ b/yarn-project/boxes/private-token/webpack.config.js @@ -0,0 +1,95 @@ +import CopyWebpackPlugin from 'copy-webpack-plugin'; +import { createRequire } from 'module'; +import { dirname, resolve } from 'path'; +import ResolveTypeScriptPlugin from 'resolve-typescript-plugin'; +import { fileURLToPath } from 'url'; +import webpack from 'webpack'; + +const require = createRequire(import.meta.url); + +export default (_, argv) => ({ + target: 'web', + mode: 'production', + devtool: false, + entry: { + main: './src/app/index.tsx', + }, + module: { + rules: [ + { + test: /\.tsx?$/, + use: [ + { + loader: 'ts-loader', + options: { + configFile: 'tsconfig.dest.json', + }, + }, + ], + }, + { + test: /\.css$/i, + use: ['style-loader', 'css-loader', 'postcss-loader'], + }, + ], + }, + output: { + path: resolve(dirname(fileURLToPath(import.meta.url)), './dest'), + filename: 'index.js', + }, + plugins: [ + new webpack.DefinePlugin({ + 'process.env': { + NODE_ENV: JSON.stringify(argv.mode || 'production'), + }, + }), + new webpack.ProvidePlugin({ Buffer: ['buffer', 'Buffer'] }), + new CopyWebpackPlugin({ + patterns: [ + { + from: `${dirname(require.resolve(`@aztec/circuits.js`)).replace( + /\/dest$/, + '', + )}/resources/aztec3-circuits.wasm`, + to: 'aztec3-circuits.wasm', + }, + { + from: './src/assets', + }, + { + from: './src/app/index.html', + to: 'index.html', + }, + ], + }), + ], + resolve: { + plugins: [new ResolveTypeScriptPlugin()], + alias: { + // All node specific code, wherever it's located, should be imported as below. + // Provides a clean and simple way to always strip out the node code for the web build. + './node/index.js': false, + }, + fallback: { + crypto: false, + os: false, + fs: false, + path: false, + url: false, + worker_threads: false, + events: require.resolve('events/'), + buffer: require.resolve('buffer/'), + util: require.resolve('util/'), + stream: require.resolve('stream-browserify'), + string_decoder: require.resolve('string_decoder/'), + tty: require.resolve('tty-browserify'), + }, + }, + devServer: { + port: 5173, + historyApiFallback: true, + client: { + overlay: false, + }, + }, +}); diff --git a/yarn-project/cli/package.json b/yarn-project/cli/package.json index fe7da02af0b3..8a9dce35fdf6 100644 --- a/yarn-project/cli/package.json +++ b/yarn-project/cli/package.json @@ -41,7 +41,9 @@ "@aztec/noir-contracts": "workspace:^", "@aztec/types": "workspace:^", "commander": "^9.0.0", + "jszip": "^3.10.1", "lodash.startcase": "^4.4.0", + "node-fetch": "^3.3.2", "semver": "^7.5.4", "tslib": "^2.4.0", "viem": "^1.2.5" diff --git a/yarn-project/cli/src/index.ts b/yarn-project/cli/src/index.ts index a597a07e21fc..90bdaf8eb237 100644 --- a/yarn-project/cli/src/index.ts +++ b/yarn-project/cli/src/index.ts @@ -24,6 +24,7 @@ import { mnemonicToAccount } from 'viem/accounts'; import { createCompatibleClient } from './client.js'; import { encodeArgs, parseStructString } from './encoding.js'; +import { unboxContract } from './unbox.js'; import { deployAztecContracts, getAbiFunction, @@ -474,6 +475,18 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { names.forEach(name => log(name)); }); + program + .command('unbox') + .description( + 'Unboxes an example contract from @aztec/boxes. Also Copies `noir-libs` dependencies and setup simple frontend for the contract using its ABI.', + ) + .argument('', 'Name of the contract to unbox, e.g. "PrivateToken"') + .argument('[localDirectory]', 'Local directory to unbox to (relative or absolute), defaults to ``') + .action(async (contractName, localDirectory) => { + const unboxTo: string = localDirectory ? localDirectory : contractName; + await unboxContract(contractName, unboxTo, version, log); + }); + program .command('get-node-info') .description('Gets the information of an aztec node at a URL.') diff --git a/yarn-project/cli/src/unbox.ts b/yarn-project/cli/src/unbox.ts new file mode 100644 index 000000000000..4202b080db66 --- /dev/null +++ b/yarn-project/cli/src/unbox.ts @@ -0,0 +1,303 @@ +// inspired by https://github.com/trufflesuite/truffle/blob/develop/packages/box/lib/utils/unbox.ts +// however, their boxes are stored as standalone git repositories, while ours are subpackages in a monorepo +// so we do some hacky conversions post copy to make them work as standalone packages. +// We download the master branch of the monorepo, and then +// (1) copy "boxes/{CONTRACT_NAME}" subpackage to the specified output directory +// (2) if the box doesnt include noir source code, we copy it from the "noir-contracts" subpackage to into a new subdirectory "X/src/contracts", +// These are used by a simple frontend to interact with the contract and deploy to a local sandbox instance of aztec3. +// The unbox logic can be tested locally by running `$ts-node --esm src/bin/index.ts unbox PrivateToken` +// from `yarn-project/cli/` +import { LogFn } from '@aztec/foundation/log'; + +import { promises as fs } from 'fs'; +import JSZip from 'jszip'; +import fetch from 'node-fetch'; +import * as path from 'path'; + +const GITHUB_OWNER = 'AztecProtocol'; +const GITHUB_REPO = 'aztec-packages'; +const NOIR_CONTRACTS_PATH = 'yarn-project/noir-contracts/src/contracts'; +const BOXES_PATH = 'yarn-project/boxes'; + +/** + * Converts a contract name in "upper camel case" to a folder name in snake case. + * @param contractName - The contract name. + * @returns The folder name. + * */ +function contractNameToFolder(contractName: string): string { + return contractName.replace(/[\w]([A-Z])/g, m => m[0] + '_' + m[1]).toLowerCase(); +} + +/** + * If the box contains the noir contract source code, we don't need to download it from github. + * Otherwise, we download the contract source code from the `noir-contracts` and `noir-libs` subpackages. + */ +async function isDirectoryNonEmpty(directoryPath: string): Promise { + const files = await fs.readdir(directoryPath); + return files.length > 0; +} + +/** + * + * @param data - in memory unzipped clone of a github repo + * @param repositoryFolderPath - folder to copy from github repo + * @param localOutputPath - local path to copy to + */ +async function copyFolderFromGithub(data: JSZip, repositoryFolderPath: string, localOutputPath: string, log: LogFn) { + log('downloading from github:', repositoryFolderPath); + const repositoryDirectories = Object.values(data.files).filter(file => { + return file.dir && file.name.startsWith(repositoryFolderPath); + }); + + for (const directory of repositoryDirectories) { + const relativePath = directory.name.replace(repositoryFolderPath, ''); + const targetPath = `${localOutputPath}/${relativePath}`; + await fs.mkdir(targetPath, { recursive: true }); + } + + const starterFiles = Object.values(data.files).filter(file => { + return !file.dir && file.name.startsWith(repositoryFolderPath); + }); + + for (const file of starterFiles) { + const relativePath = file.name.replace(repositoryFolderPath, ''); + const targetPath = `${localOutputPath}/${relativePath}`; + const content = await file.async('nodebuffer'); + await fs.writeFile(targetPath, content); + } +} + +/** + * Not flexible at at all, but quick fix to download a noir smart contract from our + * monorepo on github. this will copy over the `yarn-projects/boxes/{contract_name}` folder + * as well as the specified `directoryPath` if the box doesn't include source code + * `directoryPath` should point to a single noir contract in `yarn-projects/noir-contracts/src/contracts/...` + * @param tagVersion - the version of the CLI that is running. we pull from the corresponding tag in the monorepo + * @param directoryPath - path to a noir contract's source code (folder) in the github repo + * @param outputPath - local path that we will copy the noir contracts and web3 starter kit to + * @returns + */ +async function downloadContractAndBoxFromGithub( + tagVersion: string, + contractName: string, + outputPath: string, + log: LogFn, +): Promise { + // small string conversion, in the ABI the contract name looks like PrivateToken + // but in the repostory it looks like private_token + const snakeCaseContractName = contractNameToFolder(contractName); + + log(`Downloaded '@aztex/boxes/${snakeCaseContractName}' to ${outputPath}`); + // Step 1: Fetch the monorepo ZIP from GitHub, matching the CLI version + const url = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/archive/refs/tags/aztec-packages-v${tagVersion}.zip`; + const response = await fetch(url); + const buffer = await response.arrayBuffer(); + + const zip = new JSZip(); + const data = await zip.loadAsync(buffer); + + // Step 2: copy the '@aztec/boxes/{contract-name}' subpackage to the output directory + // this is currently only implemented for PrivateToken under 'boxes/private-token/' + const repoDirectoryPrefix = `${GITHUB_REPO}-v${tagVersion}/`; + + const boxPath = `${repoDirectoryPrefix}${BOXES_PATH}/${snakeCaseContractName}`; + await copyFolderFromGithub(data, boxPath, outputPath, log); + + const boxContainsNoirSource = await isDirectoryNonEmpty(`${outputPath}/src/contracts`); + if (boxContainsNoirSource) { + return; + } + // this remaining logic only kicks in if the box doesn't already have a src/contracts folder + // in which case we optimistically grab the noir source files from the + // noir-contracts and noir-libs subpackages and pray that the versions are compatible + + // source noir files for the contract are in this folder + const contractFolder = `${NOIR_CONTRACTS_PATH}/${snakeCaseContractName}_contract`; + // copy the noir contracts to the output directory under subdir /src/contracts/ + const contractDirectoryPath = `${repoDirectoryPrefix}${contractFolder}/`; + + const contractFiles = Object.values(data.files).filter(file => { + return !file.dir && file.name.startsWith(contractDirectoryPath); + }); + + const contractTargetDirectory = path.join(outputPath, 'src', 'contracts'); + await fs.mkdir(contractTargetDirectory, { recursive: true }); + // Nargo.toml file needs to be in the root of the contracts directory, + // and noir files in the src/ subdirectory + await fs.mkdir(path.join(contractTargetDirectory, 'src'), { recursive: true }); + for (const file of contractFiles) { + const targetPath = path.join(contractTargetDirectory, file.name.replace(contractDirectoryPath, '')); + log(`Copying ${file.name} to ${targetPath}`); + const content = await file.async('nodebuffer'); + await fs.writeFile(targetPath, content); + log(`Copied ${file.name} to ${targetPath}`); + } +} +/** + * Does some conversion from the package/build configurations in the monorepo to the + * something usable by the copied standalone unboxed folder. Adjusts relative paths + * and package versions. + * @param packageVersion - CLI npm version, which determines what npm version to grab + * @param outputPath - relative path where we are copying everything + * @param log - logger + */ +async function updatePackagingConfigurations(packageVersion: string, outputPath: string, log: LogFn): Promise { + await updatePackageJsonVersions(packageVersion, outputPath, log); + await updateTsConfig(outputPath, log); + await updateNargoToml(packageVersion, outputPath, log); +} + +/** + * adjust the contract Nargo.toml file to use the same repository version as the npm packages + * @param packageVersion - CLI npm version, which determines what npm version to grab + * @param outputPath - relative path where we are copying everything + * @param log - logger + */ +async function updateNargoToml(packageVersion: string, outputPath: string, log: LogFn): Promise { + const nargoTomlPath = path.join(outputPath, 'src', 'contracts', 'Nargo.toml'); + const fileContent = await fs.readFile(nargoTomlPath, 'utf-8'); + const lines = fileContent.split('\n'); + const updatedLines = lines.map(line => line.replace(/tag="master"/g, `tag="v${packageVersion}"`)); + const updatedContent = updatedLines.join('\n'); + await fs.writeFile(nargoTomlPath, updatedContent); + log(`Updated Nargo.toml to point to local copy of noir-libs`); +} + +/** + * The `tsconfig.json` also needs to be updated to remove the "references" section, which + * points to the monorepo's subpackages. Those are unavailable in the cloned subpackage, + * so we remove the entries to install the the workspace packages from npm. + * @param outputPath - directory we are unboxing to + */ +async function updateTsConfig(outputPath: string, log: LogFn) { + try { + const tsconfigJsonPath = path.join(outputPath, 'tsconfig.json'); + const data = await fs.readFile(tsconfigJsonPath, 'utf8'); + const config = JSON.parse(data); + + delete config.references; + + const updatedData = JSON.stringify(config, null, 2); + await fs.writeFile(tsconfigJsonPath, updatedData, 'utf8'); + + log('tsconfig.json has been updated'); + } catch (error) { + log('Error updating tsconfig.json:', error); + throw error; + } +} + +/** + * We pin to "workspace:^" in the package.json for subpackages, but we need to replace it with + * an the actual version number in the cloned starter kit + * We modify the copied package.json and pin to the version of the package that was downloaded + * @param packageVersion - CLI npm version, which determines what npm version to grab + * @param outputPath - directory we are unboxing to + * @param log - logger + */ +async function updatePackageJsonVersions(packageVersion: string, outputPath: string, log: LogFn): Promise { + const packageJsonPath = path.join(outputPath, 'package.json'); + const fileContent = await fs.readFile(packageJsonPath, 'utf-8'); + const packageData = JSON.parse(fileContent); + + // Check and replace "workspace^" pins in dependencies, which are monorepo yarn workspace references + if (packageData.dependencies) { + for (const [key, value] of Object.entries(packageData.dependencies)) { + if (value === 'workspace:^') { + packageData.dependencies[key] = `^${packageVersion}`; + } + } + } + + // Check and replace in devDependencies + if (packageData.devDependencies) { + for (const [key, value] of Object.entries(packageData.devDependencies)) { + if (value === 'workspace:^') { + // TODO: check if this right post landing. the package.json version looks like 0.1.0 + // but the npm versions look like v0.1.0-alpha63 so we are not fully pinned + packageData.devDependencies[key] = `^${packageVersion}`; + } + } + } + + // modify the version of the sandbox to pull - it's set to "latest" version in the monorepo, + // but we need to replace with the same tagVersion as the cli and the other aztec npm packages + // similarly, make sure we spinup the sandbox with the same version. + packageData.scripts['install:sandbox'] = packageData.scripts['install:sandbox'].replace( + 'latest', + `v${packageVersion}`, + ); + + packageData.scripts['start:sandbox'] = packageData.scripts['start:sandbox'].replace('latest', `v${packageVersion}`); + + // Convert back to a string and write back to the package.json file + const updatedContent = JSON.stringify(packageData, null, 2); + await fs.writeFile(packageJsonPath, updatedContent); + + log(`Updated package.json versions to ${packageVersion}`); +} + +/** + * + * @param outputDirectoryName - user specified directory we are "unboxing" files into + * @param log - logger + * @returns + */ +async function createDirectory(outputDirectoryName: string, log: LogFn): Promise { + const absolutePath = path.resolve(outputDirectoryName); + + try { + // Checking if the path exists and if it is a directory + const stats = await fs.stat(absolutePath); + if (!stats.isDirectory()) { + throw new Error(`The specified path ${outputDirectoryName} is not a directory/folder.`); + } + } catch (error: any) { + if (error.code === 'ENOENT') { + await fs.mkdir(absolutePath, { recursive: true }); + log(`The directory did not exist and has been created: ${absolutePath}`); + } else { + throw error; + } + } + + return absolutePath; +} + +/** + * Unboxes a contract from `@aztec/boxes` by performing the following operations: + * 1. Copies the frontend template from `@aztec/boxes/{contract_name}` to the outputDirectory + * 2. Checks if the contract source was copied over from `@aztec/boxes/{contract_name}/src/contracts` + * 3. If not, copies the contract from the appropriate `@aztec/noir-contracts/src/contracts/...` folder. + * + * The box provides a simple React app which parses the contract ABI + * and generates a UI to deploy + interact with the contract on a local aztec testnet. + * @param contractName - name of contract from `@aztec/noir-contracts`, in a format like "PrivateToken" (rather than "private_token", as it appears in the noir-contracts repo) + * @param log - Logger instance that will output to the CLI + */ +export async function unboxContract( + contractName: string, + outputDirectoryName: string, + packageVersion: string, + log: LogFn, +) { + const contractNames = ['PrivateToken']; + + if (!contractNames.includes(contractName)) { + log( + `The noir contract named "${contractName}" was not found in "@aztec/boxes" package. Valid options are: + ${contractNames.join('\n\t')} + We recommend "PrivateToken" as a default.`, + ); + return; + } + const outputPath = await createDirectory(outputDirectoryName, log); + + // downloads the selected contract's relevant folder in @aztec/boxes/{contract_name} + // and the noir source code from `noir-contracts` into `${outputDirectoryName}/src/contracts` + // if not present in the box + await downloadContractAndBoxFromGithub(packageVersion, contractName, outputPath, log); + // make adjustments for packaging to work as a standalone, as opposed to part of yarn workspace + // as in the monorepo source files + await updatePackagingConfigurations(packageVersion, outputPath, log); +} diff --git a/yarn-project/package.json b/yarn-project/package.json index b02bb1c561f7..af3ab10b2a7b 100644 --- a/yarn-project/package.json +++ b/yarn-project/package.json @@ -21,6 +21,7 @@ "aztec-rpc", "aztec-sandbox", "aztec.js", + "boxes", "canary", "circuits.js", "cli", @@ -35,6 +36,7 @@ "l1-artifacts", "p2p", "p2p-bootstrap", + "boxes/private-token", "prover-client", "rollup-provider", "aztec-node", diff --git a/yarn-project/yarn-project-base/Dockerfile b/yarn-project/yarn-project-base/Dockerfile index dca9635efdc6..31b0b5239e80 100644 --- a/yarn-project/yarn-project-base/Dockerfile +++ b/yarn-project/yarn-project-base/Dockerfile @@ -25,6 +25,7 @@ COPY aztec-sandbox/package.json aztec-sandbox/package.json COPY aztec.js/package.json aztec.js/package.json COPY aztec.js/package.local.json aztec.js/package.local.json COPY canary/package.json canary/package.json +COPY boxes/private-token/package.json boxes/private-token/package.json COPY docs/package.json docs/package.json COPY end-to-end/package.json end-to-end/package.json COPY ethereum/package.json ethereum/package.json diff --git a/yarn-project/yarn.lock b/yarn-project/yarn.lock index c634d40c204a..375e0596faca 100644 --- a/yarn-project/yarn.lock +++ b/yarn-project/yarn.lock @@ -47,6 +47,13 @@ __metadata: languageName: node linkType: hard +"@alloc/quick-lru@npm:^5.2.0": + version: 5.2.0 + resolution: "@alloc/quick-lru@npm:5.2.0" + checksum: bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -331,7 +338,9 @@ __metadata: commander: ^9.0.0 jest: ^29.5.0 jest-mock-extended: ^3.0.5 + jszip: ^3.10.1 lodash.startcase: ^4.4.0 + node-fetch: ^3.3.2 semver: ^7.5.4 ts-jest: ^29.1.0 ts-node: ^10.9.1 @@ -1523,6 +1532,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.48.0": + version: 8.48.0 + resolution: "@eslint/js@npm:8.48.0" + checksum: b2755f9c0ee810c886eba3c50dcacb184ba5a5cd1cbc01988ee506ad7340653cae0bd55f1d95c64b56dfc6d25c2caa7825335ffd2c50165bae9996fe0f396851 + languageName: node + linkType: hard + "@eslint/js@npm:^8.46.0": version: 8.46.0 resolution: "@eslint/js@npm:8.46.0" @@ -1603,6 +1636,20 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/console@npm:29.6.4" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + slash: ^3.0.0 + checksum: 1caf061a39266b86e96ca13358401839e4d930742cbaa9e87e79d7ce170a83195e52e5b2d22eb5aa9a949219b61a163a81e337ec98b8323d88d79853051df96c + languageName: node + linkType: hard + "@jest/core@npm:^29.6.2": version: 29.6.2 resolution: "@jest/core@npm:29.6.2" @@ -1644,6 +1691,47 @@ __metadata: languageName: node linkType: hard +"@jest/core@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/core@npm:29.6.4" + dependencies: + "@jest/console": ^29.6.4 + "@jest/reporters": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.6.3 + jest-config: ^29.6.4 + jest-haste-map: ^29.6.4 + jest-message-util: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.6.4 + jest-resolve-dependencies: ^29.6.4 + jest-runner: ^29.6.4 + jest-runtime: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + jest-watcher: ^29.6.4 + micromatch: ^4.0.4 + pretty-format: ^29.6.3 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 0f36532c909775814cb7d4310d61881beaefdec6229ef0b7493c6191dfca20ae5222120846ea5ef8cdeaa8cef265aae9cea8989dcab572d8daea9afd14247c7a + languageName: node + linkType: hard + "@jest/environment@npm:^29.6.2": version: 29.6.2 resolution: "@jest/environment@npm:29.6.2" @@ -1656,6 +1744,18 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/environment@npm:29.6.4" + dependencies: + "@jest/fake-timers": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.6.3 + checksum: 810d8f1fc26d293acfc44927bcb78adc58ed4ea580a64c8d94aa6c67239dcb149186bf25b94ff28b79de15253e0c877ad8d330feac205f185f3517593168510c + languageName: node + linkType: hard + "@jest/expect-utils@npm:^29.6.2": version: 29.6.2 resolution: "@jest/expect-utils@npm:29.6.2" @@ -1665,6 +1765,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect-utils@npm:29.6.4" + dependencies: + jest-get-type: ^29.6.3 + checksum: a17059e02a4c0fca98e2abb7e9e58c70df3cd3d4ebcc6a960cb57c571726f7bd738c6cd008a9bf99770b77e92f7e21c75fe1f9ceec9b7a7710010f9340bb28ad + languageName: node + linkType: hard + "@jest/expect@npm:^29.6.2": version: 29.6.2 resolution: "@jest/expect@npm:29.6.2" @@ -1675,6 +1784,16 @@ __metadata: languageName: node linkType: hard +"@jest/expect@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/expect@npm:29.6.4" + dependencies: + expect: ^29.6.4 + jest-snapshot: ^29.6.4 + checksum: e9d7306a96e2f9f9f7a0d93d41850cbad987ebda951a5d9a63d3f5fb61da4c1e41adb54af7f7222e4a185454ecb17ddc77845e18001ee28ac114f7a7fe9e671d + languageName: node + linkType: hard + "@jest/fake-timers@npm:^29.6.2": version: 29.6.2 resolution: "@jest/fake-timers@npm:29.6.2" @@ -1689,6 +1808,20 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/fake-timers@npm:29.6.4" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.6.3 + jest-mock: ^29.6.3 + jest-util: ^29.6.3 + checksum: 3f06d1090cbaaf781920fe59b10509ad86b587c401818a066ee1550101c6203e0718f0f83bbd2afa8bdf7b43eb280f89fb9f8c98886094e53ccabe5e64de9be1 + languageName: node + linkType: hard + "@jest/globals@npm:^29.5.0, @jest/globals@npm:^29.6.2": version: 29.6.2 resolution: "@jest/globals@npm:29.6.2" @@ -1701,6 +1834,18 @@ __metadata: languageName: node linkType: hard +"@jest/globals@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/globals@npm:29.6.4" + dependencies: + "@jest/environment": ^29.6.4 + "@jest/expect": ^29.6.4 + "@jest/types": ^29.6.3 + jest-mock: ^29.6.3 + checksum: a41b18871a248151264668a38b13cb305f03db112bfd89ec44e858af0e79066e0b03d6b68c8baf1ec6c578be6fdb87519389c83438608b91471d17a5724858e0 + languageName: node + linkType: hard + "@jest/reporters@npm:^29.6.2": version: 29.6.2 resolution: "@jest/reporters@npm:29.6.2" @@ -1738,6 +1883,43 @@ __metadata: languageName: node linkType: hard +"@jest/reporters@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/reporters@npm:29.6.4" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^6.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + jest-worker: ^29.6.4 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 9ee0db497f3a826f535d3af0575ceb67984f9708bc6386450359517c212c67218ae98b8ea93ab05df2f920aed9c4166ef64209d66a09b7e30fc0077c91347ad0 + languageName: node + linkType: hard + "@jest/schemas@npm:^29.6.0": version: 29.6.0 resolution: "@jest/schemas@npm:29.6.0" @@ -1747,6 +1929,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + "@jest/source-map@npm:^29.6.0": version: 29.6.0 resolution: "@jest/source-map@npm:29.6.0" @@ -1758,6 +1949,17 @@ __metadata: languageName: node linkType: hard +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + "@jest/test-result@npm:^29.6.2": version: 29.6.2 resolution: "@jest/test-result@npm:29.6.2" @@ -1770,6 +1972,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-result@npm:29.6.4" + dependencies: + "@jest/console": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: a13c82d29038e80059191a1a443240678c6934ea832fdabaec12b3ece397b6303022a064494a6bbd167a024f04e6b4d9ace1001300927ff70405ec9d854f1193 + languageName: node + linkType: hard + "@jest/test-sequencer@npm:^29.6.2": version: 29.6.2 resolution: "@jest/test-sequencer@npm:29.6.2" @@ -1782,6 +1996,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-sequencer@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/test-sequencer@npm:29.6.4" + dependencies: + "@jest/test-result": ^29.6.4 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.4 + slash: ^3.0.0 + checksum: 517fc66b74a87431a8a1429e4505d85bd09c11f2ba835e46c07c79911fbee23b89c01ec444c7c1d12d1b36f9eba60fcbbccc8e1bc1ae54a1a8b03b5f530ff81b + languageName: node + linkType: hard + "@jest/transform@npm:^29.6.2": version: 29.6.2 resolution: "@jest/transform@npm:29.6.2" @@ -1805,6 +2031,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^29.6.4": + version: 29.6.4 + resolution: "@jest/transform@npm:29.6.4" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.4 + jest-regex-util: ^29.6.3 + jest-util: ^29.6.3 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0341a200a0bb926fc67ab9aede91c7b4009458206495e92057e72a115c55da5fed117457e68c6ea821e24c58b55da75c6a7b0f272ed63c2693db583d689a3383 + languageName: node + linkType: hard + "@jest/types@npm:^29.6.1": version: 29.6.1 resolution: "@jest/types@npm:29.6.1" @@ -1819,6 +2068,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.3 resolution: "@jridgewell/gen-mapping@npm:0.3.3" @@ -1904,6 +2167,13 @@ __metadata: languageName: node linkType: hard +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.4 + resolution: "@leichtgewicht/ip-codec@npm:2.0.4" + checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d + languageName: node + linkType: hard + "@libp2p/bootstrap@npm:^9.0.4": version: 9.0.4 resolution: "@libp2p/bootstrap@npm:9.0.4" @@ -2847,6 +3117,25 @@ __metadata: languageName: node linkType: hard +"@types/bonjour@npm:^3.5.9": + version: 3.5.10 + resolution: "@types/bonjour@npm:3.5.10" + dependencies: + "@types/node": "*" + checksum: bfcadb042a41b124c4e3de4925e3be6d35b78f93f27c4535d5ff86980dc0f8bc407ed99b9b54528952dc62834d5a779392f7a12c2947dd19330eb05a6bcae15a + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.3.5": + version: 1.5.0 + resolution: "@types/connect-history-api-fallback@npm:1.5.0" + dependencies: + "@types/express-serve-static-core": "*" + "@types/node": "*" + checksum: f180e7c540728d6dd3a1eb2376e445fe7f9de4ee8a5b460d5ad80062cdb6de6efc91c6851f39e9d5933b3dcd5cd370673c52343a959aa091238b6f863ea4447c + languageName: node + linkType: hard + "@types/connect@npm:*": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -2925,6 +3214,18 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:*": + version: 4.17.36 + resolution: "@types/express-serve-static-core@npm:4.17.36" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 410b13cbd663f18c0f8729e7f2ff54d960d96de76ebbae7cadb612972f85cc66c54051e00d32f11aa230c0a683d81a6d6fc7f7e4e383a95c0801494c517f36e1 + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:^4.17.33": version: 4.17.35 resolution: "@types/express-serve-static-core@npm:4.17.35" @@ -2937,7 +3238,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*": +"@types/express@npm:*, @types/express@npm:^4.17.13": version: 4.17.17 resolution: "@types/express@npm:4.17.17" dependencies: @@ -2982,6 +3283,15 @@ __metadata: languageName: node linkType: hard +"@types/http-proxy@npm:^1.17.8": + version: 1.17.11 + resolution: "@types/http-proxy@npm:1.17.11" + dependencies: + "@types/node": "*" + checksum: 38ef4f8c91c7a5b664cf6dd4d90de7863f88549a9f8ef997f2f1184e4f8cf2e7b9b63c04f0b7b962f34a09983073a31a9856de5aae5159b2ddbb905a4c44dc9f + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -3017,7 +3327,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.12 resolution: "@types/json-schema@npm:7.0.12" checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293 @@ -3385,6 +3695,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^20.5.9": + version: 20.5.9 + resolution: "@types/node@npm:20.5.9" + checksum: 717490e94131722144878b4ca1a963ede1673bb8f2ef78c2f5b50b918df6dc9b35e7f8283e5c2a7a9f137730f7c08dc6228e53d4494a94c9ee16881e6ce6caed + languageName: node + linkType: hard + "@types/normalize-package-data@npm:^2.4.0": version: 2.4.1 resolution: "@types/normalize-package-data@npm:2.4.1" @@ -3399,6 +3716,13 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.5 + resolution: "@types/prop-types@npm:15.7.5" + checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 + languageName: node + linkType: hard + "@types/qs@npm:*": version: 6.9.7 resolution: "@types/qs@npm:6.9.7" @@ -3413,6 +3737,33 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.2.7": + version: 18.2.7 + resolution: "@types/react-dom@npm:18.2.7" + dependencies: + "@types/react": "*" + checksum: e02ea908289a7ad26053308248d2b87f6aeafd73d0e2de2a3d435947bcea0422599016ffd1c3e38ff36c42f5e1c87c7417f05b0a157e48649e4a02f21727d54f + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:^18.2.15": + version: 18.2.21 + resolution: "@types/react@npm:18.2.21" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: ffed203bfe7aad772b8286f7953305c9181ac3a8f27d3f5400fbbc2a8e27ca8e5bbff818ee014f39ca0d19d2b3bb154e5bdbec7e232c6f80b59069375aa78349 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 + languageName: node + linkType: hard + "@types/retry@npm:0.12.1": version: 0.12.1 resolution: "@types/retry@npm:0.12.1" @@ -3420,6 +3771,13 @@ __metadata: languageName: node linkType: hard +"@types/scheduler@npm:*": + version: 0.16.3 + resolution: "@types/scheduler@npm:0.16.3" + checksum: 2b0aec39c24268e3ce938c5db2f2e77f5c3dd280e05c262d9c2fe7d890929e4632a6b8e94334017b66b45e4f92a5aa42ba3356640c2a1175fa37bef2f5200767 + languageName: node + linkType: hard + "@types/semver@npm:^7.5.0": version: 7.5.0 resolution: "@types/semver@npm:7.5.0" @@ -3437,7 +3795,16 @@ __metadata: languageName: node linkType: hard -"@types/serve-static@npm:*": +"@types/serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "@types/serve-index@npm:1.9.1" + dependencies: + "@types/express": "*" + checksum: 026f3995fb500f6df7c3fe5009e53bad6d739e20b84089f58ebfafb2f404bbbb6162bbe33f72d2f2af32d5b8d3799c8e179793f90d9ed5871fb8591190bb6056 + languageName: node + linkType: hard + +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": version: 1.15.2 resolution: "@types/serve-static@npm:1.15.2" dependencies: @@ -3473,6 +3840,15 @@ __metadata: languageName: node linkType: hard +"@types/sockjs@npm:^0.3.33": + version: 0.3.33 + resolution: "@types/sockjs@npm:0.3.33" + dependencies: + "@types/node": "*" + checksum: b9bbb2b5c5ead2fb884bb019f61a014e37410bddd295de28184e1b2e71ee6b04120c5ba7b9954617f0bdf962c13d06249ce65004490889c747c80d3f628ea842 + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -3506,7 +3882,7 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.5.4": +"@types/ws@npm:^8.5.4, @types/ws@npm:^8.5.5": version: 8.5.5 resolution: "@types/ws@npm:8.5.5" dependencies: @@ -3540,6 +3916,31 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^6.0.0": + version: 6.5.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.5.0" + dependencies: + "@eslint-community/regexpp": ^4.5.1 + "@typescript-eslint/scope-manager": 6.5.0 + "@typescript-eslint/type-utils": 6.5.0 + "@typescript-eslint/utils": 6.5.0 + "@typescript-eslint/visitor-keys": 6.5.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.4 + natural-compare: ^1.4.0 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependencies: + "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d81525c9a081186ec1ae7d957972065d50bae8fe4b3de111e573adc7267bb830baaec8f1ae47d3b937984ac34324bacc3951868b7986d4f9974bbe480f2261c0 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^6.2.1": version: 6.2.1 resolution: "@typescript-eslint/eslint-plugin@npm:6.2.1" @@ -3566,6 +3967,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^6.0.0": + version: 6.5.0 + resolution: "@typescript-eslint/parser@npm:6.5.0" + dependencies: + "@typescript-eslint/scope-manager": 6.5.0 + "@typescript-eslint/types": 6.5.0 + "@typescript-eslint/typescript-estree": 6.5.0 + "@typescript-eslint/visitor-keys": 6.5.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: e9a70886ec2660aee5c77cdff67ba11651eb855b7ecd3ad1e70837fce997d6e6db9dfe1e1eab46a9b2147cbc034ae9c109951f3bc24ce54e78cae669b6bc9c95 + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^6.2.1": version: 6.2.1 resolution: "@typescript-eslint/parser@npm:6.2.1" @@ -3594,6 +4013,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/scope-manager@npm:6.5.0" + dependencies: + "@typescript-eslint/types": 6.5.0 + "@typescript-eslint/visitor-keys": 6.5.0 + checksum: 30d78143f68e07d6bd15a147f64cc16830f8a8c8409b37aa7c7d205d7585f3648ec1c5365b3f177b7561971b407f773f6dba83b3b78fa63091045f2d6bbc6b9f + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:6.2.1": version: 6.2.1 resolution: "@typescript-eslint/type-utils@npm:6.2.1" @@ -3611,6 +4040,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/type-utils@npm:6.5.0" + dependencies: + "@typescript-eslint/typescript-estree": 6.5.0 + "@typescript-eslint/utils": 6.5.0 + debug: ^4.3.4 + ts-api-utils: ^1.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 80b9e5099f5bdb05348ea8664c0a5084efc851de43ef6c1997041e1f07e9cc34ac874cc9e8afb317c887513d657e2583ad360e3d57feaab775bde0acc1807982 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:6.2.1": version: 6.2.1 resolution: "@typescript-eslint/types@npm:6.2.1" @@ -3618,6 +4064,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/types@npm:6.5.0" + checksum: 950ec16991d71494d10cb752535bbc4395295e3f03a716d53ec55bbb0aaff487aa774cc5002f775ffcc80b9f0e16ac53ecebf7cac1444ca4f7a847b0859ffbfb + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:6.2.1": version: 6.2.1 resolution: "@typescript-eslint/typescript-estree@npm:6.2.1" @@ -3636,16 +4089,34 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.2.1": - version: 6.2.1 - resolution: "@typescript-eslint/utils@npm:6.2.1" +"@typescript-eslint/typescript-estree@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.5.0" dependencies: - "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.2.1 - "@typescript-eslint/types": 6.2.1 - "@typescript-eslint/typescript-estree": 6.2.1 + "@typescript-eslint/types": 6.5.0 + "@typescript-eslint/visitor-keys": 6.5.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.5.4 + ts-api-utils: ^1.0.1 + peerDependenciesMeta: + typescript: + optional: true + checksum: 05717fa1f2609fa5669803191cf309a379c815aaf4fff6850f40560eec8749759c36b288f05cecffd5c1d0be8de1fe414ecfee6ecf99b6ae521baa48c8b58455 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:6.2.1": + version: 6.2.1 + resolution: "@typescript-eslint/utils@npm:6.2.1" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.2.1 + "@typescript-eslint/types": 6.2.1 + "@typescript-eslint/typescript-estree": 6.2.1 semver: ^7.5.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -3653,6 +4124,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/utils@npm:6.5.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@types/json-schema": ^7.0.12 + "@types/semver": ^7.5.0 + "@typescript-eslint/scope-manager": 6.5.0 + "@typescript-eslint/types": 6.5.0 + "@typescript-eslint/typescript-estree": 6.5.0 + semver: ^7.5.4 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 58a82213c8a7bac97a6538b9845c1de5c5692fbf72548f95ed5e044a222608590bcafbb9eacba92a8c4e9eb3e5d0a2fd553eae0d6694ed2d6152aed4dabf9480 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:6.2.1": version: 6.2.1 resolution: "@typescript-eslint/visitor-keys@npm:6.2.1" @@ -3663,6 +4151,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:6.5.0": + version: 6.5.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.5.0" + dependencies: + "@typescript-eslint/types": 6.5.0 + eslint-visitor-keys: ^3.4.1 + checksum: 768a02dd0d8aae45708646bb0c51e67da09e71dc101bb0a0e55d7e0c8eadfea2f531acd3035d1ec34bf2380b66188f3fc47c6bef0201eae36b2dcc48d1934442 + languageName: node + linkType: hard + "@wagmi/chains@npm:1.6.0": version: 1.6.0 resolution: "@wagmi/chains@npm:1.6.0" @@ -3873,6 +4371,13 @@ __metadata: languageName: node linkType: hard +"@zeit/schemas@npm:2.29.0": + version: 2.29.0 + resolution: "@zeit/schemas@npm:2.29.0" + checksum: 3cea06bb67d790336aca0cc17580fd492ff3fc66ef4d180dce7053ff7ff54ab81b56bf718ba6f537148c581161d06306a481ec218d540bff922e0e009844ffd1 + languageName: node + linkType: hard + "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -3932,7 +4437,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.5": +"accepts@npm:^1.3.5, accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -4015,6 +4520,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + "ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" @@ -4024,6 +4543,29 @@ __metadata: languageName: node linkType: hard +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:8.11.0": + version: 8.11.0 + resolution: "ajv@npm:8.11.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 5e0ff226806763be73e93dd7805b634f6f5921e3e90ca04acdf8db81eed9d8d3f0d4c5f1213047f45ebbf8047ffe0c840fa1ef2ec42c3a644899f69aa72b5bef + languageName: node + linkType: hard + "ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -4036,6 +4578,27 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: ^3.1.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + uri-js: ^4.2.2 + checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 + languageName: node + linkType: hard + +"ansi-align@npm:^3.0.1": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: ^4.1.0 + checksum: 6abfa08f2141d231c257162b15292467081fa49a208593e055c866aa0455b57f3a86b5a678c190c618faa79b4c59e254493099cb700dd9cf2293c6be2c8f5d8d + languageName: node + linkType: hard + "ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -4045,6 +4608,15 @@ __metadata: languageName: node linkType: hard +"ansi-html-community@npm:^0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 04c568e8348a636963f915e48eaa3e01218322e1169acafdd79c384f22e5558c003f79bbc480c1563865497482817c7eed025f0653ebc17642fededa5cb42089 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -4098,6 +4670,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + "any-signal@npm:^4.1.1": version: 4.1.1 resolution: "any-signal@npm:4.1.1" @@ -4105,7 +4684,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3": +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -4122,6 +4701,13 @@ __metadata: languageName: node linkType: hard +"arch@npm:^2.2.0": + version: 2.2.0 + resolution: "arch@npm:2.2.0" + checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f + languageName: node + linkType: hard + "are-we-there-yet@npm:^3.0.0": version: 3.0.1 resolution: "are-we-there-yet@npm:3.0.1" @@ -4132,6 +4718,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:5.0.2, arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 + languageName: node + linkType: hard + "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -4165,6 +4758,20 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + +"array-flatten@npm:^2.1.2": + version: 2.1.2 + resolution: "array-flatten@npm:2.1.2" + checksum: e8988aac1fbfcdaae343d08c9a06a6fddd2c6141721eeeea45c3cf523bf4431d29a46602929455ed548c7a3e0769928cdc630405427297e7081bd118fdec9262 + languageName: node + linkType: hard + "array-includes@npm:^3.1.6": version: 3.1.6 resolution: "array-includes@npm:3.1.6" @@ -4285,6 +4892,24 @@ __metadata: languageName: node linkType: hard +"autoprefixer@npm:^10.4.15": + version: 10.4.15 + resolution: "autoprefixer@npm:10.4.15" + dependencies: + browserslist: ^4.21.10 + caniuse-lite: ^1.0.30001520 + fraction.js: ^4.2.0 + normalize-range: ^0.1.2 + picocolors: ^1.0.0 + postcss-value-parser: ^4.2.0 + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: d490b14fb098c043e109fc13cd23628f146af99a493d35b9df3a26f8ec0b4dd8937c5601cdbaeb465b98ea31d3ea05aa7184711d4d93dfb52358d073dcb67032 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -4316,6 +4941,23 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.6.4": + version: 29.6.4 + resolution: "babel-jest@npm:29.6.4" + dependencies: + "@jest/transform": ^29.6.4 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: c574f1805ab6b51a7d0f5a028aad19eec4634be81e66e6f4631b79b34d8ea05dfb53629f3686c77345163872730aa0408c9e5937ed85f846984228f7ab5e5d96 + languageName: node + linkType: hard + "babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" @@ -4341,6 +4983,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.1 resolution: "babel-preset-current-node-syntax@npm:1.0.1" @@ -4375,6 +5029,18 @@ __metadata: languageName: node linkType: hard +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -4396,6 +5062,13 @@ __metadata: languageName: node linkType: hard +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f + languageName: node + linkType: hard + "benchmark@npm:^2.1.4": version: 2.1.4 resolution: "benchmark@npm:2.1.4" @@ -4413,6 +5086,13 @@ __metadata: languageName: node linkType: hard +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + "bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" @@ -4427,6 +5107,54 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 + languageName: node + linkType: hard + +"bonjour-service@npm:^1.0.11": + version: 1.1.1 + resolution: "bonjour-service@npm:1.1.1" + dependencies: + array-flatten: ^2.1.2 + dns-equal: ^1.0.0 + fast-deep-equal: ^3.1.3 + multicast-dns: ^7.2.5 + checksum: 832d0cf78b91368fac8bb11fd7a714e46f4c4fb1bb14d7283bce614a6fb3aae2f3fe209aba5b4fa051811c1cab6921d073a83db8432fb23292f27dd4161fb0f1 + languageName: node + linkType: hard + +"boxen@npm:7.0.0": + version: 7.0.0 + resolution: "boxen@npm:7.0.0" + dependencies: + ansi-align: ^3.0.1 + camelcase: ^7.0.0 + chalk: ^5.0.1 + cli-boxes: ^3.0.0 + string-width: ^5.1.2 + type-fest: ^2.13.0 + widest-line: ^4.0.1 + wrap-ansi: ^8.0.1 + checksum: b917cf7a168ef3149635a8c02d5c9717d66182348bd27038d85328ad12655151e3324db0f2815253846c33e5f0ddf28b6cd52d56a12b9f88617b7f8f722b946a + languageName: node + linkType: hard + "bplist-parser@npm:^0.2.0": version: 0.2.0 resolution: "bplist-parser@npm:0.2.0" @@ -4455,7 +5183,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2": +"braces@npm:^3.0.2, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" dependencies: @@ -4535,7 +5263,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.14.5, browserslist@npm:^4.21.9": +"browserslist@npm:^4.14.5, browserslist@npm:^4.21.10, browserslist@npm:^4.21.9": version: 4.21.10 resolution: "browserslist@npm:4.21.10" dependencies: @@ -4635,6 +5363,13 @@ __metadata: languageName: node linkType: hard +"bytes@npm:3.0.0": + version: 3.0.0 + resolution: "bytes@npm:3.0.0" + checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 + languageName: node + linkType: hard + "bytes@npm:3.1.2, bytes@npm:^3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -4689,6 +5424,13 @@ __metadata: languageName: node linkType: hard +"camelcase-css@npm:^2.0.1": + version: 2.0.1 + resolution: "camelcase-css@npm:2.0.1" + checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 + languageName: node + linkType: hard + "camelcase-keys@npm:^6.2.2": version: 6.2.2 resolution: "camelcase-keys@npm:6.2.2" @@ -4714,6 +5456,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^7.0.0": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001517": version: 1.0.30001518 resolution: "caniuse-lite@npm:1.0.30001518" @@ -4721,6 +5470,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001520": + version: 1.0.30001525 + resolution: "caniuse-lite@npm:1.0.30001525" + checksum: a0d190c185b8e1220dbc72e42f310633059aa175ca3396eb781b249ac3da6c62b30cb8efc5fa24d632cb938f58d90b0c7772d1c9942b6643cf418c27c2cb8632 + languageName: node + linkType: hard + "catering@npm:^2.0.0, catering@npm:^2.1.0": version: 2.1.1 resolution: "catering@npm:2.1.1" @@ -4728,6 +5484,22 @@ __metadata: languageName: node linkType: hard +"chalk-template@npm:0.4.0": + version: 0.4.0 + resolution: "chalk-template@npm:0.4.0" + dependencies: + chalk: ^4.1.2 + checksum: 6c706802a79a7963cbce18f022b046fe86e438a67843151868852f80ea7346e975a6a9749991601e7e5d3b6a6c4852a04c53dc966a9a3d04031bd0e0ed53c819 + languageName: node + linkType: hard + +"chalk@npm:5.0.1": + version: 5.0.1 + resolution: "chalk@npm:5.0.1" + checksum: 7b45300372b908f0471fbf7389ce2f5de8d85bb949026fd51a1b95b10d0ed32c7ed5aab36dd5e9d2bf3191867909b4404cef75c5f4d2d1daeeacd301dd280b76 + languageName: node + linkType: hard + "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -4749,6 +5521,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.0.1": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -4756,6 +5535,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -4823,6 +5621,24 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 + languageName: node + linkType: hard + +"clipboardy@npm:3.0.0": + version: 3.0.0 + resolution: "clipboardy@npm:3.0.0" + dependencies: + arch: ^2.2.0 + execa: ^5.1.1 + is-wsl: ^2.2.0 + checksum: 2c292acb59705494cbe07d7df7c8becff4f01651514d32ebd80f4aec2d20946d8f3824aac67ecdf2d09ef21fdf0eb24b6a7f033c137ccdceedc4661c54455c94 + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -4932,7 +5748,7 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.14": +"colorette@npm:^2.0.10, colorette@npm:^2.0.14": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d @@ -4979,6 +5795,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + "commander@npm:^9.0.0": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -5012,7 +5835,7 @@ __metadata: languageName: node linkType: hard -"compressible@npm:^2.0.18": +"compressible@npm:^2.0.18, compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" dependencies: @@ -5021,6 +5844,21 @@ __metadata: languageName: node linkType: hard +"compression@npm:1.7.4, compression@npm:^1.7.4": + version: 1.7.4 + resolution: "compression@npm:1.7.4" + dependencies: + accepts: ~1.3.5 + bytes: 3.0.0 + compressible: ~2.0.16 + debug: 2.6.9 + on-headers: ~1.0.2 + safe-buffer: 5.1.2 + vary: ~1.1.2 + checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -5068,6 +5906,13 @@ __metadata: languageName: node linkType: hard +"connect-history-api-fallback@npm:^2.0.0": + version: 2.0.0 + resolution: "connect-history-api-fallback@npm:2.0.0" + checksum: dc5368690f4a5c413889792f8df70d5941ca9da44523cde3f87af0745faee5ee16afb8195434550f0504726642734f2683d6c07f8b460f828a12c45fbd4c9a68 + languageName: node + linkType: hard + "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -5075,7 +5920,14 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:~0.5.2": +"content-disposition@npm:0.5.2": + version: 0.5.2 + resolution: "content-disposition@npm:0.5.2" + checksum: 298d7da63255a38f7858ee19c7b6aae32b167e911293174b4c1349955e97e78e1d0b0d06c10e229405987275b417cf36ff65cbd4821a98bc9df4e41e9372cde7 + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4, content-disposition@npm:~0.5.2": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -5084,7 +5936,7 @@ __metadata: languageName: node linkType: hard -"content-type@npm:^1.0.4": +"content-type@npm:^1.0.4, content-type@npm:~1.0.4": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 @@ -5119,6 +5971,20 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 + languageName: node + linkType: hard + "cookiejar@npm:^2.1.4": version: 2.1.4 resolution: "cookiejar@npm:2.1.4" @@ -5143,6 +6009,22 @@ __metadata: languageName: node linkType: hard +"copy-webpack-plugin@npm:^11.0.0": + version: 11.0.0 + resolution: "copy-webpack-plugin@npm:11.0.0" + dependencies: + fast-glob: ^3.2.11 + glob-parent: ^6.0.1 + globby: ^13.1.1 + normalize-path: ^3.0.0 + schema-utils: ^4.0.0 + serialize-javascript: ^6.0.0 + peerDependencies: + webpack: ^5.1.0 + checksum: df4f8743f003a29ee7dd3d9b1789998a3a99051c92afb2ba2203d3dacfa696f4e757b275560fafb8f206e520a0aa78af34b990324a0e36c2326cefdeef3ca82e + languageName: node + linkType: hard + "core-js@npm:^3.6.5": version: 3.32.0 resolution: "core-js@npm:3.32.0" @@ -5150,7 +6032,7 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:^1.0.2": +"core-util-is@npm:^1.0.2, core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 @@ -5169,6 +6051,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.2.0": + version: 8.3.0 + resolution: "cosmiconfig@npm:8.3.0" + dependencies: + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + path-type: ^4.0.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 535e2d542aa31c764840a25e2d22189a59d0bbad56df2eaf3eb85a9e8c696f7ba19e8545e1ff03720e281f5a284f7a73e0f8729b30804474207bcbc8de83cb7c + languageName: node + linkType: hard + "create-ecdh@npm:^4.0.0": version: 4.0.4 resolution: "create-ecdh@npm:4.0.4" @@ -5261,14 +6160,55 @@ __metadata: languageName: node linkType: hard -"data-uri-to-buffer@npm:^5.0.1": - version: 5.0.1 - resolution: "data-uri-to-buffer@npm:5.0.1" - checksum: 10958f89c0047b84bd86d572b6b77c9bf238ebe7b55a9a9ab04c90fbf5ab1881783b72e31dc0febdffd30ec914930244f2f728e3629bb8911d922baba129426f +"css-loader@npm:^6.8.1": + version: 6.8.1 + resolution: "css-loader@npm:6.8.1" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.21 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.3 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.3.8 + peerDependencies: + webpack: ^5.0.0 + checksum: 7c1784247bdbe76dc5c55fb1ac84f1d4177a74c47259942c9cfdb7a8e6baef11967a0bc85ac285f26bd26d5059decb848af8154a03fdb4f4894f41212f45eef3 languageName: node linkType: hard -"datastore-core@npm:^9.0.1": +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.2 + resolution: "csstype@npm:3.1.2" + checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 0d0790b67ffec5302f204c2ccca4494f70b4e2d940fea3d36b09f0bb2b8539c2e86690429eb1f1dc4bcc9e4df0644193073e63d9ee48ac9fce79ec1506e4aa4c + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^5.0.1": + version: 5.0.1 + resolution: "data-uri-to-buffer@npm:5.0.1" + checksum: 10958f89c0047b84bd86d572b6b77c9bf238ebe7b55a9a9ab04c90fbf5ab1881783b72e31dc0febdffd30ec914930244f2f728e3629bb8911d922baba129426f + languageName: node + linkType: hard + +"datastore-core@npm:^9.0.1": version: 9.2.0 resolution: "datastore-core@npm:9.2.0" dependencies: @@ -5298,6 +6238,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -5355,6 +6304,13 @@ __metadata: languageName: node linkType: hard +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -5362,6 +6318,13 @@ __metadata: languageName: node linkType: hard +"deepmerge@npm:^2.1.1": + version: 2.2.1 + resolution: "deepmerge@npm:2.2.1" + checksum: 284b71065079e66096229f735a9a0222463c9ca9ee9dda7d5e9a0545bf254906dbc7377e3499ca3b2212073672b1a430d80587993b43b87d8de17edc6af649a8 + languageName: node + linkType: hard + "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -5391,7 +6354,7 @@ __metadata: languageName: node linkType: hard -"default-gateway@npm:^6.0.2": +"default-gateway@npm:^6.0.2, default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" dependencies: @@ -5410,6 +6373,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + "define-lazy-prop@npm:^3.0.0": version: 3.0.0 resolution: "define-lazy-prop@npm:3.0.0" @@ -5483,7 +6453,7 @@ __metadata: languageName: node linkType: hard -"destroy@npm:^1.0.4": +"destroy@npm:1.2.0, destroy@npm:^1.0.4": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 @@ -5497,7 +6467,7 @@ __metadata: languageName: node linkType: hard -"detect-node@npm:^2.1.0": +"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": version: 2.1.0 resolution: "detect-node@npm:2.1.0" checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e @@ -5528,6 +6498,13 @@ __metadata: languageName: node linkType: hard +"didyoumean@npm:^1.2.2": + version: 1.2.2 + resolution: "didyoumean@npm:1.2.2" + checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e + languageName: node + linkType: hard + "diff-sequences@npm:^29.4.3": version: 29.4.3 resolution: "diff-sequences@npm:29.4.3" @@ -5535,6 +6512,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -5562,6 +6546,20 @@ __metadata: languageName: node linkType: hard +"dlv@npm:^1.1.3": + version: 1.1.3 + resolution: "dlv@npm:1.1.3" + checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7 + languageName: node + linkType: hard + +"dns-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "dns-equal@npm:1.0.0" + checksum: a8471ac849c7c13824f053babea1bc26e2f359394dd5a460f8340d8abd13434be01e3327a5c59d212f8c8997817450efd3f3ac77bec709b21979cf0235644524 + languageName: node + linkType: hard + "dns-over-http-resolver@npm:^2.1.0": version: 2.1.1 resolution: "dns-over-http-resolver@npm:2.1.1" @@ -5574,6 +6572,15 @@ __metadata: languageName: node linkType: hard +"dns-packet@npm:^5.2.2": + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" + dependencies: + "@leichtgewicht/ip-codec": ^2.0.1 + checksum: 64c06457f0c6e143f7a0946e0aeb8de1c5f752217cfa143ef527467c00a6d78db1835cfdb6bb68333d9f9a4963cf23f410439b5262a8935cce1236f45e344b81 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -5670,7 +6677,7 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:^1.0.2": +"encodeurl@npm:^1.0.2, encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c @@ -5913,7 +6920,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:^1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 @@ -6057,6 +7064,24 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 + languageName: node + linkType: hard + +"eslint-plugin-react-refresh@npm:^0.4.3": + version: 0.4.3 + resolution: "eslint-plugin-react-refresh@npm:0.4.3" + peerDependencies: + eslint: ">=7" + checksum: 0332c950bb46c3058fd06acb1dbdc3ea0af05238645f4c0f575e0e367440dc56afb928f855833d321b9e8109e08c63d5f476cc55d507f883a80c289bfcd509cb + languageName: node + linkType: hard + "eslint-plugin-tsdoc@npm:^0.2.17": version: 0.2.17 resolution: "eslint-plugin-tsdoc@npm:0.2.17" @@ -6094,6 +7119,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + "eslint@npm:^8.21.0, eslint@npm:^8.35.0, eslint@npm:^8.37.0": version: 8.46.0 resolution: "eslint@npm:8.46.0" @@ -6141,6 +7173,53 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.45.0": + version: 8.48.0 + resolution: "eslint@npm:8.48.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.48.0 + "@humanwhocodes/config-array": ^0.11.10 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: f20b359a4f8123fec5c033577368cc020d42978b1b45303974acd8da7a27063168ee3fe297ab5b35327162f6a93154063e3ce6577102f70f9809aff793db9bd0 + languageName: node + linkType: hard + "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -6201,6 +7280,13 @@ __metadata: languageName: node linkType: hard +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + "event-iterator@npm:^2.0.0": version: 2.0.0 resolution: "event-iterator@npm:2.0.0" @@ -6223,7 +7309,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.7": +"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.7": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 @@ -6248,7 +7334,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": +"execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -6303,6 +7389,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.6.4": + version: 29.6.4 + resolution: "expect@npm:29.6.4" + dependencies: + "@jest/expect-utils": ^29.6.4 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + checksum: 019b187d665562e4948b239e011a8791363e916f3076a229298d625e67fdadb06e8c2748798c49b4cf418ea223673eadd1de06537e08ba3c055c6f0efefc2306 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -6310,6 +7409,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.17.3": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: ~1.1.2 + on-finished: 2.4.1 + parseurl: ~1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: ~2.0.7 + qs: 6.11.0 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + languageName: node + linkType: hard + "extract-zip@npm:2.0.1": version: 2.0.1 resolution: "extract-zip@npm:2.0.1" @@ -6341,7 +7479,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": version: 3.3.1 resolution: "fast-glob@npm:3.3.1" dependencies: @@ -6375,6 +7513,15 @@ __metadata: languageName: node linkType: hard +"fast-url-parser@npm:1.1.3": + version: 1.1.3 + resolution: "fast-url-parser@npm:1.1.3" + dependencies: + punycode: ^1.3.2 + checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.12": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -6391,6 +7538,15 @@ __metadata: languageName: node linkType: hard +"faye-websocket@npm:^0.11.3": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: ">=0.5.1" + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + languageName: node + linkType: hard + "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -6416,6 +7572,16 @@ __metadata: languageName: node linkType: hard +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: f19bc28a2a0b9626e69fd7cf3a05798706db7f6c7548da657cbf5026a570945f5eeaedff52007ea35c8bcd3d237c58a20bf1543bc568ab2422411d762dd3d5bf + languageName: node + linkType: hard + "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -6443,6 +7609,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: 2.4.1 + parseurl: ~1.3.3 + statuses: 2.0.1 + unpipe: ~1.0.0 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + languageName: node + linkType: hard + "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -6487,6 +7668,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.0.0": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" + peerDependenciesMeta: + debug: + optional: true + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -6517,6 +7708,15 @@ __metadata: languageName: node linkType: hard +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: ^3.1.2 + checksum: 82a34df292afadd82b43d4a740ce387bc08541e0a534358425193017bf9fb3567875dc5f69564984b1da979979b70703aa73dee715a17b6c229752ae736dd9db + languageName: node + linkType: hard + "formidable@npm:^2.1.2": version: 2.1.2 resolution: "formidable@npm:2.1.2" @@ -6529,6 +7729,37 @@ __metadata: languageName: node linkType: hard +"formik@npm:^2.4.3": + version: 2.4.3 + resolution: "formik@npm:2.4.3" + dependencies: + deepmerge: ^2.1.1 + hoist-non-react-statics: ^3.3.0 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-fast-compare: ^2.0.1 + tiny-warning: ^1.0.2 + tslib: ^2.0.0 + peerDependencies: + react: ">=16.8.0" + checksum: d98dabfce97beb5cf2ff10bdaff61e0cb9e1d29090cfcad706efc793d06674cfe65299d432d32518a2756a58b6b6bfe85ceec8b47b4f5f9dcc375bcd7a37107a + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + +"fraction.js@npm:^4.2.0": + version: 4.3.6 + resolution: "fraction.js@npm:4.3.6" + checksum: e96ae77e64ebfd442d3a5a01a3f0637b0663fc2440bcf2841b3ad9341ba24c81fb2e3e7142e43ef7d088558c6b3f8609df135b201adc7a1c674aea6a71384162 + languageName: node + linkType: hard + "freeport-promise@npm:^2.0.0": version: 2.0.0 resolution: "freeport-promise@npm:2.0.0" @@ -6536,7 +7767,7 @@ __metadata: languageName: node linkType: hard -"fresh@npm:~0.5.2": +"fresh@npm:0.5.2, fresh@npm:~0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 @@ -6590,6 +7821,13 @@ __metadata: languageName: node linkType: hard +"fs-monkey@npm:^1.0.4": + version: 1.0.4 + resolution: "fs-monkey@npm:1.0.4" + checksum: 8b254c982905c0b7e028eab22b410dc35a5c0019c1c860456f5f54ae6a61666e1cb8c6b700d6c88cc873694c00953c935847b9959cc4dcf274aacb8673c1e8bf + languageName: node + linkType: hard + "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -6759,7 +7997,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -6768,7 +8006,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.2": +"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -6784,6 +8022,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.6": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + languageName: node + linkType: hard + "glob@npm:^10.2.2": version: 10.3.3 resolution: "glob@npm:10.3.3" @@ -6852,7 +8104,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.3": +"globby@npm:^13.1.1, globby@npm:^13.1.3": version: 13.2.2 resolution: "globby@npm:13.2.2" dependencies: @@ -6888,6 +8140,13 @@ __metadata: languageName: node linkType: hard +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + languageName: node + linkType: hard + "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" @@ -7017,6 +8276,15 @@ __metadata: languageName: node linkType: hard +"hoist-non-react-statics@npm:^3.3.0": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -7024,6 +8292,25 @@ __metadata: languageName: node linkType: hard +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: ^2.0.1 + obuf: ^1.0.0 + readable-stream: ^2.0.1 + wbuf: ^1.1.0 + checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e + languageName: node + linkType: hard + +"html-entities@npm:^2.3.2": + version: 2.4.0 + resolution: "html-entities@npm:2.4.0" + checksum: 25bea32642ce9ebd0eedc4d24381883ecb0335ccb8ac26379a0958b9b16652fdbaa725d70207ce54a51db24103436a698a8e454397d3ba8ad81460224751f1dc + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7048,6 +8335,13 @@ __metadata: languageName: node linkType: hard +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 + languageName: node + linkType: hard + "http-errors@npm:2.0.0, http-errors@npm:^2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -7086,6 +8380,13 @@ __metadata: languageName: node linkType: hard +"http-parser-js@npm:>=0.5.1": + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + languageName: node + linkType: hard + "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -7107,6 +8408,35 @@ __metadata: languageName: node linkType: hard +"http-proxy-middleware@npm:^2.0.3": + version: 2.0.6 + resolution: "http-proxy-middleware@npm:2.0.6" + dependencies: + "@types/http-proxy": ^1.17.8 + http-proxy: ^1.18.1 + is-glob: ^4.0.1 + is-plain-obj: ^3.0.0 + micromatch: ^4.0.2 + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 2ee85bc878afa6cbf34491e972ece0f5be0a3e5c98a60850cf40d2a9a5356e1fc57aab6cff33c1fc37691b0121c3a42602d2b1956c52577e87a5b77b62ae1c3a + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -7168,6 +8498,15 @@ __metadata: languageName: node linkType: hard +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + "ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -7182,7 +8521,14 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -7235,7 +8581,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -7249,6 +8595,13 @@ __metadata: languageName: node linkType: hard +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + "interface-datastore@npm:^8.2.0": version: 8.2.3 resolution: "interface-datastore@npm:8.2.3" @@ -7306,7 +8659,14 @@ __metadata: languageName: node linkType: hard -"ipaddr.js@npm:^2.1.0": +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.0.1, ipaddr.js@npm:^2.1.0": version: 2.1.0 resolution: "ipaddr.js@npm:2.1.0" checksum: 807a054f2bd720c4d97ee479d6c9e865c233bea21f139fb8dabd5a35c4226d2621c42e07b4ad94ff3f82add926a607d8d9d37c625ad0319f0e08f9f2bd1968e2 @@ -7357,6 +8717,15 @@ __metadata: languageName: node linkType: hard +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" @@ -7390,6 +8759,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.13.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: ^1.0.3 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -7399,7 +8777,7 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0": +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" bin: @@ -7454,7 +8832,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -7532,6 +8910,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -7541,6 +8926,13 @@ __metadata: languageName: node linkType: hard +"is-port-reachable@npm:4.0.0": + version: 4.0.0 + resolution: "is-port-reachable@npm:4.0.0" + checksum: 47b7e10db8edcef27fbf9e50f0de85ad368d35688790ca64a13db67260111ac5f4b98989b11af06199fa93f25d810bd09a5b21b2c2646529668638f7c34d3c04 + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -7626,7 +9018,14 @@ __metadata: languageName: node linkType: hard -"isexe@npm:^2.0.0": +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 @@ -7669,6 +9068,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.0 + resolution: "istanbul-lib-instrument@npm:6.0.0" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: b9dc3723a769e65dbe1b912f935088ffc07cf393fa78a3ce79022c91aabb0ad01405ffd56083cdd822e514798e9daae3ea7bfe85633b094ecb335d28eb0a3f97 + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.1 resolution: "istanbul-lib-report@npm:3.0.1" @@ -7962,6 +9374,17 @@ __metadata: languageName: node linkType: hard +"jest-changed-files@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-changed-files@npm:29.6.3" + dependencies: + execa: ^5.0.0 + jest-util: ^29.6.3 + p-limit: ^3.1.0 + checksum: 55bc820a70c220a02fec214d5c48d5e0d829549e5c7b9959776b4ca3f76f5ff20c7c8ff816a847822766f1d712477ab3027f7a66ec61bf65de3f852e878b4dfd + languageName: node + linkType: hard + "jest-circus@npm:^29.6.2": version: 29.6.2 resolution: "jest-circus@npm:29.6.2" @@ -7990,6 +9413,34 @@ __metadata: languageName: node linkType: hard +"jest-circus@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-circus@npm:29.6.4" + dependencies: + "@jest/environment": ^29.6.4 + "@jest/expect": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^1.0.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.6.3 + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-runtime: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 + p-limit: ^3.1.0 + pretty-format: ^29.6.3 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 31f64ddf6df4aefe30ef5f8de9da137c9cba58ab5e2a25cf749450735088dc88a9974591a4256d481af0fe64608173c921219f9fad9a7dd87cbe47a79e111be8 + languageName: node + linkType: hard + "jest-cli@npm:^29.6.2": version: 29.6.2 resolution: "jest-cli@npm:29.6.2" @@ -8017,6 +9468,33 @@ __metadata: languageName: node linkType: hard +"jest-cli@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-cli@npm:29.6.4" + dependencies: + "@jest/core": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 87a85a27eff0e502717b6ee0ce861d3e50d8c47d7298477f8ca10964b958f06c20241d28f1360ce2a85072763483e4924248106a8ed530ca460a56db3fdfc53e + languageName: node + linkType: hard + "jest-config@npm:^29.6.2": version: 29.6.2 resolution: "jest-config@npm:29.6.2" @@ -8055,6 +9533,44 @@ __metadata: languageName: node linkType: hard +"jest-config@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-config@npm:29.6.4" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.6.4 + "@jest/types": ^29.6.3 + babel-jest: ^29.6.4 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.6.4 + jest-environment-node: ^29.6.4 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.6.4 + jest-runner: ^29.6.4 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.6.3 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 177352658774344896df3988dbe892e0b117579f45cc43aebc588493665bf19a557e202f097f5b4a987314ec2d84afa0769299ac6e702c5923d1fd3cfa4692b0 + languageName: node + linkType: hard + "jest-diff@npm:^29.6.2": version: 29.6.2 resolution: "jest-diff@npm:29.6.2" @@ -8067,6 +9583,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-diff@npm:29.6.4" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.6.3 + checksum: e205c45ab6dbcc660dc2a682cddb20f6a3cbbbdecd2821cce2050619f96dbd7560ee25f7f51d42c302596aeaddbea54390b78be3ab639340d24d67e4d270a8b0 + languageName: node + linkType: hard + "jest-docblock@npm:^29.4.3": version: 29.4.3 resolution: "jest-docblock@npm:29.4.3" @@ -8076,6 +9604,15 @@ __metadata: languageName: node linkType: hard +"jest-docblock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-docblock@npm:29.6.3" + dependencies: + detect-newline: ^3.0.0 + checksum: 6f3213a1e79e7eedafeb462acfa9a41303f9c0167893b140f6818fa16d7eb6bf3f9b9cf4669097ca6b7154847793489ecd6b4f6cfb0e416b88cfa3b4b36715b6 + languageName: node + linkType: hard + "jest-each@npm:^29.6.2": version: 29.6.2 resolution: "jest-each@npm:29.6.2" @@ -8089,6 +9626,19 @@ __metadata: languageName: node linkType: hard +"jest-each@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-each@npm:29.6.3" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + jest-util: ^29.6.3 + pretty-format: ^29.6.3 + checksum: fe06e80b3554e2a8464f5f5c61943e02db1f8a7177139cb55b3201a1d1513cb089d8800401f102729a31bf8dd6f88229044e6088fea9dd5647ed11e841b6b88c + languageName: node + linkType: hard + "jest-environment-node@npm:^29.6.2": version: 29.6.2 resolution: "jest-environment-node@npm:29.6.2" @@ -8103,6 +9653,20 @@ __metadata: languageName: node linkType: hard +"jest-environment-node@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-environment-node@npm:29.6.4" + dependencies: + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.6.3 + jest-util: ^29.6.3 + checksum: 518221505af4bd32c84f2af2c03f9d771de2711bd69fe7723b648fcc2e05d95b4e75f493afa9010209e26a4a3309ebee971f9b18c45b540891771d3b68c3a16e + languageName: node + linkType: hard + "jest-get-type@npm:^29.4.3": version: 29.4.3 resolution: "jest-get-type@npm:29.4.3" @@ -8110,6 +9674,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + "jest-haste-map@npm:^29.6.2": version: 29.6.2 resolution: "jest-haste-map@npm:29.6.2" @@ -8133,6 +9704,29 @@ __metadata: languageName: node linkType: hard +"jest-haste-map@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-haste-map@npm:29.6.4" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.6.3 + jest-worker: ^29.6.4 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 4f720fd3813bb38400b7a9a094e55664cbddd907ba1769457ed746f6c870c615167647a5b697a788183d832b1dcb1b66143e52990a6f4403283f6686077fa868 + languageName: node + linkType: hard + "jest-leak-detector@npm:^29.6.2": version: 29.6.2 resolution: "jest-leak-detector@npm:29.6.2" @@ -8143,6 +9737,16 @@ __metadata: languageName: node linkType: hard +"jest-leak-detector@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-leak-detector@npm:29.6.3" + dependencies: + jest-get-type: ^29.6.3 + pretty-format: ^29.6.3 + checksum: 27548fcfc7602fe1b88f8600185e35ffff71751f3631e52bbfdfc72776f5a13a430185cf02fc632b41320a74f99ae90e40ce101c8887509f0f919608a7175129 + languageName: node + linkType: hard + "jest-matcher-utils@npm:^29.6.2": version: 29.6.2 resolution: "jest-matcher-utils@npm:29.6.2" @@ -8155,6 +9759,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-matcher-utils@npm:29.6.4" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.6.4 + jest-get-type: ^29.6.3 + pretty-format: ^29.6.3 + checksum: 9e17bce282e74bdbba2ce5475c490e0bba4f464cd42132bfc5df0337e0853af4dba925c7f4f61cbb0a4818fa121d28d7ff0196ec8829773a22fce59a822976d2 + languageName: node + linkType: hard + "jest-message-util@npm:^29.6.2": version: 29.6.2 resolution: "jest-message-util@npm:29.6.2" @@ -8172,6 +9788,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-message-util@npm:29.6.3" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.6.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 59f5229a06c073a8877ba4d2e304cc07d63b0062bf5764d4bed14364403889e77f1825d1bd9017c19a840847d17dffd414dc06f1fcb537b5f9e03dbc65b84ada + languageName: node + linkType: hard + "jest-mock-extended@npm:^3.0.3, jest-mock-extended@npm:^3.0.4": version: 3.0.4 resolution: "jest-mock-extended@npm:3.0.4" @@ -8207,6 +9840,17 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-mock@npm:29.6.3" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.6.3 + checksum: 35772968010c0afb1bb1ef78570b9cbea907c6f967d24b4e95e1a596a1000c63d60e225fb9ddfdd5218674da4aa61d92a09927fc26310cecbbfaa8278d919e32 + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" @@ -8226,6 +9870,13 @@ __metadata: languageName: node linkType: hard +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + "jest-resolve-dependencies@npm:^29.6.2": version: 29.6.2 resolution: "jest-resolve-dependencies@npm:29.6.2" @@ -8236,6 +9887,16 @@ __metadata: languageName: node linkType: hard +"jest-resolve-dependencies@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve-dependencies@npm:29.6.4" + dependencies: + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.6.4 + checksum: 34f81d22cbd72203130cc14cbb66d5783d9f59fba4d366b9653f8fb4f6feeaac25d89696f2f77c700659843d5440dc92f58ad443ba05da1da46c39234866d916 + languageName: node + linkType: hard + "jest-resolve@npm:^29.6.2": version: 29.6.2 resolution: "jest-resolve@npm:29.6.2" @@ -8253,6 +9914,23 @@ __metadata: languageName: node linkType: hard +"jest-resolve@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-resolve@npm:29.6.4" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.4 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.6.3 + jest-validate: ^29.6.3 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 5f0ef260aec79ef00e16e0ba7b27d527054e1faed08a144279cd191b5c5b71af67c52b9ddfd24aa2f563d254618ce9bf7519809f23fb2abf6c4fa375503caa28 + languageName: node + linkType: hard + "jest-runner@npm:^29.6.2": version: 29.6.2 resolution: "jest-runner@npm:29.6.2" @@ -8282,6 +9960,35 @@ __metadata: languageName: node linkType: hard +"jest-runner@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runner@npm:29.6.4" + dependencies: + "@jest/console": ^29.6.4 + "@jest/environment": ^29.6.4 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.6.3 + jest-environment-node: ^29.6.4 + jest-haste-map: ^29.6.4 + jest-leak-detector: ^29.6.3 + jest-message-util: ^29.6.3 + jest-resolve: ^29.6.4 + jest-runtime: ^29.6.4 + jest-util: ^29.6.3 + jest-watcher: ^29.6.4 + jest-worker: ^29.6.4 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: ca977dd30262171fe000de8407a3187c16e7057ddf690bcc21068155aacd4824ee927b544e0fa9f2885948b47a5123b472da41e095e3bcbdebb79f1fa2f2fc56 + languageName: node + linkType: hard + "jest-runtime@npm:^29.6.2": version: 29.6.2 resolution: "jest-runtime@npm:29.6.2" @@ -8312,6 +10019,36 @@ __metadata: languageName: node linkType: hard +"jest-runtime@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-runtime@npm:29.6.4" + dependencies: + "@jest/environment": ^29.6.4 + "@jest/fake-timers": ^29.6.4 + "@jest/globals": ^29.6.4 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.6.4 + "@jest/transform": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.6.4 + jest-message-util: ^29.6.3 + jest-mock: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.6.4 + jest-snapshot: ^29.6.4 + jest-util: ^29.6.3 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: 93deacd06f8f2bb808dbfb8acbcbc0b724187b3d3fffafd497a32c939bf385ca21f5a3f03eebd5b958a0e93865d0e68a0db73bd0fe16dafbd5e922558aa7b359 + languageName: node + linkType: hard + "jest-snapshot@npm:^29.6.2": version: 29.6.2 resolution: "jest-snapshot@npm:29.6.2" @@ -8340,6 +10077,34 @@ __metadata: languageName: node linkType: hard +"jest-snapshot@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-snapshot@npm:29.6.4" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.6.4 + "@jest/transform": ^29.6.4 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.6.4 + graceful-fs: ^4.2.9 + jest-diff: ^29.6.4 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.6.4 + jest-message-util: ^29.6.3 + jest-util: ^29.6.3 + natural-compare: ^1.4.0 + pretty-format: ^29.6.3 + semver: ^7.5.3 + checksum: 0c9b5ec640457fb780ac6c9b6caa814436e9e16bf744772eee3bfd055ae5f7a3085a6a09b2f30910e31915dafc3955d92357cc98189e4d5dcb417b5fdafda6e3 + languageName: node + linkType: hard + "jest-util@npm:^29.0.0, jest-util@npm:^29.6.2": version: 29.6.2 resolution: "jest-util@npm:29.6.2" @@ -8354,6 +10119,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-util@npm:29.6.3" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 7bf3ba3ac67ac6ceff7d8fdd23a86768e23ddd9133ecd9140ef87cc0c28708effabaf67a6cd45cd9d90a63d645a522ed0825d09ee59ac4c03b9c473b1fef4c7c + languageName: node + linkType: hard + "jest-validate@npm:^29.6.2": version: 29.6.2 resolution: "jest-validate@npm:29.6.2" @@ -8368,6 +10147,20 @@ __metadata: languageName: node linkType: hard +"jest-validate@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-validate@npm:29.6.3" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.6.3 + checksum: caa489ed11080441c636b8035ab71bafbdc0c052b1e452855e4d2dd24ac15e497710a270ea6fc5ef8926b22c1ce4d6e07ec2dc193f0810cff5851d7a2222c045 + languageName: node + linkType: hard + "jest-watcher@npm:^29.6.2": version: 29.6.2 resolution: "jest-watcher@npm:29.6.2" @@ -8384,6 +10177,22 @@ __metadata: languageName: node linkType: hard +"jest-watcher@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-watcher@npm:29.6.4" + dependencies: + "@jest/test-result": ^29.6.4 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.6.3 + string-length: ^4.0.1 + checksum: 13c0f96f7e9212e4f3ef2daf3e787045bdcec414061bf286eca934c7f4083fb04d38df9ced9c0edfbe15f3521ca581eb2ed6108c338a0db1f3e1def65687992f + languageName: node + linkType: hard + "jest-worker@npm:^27.4.5": version: 27.5.1 resolution: "jest-worker@npm:27.5.1" @@ -8407,6 +10216,18 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^29.6.4": + version: 29.6.4 + resolution: "jest-worker@npm:29.6.4" + dependencies: + "@types/node": "*" + jest-util: ^29.6.3 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 05d19a5759ebfeb964036065be55ad8d8e8ddffa85d9b3a4c0b95765695efb1d8226ec824a4d8e660c38cda3389bfeb98d819f47232acf9fb0e79f553b7c0a76 + languageName: node + linkType: hard + "jest@npm:^29.5.0": version: 29.6.2 resolution: "jest@npm:29.6.2" @@ -8426,6 +10247,34 @@ __metadata: languageName: node linkType: hard +"jest@npm:^29.6.4": + version: 29.6.4 + resolution: "jest@npm:29.6.4" + dependencies: + "@jest/core": ^29.6.4 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.6.4 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f + languageName: node + linkType: hard + +"jiti@npm:^1.18.2": + version: 1.19.3 + resolution: "jiti@npm:1.19.3" + bin: + jiti: bin/jiti.js + checksum: de3dacdfe30948d96b69712b04cc28127c17f43d5233a5aa069933e04ac4c9aaf265bef4cdf2b0c2a6f5af236a58aea9bfea83e8e289e2490802bdff7f99bff7 + languageName: node + linkType: hard + "jju@npm:~1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" @@ -8433,7 +10282,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^4.0.0": +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 @@ -8493,6 +10342,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -8552,6 +10408,18 @@ __metadata: languageName: node linkType: hard +"jszip@npm:^3.10.1": + version: 3.10.1 + resolution: "jszip@npm:3.10.1" + dependencies: + lie: ~3.3.0 + pako: ~1.0.2 + readable-stream: ~2.3.6 + setimmediate: ^1.0.5 + checksum: abc77bfbe33e691d4d1ac9c74c8851b5761fba6a6986630864f98d876f3fcc2d36817dfc183779f32c00157b5d53a016796677298272a714ae096dfe6b1c8b60 + languageName: node + linkType: hard + "keygrip@npm:~1.1.0": version: 1.1.0 resolution: "keygrip@npm:1.1.0" @@ -8693,6 +10561,16 @@ __metadata: languageName: node linkType: hard +"launch-editor@npm:^2.6.0": + version: 2.6.0 + resolution: "launch-editor@npm:2.6.0" + dependencies: + picocolors: ^1.0.0 + shell-quote: ^1.7.3 + checksum: 48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d + languageName: node + linkType: hard + "level-concat-iterator@npm:^3.0.0": version: 3.1.0 resolution: "level-concat-iterator@npm:3.1.0" @@ -8823,6 +10701,22 @@ __metadata: languageName: node linkType: hard +"lie@npm:~3.3.0": + version: 3.3.0 + resolution: "lie@npm:3.3.0" + dependencies: + immediate: ~3.0.5 + checksum: 33102302cf19766f97919a6a98d481e01393288b17a6aa1f030a3542031df42736edde8dab29ffdbf90bebeffc48c761eb1d064dc77592ca3ba3556f9fe6d2a8 + languageName: node + linkType: hard + +"lilconfig@npm:^2.0.5, lilconfig@npm:^2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -8867,6 +10761,13 @@ __metadata: languageName: node linkType: hard +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 + languageName: node + linkType: hard + "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -9045,6 +10946,17 @@ __metadata: languageName: node linkType: hard +"loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -9200,6 +11112,15 @@ __metadata: languageName: node linkType: hard +"memfs@npm:^3.4.3": + version: 3.5.3 + resolution: "memfs@npm:3.5.3" + dependencies: + fs-monkey: ^1.0.4 + checksum: 18dfdeacad7c8047b976a6ccd58bc98ba76e122ad3ca0e50a21837fe2075fc0d9aafc58ab9cf2576c2b6889da1dd2503083f2364191b695273f40969db2ecc44 + languageName: node + linkType: hard + "meow@npm:^7.1.1": version: 7.1.1 resolution: "meow@npm:7.1.1" @@ -9219,6 +11140,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.1": + version: 1.0.1 + resolution: "merge-descriptors@npm:1.0.1" + checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 + languageName: node + linkType: hard + "merge-options@npm:^3.0.4": version: 3.0.4 resolution: "merge-options@npm:3.0.4" @@ -9242,14 +11170,14 @@ __metadata: languageName: node linkType: hard -"methods@npm:^1.1.2": +"methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a languageName: node linkType: hard -"micromatch@npm:^4.0.0, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -9278,7 +11206,23 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-db@npm:~1.33.0": + version: 1.33.0 + resolution: "mime-db@npm:1.33.0" + checksum: 281a0772187c9b8f6096976cb193ac639c6007ac85acdbb8dc1617ed7b0f4777fa001d1b4f1b634532815e60717c84b2f280201d55677fb850c9d45015b50084 + languageName: node + linkType: hard + +"mime-types@npm:2.1.18": + version: 2.1.18 + resolution: "mime-types@npm:2.1.18" + dependencies: + mime-db: ~1.33.0 + checksum: 729265eff1e5a0e87cb7f869da742a610679585167d2f2ec997a7387fc6aedf8e5cad078e99b0164a927bdf3ace34fca27430d6487456ad090cba5594441ba43 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -9287,6 +11231,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + "mime@npm:2.6.0": version: 2.6.0 resolution: "mime@npm:2.6.0" @@ -9331,7 +11284,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -9500,6 +11453,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -9507,13 +11467,25 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" + dependencies: + dns-packet: ^5.2.2 + thunky: ^1.0.2 + bin: + multicast-dns: cli.js + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb + languageName: node + linkType: hard + "multiformats@npm:^11.0.0, multiformats@npm:^11.0.2": version: 11.0.2 resolution: "multiformats@npm:11.0.2" @@ -9528,6 +11500,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + "nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" @@ -9604,6 +11587,13 @@ __metadata: languageName: node linkType: hard +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f + languageName: node + linkType: hard + "node-fetch@npm:^2.6.12": version: 2.6.12 resolution: "node-fetch@npm:2.6.12" @@ -9618,7 +11608,18 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1.1.0": +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: ^4.0.0 + fetch-blob: ^3.1.4 + formdata-polyfill: ^4.0.10 + checksum: 06a04095a2ddf05b0830a0d5302699704d59bda3102894ea64c7b9d4c865ecdff2d90fd042df7f5bc40337266961cb6183dcc808ea4f3000d024f422b462da92 + languageName: node + linkType: hard + +"node-forge@npm:^1, node-forge@npm:^1.1.0": version: 1.3.1 resolution: "node-forge@npm:1.3.1" checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 @@ -9694,13 +11695,20 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0": +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 languageName: node linkType: hard +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -9731,6 +11739,13 @@ __metadata: languageName: node linkType: hard +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + "object-hash@npm:^2.0.1": version: 2.2.0 resolution: "object-hash@npm:2.2.0" @@ -9738,6 +11753,13 @@ __metadata: languageName: node linkType: hard +"object-hash@npm:^3.0.0": + version: 3.0.0 + resolution: "object-hash@npm:3.0.0" + checksum: 80b4904bb3857c52cc1bfd0b52c0352532ca12ed3b8a6ff06a90cd209dfda1b95cee059a7625eb9da29537027f68ac4619363491eedb2f5d3dddbba97494fd6c + languageName: node + linkType: hard + "object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": version: 1.12.3 resolution: "object-inspect@npm:1.12.3" @@ -9805,7 +11827,14 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:^2.3.0": +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f + languageName: node + linkType: hard + +"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -9814,6 +11843,13 @@ __metadata: languageName: node linkType: hard +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -9857,6 +11893,17 @@ __metadata: languageName: node linkType: hard +"open@npm:^8.0.9": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + languageName: node + linkType: hard + "open@npm:^9.1.0": version: 9.1.0 resolution: "open@npm:9.1.0" @@ -9954,6 +12001,16 @@ __metadata: languageName: node linkType: hard +"p-retry@npm:^4.5.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + languageName: node + linkType: hard + "p-retry@npm:^5.0.0": version: 5.1.2 resolution: "p-retry@npm:5.1.2" @@ -10019,6 +12076,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:~1.0.2": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 1be2bfa1f807608c7538afa15d6f25baa523c30ec870a3228a89579e474a4d992f4293859524e46d5d87fd30fa17c5edf34dbef0671251d9749820b488660b16 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -10053,7 +12117,7 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:^1.3.2": +"parseurl@npm:^1.3.2, parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 @@ -10074,6 +12138,13 @@ __metadata: languageName: node linkType: hard +"path-is-inside@npm:1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 0b5b6c92d3018b82afb1f74fe6de6338c4c654de4a96123cb343f2b747d5606590ac0c890f956ed38220a4ab59baddfd7b713d78a62d240b20b14ab801fa02cb + languageName: node + linkType: hard + "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -10105,6 +12176,20 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.7": + version: 0.1.7 + resolution: "path-to-regexp@npm:0.1.7" + checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce + languageName: node + linkType: hard + +"path-to-regexp@npm:2.2.1": + version: 2.2.1 + resolution: "path-to-regexp@npm:2.2.1" + checksum: b921a74e7576e25b06ad1635abf7e8125a29220d2efc2b71d74b9591f24a27e6f09078fa9a1b27516a097ea0637b7cab79d19b83d7f36a8ef3ef5422770e89d9 + languageName: node + linkType: hard + "path-to-regexp@npm:^6.2.1": version: 6.2.1 resolution: "path-to-regexp@npm:6.2.1" @@ -10155,14 +12240,21 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"pirates@npm:^4.0.4": +"pify@npm:^2.3.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 @@ -10185,6 +12277,145 @@ __metadata: languageName: node linkType: hard +"postcss-import@npm:^15.1.0": + version: 15.1.0 + resolution: "postcss-import@npm:15.1.0" + dependencies: + postcss-value-parser: ^4.0.0 + read-cache: ^1.0.0 + resolve: ^1.1.7 + peerDependencies: + postcss: ^8.0.0 + checksum: 7bd04bd8f0235429009d0022cbf00faebc885de1d017f6d12ccb1b021265882efc9302006ba700af6cab24c46bfa2f3bc590be3f9aee89d064944f171b04e2a3 + languageName: node + linkType: hard + +"postcss-js@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" + dependencies: + camelcase-css: ^2.0.1 + peerDependencies: + postcss: ^8.4.21 + checksum: 5c1e83efeabeb5a42676193f4357aa9c88f4dc1b3c4a0332c132fe88932b33ea58848186db117cf473049fc233a980356f67db490bd0a7832ccba9d0b3fd3491 + languageName: node + linkType: hard + +"postcss-load-config@npm:^4.0.1": + version: 4.0.1 + resolution: "postcss-load-config@npm:4.0.1" + dependencies: + lilconfig: ^2.0.5 + yaml: ^2.1.1 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: b61f890499ed7dcda1e36c20a9582b17d745bad5e2b2c7bc96942465e406bc43ae03f270c08e60d1e29dab1ee50cb26970b5eb20c9aae30e066e20bd607ae4e4 + languageName: node + linkType: hard + +"postcss-loader@npm:^7.3.3": + version: 7.3.3 + resolution: "postcss-loader@npm:7.3.3" + dependencies: + cosmiconfig: ^8.2.0 + jiti: ^1.18.2 + semver: ^7.3.8 + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + checksum: c724044d6ae56334535c26bb4efc9c151431d44d60bc8300157c760747281a242757d8dab32db72738434531175b38a408cb0b270bb96207c07584dcfcd899ff + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-extract-imports@npm:3.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.3": + version: 4.0.3 + resolution: "postcss-modules-local-by-default@npm:4.0.3" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 2f8083687f3d6067885f8863dd32dbbb4f779cfcc7e52c17abede9311d84faf6d3ed8760e7c54c6380281732ae1f78e5e56a28baf3c271b33f450a11c9e30485 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-modules-scope@npm:3.0.0" + dependencies: + postcss-selector-parser: ^6.0.4 + peerDependencies: + postcss: ^8.1.0 + checksum: 330b9398dbd44c992c92b0dc612c0626135e2cc840fee41841eb61247a6cfed95af2bd6f67ead9dd9d0bb41f5b0367129d93c6e434fa3e9c58ade391d9a5a138 + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-nested@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-nested@npm:6.0.1" + dependencies: + postcss-selector-parser: ^6.0.11 + peerDependencies: + postcss: ^8.2.14 + checksum: 7ddb0364cd797de01e38f644879189e0caeb7ea3f78628c933d91cc24f327c56d31269384454fc02ecaf503b44bfa8e08870a7c4cc56b23bc15640e1894523fa + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.13 + resolution: "postcss-selector-parser@npm:6.0.13" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: f89163338a1ce3b8ece8e9055cd5a3165e79a15e1c408e18de5ad8f87796b61ec2d48a2902d179ae0c4b5de10fccd3a325a4e660596549b040bc5ad1b465f096 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:^8.4.21, postcss@npm:^8.4.23, postcss@npm:^8.4.29": + version: 8.4.29 + resolution: "postcss@npm:8.4.29" + dependencies: + nanoid: ^3.3.6 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: dd6daa25e781db9ae5b651d9b7bfde0ec6e60e86a37da69a18eb4773d5ddd51e28fc4ff054fbdc04636a31462e6bf09a1e50986f69ac52b10d46b7457cd36d12 + languageName: node + linkType: hard + "postcss@npm:^8.4.26": version: 8.4.27 resolution: "postcss@npm:8.4.27" @@ -10212,6 +12443,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.6.2": version: 29.6.2 resolution: "pretty-format@npm:29.6.2" @@ -10223,6 +12463,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.6.3": + version: 29.6.3 + resolution: "pretty-format@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 4e1c0db48e65571c22e80ff92123925ff8b3a2a89b71c3a1683cfde711004d492de32fe60c6bc10eea8bf6c678e5cbe544ac6c56cb8096e1eb7caf856928b1c4 + languageName: node + linkType: hard + "private-ip@npm:^3.0.0": version: 3.0.1 resolution: "private-ip@npm:3.0.1" @@ -10235,6 +12486,57 @@ __metadata: languageName: node linkType: hard +"private-token@workspace:boxes/private-token": + version: 0.0.0-use.local + resolution: "private-token@workspace:boxes/private-token" + dependencies: + "@aztec/aztec.js": "workspace:^" + "@aztec/circuits.js": "workspace:^" + "@aztec/cli": "workspace:^" + "@aztec/foundation": "workspace:^" + "@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 + formik: ^2.4.3 + jest: ^29.6.4 + postcss: ^8.4.29 + postcss-loader: ^7.3.3 + prettier: ^3.0.3 + react: ^18.2.0 + react-dom: ^18.2.0 + resolve-typescript-plugin: ^2.0.1 + serve: ^14.2.1 + style-loader: ^3.3.3 + tailwindcss: ^3.3.3 + ts-jest: ^29.1.0 + ts-loader: ^9.4.4 + ts-node: ^10.9.1 + typescript: ^5.0.4 + util: ^0.12.5 + webpack: ^5.88.2 + webpack-cli: ^5.1.4 + webpack-dev-server: ^4.15.1 + yup: ^1.2.0 + languageName: unknown + linkType: soft + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -10285,6 +12587,13 @@ __metadata: languageName: node linkType: hard +"property-expr@npm:^2.0.5": + version: 2.0.5 + resolution: "property-expr@npm:2.0.5" + checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 + languageName: node + linkType: hard + "protobufjs@npm:^7.0.0": version: 7.2.4 resolution: "protobufjs@npm:7.2.4" @@ -10317,6 +12626,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + "proxy-agent@npm:6.3.0": version: 6.3.0 resolution: "proxy-agent@npm:6.3.0" @@ -10375,6 +12694,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^1.3.2": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" @@ -10444,6 +12770,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.11.0": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + "qs@npm:^6.11.0, qs@npm:^6.5.2": version: 6.11.2 resolution: "qs@npm:6.11.2" @@ -10493,6 +12828,20 @@ __metadata: languageName: node linkType: hard +"range-parser@npm:1.2.0": + version: 1.2.0 + resolution: "range-parser@npm:1.2.0" + checksum: bdf397f43fedc15c559d3be69c01dedf38444ca7a1610f5bf5955e3f3da6057a892f34691e7ebdd8c7e1698ce18ef6c4d4811f70e658dda3ff230ef741f8423a + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + "rate-limiter-flexible@npm:^2.3.11": version: 2.4.2 resolution: "rate-limiter-flexible@npm:2.4.2" @@ -10500,15 +12849,67 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:^2.3.3": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e + languageName: node + linkType: hard + +"raw-body@npm:^2.3.3": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 + languageName: node + linkType: hard + +"rc@npm:^1.0.1, rc@npm:^1.1.6": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + scheduler: ^0.23.0 + peerDependencies: + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc + languageName: node + linkType: hard + +"react-fast-compare@npm:^2.0.1": + version: 2.0.4 + resolution: "react-fast-compare@npm:2.0.4" + checksum: 06046595f90a4e3e3a56f40a8078c00aa71bdb064ddb98343f577f546aa22e888831fd45f009c93b34707cc842b4c637737e956fd13d6f80607ee92fb9cf9a1c + languageName: node + linkType: hard + +"react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard @@ -10519,6 +12920,24 @@ __metadata: languageName: node linkType: hard +"react@npm:^18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b + languageName: node + linkType: hard + +"read-cache@npm:^1.0.0": + version: 1.0.0 + resolution: "read-cache@npm:1.0.0" + dependencies: + pify: ^2.3.0 + checksum: cffc728b9ede1e0667399903f9ecaf3789888b041c46ca53382fa3a06303e5132774dc0a96d0c16aa702dbac1ea0833d5a868d414f5ab2af1e1438e19e6657c6 + languageName: node + linkType: hard + "read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" @@ -10542,7 +12961,22 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^2.0.1, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -10553,6 +12987,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + "receptacle@npm:^1.3.2": version: 1.3.2 resolution: "receptacle@npm:1.3.2" @@ -10599,6 +13042,25 @@ __metadata: languageName: node linkType: hard +"registry-auth-token@npm:3.3.2": + version: 3.3.2 + resolution: "registry-auth-token@npm:3.3.2" + dependencies: + rc: ^1.1.6 + safe-buffer: ^5.0.1 + checksum: c9d7ae160a738f1fa825556e3669e6c771d2c0239ce37679f7e8646157a97d0a76464738be075002a1f754ef9bfb913b689f4bbfd5296d28f136fbf98c8c2217 + languageName: node + linkType: hard + +"registry-url@npm:3.1.0": + version: 3.1.0 + resolution: "registry-url@npm:3.1.0" + dependencies: + rc: ^1.0.1 + checksum: 6d223da41b04e1824f5faa63905c6f2e43b216589d72794111573f017352b790aef42cd1f826463062f89d804abb2027e3d9665d2a9a0426a11eedd04d470af3 + languageName: node + linkType: hard + "repeat-string@npm:^1.6.1": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" @@ -10613,6 +13075,20 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -10671,6 +13147,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.1.7, resolve@npm:^1.22.2": + version: 1.22.4 + resolution: "resolve@npm:1.22.4" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 23f25174c2736ce24c6d918910e0d1f89b6b38fefa07a995dff864acd7863d59a7f049e691f93b4b2ee29696303390d921552b6d1b841ed4a8101f517e1d0124 + languageName: node + linkType: hard + "resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.3": version: 1.22.3 resolution: "resolve@npm:1.22.3" @@ -10694,6 +13183,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.22.2#~builtin": + version: 1.22.4 + resolution: "resolve@patch:resolve@npm%3A1.22.4#~builtin::version=1.22.4&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: c45f2545fdc4d21883861b032789e20aa67a2f2692f68da320cc84d5724cd02f2923766c5354b3210897e88f1a7b3d6d2c7c22faeead8eed7078e4c783a444bc + languageName: node + linkType: hard + "resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.3#~builtin": version: 1.22.3 resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d" @@ -10812,7 +13314,14 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -10860,6 +13369,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: ^1.1.0 + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a + languageName: node + linkType: hard + "schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" @@ -10871,6 +13389,34 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.0.0": + version: 4.2.0 + resolution: "schema-utils@npm:4.2.0" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb + languageName: node + linkType: hard + +"selfsigned@npm:^2.1.1": + version: 2.1.1 + resolution: "selfsigned@npm:2.1.1" + dependencies: + node-forge: ^1 + checksum: aa9ce2150a54838978d5c0aee54d7ebe77649a32e4e690eb91775f71fdff773874a4fbafd0ac73d8ec3b702ff8a395c604df4f8e8868528f36fd6c15076fb43a + languageName: node + linkType: hard + "semver-match@npm:0.1.1": version: 0.1.1 resolution: "semver-match@npm:0.1.1" @@ -10909,7 +13455,28 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1": +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": version: 6.0.1 resolution: "serialize-javascript@npm:6.0.1" dependencies: @@ -10918,6 +13485,70 @@ __metadata: languageName: node linkType: hard +"serve-handler@npm:6.1.5": + version: 6.1.5 + resolution: "serve-handler@npm:6.1.5" + dependencies: + bytes: 3.0.0 + content-disposition: 0.5.2 + fast-url-parser: 1.1.3 + mime-types: 2.1.18 + minimatch: 3.1.2 + path-is-inside: 1.0.2 + path-to-regexp: 2.2.1 + range-parser: 1.2.0 + checksum: 7a98ca9cbf8692583b6cde4deb3941cff900fa38bf16adbfccccd8430209bab781e21d9a1f61c9c03e226f9f67689893bbce25941368f3ddaf985fc3858b49dc + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + dependencies: + accepts: ~1.3.4 + batch: 0.6.1 + debug: 2.6.9 + escape-html: ~1.0.3 + http-errors: ~1.6.2 + mime-types: ~2.1.17 + parseurl: ~1.3.2 + checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f + languageName: node + linkType: hard + +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + languageName: node + linkType: hard + +"serve@npm:^14.2.1": + version: 14.2.1 + resolution: "serve@npm:14.2.1" + dependencies: + "@zeit/schemas": 2.29.0 + ajv: 8.11.0 + arg: 5.0.2 + boxen: 7.0.0 + chalk: 5.0.1 + chalk-template: 0.4.0 + clipboardy: 3.0.0 + compression: 1.7.4 + is-port-reachable: 4.0.0 + serve-handler: 6.1.5 + update-check: 1.5.4 + bin: + serve: build/main.js + checksum: c39a517b5d795a0a5c2f9fb9ff088b7e4962c579e34ace5b85dd62f93e0eacbc8a90359792c153c444a83258ffda392113dff7bfd10d41ced574a2d1886c2994 + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -10925,6 +13556,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + "setprototypeof@npm:1.1.0": version: 1.1.0 resolution: "setprototypeof@npm:1.1.0" @@ -11076,6 +13714,17 @@ __metadata: languageName: node linkType: hard +"sockjs@npm:^0.3.24": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: ^0.11.3 + uuid: ^8.3.2 + websocket-driver: ^0.7.4 + checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -11190,6 +13839,33 @@ __metadata: languageName: node linkType: hard +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + dependencies: + debug: ^4.1.0 + detect-node: ^2.0.4 + hpack.js: ^2.1.6 + obuf: ^1.1.2 + readable-stream: ^3.0.6 + wbuf: ^1.7.3 + checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + dependencies: + debug: ^4.1.0 + handle-thing: ^2.0.0 + http-deceiver: ^1.2.7 + select-hose: ^2.0.0 + spdy-transport: ^3.0.0 + checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 + languageName: node + linkType: hard + "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -11371,6 +14047,15 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -11433,6 +14118,40 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"style-loader@npm:^3.3.3": + version: 3.3.3 + resolution: "style-loader@npm:3.3.3" + peerDependencies: + webpack: ^5.0.0 + checksum: f59c953f56f6a935bd6a1dfa409f1128fed2b66b48ce4a7a75b85862a7156e5e90ab163878962762f528ec4d510903d828da645e143fbffd26f055dc1c094078 + languageName: node + linkType: hard + +"sucrase@npm:^3.32.0": + version: 3.34.0 + resolution: "sucrase@npm:3.34.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.2 + commander: ^4.0.0 + glob: 7.1.6 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 61860063bdf6103413698e13247a3074d25843e91170825a9752e4af7668ffadd331b6e99e92fc32ee5b3c484ee134936f926fa9039d5711fafff29d017a2110 + languageName: node + linkType: hard + "superagent@npm:^8.0.5": version: 8.0.9 resolution: "superagent@npm:8.0.9" @@ -11505,6 +14224,39 @@ __metadata: languageName: node linkType: hard +"tailwindcss@npm:^3.3.3": + version: 3.3.3 + resolution: "tailwindcss@npm:3.3.3" + dependencies: + "@alloc/quick-lru": ^5.2.0 + arg: ^5.0.2 + chokidar: ^3.5.3 + didyoumean: ^1.2.2 + dlv: ^1.1.3 + fast-glob: ^3.2.12 + glob-parent: ^6.0.2 + is-glob: ^4.0.3 + jiti: ^1.18.2 + lilconfig: ^2.1.0 + micromatch: ^4.0.5 + normalize-path: ^3.0.0 + object-hash: ^3.0.0 + picocolors: ^1.0.0 + postcss: ^8.4.23 + postcss-import: ^15.1.0 + postcss-js: ^4.0.1 + postcss-load-config: ^4.0.1 + postcss-nested: ^6.0.1 + postcss-selector-parser: ^6.0.11 + resolve: ^1.22.2 + sucrase: ^3.32.0 + bin: + tailwind: lib/cli.js + tailwindcss: lib/cli.js + checksum: 0195c7a3ebb0de5e391d2a883d777c78a4749f0c532d204ee8aea9129f2ed8e701d8c0c276aa5f7338d07176a3c2a7682c1d0ab9c8a6c2abe6d9325c2954eb50 + languageName: node + linkType: hard + "tapable@npm:^2.1.1, tapable@npm:^2.2.0": version: 2.2.1 resolution: "tapable@npm:2.2.1" @@ -11609,6 +14361,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + "through@npm:2, through@npm:^2.3.8, through@npm:~2.3, through@npm:~2.3.1": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -11616,6 +14386,27 @@ __metadata: languageName: node linkType: hard +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 + languageName: node + linkType: hard + +"tiny-case@npm:^1.0.3": + version: 1.0.3 + resolution: "tiny-case@npm:1.0.3" + checksum: 3f7a30c39d5b0e1bc097b0b271bec14eb5b836093db034f35a0de26c14422380b50dc12bfd37498cf35b192f5df06f28a710712c87ead68872a9e37ad6f6049d + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.2": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + "titleize@npm:^3.0.0": version: 3.0.0 resolution: "titleize@npm:3.0.0" @@ -11660,6 +14451,13 @@ __metadata: languageName: node linkType: hard +"toposort@npm:^2.0.2": + version: 2.0.2 + resolution: "toposort@npm:2.0.2" + checksum: d64c74b570391c9432873f48e231b439ee56bc49f7cb9780b505cfdf5cb832f808d0bae072515d93834dd6bceca5bb34448b5b4b408335e4d4716eaf68195dcb + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -11724,6 +14522,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + "ts-jest@npm:^29.1.0": version: 29.1.1 resolution: "ts-jest@npm:29.1.1" @@ -11845,6 +14650,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.0.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + "tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0": version: 2.6.1 resolution: "tslib@npm:2.6.1" @@ -11917,7 +14729,14 @@ __metadata: languageName: node linkType: hard -"type-is@npm:^1.6.16, type-is@npm:^1.6.18": +"type-fest@npm:^2.13.0, type-fest@npm:^2.19.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 + languageName: node + linkType: hard + +"type-is@npm:^1.6.16, type-is@npm:^1.6.18, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -12122,7 +14941,7 @@ __metadata: languageName: node linkType: hard -"unpipe@npm:1.0.0": +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 @@ -12157,6 +14976,16 @@ __metadata: languageName: node linkType: hard +"update-check@npm:1.5.4": + version: 1.5.4 + resolution: "update-check@npm:1.5.4" + dependencies: + registry-auth-token: 3.3.2 + registry-url: 3.1.0 + checksum: 2c9f7de6f030364c5ea02a341e5ae2dfe76da6559b32d40dd3b047b3ac0927408cf92d322c51cd8e009688210a85ccbf1eba449762a65a0d1b14f3cdf1ea5c48 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -12173,7 +15002,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 @@ -12193,6 +15022,22 @@ __metadata: languageName: node linkType: hard +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -12228,7 +15073,7 @@ __metadata: languageName: node linkType: hard -"vary@npm:^1.1.2": +"vary@npm:^1.1.2, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b @@ -12352,6 +15197,22 @@ __metadata: languageName: node linkType: hard +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: ^1.0.0 + checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -12391,6 +15252,68 @@ __metadata: languageName: node linkType: hard +"webpack-dev-middleware@npm:^5.3.1": + version: 5.3.3 + resolution: "webpack-dev-middleware@npm:5.3.3" + dependencies: + colorette: ^2.0.10 + memfs: ^3.4.3 + mime-types: ^2.1.31 + range-parser: ^1.2.1 + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 + languageName: node + linkType: hard + +"webpack-dev-server@npm:^4.15.1": + version: 4.15.1 + resolution: "webpack-dev-server@npm:4.15.1" + dependencies: + "@types/bonjour": ^3.5.9 + "@types/connect-history-api-fallback": ^1.3.5 + "@types/express": ^4.17.13 + "@types/serve-index": ^1.9.1 + "@types/serve-static": ^1.13.10 + "@types/sockjs": ^0.3.33 + "@types/ws": ^8.5.5 + ansi-html-community: ^0.0.8 + bonjour-service: ^1.0.11 + chokidar: ^3.5.3 + colorette: ^2.0.10 + compression: ^1.7.4 + connect-history-api-fallback: ^2.0.0 + default-gateway: ^6.0.3 + express: ^4.17.3 + graceful-fs: ^4.2.6 + html-entities: ^2.3.2 + http-proxy-middleware: ^2.0.3 + ipaddr.js: ^2.0.1 + launch-editor: ^2.6.0 + open: ^8.0.9 + p-retry: ^4.5.0 + rimraf: ^3.0.2 + schema-utils: ^4.0.0 + selfsigned: ^2.1.1 + serve-index: ^1.9.1 + sockjs: ^0.3.24 + spdy: ^4.0.2 + webpack-dev-middleware: ^5.3.1 + ws: ^8.13.0 + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: cd0063b068d2b938fd76c412d555374186ac2fa84bbae098265212ed50a5c15d6f03aa12a5a310c544a242943eb58c0bfde4c296d5c36765c182f53799e1bc71 + languageName: node + linkType: hard + "webpack-merge@npm:^5.7.3": version: 5.9.0 resolution: "webpack-merge@npm:5.9.0" @@ -12445,6 +15368,24 @@ __metadata: languageName: node linkType: hard +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: ">=0.5.1" + safe-buffer: ">=5.1.0" + websocket-extensions: ">=0.1.1" + checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -12510,6 +15451,15 @@ __metadata: languageName: node linkType: hard +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: ^5.0.1 + checksum: 64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba + languageName: node + linkType: hard + "wildcard@npm:^2.0.0": version: 2.0.1 resolution: "wildcard@npm:2.0.1" @@ -12572,7 +15522,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^8.1.0": +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" dependencies: @@ -12685,6 +15635,13 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.1.1": + version: 2.3.2 + resolution: "yaml@npm:2.3.2" + checksum: acd80cc24df12c808c6dec8a0176d404ef9e6f08ad8786f746ecc9d8974968c53c6e8a67fdfabcc5f99f3dc59b6bb0994b95646ff03d18e9b1dcd59eccc02146 + languageName: node + linkType: hard + "yaml@npm:^2.1.3": version: 2.3.1 resolution: "yaml@npm:2.3.1" @@ -12769,3 +15726,15 @@ __metadata: checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard + +"yup@npm:^1.2.0": + version: 1.2.0 + resolution: "yup@npm:1.2.0" + dependencies: + property-expr: ^2.0.5 + tiny-case: ^1.0.3 + toposort: ^2.0.2 + type-fest: ^2.19.0 + checksum: f0cdceb144e358c6155670f3e27404b65b090cc12594fde6db2699523661e13542aaf87ebe8e542b67f29a5f3f9bc5f23a3a3bb09e17f10d125353d35b841fac + languageName: node + linkType: hard From 8ee61b85f682fec0c03eb831f417ba2938658310 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Thu, 14 Sep 2023 19:26:42 +0100 Subject: [PATCH 17/25] feat(build): Build multi-architecture docker images for aztec-sandbox (#2305) This PR builds and deploys multi-architecture docker images for aztec-sandbox # 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). --- .circleci/config.yml | 66 +++++++++++++-- build-system/scripts/build | 8 +- .../scripts/create_dockerhub_manifest | 82 +++++++++++++++++++ build-system/scripts/create_ecr_manifest | 38 +++++++++ build-system/scripts/deploy_dockerhub | 27 +++++- build-system/scripts/deploy_ecr | 11 ++- build-system/scripts/force_deploy_build | 16 ++-- build_manifest.json | 7 +- yarn-project/aztec-sandbox/Dockerfile.final | 10 +++ 9 files changed, 244 insertions(+), 21 deletions(-) create mode 100755 build-system/scripts/create_dockerhub_manifest create mode 100755 build-system/scripts/create_ecr_manifest create mode 100644 yarn-project/aztec-sandbox/Dockerfile.final diff --git a/.circleci/config.yml b/.circleci/config.yml index 41e28e5d3287..89d875c64f18 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -572,7 +572,7 @@ jobs: name: "Build and test" command: build aztec-rpc - aztec-sandbox: + aztec-sandbox-base: machine: image: ubuntu-2004:202010-01 resource_class: large @@ -581,7 +581,40 @@ jobs: - *setup_env - run: name: "Build and test" - command: force_deploy_build aztec-sandbox + command: force_deploy_build aztec-sandbox-base false + + aztec-sandbox-x86_64: + machine: + image: ubuntu-2004:202010-01 + resource_class: large + steps: + - *checkout + - *setup_env + - run: + name: "Build and test" + command: force_deploy_build aztec-sandbox false x86_64 + + aztec-sandbox-arm64: + machine: + image: ubuntu-2204:2023.07.1 + resource_class: arm.large + steps: + - *checkout + - *setup_env + - run: + name: "Build and test" + command: force_deploy_build aztec-sandbox false arm64 + + aztec-sandbox-ecr-manifest: + machine: + image: ubuntu-2004:202010-01 + resource_class: large + steps: + - *checkout + - *setup_env + - run: + name: "Create ECR manifest" + command: create_ecr_manifest aztec-sandbox-base aztec-sandbox x86_64,arm64 circuits-js: machine: @@ -1146,6 +1179,7 @@ jobs: command: | deploy_ecr aztec-sandbox deploy_npm aztec-sandbox + deploy-dockerhub: machine: image: ubuntu-2004:202010-01 @@ -1157,8 +1191,11 @@ jobs: name: "deploy-sandbox" working_directory: aztec-sandbox command: | - deploy_ecr aztec-sandbox - deploy_dockerhub aztec-sandbox + deploy_ecr aztec-sandbox x86_64 + deploy_ecr aztec-sandbox arm64 + deploy_dockerhub aztec-sandbox x86_64 + deploy_dockerhub aztec-sandbox arm64 + create_dockerhub_manifest aztec-sandbox x86_64,arm64 deploy-end: docker: @@ -1373,9 +1410,24 @@ workflows: - types: *yarn_project - circuits-js: *yarn_project - rollup-provider: *yarn_project - - aztec-sandbox: *yarn_project + - aztec-sandbox-base: *yarn_project - canary: *yarn_project + - aztec-sandbox-x86_64: + requires: + - aztec-sandbox-base + <<: *defaults + - aztec-sandbox-arm64: + requires: + - aztec-sandbox-base + <<: *defaults + + - aztec-sandbox-ecr-manifest: + requires: + - aztec-sandbox-x86_64 + - aztec-sandbox-arm64 + <<: *defaults + - e2e-join: requires: - aztec-js @@ -1399,7 +1451,7 @@ workflows: - types - circuits-js - rollup-provider - - aztec-sandbox + - aztec-sandbox-ecr-manifest - canary <<: *defaults @@ -1472,7 +1524,7 @@ workflows: - guides-sample-dapp <<: *defaults - # Deployment and Canary tests + # Deployment and Canary tests - deploy-dockerhub: requires: - e2e-end diff --git a/build-system/scripts/build b/build-system/scripts/build index 6b16d320476f..1c7ea38f20cc 100755 --- a/build-system/scripts/build +++ b/build-system/scripts/build @@ -26,6 +26,7 @@ set -euo pipefail REPOSITORY=$1 FORCE_BUILD=${2:-"false"} +ARCH=${3:-""} DOCKERFILE=$(query_manifest dockerfile $REPOSITORY) PROJECT_DIR=$(query_manifest projectDir $REPOSITORY) BUILD_DIR=$(query_manifest buildDir $REPOSITORY) @@ -34,6 +35,7 @@ echo "Repository: $REPOSITORY" echo "Working directory: $PWD" echo "Dockerfile: $DOCKERFILE" echo "Build directory: $BUILD_DIR" +echo "Arch: $ARCH" # Fetch images with retries function fetch_image() { @@ -112,7 +114,8 @@ for PARENT in $PARENTS; do echo "Pulling dependency $PARENT_REPO..." fetch_image $PARENT_IMAGE_URI # Tag it to look like an official release as that's what we use in Dockerfiles. - retry docker tag $PARENT_IMAGE_URI $ECR_DEPLOY_URL/$PARENT + TAG=$ECR_DEPLOY_URL/$PARENT + retry docker tag $PARENT_IMAGE_URI $TAG done @@ -183,6 +186,9 @@ fi # Build the actual image and give it a commit tag. IMAGE_COMMIT_URI=$ECR_URL/$REPOSITORY:cache-$CONTENT_HASH +if [[ -n "$ARCH" ]]; then + IMAGE_COMMIT_URI=$IMAGE_COMMIT_URI-$ARCH +fi echo "Building image: $IMAGE_COMMIT_URI" # Build our dockerfile, add timing information docker build -t $IMAGE_COMMIT_URI -f $DOCKERFILE $CACHE_FROM --build-arg COMMIT_TAG=$COMMIT_TAG_VERSION --build-arg ARG_CONTENT_HASH=$CONTENT_HASH . \ diff --git a/build-system/scripts/create_dockerhub_manifest b/build-system/scripts/create_dockerhub_manifest new file mode 100755 index 000000000000..d8416a10bf1d --- /dev/null +++ b/build-system/scripts/create_dockerhub_manifest @@ -0,0 +1,82 @@ +#!/bin/bash +# This script: +# 1. Logs into DockerHub +# 2. Creates 2 manifest lists, the first is version tagged, the second is 'latest' tagged +# 3. Adds the arch specific tagged image to each list +# 4. Pushes the 2 lists + +set -eu + +if [ -z "$COMMIT_TAG" ]; then + echo "Will only push tagged builds to dockerhub. Skipping." + exit 0 +fi + +REPOSITORY=$1 +ARCH_LIST=$2 + +echo "Repo: $REPOSITORY" +echo "Arch list: $ARCH_LIST" + +ACCOUNT="aztecprotocol" +USERNAME="aztecprotocolci" + +COMMIT_TAG_VERSION=$COMMIT_TAG # default unless repo-specific +# Check if it's a repo-specific tag +if [[ "$COMMIT_TAG" == *"/"* ]]; then + REPO_NAME="${COMMIT_TAG%%/*}" + COMMIT_TAG_VERSION="${COMMIT_TAG#*/}" + echo "Tag was made for: $REPO_NAME" + echo "Version: $COMMIT_TAG_VERSION" + + # Check if REPO_NAME is equal to REPOSITORY + if [ "$REPO_NAME" != "$REPOSITORY" ]; then + echo "REPO_NAME ($REPO_NAME) does not match REPOSITORY ($REPOSITORY). Exiting..." + exit 1 + fi +fi + +# Check it's a valid semver. +VERSION=$(npx semver $COMMIT_TAG_VERSION) +if [ -z "$VERSION" ]; then + echo "$COMMIT_TAG_VERSION is not a semantic version." + exit 1 +fi + +# We now have the tage for each image +IMAGE_TAG=$COMMIT_TAG_VERSION + +MANIFEST_DEPLOY_URI=$ACCOUNT/$REPOSITORY:$IMAGE_TAG +MANIFEST_LATEST_URI=$ACCOUNT/$REPOSITORY:latest + +# Login to dockerhub. +echo "$DOCKERHUB_PASSWORD" | docker login -u $USERNAME --password-stdin + +export DOCKER_CLI_EXPERIMENTAL=enabled + +OLD_IFS=$IFS +IFS=',' + +# For each arch, add the tagged image to 2 manifest lists. One tagged with the version, the other with 'latest' +for A in $ARCH_LIST +do + IMAGE_DEPLOY_URI=$ACCOUNT/$REPOSITORY:$IMAGE_TAG-$A + echo "Adding image $IMAGE_DEPLOY_URI to manifest list $MANIFEST_DEPLOY_URI" + docker manifest create $MANIFEST_DEPLOY_URI \ + --amend $IMAGE_DEPLOY_URI + + echo "Adding image $IMAGE_DEPLOY_URI to manifest list $MANIFEST_LATEST_URI" + docker manifest create $MANIFEST_LATEST_URI \ + --amend $IMAGE_DEPLOY_URI +done + +IFS=$OLD_IFS +unset OLD_IFS + +echo "Pushing manifest list $MANIFEST_DEPLOY_URI..." +# Push the version tagged list +docker manifest push --purge $MANIFEST_DEPLOY_URI + +echo "Pushing manifest list $MANIFEST_LATEST_URI..." +# Push the latest tagged list +docker manifest push --purge $MANIFEST_LATEST_URI \ No newline at end of file diff --git a/build-system/scripts/create_ecr_manifest b/build-system/scripts/create_ecr_manifest new file mode 100755 index 000000000000..6163c952bb40 --- /dev/null +++ b/build-system/scripts/create_ecr_manifest @@ -0,0 +1,38 @@ +#!/bin/bash +# This script: +# 1. Logs into ECR and ensures we have the given repository +# 2. Computes the image uri of the cached images for the given repository given the list of architectures +# 3. Creates a manifest list using a platform agnositc image uri, adds each image to it +# 4. Pushes the manifest list + +set -e + +REPOSITORY=$1 +FINAL_IMAGE_NAME=$2 +ARCH_LIST=$3 + +# Ensure ECR repository exists. +retry ensure_repo $REPOSITORY $ECR_REGION refresh_lifecycle + +CONTENT_HASH=$(calculate_content_hash $REPOSITORY) +echo "Content hash: $CONTENT_HASH" + +FINAL=$ECR_URL/$FINAL_IMAGE_NAME:cache-$CONTENT_HASH + +echo "Creating manifest list $FINAL..." + +export DOCKER_CLI_EXPERIMENTAL=enabled + +OLD_IFS=$IFS +IFS=',' +for A in $ARCH_LIST +do + IMAGE=$ECR_URL/$FINAL_IMAGE_NAME:cache-$CONTENT_HASH-$A + echo "Adding image $IMAGE to manifest list" + docker manifest create $FINAL \ + --amend $IMAGE +done +IFS=$OLD_IFS +unset OLD_IFS + +docker manifest push --purge $FINAL \ No newline at end of file diff --git a/build-system/scripts/deploy_dockerhub b/build-system/scripts/deploy_dockerhub index 99cdd046410b..b6d165a12e09 100755 --- a/build-system/scripts/deploy_dockerhub +++ b/build-system/scripts/deploy_dockerhub @@ -7,8 +7,22 @@ if [ -z "$COMMIT_TAG" ]; then fi REPOSITORY=$1 +ARCH=${2:-""} + +echo "Repo: $REPOSITORY" +echo "Arch: $ARCH" + +ACCOUNT="aztecprotocol" +USERNAME="aztecprotocolci" + IMAGE_COMMIT_URI=$ECR_DEPLOY_URL/$REPOSITORY:$COMMIT_HASH -IMAGE_LATEST_URI=aztecprotocol/$REPOSITORY:latest + +IMAGE_LATEST_URI=$ACCOUNT/$REPOSITORY:latest +if [[ -n "$ARCH" ]]; then + IMAGE_COMMIT_URI=$IMAGE_COMMIT_URI-$ARCH + IMAGE_LATEST_URI=$IMAGE_LATEST_URI-$ARCH +fi + COMMIT_TAG_VERSION=$COMMIT_TAG # default unless repo-specific # Check if it's a repo-specific tag if [[ "$COMMIT_TAG" == *"/"* ]]; then @@ -24,7 +38,10 @@ if [[ "$COMMIT_TAG" == *"/"* ]]; then fi fi IMAGE_TAG=$COMMIT_TAG_VERSION -IMAGE_DEPLOY_URI=aztecprotocol/$REPOSITORY:$IMAGE_TAG +IMAGE_DEPLOY_URI=$ACCOUNT/$REPOSITORY:$IMAGE_TAG +if [[ -n "$ARCH" ]]; then + IMAGE_DEPLOY_URI=$IMAGE_DEPLOY_URI-$ARCH +fi # Check it's a valid semver. VERSION=$(npx semver $COMMIT_TAG_VERSION) @@ -39,13 +56,17 @@ echo "Deploying to dockerhub: $IMAGE_DEPLOY_URI" retry ensure_repo $REPOSITORY $ECR_DEPLOY_REGION # Login to dockerhub. -echo "$DOCKERHUB_PASSWORD" | docker login -u aztecprotocolci --password-stdin +echo "$DOCKERHUB_PASSWORD" | docker login -u $USERNAME --password-stdin +echo "Pulling $IMAGE_COMMIT_URI" # Pull image. retry docker pull $IMAGE_COMMIT_URI +echo "Tagging $IMAGE_COMMIT_URI as $IMAGE_DEPLOY_URI" # Tag with commit tag retry docker tag $IMAGE_COMMIT_URI $IMAGE_DEPLOY_URI + +echo "Tagging $IMAGE_COMMIT_URI as $IMAGE_LATEST_URI" # Tag with :latest retry docker tag $IMAGE_COMMIT_URI $IMAGE_LATEST_URI diff --git a/build-system/scripts/deploy_ecr b/build-system/scripts/deploy_ecr index 35be5922eafb..2fb0cd2fbe70 100755 --- a/build-system/scripts/deploy_ecr +++ b/build-system/scripts/deploy_ecr @@ -2,7 +2,11 @@ set -eu REPOSITORY=$1 +ARCH=${2:-""} IMAGE_COMMIT_URI=$(calculate_image_uri $REPOSITORY) +if [[ -n "$ARCH" ]]; then + IMAGE_COMMIT_URI=$IMAGE_COMMIT_URI-$ARCH +fi # Login to build region and pull the build. retry ensure_repo $REPOSITORY $ECR_REGION @@ -11,9 +15,12 @@ retry docker pull $IMAGE_COMMIT_URI > /dev/null 2>&1 # Ensure ECR repository exists in deployment region. retry ensure_repo $REPOSITORY $ECR_DEPLOY_REGION -# Push image to deployment repo with commit hash tag e.g: -# falafel:deadbeefcafebabe1337c0de +# Push image to deployment repo with commit hash tag and optional architecture e.g: +# falafel:deadbeefcafebabe1337c0de-x86_64 IMAGE_DEPLOY_COMMIT_URI=$ECR_DEPLOY_URL/$REPOSITORY:$COMMIT_HASH +if [[ -n "$ARCH" ]]; then + IMAGE_DEPLOY_COMMIT_URI=$IMAGE_DEPLOY_COMMIT_URI-$ARCH +fi retry docker tag $IMAGE_COMMIT_URI $IMAGE_DEPLOY_COMMIT_URI retry docker push $IMAGE_DEPLOY_COMMIT_URI diff --git a/build-system/scripts/force_deploy_build b/build-system/scripts/force_deploy_build index d5d9e46e71bf..e5a76665b16a 100755 --- a/build-system/scripts/force_deploy_build +++ b/build-system/scripts/force_deploy_build @@ -2,16 +2,18 @@ # # This script forces a build if we're in a deployment run, otherwise runs `build` as usual # -# usage: ./deploy_force_build -# example: ./deploy_force_build aztec-sandbox +# usage: ./deploy_force_build +# example: ./deploy_force_build aztec-sandbox true set -e REPOSITORY=$1 -FORCE_BUILD=${2:-"false"} +shift +FORCE_BUILD=$1 +shift # if FORCE_BUILD is already set, just continue with it if [[ $FORCE_BUILD == 'true' ]]; then - build $REPOSITORY true + build $REPOSITORY true $@ exit 0 fi @@ -37,12 +39,12 @@ if [[ -n "${COMMIT_TAG:-}" ]]; then VERSION=$(npx semver $COMMIT_TAG_VERSION) if [ -z "$VERSION" ]; then # Not a version tag, build normally - build $REPOSITORY + build $REPOSITORY false $@ else # Force build - build $REPOSITORY true + build $REPOSITORY true $@ fi else # Not a tagged commit, build normally - build $REPOSITORY + build $REPOSITORY false $@ fi diff --git a/build_manifest.json b/build_manifest.json index 3a24db1ef01f..2d55f73f9079 100644 --- a/build_manifest.json +++ b/build_manifest.json @@ -112,10 +112,15 @@ "buildDir": "yarn-project", "projectDir": "yarn-project/aztec-rpc" }, - "aztec-sandbox": { + "aztec-sandbox-base": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec-sandbox" }, + "aztec-sandbox": { + "buildDir": "yarn-project", + "projectDir": "yarn-project/aztec-sandbox", + "dockerfile": "Dockerfile.final" + }, "aztec.js": { "buildDir": "yarn-project", "projectDir": "yarn-project/aztec.js" diff --git a/yarn-project/aztec-sandbox/Dockerfile.final b/yarn-project/aztec-sandbox/Dockerfile.final new file mode 100644 index 000000000000..a9cc84909f12 --- /dev/null +++ b/yarn-project/aztec-sandbox/Dockerfile.final @@ -0,0 +1,10 @@ +FROM 278380418400.dkr.ecr.eu-west-2.amazonaws.com/aztec-sandbox-base AS builder + +FROM node:18-alpine + +COPY --from=builder /usr/src/ /usr/src/ +WORKDIR /usr/src/yarn-project/aztec-sandbox + +ENTRYPOINT ["yarn"] +CMD [ "start" ] +EXPOSE 8080 \ No newline at end of file From 4d3e341592031d3943d47ab1403114d1920fa6ab Mon Sep 17 00:00:00 2001 From: Aztec Bot <49558828+AztecBot@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:16:29 -0400 Subject: [PATCH 18/25] chore(master): Release 0.7.1 (#2268) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.7.1 ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.7.0...aztec-packages-v0.7.1) (2023-09-14) ### Features * Build system handles dynamic deps first class. ([#2283](https://github.com/AztecProtocol/aztec-packages/issues/2283)) ([f66077a](https://github.com/AztecProtocol/aztec-packages/commit/f66077a6f7bfd446eec81dd4f09723322fc0c980)) * Build_manifest default tweaks. ([#2287](https://github.com/AztecProtocol/aztec-packages/issues/2287)) ([c8a5cfb](https://github.com/AztecProtocol/aztec-packages/commit/c8a5cfb375b498475503c12cc83fcdba39f2ec5f)) * **build:** Build multi-architecture docker images for aztec-sandbox ([#2305](https://github.com/AztecProtocol/aztec-packages/issues/2305)) ([8ee61b8](https://github.com/AztecProtocol/aztec-packages/commit/8ee61b85f682fec0c03eb831f417ba2938658310)) * Cli "unbox" command ([#2029](https://github.com/AztecProtocol/aztec-packages/issues/2029)) ([26ab88f](https://github.com/AztecProtocol/aztec-packages/commit/26ab88fd5b8d5be7f20cd6f6e4335d344f2219c7)) * Creating an SMT verification module ([#1932](https://github.com/AztecProtocol/aztec-packages/issues/1932)) ([4642b61](https://github.com/AztecProtocol/aztec-packages/commit/4642b61a60534daeec8edd9541f283058d0d66bd)) * Token standard ([#2069](https://github.com/AztecProtocol/aztec-packages/issues/2069)) ([5e8fbf2](https://github.com/AztecProtocol/aztec-packages/commit/5e8fbf2d387aeb0ae0cb1432525c39f82eb7baa1)) ### Bug Fixes * Ensure_note_hash_exists ([#2256](https://github.com/AztecProtocol/aztec-packages/issues/2256)) ([271b060](https://github.com/AztecProtocol/aztec-packages/commit/271b060f2642570f58e38881cbb3477745b84ddf)) * Msgpack stack blowups on schema gen ([#2259](https://github.com/AztecProtocol/aztec-packages/issues/2259)) ([1afc566](https://github.com/AztecProtocol/aztec-packages/commit/1afc566df942e82f70d2e82e33c0e39539714ad5)) * Noir bootstrap ([#2274](https://github.com/AztecProtocol/aztec-packages/issues/2274)) ([f85db49](https://github.com/AztecProtocol/aztec-packages/commit/f85db4972411c863585e968fe2535e68c467b028)) * Workaround sequencer timeout ([#2269](https://github.com/AztecProtocol/aztec-packages/issues/2269)) ([9fc3f3d](https://github.com/AztecProtocol/aztec-packages/commit/9fc3f3d6652e592d674a9f5f2a55bd1994b7060d)) ### Miscellaneous * Bump nargo to 0.11.1-aztec.0 ([#2298](https://github.com/AztecProtocol/aztec-packages/issues/2298)) ([8b76a12](https://github.com/AztecProtocol/aztec-packages/commit/8b76a124390102574efcc8078bc9bc47c8e7ba35)) * **ci:** Mirror Aztec-nr ([#2270](https://github.com/AztecProtocol/aztec-packages/issues/2270)) ([c57f027](https://github.com/AztecProtocol/aztec-packages/commit/c57f027af9a9796ddef970db24e56be954215760)) * **circuits:** Base rollup cbind msgpack ([#2263](https://github.com/AztecProtocol/aztec-packages/issues/2263)) ([0d4c707](https://github.com/AztecProtocol/aztec-packages/commit/0d4c707079ff1ff4212fc3345066b0deded98449)) * **circuits:** Clean up of some superfluous header includes ([#2302](https://github.com/AztecProtocol/aztec-packages/issues/2302)) ([5e53345](https://github.com/AztecProtocol/aztec-packages/commit/5e53345270873a3af2b47f6f078e3b4f1cc973d0)) * **circuits:** Removing assertMemberLength on Tuple objects ([#2296](https://github.com/AztecProtocol/aztec-packages/issues/2296)) ([0247b85](https://github.com/AztecProtocol/aztec-packages/commit/0247b859d88781740fa990801a24881c09c5ca3c)) * Consolidate mirror repos on a nightly schedule ([#1994](https://github.com/AztecProtocol/aztec-packages/issues/1994)) ([1a586c4](https://github.com/AztecProtocol/aztec-packages/commit/1a586c4197f2e093521e921e7ef21599be71e5b5)) * **docs:** Rename to aztec.nr ([#1943](https://github.com/AztecProtocol/aztec-packages/issues/1943)) ([a91db48](https://github.com/AztecProtocol/aztec-packages/commit/a91db48d1943fdc2e39535a153216b7aaca40de4)) * Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4)) * Replace native token in lending contract ([#2276](https://github.com/AztecProtocol/aztec-packages/issues/2276)) ([c46b3c8](https://github.com/AztecProtocol/aztec-packages/commit/c46b3c8f848e7ff240eb466fa2f3f8aad96dc328)) * **subrepo:** Push aztec-nr, update default branches ([#2300](https://github.com/AztecProtocol/aztec-packages/issues/2300)) ([80c9b77](https://github.com/AztecProtocol/aztec-packages/commit/80c9b77c3e6adc755ec80f02a7f8261a7e8581c4)) * Updated `acvm_js` ([#2272](https://github.com/AztecProtocol/aztec-packages/issues/2272)) ([9f1a3a5](https://github.com/AztecProtocol/aztec-packages/commit/9f1a3a5e4b72506489645f8be8c8aa5129a2e179))
barretenberg.js: 0.7.1 ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.7.0...barretenberg.js-v0.7.1) (2023-09-14) ### Miscellaneous * Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4))
barretenberg: 0.7.1 ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.7.0...barretenberg-v0.7.1) (2023-09-14) ### Miscellaneous * Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .release-please-manifest.json | 6 ++--- CHANGELOG.md | 35 ++++++++++++++++++++++++++++++ VERSION | 2 +- barretenberg/CHANGELOG.md | 7 ++++++ barretenberg/VERSION | 2 +- barretenberg/barretenberg-wasm.nix | 2 +- barretenberg/barretenberg.nix | 2 +- barretenberg/cpp/CMakeLists.txt | 2 +- barretenberg/ts/CHANGELOG.md | 7 ++++++ barretenberg/ts/package.json | 2 +- 10 files changed, 58 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index a1a9e85c8606..9050433199eb 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.7.0", - "barretenberg": "0.7.0", - "barretenberg/ts": "0.7.0" + ".": "0.7.1", + "barretenberg": "0.7.1", + "barretenberg/ts": "0.7.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d59f82f0cd66..d64a28a782ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,40 @@ # Changelog +## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.7.0...aztec-packages-v0.7.1) (2023-09-14) + + +### Features + +* Build system handles dynamic deps first class. ([#2283](https://github.com/AztecProtocol/aztec-packages/issues/2283)) ([f66077a](https://github.com/AztecProtocol/aztec-packages/commit/f66077a6f7bfd446eec81dd4f09723322fc0c980)) +* Build_manifest default tweaks. ([#2287](https://github.com/AztecProtocol/aztec-packages/issues/2287)) ([c8a5cfb](https://github.com/AztecProtocol/aztec-packages/commit/c8a5cfb375b498475503c12cc83fcdba39f2ec5f)) +* **build:** Build multi-architecture docker images for aztec-sandbox ([#2305](https://github.com/AztecProtocol/aztec-packages/issues/2305)) ([8ee61b8](https://github.com/AztecProtocol/aztec-packages/commit/8ee61b85f682fec0c03eb831f417ba2938658310)) +* Cli "unbox" command ([#2029](https://github.com/AztecProtocol/aztec-packages/issues/2029)) ([26ab88f](https://github.com/AztecProtocol/aztec-packages/commit/26ab88fd5b8d5be7f20cd6f6e4335d344f2219c7)) +* Creating an SMT verification module ([#1932](https://github.com/AztecProtocol/aztec-packages/issues/1932)) ([4642b61](https://github.com/AztecProtocol/aztec-packages/commit/4642b61a60534daeec8edd9541f283058d0d66bd)) +* Token standard ([#2069](https://github.com/AztecProtocol/aztec-packages/issues/2069)) ([5e8fbf2](https://github.com/AztecProtocol/aztec-packages/commit/5e8fbf2d387aeb0ae0cb1432525c39f82eb7baa1)) + + +### Bug Fixes + +* Ensure_note_hash_exists ([#2256](https://github.com/AztecProtocol/aztec-packages/issues/2256)) ([271b060](https://github.com/AztecProtocol/aztec-packages/commit/271b060f2642570f58e38881cbb3477745b84ddf)) +* Msgpack stack blowups on schema gen ([#2259](https://github.com/AztecProtocol/aztec-packages/issues/2259)) ([1afc566](https://github.com/AztecProtocol/aztec-packages/commit/1afc566df942e82f70d2e82e33c0e39539714ad5)) +* Noir bootstrap ([#2274](https://github.com/AztecProtocol/aztec-packages/issues/2274)) ([f85db49](https://github.com/AztecProtocol/aztec-packages/commit/f85db4972411c863585e968fe2535e68c467b028)) +* Workaround sequencer timeout ([#2269](https://github.com/AztecProtocol/aztec-packages/issues/2269)) ([9fc3f3d](https://github.com/AztecProtocol/aztec-packages/commit/9fc3f3d6652e592d674a9f5f2a55bd1994b7060d)) + + +### Miscellaneous + +* Bump nargo to 0.11.1-aztec.0 ([#2298](https://github.com/AztecProtocol/aztec-packages/issues/2298)) ([8b76a12](https://github.com/AztecProtocol/aztec-packages/commit/8b76a124390102574efcc8078bc9bc47c8e7ba35)) +* **ci:** Mirror Aztec-nr ([#2270](https://github.com/AztecProtocol/aztec-packages/issues/2270)) ([c57f027](https://github.com/AztecProtocol/aztec-packages/commit/c57f027af9a9796ddef970db24e56be954215760)) +* **circuits:** Base rollup cbind msgpack ([#2263](https://github.com/AztecProtocol/aztec-packages/issues/2263)) ([0d4c707](https://github.com/AztecProtocol/aztec-packages/commit/0d4c707079ff1ff4212fc3345066b0deded98449)) +* **circuits:** Clean up of some superfluous header includes ([#2302](https://github.com/AztecProtocol/aztec-packages/issues/2302)) ([5e53345](https://github.com/AztecProtocol/aztec-packages/commit/5e53345270873a3af2b47f6f078e3b4f1cc973d0)) +* **circuits:** Removing assertMemberLength on Tuple objects ([#2296](https://github.com/AztecProtocol/aztec-packages/issues/2296)) ([0247b85](https://github.com/AztecProtocol/aztec-packages/commit/0247b859d88781740fa990801a24881c09c5ca3c)) +* Consolidate mirror repos on a nightly schedule ([#1994](https://github.com/AztecProtocol/aztec-packages/issues/1994)) ([1a586c4](https://github.com/AztecProtocol/aztec-packages/commit/1a586c4197f2e093521e921e7ef21599be71e5b5)) +* **docs:** Rename to aztec.nr ([#1943](https://github.com/AztecProtocol/aztec-packages/issues/1943)) ([a91db48](https://github.com/AztecProtocol/aztec-packages/commit/a91db48d1943fdc2e39535a153216b7aaca40de4)) +* Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4)) +* Replace native token in lending contract ([#2276](https://github.com/AztecProtocol/aztec-packages/issues/2276)) ([c46b3c8](https://github.com/AztecProtocol/aztec-packages/commit/c46b3c8f848e7ff240eb466fa2f3f8aad96dc328)) +* **subrepo:** Push aztec-nr, update default branches ([#2300](https://github.com/AztecProtocol/aztec-packages/issues/2300)) ([80c9b77](https://github.com/AztecProtocol/aztec-packages/commit/80c9b77c3e6adc755ec80f02a7f8261a7e8581c4)) +* Updated `acvm_js` ([#2272](https://github.com/AztecProtocol/aztec-packages/issues/2272)) ([9f1a3a5](https://github.com/AztecProtocol/aztec-packages/commit/9f1a3a5e4b72506489645f8be8c8aa5129a2e179)) + ## [0.7.0](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.6.7...aztec-packages-v0.7.0) (2023-09-13) diff --git a/VERSION b/VERSION index f34b958bcd42..484806fd3c3b 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.7.0 x-release-please-version +v0.7.1 x-release-please-version diff --git a/barretenberg/CHANGELOG.md b/barretenberg/CHANGELOG.md index 8291740c03b2..d9c915e15f76 100644 --- a/barretenberg/CHANGELOG.md +++ b/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.7.0...barretenberg-v0.7.1) (2023-09-14) + + +### Miscellaneous + +* Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4)) + ## [0.7.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.6.7...barretenberg-v0.7.0) (2023-09-13) diff --git a/barretenberg/VERSION b/barretenberg/VERSION index f34b958bcd42..484806fd3c3b 100644 --- a/barretenberg/VERSION +++ b/barretenberg/VERSION @@ -1 +1 @@ -v0.7.0 x-release-please-version +v0.7.1 x-release-please-version diff --git a/barretenberg/barretenberg-wasm.nix b/barretenberg/barretenberg-wasm.nix index f25a1675ff54..8dbc7200cf09 100644 --- a/barretenberg/barretenberg-wasm.nix +++ b/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.7.0"; # x-release-please-version + version = "0.7.1"; # x-release-please-version src = ./cpp; diff --git a/barretenberg/barretenberg.nix b/barretenberg/barretenberg.nix index 2f561d7aec94..b4d79f76e8c2 100644 --- a/barretenberg/barretenberg.nix +++ b/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.7.0"; # x-release-please-version + version = "0.7.1"; # x-release-please-version src = ./cpp; diff --git a/barretenberg/cpp/CMakeLists.txt b/barretenberg/cpp/CMakeLists.txt index 515ccee5241c..ebf254d16186 100644 --- a/barretenberg/cpp/CMakeLists.txt +++ b/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.7.0 # x-release-please-version + VERSION 0.7.1 # x-release-please-version LANGUAGES CXX C ) diff --git a/barretenberg/ts/CHANGELOG.md b/barretenberg/ts/CHANGELOG.md index 4a19aa6095d6..0b437c3b02af 100644 --- a/barretenberg/ts/CHANGELOG.md +++ b/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.7.0...barretenberg.js-v0.7.1) (2023-09-14) + + +### Miscellaneous + +* Move barretenberg to top of repo. Make circuits build off barretenberg build. ([#2221](https://github.com/AztecProtocol/aztec-packages/issues/2221)) ([404ec34](https://github.com/AztecProtocol/aztec-packages/commit/404ec34d38e1a9c3fbe7a3cdb6e88c28f62f72e4)) + ## [0.7.0](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.6.7...barretenberg.js-v0.7.0) (2023-09-13) diff --git a/barretenberg/ts/package.json b/barretenberg/ts/package.json index a13125a01912..2d11e9786254 100644 --- a/barretenberg/ts/package.json +++ b/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.7.0", + "version": "0.7.1", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts", "license": "MIT", "type": "module", From 39f16f9f642ff348920e1cd4511df9d0f72bacf9 Mon Sep 17 00:00:00 2001 From: PhilWindle <60546371+PhilWindle@users.noreply.github.com> Date: Thu, 14 Sep 2023 21:45:03 +0100 Subject: [PATCH 19/25] fix(build): Attempt to fix deployments (#2309) This PR attempts to fix 2 items of the deployment pipeline. # 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). --- build-system/scripts/deploy_ecr | 10 ++++++++-- build-system/scripts/deploy_npm | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build-system/scripts/deploy_ecr b/build-system/scripts/deploy_ecr index 2fb0cd2fbe70..d8469733069c 100755 --- a/build-system/scripts/deploy_ecr +++ b/build-system/scripts/deploy_ecr @@ -18,15 +18,21 @@ retry ensure_repo $REPOSITORY $ECR_DEPLOY_REGION # Push image to deployment repo with commit hash tag and optional architecture e.g: # falafel:deadbeefcafebabe1337c0de-x86_64 IMAGE_DEPLOY_COMMIT_URI=$ECR_DEPLOY_URL/$REPOSITORY:$COMMIT_HASH +CURRENT_TAG=$COMMIT_HASH +NEW_TAG_COMMIT_TAG=$PROJECT-$COMMIT_TAG +NEW_TAG_DEPLOY_TAG=$DEPLOY_TAG if [[ -n "$ARCH" ]]; then IMAGE_DEPLOY_COMMIT_URI=$IMAGE_DEPLOY_COMMIT_URI-$ARCH + CURRENT_TAG=$CURRENT_TAG-$ARCH + NEW_TAG_COMMIT_TAG=$NEW_TAG_COMMIT_TAG-$ARCH + NEW_TAG_DEPLOY_TAG=$NEW_TAG_DEPLOY_TAG-$ARCH fi retry docker tag $IMAGE_COMMIT_URI $IMAGE_DEPLOY_COMMIT_URI retry docker push $IMAGE_DEPLOY_COMMIT_URI # Tag image with full version if we have one. Allows deployment of precise image version if rollback needed. if [ -n "${COMMIT_TAG:-}" ]; then - retry tag_remote_image $REPOSITORY $COMMIT_HASH $PROJECT-$COMMIT_TAG $ECR_DEPLOY_REGION + retry tag_remote_image $REPOSITORY $CURRENT_TAG $NEW_TAG_COMMIT_TAG $ECR_DEPLOY_REGION fi -retry tag_remote_image $REPOSITORY $COMMIT_HASH $DEPLOY_TAG $ECR_DEPLOY_REGION +retry tag_remote_image $REPOSITORY $CURRENT_TAG $NEW_TAG_DEPLOY_TAG $ECR_DEPLOY_REGION diff --git a/build-system/scripts/deploy_npm b/build-system/scripts/deploy_npm index 8872e7e3e083..0ad35f4e2129 100755 --- a/build-system/scripts/deploy_npm +++ b/build-system/scripts/deploy_npm @@ -9,7 +9,7 @@ readonly STANDALONE=${2:-} extract_repo $REPOSITORY /usr/src project -cd project/src/$(query_manifest projectDir $REPOSITORY) +cd $(query_manifest projectDir $REPOSITORY) echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > .npmrc From 274c89f1916d8af2054d9773dc632f87bb3bf2fc Mon Sep 17 00:00:00 2001 From: Innokentii Sennovskii Date: Thu, 14 Sep 2023 21:46:34 +0100 Subject: [PATCH 20/25] feat: ASAN build (#2307) This PR adds ASAN build to cmake with a hint on how to make using it a bit better on the mainframe and fixed the fuzzing build, which was broken since it used the default clang --- barretenberg/cpp/CMakeLists.txt | 8 ++++++++ barretenberg/cpp/CMakePresets.json | 27 +++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/barretenberg/cpp/CMakeLists.txt b/barretenberg/cpp/CMakeLists.txt index ebf254d16186..7749fb8275fc 100644 --- a/barretenberg/cpp/CMakeLists.txt +++ b/barretenberg/cpp/CMakeLists.txt @@ -135,3 +135,11 @@ include(cmake/gtest.cmake) include(cmake/benchmark.cmake) include(cmake/module.cmake) add_subdirectory(src) +if (ENABLE_ASAN AND NOT(FUZZING)) + find_program(LLVM_SYMBOLIZER_PATH NAMES llvm-symbolizer-16) + if (NOT(LLVM_SYMBOLIZER_PATH)) + message(WARNING "LLVM symbolizer not found, so ASAN output will be limited") + else() + message(AUTHOR_WARNING "Run `export ASAN_SYMBOLIZER_PATH=\"${LLVM_SYMBOLIZER_PATH}\"` before running tests for better ASAN output (at which lines the bugs are).") + endif() +endif() diff --git a/barretenberg/cpp/CMakePresets.json b/barretenberg/cpp/CMakePresets.json index 6ac7fd933f6c..0b50ba0871c0 100644 --- a/barretenberg/cpp/CMakePresets.json +++ b/barretenberg/cpp/CMakePresets.json @@ -51,6 +51,20 @@ "DISABLE_ASM": "ON" } }, + {"name":"asan", + "displayName": "Debugging build with address sanitizer on Clang-16", + "description": "Build with address sanitizer on clang16 with debugging information", + "inherits":"clang16-dbg", + "binaryDir": "build-asan", +"environment": { + "CMAKE_BUILD_TYPE": "Debug" + }, + "cacheVariables": { + "ENABLE_ASAN": "ON", + "DISABLE_ASM": "ON" + } + +}, { "name": "gcc", "displayName": "Build with GCC", @@ -82,7 +96,7 @@ "name": "fuzzing", "displayName": "Build with fuzzing", "description": "Build default preset but with fuzzing enabled", - "inherits": "default", + "inherits": "clang16", "binaryDir": "build-fuzzing", "cacheVariables": { "FUZZING": "ON" @@ -179,6 +193,10 @@ "name": "clang16-dbg", "inherits": "default", "configurePreset": "clang16-dbg" + },{ + "name": "asan", + "inherits": "default", + "configurePreset": "asan" }, { "name": "gcc", @@ -197,7 +215,7 @@ }, { "name": "fuzzing", - "inherits": "default", + "inherits": "clang16", "configurePreset": "fuzzing" }, { @@ -260,6 +278,11 @@ "inherits": "default", "configurePreset": "clang16-dbg" }, + { + "name": "asan", + "inherits": "default", + "configurePreset": "asan" + }, { "name": "gcc", "inherits": "default", From ccb7b8919a49be96c0913c1ec1df948cb92dfbe9 Mon Sep 17 00:00:00 2001 From: Aztec Bot <49558828+AztecBot@users.noreply.github.com> Date: Thu, 14 Sep 2023 17:22:13 -0400 Subject: [PATCH 21/25] chore(master): Release 0.7.2 (#2310) :robot: I have created a release *beep* *boop* ---
aztec-packages: 0.7.2 ## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.7.1...aztec-packages-v0.7.2) (2023-09-14) ### Features * ASAN build ([#2307](https://github.com/AztecProtocol/aztec-packages/issues/2307)) ([274c89f](https://github.com/AztecProtocol/aztec-packages/commit/274c89f1916d8af2054d9773dc632f87bb3bf2fc)) ### Bug Fixes * **build:** Attempt to fix deployments ([#2309](https://github.com/AztecProtocol/aztec-packages/issues/2309)) ([39f16f9](https://github.com/AztecProtocol/aztec-packages/commit/39f16f9f642ff348920e1cd4511df9d0f72bacf9))
barretenberg.js: 0.7.2 ## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.7.1...barretenberg.js-v0.7.2) (2023-09-14) ### Miscellaneous * **barretenberg.js:** Synchronize aztec-packages versions
barretenberg: 0.7.2 ## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.7.1...barretenberg-v0.7.2) (2023-09-14) ### Features * ASAN build ([#2307](https://github.com/AztecProtocol/aztec-packages/issues/2307)) ([274c89f](https://github.com/AztecProtocol/aztec-packages/commit/274c89f1916d8af2054d9773dc632f87bb3bf2fc))
--- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- .release-please-manifest.json | 6 +++--- CHANGELOG.md | 12 ++++++++++++ VERSION | 2 +- barretenberg/CHANGELOG.md | 7 +++++++ barretenberg/VERSION | 2 +- barretenberg/barretenberg-wasm.nix | 2 +- barretenberg/barretenberg.nix | 2 +- barretenberg/cpp/CMakeLists.txt | 2 +- barretenberg/ts/CHANGELOG.md | 7 +++++++ barretenberg/ts/package.json | 2 +- 10 files changed, 35 insertions(+), 9 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 9050433199eb..de2e716b69ea 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { - ".": "0.7.1", - "barretenberg": "0.7.1", - "barretenberg/ts": "0.7.1" + ".": "0.7.2", + "barretenberg": "0.7.2", + "barretenberg/ts": "0.7.2" } diff --git a/CHANGELOG.md b/CHANGELOG.md index d64a28a782ee..c8b044a7f79d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.7.1...aztec-packages-v0.7.2) (2023-09-14) + + +### Features + +* ASAN build ([#2307](https://github.com/AztecProtocol/aztec-packages/issues/2307)) ([274c89f](https://github.com/AztecProtocol/aztec-packages/commit/274c89f1916d8af2054d9773dc632f87bb3bf2fc)) + + +### Bug Fixes + +* **build:** Attempt to fix deployments ([#2309](https://github.com/AztecProtocol/aztec-packages/issues/2309)) ([39f16f9](https://github.com/AztecProtocol/aztec-packages/commit/39f16f9f642ff348920e1cd4511df9d0f72bacf9)) + ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/aztec-packages-v0.7.0...aztec-packages-v0.7.1) (2023-09-14) diff --git a/VERSION b/VERSION index 484806fd3c3b..1a57ddb6f286 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v0.7.1 x-release-please-version +v0.7.2 x-release-please-version diff --git a/barretenberg/CHANGELOG.md b/barretenberg/CHANGELOG.md index d9c915e15f76..128eab7a89ff 100644 --- a/barretenberg/CHANGELOG.md +++ b/barretenberg/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.7.1...barretenberg-v0.7.2) (2023-09-14) + + +### Features + +* ASAN build ([#2307](https://github.com/AztecProtocol/aztec-packages/issues/2307)) ([274c89f](https://github.com/AztecProtocol/aztec-packages/commit/274c89f1916d8af2054d9773dc632f87bb3bf2fc)) + ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg-v0.7.0...barretenberg-v0.7.1) (2023-09-14) diff --git a/barretenberg/VERSION b/barretenberg/VERSION index 484806fd3c3b..1a57ddb6f286 100644 --- a/barretenberg/VERSION +++ b/barretenberg/VERSION @@ -1 +1 @@ -v0.7.1 x-release-please-version +v0.7.2 x-release-please-version diff --git a/barretenberg/barretenberg-wasm.nix b/barretenberg/barretenberg-wasm.nix index 8dbc7200cf09..1ad179c70229 100644 --- a/barretenberg/barretenberg-wasm.nix +++ b/barretenberg/barretenberg-wasm.nix @@ -6,7 +6,7 @@ in stdenv.mkDerivation { pname = "barretenberg.wasm"; - version = "0.7.1"; # x-release-please-version + version = "0.7.2"; # x-release-please-version src = ./cpp; diff --git a/barretenberg/barretenberg.nix b/barretenberg/barretenberg.nix index b4d79f76e8c2..9762876e4b48 100644 --- a/barretenberg/barretenberg.nix +++ b/barretenberg/barretenberg.nix @@ -14,7 +14,7 @@ in buildEnv.mkDerivation { pname = "libbarretenberg"; - version = "0.7.1"; # x-release-please-version + version = "0.7.2"; # x-release-please-version src = ./cpp; diff --git a/barretenberg/cpp/CMakeLists.txt b/barretenberg/cpp/CMakeLists.txt index 7749fb8275fc..5bcfe3a375ce 100644 --- a/barretenberg/cpp/CMakeLists.txt +++ b/barretenberg/cpp/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.24) project( Barretenberg DESCRIPTION "BN254 elliptic curve library, and PLONK SNARK prover" - VERSION 0.7.1 # x-release-please-version + VERSION 0.7.2 # x-release-please-version LANGUAGES CXX C ) diff --git a/barretenberg/ts/CHANGELOG.md b/barretenberg/ts/CHANGELOG.md index 0b437c3b02af..ed3cd24c43dc 100644 --- a/barretenberg/ts/CHANGELOG.md +++ b/barretenberg/ts/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.7.2](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.7.1...barretenberg.js-v0.7.2) (2023-09-14) + + +### Miscellaneous + +* **barretenberg.js:** Synchronize aztec-packages versions + ## [0.7.1](https://github.com/AztecProtocol/aztec-packages/compare/barretenberg.js-v0.7.0...barretenberg.js-v0.7.1) (2023-09-14) diff --git a/barretenberg/ts/package.json b/barretenberg/ts/package.json index 2d11e9786254..95e63bf2a22e 100644 --- a/barretenberg/ts/package.json +++ b/barretenberg/ts/package.json @@ -1,6 +1,6 @@ { "name": "@aztec/bb.js", - "version": "0.7.1", + "version": "0.7.2", "homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/barretenberg/ts", "license": "MIT", "type": "module", From 7779ccd21432df9566eab5a6c5eb5a8c40827ef6 Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 15 Sep 2023 02:11:01 +0000 Subject: [PATCH 22/25] git subrepo push --branch=master build-system subrepo: subdir: "build-system" merged: "33a1a068e" upstream: origin: "https://github.com/AztecProtocol/build-system" branch: "master" commit: "33a1a068e" git-subrepo: version: "0.4.6" origin: "???" commit: "???" [skip ci] --- build-system/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-system/.gitrepo b/build-system/.gitrepo index e920dda0ce08..c016bbb0475c 100644 --- a/build-system/.gitrepo +++ b/build-system/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/build-system branch = master - commit = ff806c9fb6a566c69c0a949a68cf6bb6f66649e7 - parent = 13d34f56855bf5c86f04eec15c70b06ded7c955e + commit = 33a1a068e39a5ad9524eafa13e5c01f0002fd32c + parent = ccb7b8919a49be96c0913c1ec1df948cb92dfbe9 method = merge cmdver = 0.4.6 From e431112b517dfb3ad12513ec6c38ae1df0dc98ff Mon Sep 17 00:00:00 2001 From: AztecBot Date: Fri, 15 Sep 2023 02:11:03 +0000 Subject: [PATCH 23/25] git subrepo push --branch=main docs subrepo: subdir: "docs" merged: "d944f23d5" upstream: origin: "https://github.com/AztecProtocol/docs" branch: "main" commit: "d944f23d5" git-subrepo: version: "0.4.6" origin: "???" commit: "???" [skip ci] --- docs/.gitrepo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/.gitrepo b/docs/.gitrepo index 31bff7a92d6b..fbf346d6eb4c 100644 --- a/docs/.gitrepo +++ b/docs/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = https://github.com/AztecProtocol/docs branch = main - commit = a6b558800fa7712fec7045a2d3a238824cf17084 - parent = c8a5cfb375b498475503c12cc83fcdba39f2ec5f + commit = d944f23d5cb35f5b9e8a7428384bde28524134ff + parent = ccb7b8919a49be96c0913c1ec1df948cb92dfbe9 method = merge cmdver = 0.4.6 From cb25bc9b679e7d559357a7ed9be5c8cf4ebc69d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bene=C5=A1?= Date: Fri, 15 Sep 2023 04:51:08 -0400 Subject: [PATCH 24/25] feat: constraining note owner (#1896) Fixes #1817 --- .../src/client/client_execution_context.ts | 2 +- .../src/client/private_execution.test.ts | 59 ++++++++----------- .../acir-simulator/src/client/simulator.ts | 4 +- .../aztec/src/oracle/get_secret_key.nr | 34 +++++++---- yarn-project/aztec-nr/aztec/src/types.nr | 1 - .../aztec/src/types/grumpkin_scalar.nr | 31 ---------- .../aztec-nr/value-note/src/value_note.nr | 2 +- .../src/abis/ecdsa_account_contract.json | 2 +- .../src/abis/schnorr_account_contract.json | 2 +- .../src/ecdsa_public_key_note.nr | 3 +- .../escrow_contract/src/address_note.nr | 5 +- .../src/address_note.nr | 3 +- .../src/public_key_note.nr | 5 +- 13 files changed, 57 insertions(+), 96 deletions(-) delete mode 100644 yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr diff --git a/yarn-project/acir-simulator/src/client/client_execution_context.ts b/yarn-project/acir-simulator/src/client/client_execution_context.ts index 5dc9ff7d549e..e185fd4425e1 100644 --- a/yarn-project/acir-simulator/src/client/client_execution_context.ts +++ b/yarn-project/acir-simulator/src/client/client_execution_context.ts @@ -111,7 +111,7 @@ export class ClientTxExecutionContext { contractAddress, new Point(fromACVMField(ownerX), fromACVMField(ownerY)), ); - return [toACVMField(secretKey.high), toACVMField(secretKey.low)]; + return [toACVMField(secretKey.low), toACVMField(secretKey.high)]; } /** diff --git a/yarn-project/acir-simulator/src/client/private_execution.test.ts b/yarn-project/acir-simulator/src/client/private_execution.test.ts index 3ba37e9f2002..f2f2e71777d0 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.test.ts @@ -10,6 +10,7 @@ import { MAX_NEW_COMMITMENTS_PER_CALL, PRIVATE_DATA_TREE_HEIGHT, PublicCallRequest, + PublicKey, TxContext, } from '@aztec/circuits.js'; import { @@ -66,6 +67,11 @@ describe('Private Execution test suite', () => { const defaultContractAddress = AztecAddress.random(); const ownerPk = GrumpkinScalar.fromString('2dcc5485a58316776299be08c78fa3788a1a7961ae30dc747fb1be17692a8d32'); + const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); + let owner: AztecAddress; + let recipient: AztecAddress; + let ownerCompleteAddress: CompleteAddress; + let recipientCompleteAddress: CompleteAddress; const treeHeights: { [name: string]: number } = { privateData: PRIVATE_DATA_TREE_HEIGHT, @@ -142,11 +148,21 @@ describe('Private Execution test suite', () => { beforeAll(async () => { circuitsWasm = await CircuitsWasm.get(); logger = createDebugLogger('aztec:test:private_execution'); + + ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); + recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); + + owner = ownerCompleteAddress.address; + recipient = recipientCompleteAddress.address; }); beforeEach(() => { oracle = mock(); - oracle.getSecretKey.mockResolvedValue(ownerPk); + oracle.getSecretKey.mockImplementation((contractAddress: AztecAddress, pubKey: PublicKey) => { + if (pubKey.equals(ownerCompleteAddress.publicKey)) return Promise.resolve(ownerPk); + if (pubKey.equals(recipientCompleteAddress.publicKey)) return Promise.resolve(recipientPk); + throw new Error(`Unknown address ${pubKey}`); + }); oracle.getHistoricBlockData.mockResolvedValue(blockData); acirSimulator = new AcirSimulator(oracle); @@ -167,10 +183,7 @@ describe('Private Execution test suite', () => { describe('private token airdrop contract', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); const mockFirstNullifier = new Fr(1111); - let owner: AztecAddress; - let recipient: AztecAddress; let currentNoteIndex = 0n; const buildNote = (amount: bigint, owner: AztecAddress, storageSlot = Fr.random()) => { @@ -197,13 +210,7 @@ describe('Private Execution test suite', () => { }; }; - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - - owner = ownerCompleteAddress.address; - recipient = recipientCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); @@ -236,8 +243,8 @@ describe('Private Execution test suite', () => { const innerNullifier = Fr.fromBuffer( pedersenPlookupCommitInputs(circuitsWasm, [ uniqueSiloedNoteHash.toBuffer(), - ownerPk.high.toBuffer(), ownerPk.low.toBuffer(), + ownerPk.high.toBuffer(), ]), ); @@ -395,10 +402,7 @@ describe('Private Execution test suite', () => { describe('private token contract', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); const mockFirstNullifier = new Fr(1111); - let owner: AztecAddress; - let recipient: AztecAddress; let currentNoteIndex = 0n; const buildNote = (amount: bigint, owner: AztecAddress, storageSlot = Fr.random()) => { @@ -425,13 +429,7 @@ describe('Private Execution test suite', () => { }; }; - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - - owner = ownerCompleteAddress.address; - recipient = recipientCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); @@ -464,8 +462,8 @@ describe('Private Execution test suite', () => { const innerNullifier = Fr.fromBuffer( pedersenPlookupCommitInputs(circuitsWasm, [ uniqueSiloedNoteHash.toBuffer(), - ownerPk.high.toBuffer(), ownerPk.low.toBuffer(), + ownerPk.high.toBuffer(), ]), ); @@ -681,13 +679,8 @@ describe('Private Execution test suite', () => { describe('consuming messages', () => { const contractAddress = defaultContractAddress; - const recipientPk = GrumpkinScalar.fromString('0c9ed344548e8f9ba8aa3c9f8651eaa2853130f6c1e9c050ccf198f7ea18a7ec'); - let recipient: AztecAddress; - - beforeEach(async () => { - const recipientCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(recipientPk, Fr.random()); - recipient = recipientCompleteAddress.address; + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(recipient)) return Promise.resolve(recipientCompleteAddress); throw new Error(`Unknown address ${address}`); @@ -809,13 +802,7 @@ describe('Private Execution test suite', () => { }); describe('pending commitments contract', () => { - let owner: AztecAddress; - - beforeEach(async () => { - const ownerCompleteAddress = await CompleteAddress.fromPrivateKeyAndPartialAddress(ownerPk, Fr.random()); - - owner = ownerCompleteAddress.address; - + beforeEach(() => { oracle.getCompleteAddress.mockImplementation((address: AztecAddress) => { if (address.equals(owner)) return Promise.resolve(ownerCompleteAddress); throw new Error(`Unknown address ${address}`); diff --git a/yarn-project/acir-simulator/src/client/simulator.ts b/yarn-project/acir-simulator/src/client/simulator.ts index 4326437987e9..2f98e90e41e1 100644 --- a/yarn-project/acir-simulator/src/client/simulator.ts +++ b/yarn-project/acir-simulator/src/client/simulator.ts @@ -68,7 +68,9 @@ export class AcirSimulator { } if (request.origin !== contractAddress) { - this.log.warn('Request origin does not match contract address in simulation'); + this.log.warn( + `Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`, + ); } const curve = await Grumpkin.new(); diff --git a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr index 87f36f61920b..2ffa3ece98af 100644 --- a/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr +++ b/yarn-project/aztec-nr/aztec/src/oracle/get_secret_key.nr @@ -1,17 +1,25 @@ -use crate::types::{ - point::Point, - grumpkin_scalar::{ - GRUMPKIN_SCALAR_SERIALISED_LEN, - GrumpkinScalar, - deserialise_grumpkin_scalar, - }, -}; use crate::oracle::get_public_key::get_public_key; +use crate::types::point::Point; #[oracle(getSecretKey)] -fn get_secret_key_oracle(_owner: Point) -> [Field; GRUMPKIN_SCALAR_SERIALISED_LEN] {} +fn get_secret_key_oracle( + _owner: Point, +) -> [Field; dep::std::grumpkin_scalar::GRUMPKIN_SCALAR_SERIALIZED_LEN] { +} -unconstrained fn get_secret_key(owner: Field) -> GrumpkinScalar { - let owner_nullifying_public_key = get_public_key(owner); - deserialise_grumpkin_scalar(get_secret_key_oracle(owner_nullifying_public_key)) -} \ No newline at end of file +unconstrained fn get_secret_key_internal(owner_public_key: Point) -> dep::std::grumpkin_scalar::GrumpkinScalar { + dep::std::grumpkin_scalar::deserialize_grumpkin_scalar(get_secret_key_oracle(owner_public_key)) +} + +fn get_secret_key(owner: Field) -> dep::std::grumpkin_scalar::GrumpkinScalar { + let owner_public_key = get_public_key(owner); + let secret = get_secret_key_internal(owner_public_key); + + // Constrain the owner - Nullifier secret key is currently just the encryption private key so we can constrain + // the owner by deriving the public key from the secret key and checking the result. + let computed_public_key = dep::std::grumpkin_scalar_mul::grumpkin_fixed_base(secret); + assert(owner_public_key.x == computed_public_key[0]); + assert(owner_public_key.y == computed_public_key[1]); + + secret +} diff --git a/yarn-project/aztec-nr/aztec/src/types.nr b/yarn-project/aztec-nr/aztec/src/types.nr index 8c3255571f0e..81b7155d4021 100644 --- a/yarn-project/aztec-nr/aztec/src/types.nr +++ b/yarn-project/aztec-nr/aztec/src/types.nr @@ -1,4 +1,3 @@ -mod grumpkin_scalar; mod point; mod vec; // This can/should be moved out into an official noir library mod type_serialisation; \ No newline at end of file diff --git a/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr b/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr deleted file mode 100644 index 00b0041b8e33..000000000000 --- a/yarn-project/aztec-nr/aztec/src/types/grumpkin_scalar.nr +++ /dev/null @@ -1,31 +0,0 @@ -use crate::types::type_serialisation::TypeSerialisationInterface; - -struct GrumpkinScalar { - high: Field, - low: Field, -} - -impl GrumpkinScalar { - fn new(high: Field, low: Field) -> Self { - // TODO: max value check - GrumpkinScalar { high, low } - } -} - -global GRUMPKIN_SCALAR_SERIALISED_LEN: Field = 2; - -fn deserialise_grumpkin_scalar(fields: [Field; GRUMPKIN_SCALAR_SERIALISED_LEN]) -> GrumpkinScalar { - GrumpkinScalar { - high: fields[0], - low: fields[1], - } -} - -fn serialise_grumpkin_scalar(scalar: GrumpkinScalar) -> [Field; GRUMPKIN_SCALAR_SERIALISED_LEN] { - [scalar.high, scalar.low] -} - -global GrumpkinScalarSerialisationMethods = TypeSerialisationInterface { - deserialise: deserialise_grumpkin_scalar, - serialise: serialise_grumpkin_scalar, -}; \ No newline at end of file diff --git a/yarn-project/aztec-nr/value-note/src/value_note.nr b/yarn-project/aztec-nr/value-note/src/value_note.nr index 8f722d901a66..2f9ed483068b 100644 --- a/yarn-project/aztec-nr/value-note/src/value_note.nr +++ b/yarn-project/aztec-nr/value-note/src/value_note.nr @@ -61,8 +61,8 @@ impl ValueNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ note_hash_for_nullify, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 75d64f6bbd5d..f39c40c43c8e 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json index c62a7310ed20..22da9f00c009 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_account_contract.json @@ -48,7 +48,7 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr index c8081b918f2e..ccd5084d8fdf 100644 --- a/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/ecdsa_account_contract/src/ecdsa_public_key_note.nr @@ -1,4 +1,3 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; use dep::aztec::note::utils::compute_unique_siloed_note_hash; @@ -57,8 +56,8 @@ impl EcdsaPublicKeyNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr index 26752487909e..652c664dcb2d 100644 --- a/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr +++ b/yarn-project/noir-contracts/src/contracts/escrow_contract/src/address_note.nr @@ -1,8 +1,7 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; -use dep::aztec::oracle::get_secret_key::get_secret_key; use dep::aztec::note::utils::compute_siloed_note_hash; +use dep::aztec::oracle::get_secret_key::get_secret_key; global ADDRESS_NOTE_LEN: Field = 2; @@ -32,8 +31,8 @@ impl AddressNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr index 64162d934f61..6801a040542b 100644 --- a/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr +++ b/yarn-project/noir-contracts/src/contracts/pokeable_token_contract/src/address_note.nr @@ -1,4 +1,3 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; use dep::aztec::note::utils::compute_unique_siloed_note_hash; @@ -31,8 +30,8 @@ impl AddressNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } diff --git a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr index 53abc3b4f580..771ca860327e 100644 --- a/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr +++ b/yarn-project/noir-contracts/src/contracts/schnorr_account_contract/src/public_key_note.nr @@ -1,8 +1,7 @@ -use dep::std::hash::pedersen; use dep::aztec::note::note_interface::NoteInterface; use dep::aztec::note::note_header::NoteHeader; -use dep::aztec::oracle::get_secret_key::get_secret_key; use dep::aztec::note::utils::compute_unique_siloed_note_hash; +use dep::aztec::oracle::get_secret_key::get_secret_key; global PUBLIC_KEY_NOTE_LEN: Field = 3; @@ -36,8 +35,8 @@ impl PublicKeyNote { // TODO(#1205) Should use a non-zero generator index. dep::std::hash::pedersen([ unique_siloed_note_hash, - secret.high, secret.low, + secret.high, ])[0] } From 5b18f9e697404a5ad7d2dbe4f8f3875edcf8c58c Mon Sep 17 00:00:00 2001 From: Lasse Herskind <16536249+LHerskind@users.noreply.github.com> Date: Fri, 15 Sep 2023 11:14:34 +0100 Subject: [PATCH 25/25] fix: Use bool for set_minter (#2313) With the newest version of aztec.nr bools in function params are allowed, so this pr updates the `set_minter` function in the token to use this instead of a field that is constrained to be 0 or 1. --- yarn-project/end-to-end/src/e2e_lending_contract.test.ts | 4 ++-- yarn-project/end-to-end/src/e2e_token_contract.test.ts | 6 +++--- .../noir-contracts/src/contracts/token_contract/src/main.nr | 3 +-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts index d9b31c0315eb..1ae5896bd130 100644 --- a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -87,9 +87,9 @@ describe('e2e_lending_contract', () => { } await waitForSuccess(collateralAsset.methods._initialize(accounts[0]).send()); - await waitForSuccess(collateralAsset.methods.set_minter({ address: lendingContract.address }, 1).send()); + await waitForSuccess(collateralAsset.methods.set_minter({ address: lendingContract.address }, true).send()); await waitForSuccess(stableCoin.methods._initialize(accounts[0]).send()); - await waitForSuccess(stableCoin.methods.set_minter({ address: lendingContract.address }, 1).send()); + await waitForSuccess(stableCoin.methods.set_minter({ address: lendingContract.address }, true).send()); return { priceFeedContract, lendingContract, collateralAsset, stableCoin }; }; diff --git a/yarn-project/end-to-end/src/e2e_token_contract.test.ts b/yarn-project/end-to-end/src/e2e_token_contract.test.ts index 7e8defafae48..4e4643d295b7 100644 --- a/yarn-project/end-to-end/src/e2e_token_contract.test.ts +++ b/yarn-project/end-to-end/src/e2e_token_contract.test.ts @@ -127,14 +127,14 @@ describe('e2e_token_contract', () => { }); it('Add minter as admin', async () => { - const tx = asset.withWallet(wallets[1]).methods.set_minter({ address: accounts[1].address }, 1).send(); + const tx = asset.withWallet(wallets[1]).methods.set_minter({ address: accounts[1].address }, true).send(); const receipt = await tx.wait(); expect(receipt.status).toBe(TxStatus.MINED); expect(await asset.methods.is_minter({ address: accounts[1].address }).view()).toBe(true); }); it('Revoke minter as admin', async () => { - const tx = asset.withWallet(wallets[1]).methods.set_minter({ address: accounts[1].address }, 0).send(); + const tx = asset.withWallet(wallets[1]).methods.set_minter({ address: accounts[1].address }, false).send(); const receipt = await tx.wait(); expect(receipt.status).toBe(TxStatus.MINED); expect(await asset.methods.is_minter({ address: accounts[1].address }).view()).toBe(false); @@ -147,7 +147,7 @@ describe('e2e_token_contract', () => { ); }); it('Revoke minter not as admin', async () => { - await expect(asset.methods.set_minter({ address: accounts[0].address }, 0).simulate()).rejects.toThrowError( + await expect(asset.methods.set_minter({ address: accounts[0].address }, false).simulate()).rejects.toThrowError( 'Assertion failed: caller is not admin', ); }); diff --git a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr index b676bea79625..8def5e21bb9d 100644 --- a/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/token_contract/src/main.nr @@ -113,9 +113,8 @@ contract Token { #[aztec(public)] fn set_minter( minter: AztecAddress, - approve: Field, + approve: bool, ) { - assert((approve == 1) | (approve == 0), "not providing boolean"); let storage = Storage::init(Context::public(&mut context)); assert(storage.admin.read() == context.msg_sender(), "caller is not admin"); storage.minters.at(minter.address).write(approve as Field);