From 036a92803fc21a06120181752224cb672a43565c Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 27 Sep 2023 16:08:48 +0000 Subject: [PATCH 1/2] capitalizing x in pxe --- yarn-project/aztec-node/src/bin/index.ts | 2 +- yarn-project/aztec-sandbox/README.md | 2 +- yarn-project/aztec-sandbox/src/routes.ts | 2 +- yarn-project/aztec.js/README.md | 2 +- yarn-project/cli/README.md | 4 ++-- yarn-project/cli/src/client.ts | 2 +- yarn-project/end-to-end/src/e2e_2_pxes.test.ts | 2 +- .../end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts | 2 +- yarn-project/end-to-end/src/e2e_p2p_network.test.ts | 2 +- .../end-to-end/src/fixtures/cross_chain_test_harness.ts | 2 +- yarn-project/end-to-end/src/fixtures/utils.ts | 6 +++--- yarn-project/pxe/src/pxe_http/pxe_http_server.ts | 2 +- yarn-project/pxe/src/pxe_service/pxe_service.ts | 2 +- yarn-project/types/src/interfaces/pxe.ts | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/yarn-project/aztec-node/src/bin/index.ts b/yarn-project/aztec-node/src/bin/index.ts index 9a793952ccc..41ec5382c82 100644 --- a/yarn-project/aztec-node/src/bin/index.ts +++ b/yarn-project/aztec-node/src/bin/index.ts @@ -21,7 +21,7 @@ async function createAndDeployAztecNode() { } /** - * Creates a router for helper API endpoints of the Private Execution Environment (PXE). + * Creates a router for helper API endpoints of the Private eXecution Environment (PXE). * @param apiPrefix - The prefix to use for all api requests * @returns - The router for handling status requests. */ diff --git a/yarn-project/aztec-sandbox/README.md b/yarn-project/aztec-sandbox/README.md index 92bde78b1ce..91b65563598 100644 --- a/yarn-project/aztec-sandbox/README.md +++ b/yarn-project/aztec-sandbox/README.md @@ -1,6 +1,6 @@ # aztec-sandbox -Aztec Sandbox is a package that allows for a simple development environment on Aztec stack. It creates an Private Execution Environment (PXE) that listens for HTTP requests on `localhost:8080` by default. When started, it deploys all necessary L1 Aztec contracts and then starts listening for RPC requests. +Aztec Sandbox is a package that allows for a simple development environment on Aztec stack. It creates an Private eXecution Environment (PXE) that listens for HTTP requests on `localhost:8080` by default. When started, it deploys all necessary L1 Aztec contracts and then starts listening for RPC requests. ## How to run: diff --git a/yarn-project/aztec-sandbox/src/routes.ts b/yarn-project/aztec-sandbox/src/routes.ts index 91bbec88f10..0b6c67f22be 100644 --- a/yarn-project/aztec-sandbox/src/routes.ts +++ b/yarn-project/aztec-sandbox/src/routes.ts @@ -2,7 +2,7 @@ import Koa from 'koa'; import Router from 'koa-router'; /** - * Creates a router for helper API endpoints of the Private Execution Environment (PXE). + * Creates a router for helper API endpoints of the Private eXecution Environment (PXE). * @param aztecNode - An instance of the aztec node. * @param config - The aztec node's configuration variables. */ diff --git a/yarn-project/aztec.js/README.md b/yarn-project/aztec.js/README.md index 14b0aa536dd..d031fb53bb0 100644 --- a/yarn-project/aztec.js/README.md +++ b/yarn-project/aztec.js/README.md @@ -1,6 +1,6 @@ # Aztec.js -Aztec.js is a library that provides APIs for managing accounts and interacting with contracts on the Aztec network. It communicates with the [Private Execution Environment (PXE)](https://docs.aztec.network/apis/pxe/interfaces/PXE) through a `PXE` implementation, allowing developers to easily register new accounts, deploy contracts, view functions, and send transactions. +Aztec.js is a library that provides APIs for managing accounts and interacting with contracts on the Aztec network. It communicates with the [Private eXecution Environment (PXE)](https://docs.aztec.network/apis/pxe/interfaces/PXE) through a `PXE` implementation, allowing developers to easily register new accounts, deploy contracts, view functions, and send transactions. ## Usage diff --git a/yarn-project/cli/README.md b/yarn-project/cli/README.md index e4544aec0e2..ae1d8fd4812 100644 --- a/yarn-project/cli/README.md +++ b/yarn-project/cli/README.md @@ -47,7 +47,7 @@ These options are: - `API_KEY` -> `a, --api-key` for `deploy-l1-contracts`. - `ETHEREUM_RPC_HOST` -> `-u, --rpc-url` for `deploy-l1-contracts`. -So if for example you are running your Private Execution Environment (PXE) remotely you can do: +So if for example you are running your Private eXecution Environment (PXE) remotely you can do: ```shell export PXE_HOST=http://external.site/rpc:8080 @@ -352,7 +352,7 @@ Options: - `'-a, --args [functionArgs...]` (optional): Function arguments. Default: []. - `-c, --contract-abi `: The compiled contract's ABI 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. - `-ca, --contract-address
`: Address of the contract. -- `-f, --from `: Address of the caller. If empty, first account in the Private Execution Environment (PXE) will be used. +- `-f, --from `: Address of the caller. If empty, first account in the Private eXecution Environment (PXE) will be used. - `-u, --rpc-url `: URL of PXE Service. Default: `http://localhost:8080`. This command simulates the execution of a view function on a deployed contract without modifying the state. It requires the contract's ABI, address, function name, and optionally, function arguments. The command displays the result of the view function. diff --git a/yarn-project/cli/src/client.ts b/yarn-project/cli/src/client.ts index c30b129419f..acae1cfb9ce 100644 --- a/yarn-project/cli/src/client.ts +++ b/yarn-project/cli/src/client.ts @@ -36,7 +36,7 @@ export async function createCompatibleClient(rpcUrl: string, logger: DebugLogger class VersionMismatchError extends Error {} /** - * Checks that Private Execution Environment (PXE) version matches the expected one by this CLI. Throws if not. + * Checks that Private eXecution Environment (PXE) version matches the expected one by this CLI. Throws if not. * @param pxe - PXE client. * @param expectedVersionRange - Expected version by CLI. */ diff --git a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts index e81995f0239..9a2a5256c33 100644 --- a/yarn-project/end-to-end/src/e2e_2_pxes.test.ts +++ b/yarn-project/end-to-end/src/e2e_2_pxes.test.ts @@ -203,7 +203,7 @@ describe('e2e_2_pxes', () => { expect(storedValue).toBe(newValueToSet); }); - it('private state is "zero" when Private Execution Environment (PXE) does not have the account private key', async () => { + it('private state is "zero" when Private eXecution Environment (PXE) does not have the account private key', async () => { const userABalance = 100n; const userBBalance = 150n; diff --git a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts index 23263fa4edf..651552a7d2a 100644 --- a/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts +++ b/yarn-project/end-to-end/src/e2e_multiple_accounts_1_enc_key.test.ts @@ -97,7 +97,7 @@ describe('e2e_multiple_accounts_1_enc_key', () => { }; /** - * Tests the ability of the Private Execution Environment (PXE) to handle multiple accounts under the same encryption key. + * Tests the ability of the Private eXecution Environment (PXE) to handle multiple accounts under the same encryption key. */ it('spends notes from multiple account under the same encryption key', async () => { const transferAmount1 = 654n; // account 0 -> account 1 diff --git a/yarn-project/end-to-end/src/e2e_p2p_network.test.ts b/yarn-project/end-to-end/src/e2e_p2p_network.test.ts index 1ad20b9f413..02f19d353da 100644 --- a/yarn-project/end-to-end/src/e2e_p2p_network.test.ts +++ b/yarn-project/end-to-end/src/e2e_p2p_network.test.ts @@ -112,7 +112,7 @@ describe('e2e_p2p_network', () => { return await AztecNodeService.createAndSync(newConfig); }; - // submits a set of transactions to the provided Private Execution Environment (PXE) + // submits a set of transactions to the provided Private eXecution Environment (PXE) const submitTxsTo = async (pxe: PXEService, account: AztecAddress, numTxs: number, publicKey: PublicKey) => { const txs: SentTx[] = []; for (let i = 0; i < numTxs; i++) { 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 339fffc0380..22ef739d9bb 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 @@ -90,7 +90,7 @@ export class CrossChainTestHarness { constructor( /** AztecNode. */ public aztecNode: AztecNodeService | undefined, - /** Private Execution Environment (PXE). */ + /** Private eXecution Environment (PXE). */ public pxeService: PXE, /** CheatCodes. */ public cc: CheatCodes, diff --git a/yarn-project/end-to-end/src/fixtures/utils.ts b/yarn-project/end-to-end/src/fixtures/utils.ts index 3ed19980085..bc88cab09f9 100644 --- a/yarn-project/end-to-end/src/fixtures/utils.ts +++ b/yarn-project/end-to-end/src/fixtures/utils.ts @@ -126,13 +126,13 @@ export const setupL1Contracts = async ( }; /** - * Sets up Private Execution Environment (PXE). + * Sets up Private eXecution Environment (PXE). * @param numberOfAccounts - The number of new accounts to be created once the PXE is initiated. * @param aztecNode - The instance of an aztec node, if one is required * @param firstPrivKey - The private key of the first account to be created. * @param logger - The logger to be used. * @param useLogSuffix - Whether to add a randomly generated suffix to the PXE debug logs. - * @returns Private Execution Environment (PXE), accounts, wallets and logger. + * @returns Private eXecution Environment (PXE), accounts, wallets and logger. */ export async function setupPXEService( numberOfAccounts: number, @@ -231,7 +231,7 @@ export async function setup( */ aztecNode: AztecNodeService | undefined; /** - * The Private Execution Environment (PXE). + * The Private eXecution Environment (PXE). */ pxe: PXE; /** diff --git a/yarn-project/pxe/src/pxe_http/pxe_http_server.ts b/yarn-project/pxe/src/pxe_http/pxe_http_server.ts index a6dc6cada6e..e8eb1a864c1 100644 --- a/yarn-project/pxe/src/pxe_http/pxe_http_server.ts +++ b/yarn-project/pxe/src/pxe_http/pxe_http_server.ts @@ -25,7 +25,7 @@ import { EthAddress } from '../index.js'; export const localAnvil = foundry; /** - * Wraps an instance of Private Execution Environment (PXE) implementation to a JSON RPC HTTP interface. + * Wraps an instance of Private eXecution Environment (PXE) implementation to a JSON RPC HTTP interface. * @returns A new instance of the HTTP server. */ export function createPXERpcServer(pxeService: PXE): JsonRpcServer { diff --git a/yarn-project/pxe/src/pxe_service/pxe_service.ts b/yarn-project/pxe/src/pxe_service/pxe_service.ts index 9a808b2b395..de673813585 100644 --- a/yarn-project/pxe/src/pxe_service/pxe_service.ts +++ b/yarn-project/pxe/src/pxe_service/pxe_service.ts @@ -63,7 +63,7 @@ import { getAcirSimulator } from '../simulator/index.js'; import { Synchronizer } from '../synchronizer/index.js'; /** - * A Private Execution Environment (PXE) implementation. + * A Private eXecution Environment (PXE) implementation. */ export class PXEService implements PXE { private synchronizer: Synchronizer; diff --git a/yarn-project/types/src/interfaces/pxe.ts b/yarn-project/types/src/interfaces/pxe.ts index 938b1ca0fcc..c2d542d6abe 100644 --- a/yarn-project/types/src/interfaces/pxe.ts +++ b/yarn-project/types/src/interfaces/pxe.ts @@ -20,7 +20,7 @@ import { SyncStatus } from './sync-status.js'; // docs:start:pxe-interface /** - * Private Execution Environment (PXE) runs locally for each user, providing functionality for all the operations + * Private eXecution Environment (PXE) runs locally for each user, providing functionality for all the operations * needed to interact with the Aztec network, including account management, private data management, * transaction local simulation, and access to an Aztec node. This interface, as part of a Wallet, * is exposed to dapps for interacting with the network on behalf of the user. From a37d6cf71d14648e854fba3422d78dff1adf36f8 Mon Sep 17 00:00:00 2001 From: benesjan Date: Wed, 27 Sep 2023 16:31:24 +0000 Subject: [PATCH 2/2] pixie --- yarn-project/pxe/README.md | 2 ++ yarn-project/pxe/pixie.png | Bin 0 -> 29752 bytes 2 files changed, 2 insertions(+) create mode 100644 yarn-project/pxe/pixie.png diff --git a/yarn-project/pxe/README.md b/yarn-project/pxe/README.md index ba56822b3db..bccdb05f11e 100644 --- a/yarn-project/pxe/README.md +++ b/yarn-project/pxe/README.md @@ -9,3 +9,5 @@ - [Acir Simulator](../acir-simulator/) - [Key Store](../key-store/) - [Account State](./src/account_state/account_state.ts): It coordinates other components to synchronize and decrypt data, simulate transactions, and generate kernel proofs, for a specific account. + +![Pixie](./pixie.png) \ No newline at end of file diff --git a/yarn-project/pxe/pixie.png b/yarn-project/pxe/pixie.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba39e2aa6f50c54e966364ff225b0540ccdab45 GIT binary patch literal 29752 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 literal 0 HcmV?d00001