-
Notifications
You must be signed in to change notification settings - Fork 609
docs: deploying contracts using aztec-cli
#1592
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
331678c
8b2d0ba
f6e5b7d
33ff12b
67c493c
468f773
07172f2
57fd81d
dd98c8c
3c5c253
17afe55
bd48d28
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,59 @@ | ||
| See sandbox section? | ||
| # Deploying contracts | ||
|
|
||
| Once you have [compiled](./compiling.md) your contracts you can proceed to deploying them using `aztec-cli`. | ||
|
|
||
| ## Prerequisites | ||
| - aztec-cli installed (go to [CLI main section](./main.md) for installation instructions) | ||
| - contract artifacts ready (go to [Compiling contracts section](../contracts/compiling.md) for instructions on how to compile contracts) | ||
| - aztec-sandbox running (go to [Sandbox section](../sandbox/main.md) for instructions on how to install and run the sandbox) | ||
|
|
||
| ## Deploy | ||
|
|
||
| To deploy the contracts we use the `deploy` command from `aztec-cli`: | ||
|
|
||
| ```bash | ||
| aztec-cli deploy /path/to/contract/abi.json | ||
| ``` | ||
|
|
||
| ### Arguments | ||
| This command takes 1 mandatory argument which is the path to the contract ABI file in a JSON format (e.g. `contracts/target/PrivateToken.json`). Alternatively you can pass the name of an example contract as exported by `@aztec/noir-contracts` (run `aztec-cli example-contracts` to see the full list of contracts available). | ||
|
|
||
| The command also takes the following optional arguments: | ||
| - `-args <constructorArgs...>` (default: `[]`): Arguments to pass to the contract constructor. | ||
| - `--rpc-url <string>` (default: `http://localhost:8080`): URL of the Aztec node to connect to. | ||
| - `--public-key <string>` (default: `undefined`): Optional encryption public key for this contract. | ||
| Set this only if this contract is expected to receive private notes (in such a case the public key is used during the note encryption). | ||
| - `--salt <string>` (default: random value): Hexadecimal string used when computing the contract address of the contract being deployed. | ||
| By default is set to a random value. | ||
| Set it, if you need a deterministic contract address (same functionality as Ethereum's `CREATE2` opcode). | ||
|
|
||
| To give you a more complete example we will deploy the `PrivateToken` contract whose artifacts are included in the `@aztec/noir-contracts` package. | ||
|
|
||
| ### Deploying private token contract | ||
| The contract has `initial_supply` and `owner` as constructor arguments. | ||
| Because the contract sends a note to the owner specified inside the constructor, we first need to register the owner as a recipient inside the Aztec RPC with the following command: | ||
|
|
||
| ```bash | ||
| aztec-cli register-recipient --address 0x147392a39e593189902458f4303bc6e0a39128c5a1c1612f76527a162d36d529 --public-key 0x26e193aef4f83c70651485b5526c6d01a36d763223ab24efd1f9ff91b394ac0c20ad99d0ef669dc0dde8d5f5996c63105de8e15c2c87d8260b9e6f02f72af622 --partial-address 0x200e9a6c2d2e8352012e51c6637659713d336405c29386c7c4ac56779ab54fa7 | ||
| ``` | ||
|
|
||
| > **NOTE**: If we didn't register owner as a recipient we could not encrypt a note for the owner and the contract deployment would fail because constructor execution would fail (we need owner's public key to encrypt a note). | ||
|
|
||
| Once the recipient is registered we can deploy the contract: | ||
|
|
||
| ```bash | ||
| aztec-cli deploy PrivateTokenContractAbi --args 1000 0x147392a39e593189902458f4303bc6e0a39128c5a1c1612f76527a162d36d529 | ||
| ``` | ||
|
|
||
| If everything went as expected you should see the following output (with a different address): | ||
| > Contract deployed at 0x151de6120ae6628129ee852c5fc7bcbc8531055f76d4347cdc86003bbea96906 | ||
|
|
||
| If we pass the salt as an argument: | ||
|
|
||
| ```bash | ||
| aztec-cli deploy PrivateTokenContractAbi --args 1000 0x147392a39e593189902458f4303bc6e0a39128c5a1c1612f76527a162d36d529 --salt 0x123 | ||
| ``` | ||
|
|
||
| the resulting address will be deterministic. | ||
|
|
||
| > **NOTE**: You can try running the deployment with the same salt the second time in which case the transaction will fail because the address has been already deployed to. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -146,8 +146,8 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { | |
| program | ||
| .command('deploy') | ||
| .description('Deploys a compiled Noir contract to Aztec.') | ||
| .requiredOption( | ||
| '-c, --contract-abi <file>', | ||
| .argument( | ||
| '<abi>', | ||
|
Comment on lines
+149
to
+150
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I like this change, but heads up this impacts other guides, as well as the one in the up-dev page. We'll need to update those as well. Let's include them in this PR.
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is maybe a good argument for writing all code snippets as part of testable code files (like you did earlier this week for some other docs, Santiago), so that the CI can then test that the code snippets are all up-to-date?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Agree. I did fail to get them into the CI though (build-system beat me again), but can revisit it next week.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Addressed in 9dea419 I will send a PR to the sandbox website as well. |
||
| "A compiled Noir contract's ABI in JSON format or name of a contract ABI exported by @aztec/noir-contracts", | ||
| ) | ||
| .option('-a, --args <constructorArgs...>', 'Contract constructor arguments', []) | ||
|
|
@@ -157,8 +157,8 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { | |
| 'Optional encryption public key for this address. Set this value only if this contract is expected to receive private notes, which will be encrypted using this public key.', | ||
| ) | ||
| .option('-s, --salt <string>', 'Optional deployment salt as a hex string for generating the deployment address.') | ||
| .action(async (options: any) => { | ||
| const contractAbi = await getContractAbi(options.contractAbi, log); | ||
| .action(async (abiPath, options: any) => { | ||
| const contractAbi = await getContractAbi(abiPath, log); | ||
| const constructorAbi = contractAbi.functions.find(({ name }) => name === 'constructor'); | ||
|
|
||
| const client = createClient(options.rpcUrl); | ||
|
|
@@ -279,7 +279,7 @@ export function getProgram(log: LogFn, debugLogger: DebugLogger): Command { | |
| const partialAddress = Fr.fromString(options.partialAddress); | ||
|
|
||
| await client.registerRecipient(await CompleteAddress.create(address, publicKey, partialAddress)); | ||
| log(`\nRegistered details for Address: ${options.address}\n`); | ||
| log(`\nRegistered details for account with address: ${options.address}\n`); | ||
| }); | ||
|
|
||
| program | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.