@aztec/aztec.js 0.1.0-alpha22 → 0.1.0-alpha24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/.tsbuildinfo +1 -1
  2. package/README.md +1 -1
  3. package/dest/abis/ecdsa_account_contract.json +103 -0
  4. package/dest/abis/schnorr_account_contract.json +96 -0
  5. package/dest/account_impl/account_collection.d.ts.map +1 -1
  6. package/dest/account_impl/account_collection.js +1 -1
  7. package/dest/account_impl/entrypoint_payload.d.ts +26 -0
  8. package/dest/account_impl/entrypoint_payload.d.ts.map +1 -0
  9. package/dest/account_impl/entrypoint_payload.js +46 -0
  10. package/dest/account_impl/index.d.ts +2 -1
  11. package/dest/account_impl/index.d.ts.map +1 -1
  12. package/dest/account_impl/index.js +3 -2
  13. package/dest/account_impl/single_key_account_contract.d.ts +23 -0
  14. package/dest/account_impl/single_key_account_contract.d.ts.map +1 -0
  15. package/dest/account_impl/single_key_account_contract.js +66 -0
  16. package/dest/account_impl/stored_key_account_contract.d.ts +21 -0
  17. package/dest/account_impl/stored_key_account_contract.d.ts.map +1 -0
  18. package/dest/account_impl/stored_key_account_contract.js +62 -0
  19. package/dest/aztec_rpc_client/aztec_rpc_client.d.ts +1 -1
  20. package/dest/aztec_rpc_client/aztec_rpc_client.d.ts.map +1 -1
  21. package/dest/aztec_rpc_client/aztec_rpc_client.js +3 -3
  22. package/dest/aztec_rpc_client/wallet.d.ts +3 -5
  23. package/dest/aztec_rpc_client/wallet.d.ts.map +1 -1
  24. package/dest/aztec_rpc_client/wallet.js +3 -6
  25. package/dest/contract/contract.d.ts +1 -1
  26. package/dest/contract/contract.d.ts.map +1 -1
  27. package/dest/contract/contract.js +2 -2
  28. package/dest/contract/contract.test.js +5 -5
  29. package/dest/contract/contract_function_interaction.d.ts +3 -4
  30. package/dest/contract/contract_function_interaction.d.ts.map +1 -1
  31. package/dest/contract/contract_function_interaction.js +8 -10
  32. package/dest/contract/sent_tx.d.ts +1 -1
  33. package/dest/contract/sent_tx.d.ts.map +1 -1
  34. package/dest/contract/sent_tx.js +2 -2
  35. package/dest/contract_deployer/contract_deployer.d.ts +2 -1
  36. package/dest/contract_deployer/contract_deployer.d.ts.map +1 -1
  37. package/dest/contract_deployer/contract_deployer.js +2 -2
  38. package/dest/contract_deployer/contract_deployer.test.js +2 -2
  39. package/dest/contract_deployer/deploy_method.d.ts +2 -3
  40. package/dest/contract_deployer/deploy_method.d.ts.map +1 -1
  41. package/dest/contract_deployer/deploy_method.js +5 -14
  42. package/dest/index.d.ts +3 -2
  43. package/dest/index.d.ts.map +1 -1
  44. package/dest/index.js +4 -3
  45. package/dest/utils/account.d.ts +4 -3
  46. package/dest/utils/account.d.ts.map +1 -1
  47. package/dest/utils/account.js +14 -18
  48. package/dest/utils/pub_key.d.ts.map +1 -1
  49. package/dest/utils/pub_key.js +1 -1
  50. package/package.json +4 -6
  51. package/src/abis/ecdsa_account_contract.json +103 -0
  52. package/src/abis/schnorr_account_contract.json +96 -0
  53. package/src/account_impl/account_collection.ts +1 -0
  54. package/src/account_impl/entrypoint_payload.ts +76 -0
  55. package/src/account_impl/index.ts +2 -1
  56. package/src/account_impl/single_key_account_contract.ts +81 -0
  57. package/src/account_impl/stored_key_account_contract.ts +73 -0
  58. package/src/aztec_rpc_client/aztec_rpc_client.ts +10 -2
  59. package/src/aztec_rpc_client/wallet.ts +17 -8
  60. package/src/contract/contract.test.ts +7 -5
  61. package/src/contract/contract.ts +3 -2
  62. package/src/contract/contract_function_interaction.ts +9 -10
  63. package/src/contract/sent_tx.ts +1 -1
  64. package/src/contract_deployer/contract_deployer.test.ts +4 -3
  65. package/src/contract_deployer/contract_deployer.ts +3 -2
  66. package/src/contract_deployer/deploy_method.ts +12 -19
  67. package/src/index.ts +5 -2
  68. package/src/utils/account.ts +21 -36
  69. package/src/utils/pub_key.ts +1 -0
  70. package/tsconfig.json +2 -8
  71. package/dest/account_impl/account_contract.d.ts +0 -45
  72. package/dest/account_impl/account_contract.d.ts.map +0 -1
  73. package/dest/account_impl/account_contract.js +0 -108
  74. package/dest/auth/ecdsa.d.ts +0 -13
  75. package/dest/auth/ecdsa.d.ts.map +0 -1
  76. package/dest/auth/ecdsa.js +0 -17
  77. package/dest/auth/index.d.ts +0 -19
  78. package/dest/auth/index.d.ts.map +0 -1
  79. package/dest/auth/index.js +0 -14
  80. package/dest/auth/schnorr.d.ts +0 -13
  81. package/dest/auth/schnorr.d.ts.map +0 -1
  82. package/dest/auth/schnorr.js +0 -14
  83. package/src/account_impl/account_contract.ts +0 -173
  84. package/src/auth/ecdsa.ts +0 -18
  85. package/src/auth/index.ts +0 -25
  86. package/src/auth/schnorr.ts +0 -13
@@ -1,11 +1,16 @@
1
- import { AztecRPC, getContractDeploymentInfo } from '@aztec/aztec-rpc';
2
- import { CircuitsWasm, ContractDeploymentData, TxContext } from '@aztec/circuits.js';
1
+ import {
2
+ CircuitsWasm,
3
+ ContractDeploymentData,
4
+ PartialContractAddress,
5
+ TxContext,
6
+ getContractDeploymentInfo,
7
+ } from '@aztec/circuits.js';
3
8
  import { ContractAbi } from '@aztec/foundation/abi';
4
9
  import { AztecAddress } from '@aztec/foundation/aztec-address';
5
10
  import { EthAddress } from '@aztec/foundation/eth-address';
6
11
  import { Fr } from '@aztec/foundation/fields';
7
- import { PublicKey } from '@aztec/key-store';
8
- import { ExecutionRequest, PackedArguments, PartialContractAddress, Tx, TxExecutionRequest } from '@aztec/types';
12
+ import { AztecRPC, ExecutionRequest, PackedArguments, PublicKey, Tx, TxExecutionRequest } from '@aztec/types';
13
+
9
14
  import { BaseWallet, Wallet } from '../aztec_rpc_client/wallet.js';
10
15
  import { Contract, ContractFunctionInteraction, SendMethodOptions } from '../contract/index.js';
11
16
 
@@ -81,10 +86,8 @@ export class DeployMethod extends ContractFunctionInteraction {
81
86
  * @returns A Promise resolving to an object containing the signed transaction data and other relevant information.
82
87
  */
83
88
  public async create(options: DeployOptions = {}) {
84
- const { portalContract, contractAddressSalt } = Object.assign(
85
- { portalContract: EthAddress.ZERO, contractAddressSalt: Fr.random() },
86
- options,
87
- );
89
+ const portalContract = options.portalContract ?? EthAddress.ZERO;
90
+ const contractAddressSalt = options.contractAddressSalt ?? Fr.random();
88
91
 
89
92
  const { address, constructorHash, functionTreeRoot, partialAddress } = await getContractDeploymentInfo(
90
93
  this.abi,
@@ -137,17 +140,7 @@ export class DeployMethod extends ContractFunctionInteraction {
137
140
  public async simulate(options: DeployOptions): Promise<Tx> {
138
141
  const txRequest = this.txRequest ?? (await this.create(options));
139
142
 
140
- // We need to tell the rpc server which account state to use to simulate
141
- // the tx. In the context of a deployment, we need to use an account state
142
- // that matches the account contract being deployed. But if what we deploy is
143
- // an "application" contract, then there's no account state associated with it,
144
- // so we just let the rpc server use whichever it wants. This is an accident
145
- // of all simulations happening over an account state, which should not be necessary.
146
- const rpcServerRegisteredAccounts = await this.wallet.getAccounts();
147
- const deploymentAddress = this.completeContractAddress!;
148
- const accountStateAddress = rpcServerRegisteredAccounts.includes(deploymentAddress) ? deploymentAddress : undefined;
149
-
150
- this.tx = await this.wallet.simulateTx(txRequest, accountStateAddress);
143
+ this.tx = await this.wallet.simulateTx(txRequest);
151
144
  return this.tx;
152
145
  }
153
146
 
package/src/index.ts CHANGED
@@ -2,8 +2,11 @@ export * from './contract/index.js';
2
2
  export * from './contract_deployer/index.js';
3
3
  export * from './utils/index.js';
4
4
  export * from './aztec_rpc_client/index.js';
5
- export * from './auth/index.js';
6
5
  export * from './account_impl/index.js';
6
+ export * from './contract_deployer/deploy_method.js';
7
7
 
8
8
  // TODO - only export necessary stuffs
9
- export * from '@aztec/aztec-rpc';
9
+ // export * from '@aztec/aztec-rpc';
10
+
11
+ export { AztecAddress, EthAddress, Point, Fr } from '@aztec/circuits.js';
12
+ export { AztecRPC } from '@aztec/types';
@@ -1,17 +1,12 @@
1
- import { AztecRPC, TxStatus, getContractDeploymentInfo } from '@aztec/aztec-rpc';
2
- import { CircuitsWasm, Fr } from '@aztec/circuits.js';
1
+ import { Fr, getContractDeploymentInfo } from '@aztec/circuits.js';
2
+ import { Schnorr } from '@aztec/circuits.js/barretenberg';
3
+ import { ContractAbi } from '@aztec/foundation/abi';
3
4
  import { randomBytes } from '@aztec/foundation/crypto';
4
5
  import { createDebugLogger } from '@aztec/foundation/log';
5
- import { SchnorrAccountContractAbi } from '@aztec/noir-contracts/examples';
6
+ import { AztecRPC, TxStatus } from '@aztec/types';
7
+
6
8
  import { AccountWallet, Wallet } from '../aztec_rpc_client/wallet.js';
7
- import {
8
- AccountCollection,
9
- AccountContract,
10
- ContractDeployer,
11
- SchnorrAuthProvider,
12
- generatePublicKey,
13
- } from '../index.js';
14
- import { Schnorr } from '@aztec/circuits.js/barretenberg';
9
+ import { AccountCollection, ContractDeployer, SingleKeyAccountContract, generatePublicKey } from '../index.js';
15
10
 
16
11
  /**
17
12
  * Creates an Aztec Account.
@@ -19,21 +14,21 @@ import { Schnorr } from '@aztec/circuits.js/barretenberg';
19
14
  */
20
15
  export async function createAccounts(
21
16
  aztecRpcClient: AztecRPC,
17
+ accountContractAbi: ContractAbi,
22
18
  privateKey?: Buffer,
23
19
  salt = Fr.random(),
24
20
  numberOfAccounts = 1,
25
21
  logger = createDebugLogger('aztec:aztec.js:accounts'),
26
22
  ): Promise<Wallet> {
27
- const accountAbi = SchnorrAccountContractAbi;
28
23
  const accountImpls = new AccountCollection();
29
- const wasm = await CircuitsWasm.get();
24
+
30
25
  for (let i = 0; i < numberOfAccounts; ++i) {
31
26
  // TODO(#662): Let the aztec rpc server generate the keypair rather than hardcoding the private key
32
27
  const privKey = i == 0 && privateKey ? privateKey : randomBytes(32);
33
28
  const publicKey = await generatePublicKey(privKey);
34
- const deploymentInfo = await getContractDeploymentInfo(accountAbi, [], salt, publicKey);
35
- await aztecRpcClient.addAccount(privKey, deploymentInfo.address, deploymentInfo.partialAddress, accountAbi);
36
- const contractDeployer = new ContractDeployer(accountAbi, aztecRpcClient, publicKey);
29
+ const deploymentInfo = await getContractDeploymentInfo(accountContractAbi, [], salt, publicKey);
30
+ await aztecRpcClient.addAccount(privKey, deploymentInfo.address, deploymentInfo.partialAddress, accountContractAbi);
31
+ const contractDeployer = new ContractDeployer(accountContractAbi, aztecRpcClient, publicKey);
37
32
  const tx = contractDeployer.deploy().send({ contractAddressSalt: salt });
38
33
  await tx.isMined(0, 0.5);
39
34
  const receipt = await tx.getReceipt();
@@ -49,14 +44,7 @@ export async function createAccounts(
49
44
  logger(`Created account ${address.toString()} with public key ${publicKey.toString()}`);
50
45
  accountImpls.registerAccount(
51
46
  address,
52
- new AccountContract(
53
- address,
54
- publicKey,
55
- new SchnorrAuthProvider(await Schnorr.new(), privKey),
56
- deploymentInfo.partialAddress,
57
- accountAbi,
58
- wasm,
59
- ),
47
+ new SingleKeyAccountContract(address, deploymentInfo.partialAddress, privKey, await Schnorr.new()),
60
48
  );
61
49
  }
62
50
  return new AccountWallet(aztecRpcClient, accountImpls);
@@ -68,23 +56,20 @@ export async function createAccounts(
68
56
  * @param numberOfAccounts - The number of accounts to fetch.
69
57
  * @returns An AccountWallet implementation that includes all the accounts found.
70
58
  */
71
- export async function getAccountWallet(aztecRpcClient: AztecRPC, privateKey: Buffer, salt: Fr) {
72
- const wasm = await CircuitsWasm.get();
59
+ export async function getAccountWallet(
60
+ aztecRpcClient: AztecRPC,
61
+ accountContractAbi: ContractAbi,
62
+ privateKey: Buffer,
63
+ salt: Fr,
64
+ ) {
73
65
  const accountCollection = new AccountCollection();
74
66
  const publicKey = await generatePublicKey(privateKey);
75
- const address = await aztecRpcClient.getAccountAddress(publicKey);
76
- const deploymentInfo = await getContractDeploymentInfo(SchnorrAccountContractAbi, [], salt, publicKey);
67
+ const deploymentInfo = await getContractDeploymentInfo(accountContractAbi, [], salt, publicKey);
68
+ const address = deploymentInfo.address;
77
69
 
78
70
  accountCollection.registerAccount(
79
71
  address,
80
- new AccountContract(
81
- address,
82
- publicKey,
83
- new SchnorrAuthProvider(await Schnorr.new(), privateKey),
84
- deploymentInfo.partialAddress,
85
- SchnorrAccountContractAbi,
86
- wasm,
87
- ),
72
+ new SingleKeyAccountContract(address, deploymentInfo.partialAddress, privateKey, await Schnorr.new()),
88
73
  );
89
74
  return new AccountWallet(aztecRpcClient, accountCollection);
90
75
  }
@@ -1,4 +1,5 @@
1
1
  import { Grumpkin } from '@aztec/circuits.js/barretenberg';
2
+
2
3
  import { Point } from '../index.js';
3
4
 
4
5
  /**
package/tsconfig.json CHANGED
@@ -6,9 +6,6 @@
6
6
  "tsBuildInfoFile": ".tsbuildinfo"
7
7
  },
8
8
  "references": [
9
- {
10
- "path": "../aztec-rpc"
11
- },
12
9
  {
13
10
  "path": "../circuits.js"
14
11
  },
@@ -16,11 +13,8 @@
16
13
  "path": "../foundation"
17
14
  },
18
15
  {
19
- "path": "../key-store"
20
- },
21
- {
22
- "path": "../noir-contracts"
16
+ "path": "../types"
23
17
  }
24
18
  ],
25
- "include": ["src"]
19
+ "include": ["src", "src/**/*.json"]
26
20
  }
@@ -1,45 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { AztecAddress, CircuitsWasm, Fr, TxContext } from '@aztec/circuits.js';
3
- import { PublicKey } from '@aztec/key-store';
4
- import { ExecutionRequest, PartialContractAddress, TxExecutionRequest } from '@aztec/types';
5
- import { AccountImplementation } from './index.js';
6
- import { ContractAbi } from '@aztec/foundation/abi';
7
- import { EcdsaAuthProvider, SchnorrAuthProvider } from '../auth/index.js';
8
- /**
9
- * Account backed by an account contract
10
- */
11
- export declare class AccountContract implements AccountImplementation {
12
- private address;
13
- private pubKey;
14
- private authProvider;
15
- private partialContractAddress;
16
- private contractAbi;
17
- private wasm;
18
- constructor(address: AztecAddress, pubKey: PublicKey, authProvider: EcdsaAuthProvider | SchnorrAuthProvider, partialContractAddress: PartialContractAddress, contractAbi: ContractAbi, wasm: CircuitsWasm);
19
- getAddress(): AztecAddress;
20
- createAuthenticatedTxRequest(executions: ExecutionRequest[], txContext: TxContext): Promise<TxExecutionRequest>;
21
- private getEntrypointAbi;
22
- private checkIsNotDeployment;
23
- private checkSender;
24
- }
25
- /** A call to a function in a noir contract */
26
- export type FunctionCall = {
27
- /** The encoded arguments */
28
- args: Fr[];
29
- /** The function selector */
30
- selector: Buffer;
31
- /** The address of the contract */
32
- target: AztecAddress;
33
- };
34
- /** Encoded payload for the account contract entrypoint */
35
- export type EntrypointPayload = {
36
- /** Concatenated arguments for every call */
37
- flattened_args_hashes: Fr[];
38
- /** Concatenated selectors for every call */
39
- flattened_selectors: Fr[];
40
- /** Concatenated target addresses for every call */
41
- flattened_targets: Fr[];
42
- /** A nonce for replay protection */
43
- nonce: Fr;
44
- };
45
- //# sourceMappingURL=account_contract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account_contract.d.ts","sourceRoot":"","sources":["../../src/account_impl/account_contract.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAgB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG7F,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAmB,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE1E;;GAEG;AACH,qBAAa,eAAgB,YAAW,qBAAqB;IAEzD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;gBALJ,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,iBAAiB,GAAG,mBAAmB,EACrD,sBAAsB,EAAE,sBAAsB,EAC9C,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,YAAY;IAG5B,UAAU,IAAI,YAAY;IAIpB,4BAA4B,CAChC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAiC9B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,WAAW;CAQpB;AAKD,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG;IACzB,4BAA4B;IAC5B,IAAI,EAAE,EAAE,EAAE,CAAC;IACX,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,iBAAiB,GAAG;IAE9B,4CAA4C;IAC5C,qBAAqB,EAAE,EAAE,EAAE,CAAC;IAE5B,4CAA4C;IAC5C,mBAAmB,EAAE,EAAE,EAAE,CAAC;IAE1B,mDAAmD;IACnD,iBAAiB,EAAE,EAAE,EAAE,CAAC;IACxB,oCAAoC;IACpC,KAAK,EAAE,EAAE,CAAC;CACX,CAAC"}
@@ -1,108 +0,0 @@
1
- import { encodeArguments } from '@aztec/acir-simulator';
2
- import { AztecAddress, Fr, FunctionData } from '@aztec/circuits.js';
3
- import { padArrayEnd } from '@aztec/foundation/collection';
4
- import { sha256 } from '@aztec/foundation/crypto';
5
- import { PackedArguments, TxExecutionRequest } from '@aztec/types';
6
- import partition from 'lodash.partition';
7
- import { generateFunctionSelector } from '../index.js';
8
- /**
9
- * Account backed by an account contract
10
- */
11
- export class AccountContract {
12
- constructor(address, pubKey, authProvider, partialContractAddress, contractAbi, wasm) {
13
- this.address = address;
14
- this.pubKey = pubKey;
15
- this.authProvider = authProvider;
16
- this.partialContractAddress = partialContractAddress;
17
- this.contractAbi = contractAbi;
18
- this.wasm = wasm;
19
- }
20
- getAddress() {
21
- return this.address;
22
- }
23
- async createAuthenticatedTxRequest(executions, txContext) {
24
- this.checkSender(executions);
25
- this.checkIsNotDeployment(txContext);
26
- const [privateCalls, publicCalls] = partition(executions, exec => exec.functionData.isPrivate).map(execs => execs.map(exec => ({
27
- args: exec.args,
28
- selector: exec.functionData.functionSelectorBuffer,
29
- target: exec.to,
30
- })));
31
- const { payload, packedArguments: callsPackedArguments } = await buildPayload(privateCalls, publicCalls, this.wasm);
32
- const hash = hashPayload(payload);
33
- const signature = await this.authProvider.authenticateTx(payload, hash, this.address);
34
- const signatureAsFrArray = signature.toFields();
35
- const publicKeyAsBuffer = this.pubKey.toBuffer();
36
- const args = [payload, publicKeyAsBuffer, signatureAsFrArray, this.partialContractAddress];
37
- const abi = this.getEntrypointAbi();
38
- const selector = generateFunctionSelector(abi.name, abi.parameters);
39
- const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args), this.wasm);
40
- const txRequest = TxExecutionRequest.from({
41
- argsHash: packedArgs.hash,
42
- origin: this.address,
43
- functionData: new FunctionData(selector, true, false),
44
- txContext,
45
- packedArguments: [...callsPackedArguments, packedArgs],
46
- });
47
- return txRequest;
48
- }
49
- getEntrypointAbi() {
50
- const abi = this.contractAbi.functions.find(f => f.name === 'entrypoint');
51
- if (!abi)
52
- throw new Error(`Entrypoint abi for account contract not found`);
53
- return abi;
54
- }
55
- checkIsNotDeployment(txContext) {
56
- if (txContext.isContractDeploymentTx) {
57
- throw new Error(`Cannot yet deploy contracts from an account contract`);
58
- }
59
- }
60
- checkSender(executions) {
61
- const wrongSender = executions.find(e => !e.from.equals(this.address));
62
- if (wrongSender) {
63
- throw new Error(`Sender ${wrongSender.from.toString()} does not match account address ${this.address.toString()}`);
64
- }
65
- }
66
- }
67
- const ACCOUNT_MAX_PRIVATE_CALLS = 1;
68
- const ACCOUNT_MAX_PUBLIC_CALLS = 1;
69
- /** Assembles an entrypoint payload from a set of private and public function calls */
70
- async function buildPayload(privateCalls, publicCalls, wasm) {
71
- const nonce = Fr.random();
72
- const emptyCall = { args: [], selector: Buffer.alloc(32), target: AztecAddress.ZERO };
73
- const calls = [
74
- ...padArrayEnd(privateCalls, emptyCall, ACCOUNT_MAX_PRIVATE_CALLS),
75
- ...padArrayEnd(publicCalls, emptyCall, ACCOUNT_MAX_PUBLIC_CALLS),
76
- ];
77
- const packedArguments = [];
78
- for (const call of calls) {
79
- packedArguments.push(await PackedArguments.fromArgs(call.args, wasm));
80
- }
81
- return {
82
- payload: {
83
- // eslint-disable-next-line camelcase
84
- flattened_args_hashes: packedArguments.map(args => args.hash),
85
- // eslint-disable-next-line camelcase
86
- flattened_selectors: calls.map(call => Fr.fromBuffer(call.selector)),
87
- // eslint-disable-next-line camelcase
88
- flattened_targets: calls.map(call => call.target.toField()),
89
- nonce,
90
- },
91
- packedArguments,
92
- };
93
- }
94
- /** Hashes an entrypoint payload (useful for signing) */
95
- function hashPayload(payload) {
96
- // TODO: Switch to keccak when avaiable in Noir
97
- return sha256(Buffer.concat(flattenPayload(payload).map(fr => fr.toBuffer())));
98
- }
99
- /** Flattens an entrypoint payload */
100
- function flattenPayload(payload) {
101
- return [
102
- ...payload.flattened_args_hashes,
103
- ...payload.flattened_selectors,
104
- ...payload.flattened_targets,
105
- payload.nonce,
106
- ];
107
- }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NvdW50X2ltcGwvYWNjb3VudF9jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsT0FBTyxFQUFvQixlQUFlLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdHLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUt2RDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1UsT0FBcUIsRUFDckIsTUFBaUIsRUFDakIsWUFBcUQsRUFDckQsc0JBQThDLEVBQzlDLFdBQXdCLEVBQ3hCLElBQWtCO1FBTGxCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBeUM7UUFDckQsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFjO0lBQ3pCLENBQUM7SUFFSixVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLFVBQThCLEVBQzlCLFNBQW9CO1FBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFD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
@@ -1,13 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { AztecAddress } from '../index.js';
3
- import { AuthPayload } from './index.js';
4
- import { EntrypointPayload } from '../account_impl/account_contract.js';
5
- /**
6
- * An ecdsa implementation of auth provider.
7
- */
8
- export declare class EcdsaAuthProvider {
9
- private privKey;
10
- constructor(privKey: Buffer);
11
- authenticateTx(payload: EntrypointPayload, payloadHash: Buffer, _address: AztecAddress): Promise<AuthPayload>;
12
- }
13
- //# sourceMappingURL=ecdsa.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../src/auth/ecdsa.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE;;GAEG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IACnC,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAK9G"}
@@ -1,17 +0,0 @@
1
- import { secp256k1 } from '@noble/curves/secp256k1';
2
- import { EcdsaSignature } from '@aztec/circuits.js/barretenberg';
3
- /**
4
- * An ecdsa implementation of auth provider.
5
- */
6
- export class EcdsaAuthProvider {
7
- constructor(privKey) {
8
- this.privKey = privKey;
9
- }
10
- authenticateTx(payload, payloadHash, _address) {
11
- const sig = secp256k1.sign(payloadHash, this.privKey);
12
- if (sig.recovery === undefined)
13
- throw new Error(`Missing recovery from signature`);
14
- return Promise.resolve(EcdsaSignature.fromBigInts(sig.r, sig.s, sig.recovery));
15
- }
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9lY2RzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBTWpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDdkMsY0FBYyxDQUFDLE9BQTBCLEVBQUUsV0FBbUIsRUFBRSxRQUFzQjtRQUNwRixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
@@ -1,19 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { AztecAddress, Fr } from '@aztec/circuits.js';
3
- import { EntrypointPayload } from '../account_impl/account_contract.js';
4
- export * from './ecdsa.js';
5
- export * from './schnorr.js';
6
- /**
7
- * An interface for the payload returned from auth operations.
8
- */
9
- export interface AuthPayload {
10
- toBuffer(): Buffer;
11
- toFields(): Fr[];
12
- }
13
- /**
14
- * A dummy implementation of the auth provider
15
- */
16
- export declare class DummyAuthProvider {
17
- authenticateTx(_payload: EntrypointPayload, _payloadHash: Buffer, _address: AztecAddress): Promise<AuthPayload>;
18
- }
19
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,EAAE,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAMhH"}
@@ -1,14 +0,0 @@
1
- export * from './ecdsa.js';
2
- export * from './schnorr.js';
3
- /**
4
- * A dummy implementation of the auth provider
5
- */
6
- export class DummyAuthProvider {
7
- authenticateTx(_payload, _payloadHash, _address) {
8
- return Promise.resolve({
9
- toBuffer: () => Buffer.alloc(0),
10
- toFields: () => [],
11
- });
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGNBQWMsQ0FBQztBQVU3Qjs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsY0FBYyxDQUFDLFFBQTJCLEVBQUUsWUFBb0IsRUFBRSxRQUFzQjtRQUN0RixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQy9CLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1NBQ0osQ0FBQyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
@@ -1,13 +0,0 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- import { Schnorr } from '@aztec/circuits.js/barretenberg';
3
- import { AuthPayload, AztecAddress, EntrypointPayload } from '@aztec/aztec.js';
4
- /**
5
- * Implementation of a schnorr signature provider
6
- */
7
- export declare class SchnorrAuthProvider {
8
- private signer;
9
- private privateKey;
10
- constructor(signer: Schnorr, privateKey: Buffer);
11
- authenticateTx(_payload: EntrypointPayload, _payloadHash: Buffer, _address: AztecAddress): Promise<AuthPayload>;
12
- }
13
- //# sourceMappingURL=schnorr.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schnorr.d.ts","sourceRoot":"","sources":["../../src/auth/schnorr.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE/E;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,MAAM;IAAW,OAAO,CAAC,UAAU;gBAAnC,MAAM,EAAE,OAAO,EAAU,UAAU,EAAE,MAAM;IAC/D,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAIhH"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Implementation of a schnorr signature provider
3
- */
4
- export class SchnorrAuthProvider {
5
- constructor(signer, privateKey) {
6
- this.signer = signer;
7
- this.privateKey = privateKey;
8
- }
9
- authenticateTx(_payload, _payloadHash, _address) {
10
- const sig = this.signer.constructSignature(_payloadHash, this.privateKey);
11
- return Promise.resolve(sig);
12
- }
13
- }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nobm9yci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL3NjaG5vcnIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQW9CLE1BQWUsRUFBVSxVQUFrQjtRQUEzQyxXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtJQUFHLENBQUM7SUFDbkUsY0FBYyxDQUFDLFFBQTJCLEVBQUUsWUFBb0IsRUFBRSxRQUFzQjtRQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQWtCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==
@@ -1,173 +0,0 @@
1
- import { encodeArguments } from '@aztec/acir-simulator';
2
- import { AztecAddress, CircuitsWasm, Fr, FunctionData, TxContext } from '@aztec/circuits.js';
3
- import { padArrayEnd } from '@aztec/foundation/collection';
4
- import { sha256 } from '@aztec/foundation/crypto';
5
- import { PublicKey } from '@aztec/key-store';
6
- import { ExecutionRequest, PackedArguments, PartialContractAddress, TxExecutionRequest } from '@aztec/types';
7
- import partition from 'lodash.partition';
8
- import { generateFunctionSelector } from '../index.js';
9
- import { AccountImplementation } from './index.js';
10
- import { ContractAbi } from '@aztec/foundation/abi';
11
- import { EcdsaAuthProvider, SchnorrAuthProvider } from '../auth/index.js';
12
-
13
- /**
14
- * Account backed by an account contract
15
- */
16
- export class AccountContract implements AccountImplementation {
17
- constructor(
18
- private address: AztecAddress,
19
- private pubKey: PublicKey,
20
- private authProvider: EcdsaAuthProvider | SchnorrAuthProvider,
21
- private partialContractAddress: PartialContractAddress,
22
- private contractAbi: ContractAbi,
23
- private wasm: CircuitsWasm,
24
- ) {}
25
-
26
- getAddress(): AztecAddress {
27
- return this.address;
28
- }
29
-
30
- async createAuthenticatedTxRequest(
31
- executions: ExecutionRequest[],
32
- txContext: TxContext,
33
- ): Promise<TxExecutionRequest> {
34
- this.checkSender(executions);
35
- this.checkIsNotDeployment(txContext);
36
-
37
- const [privateCalls, publicCalls] = partition(executions, exec => exec.functionData.isPrivate).map(execs =>
38
- execs.map(exec => ({
39
- args: exec.args,
40
- selector: exec.functionData.functionSelectorBuffer,
41
- target: exec.to,
42
- })),
43
- );
44
-
45
- const { payload, packedArguments: callsPackedArguments } = await buildPayload(privateCalls, publicCalls, this.wasm);
46
- const hash = hashPayload(payload);
47
-
48
- const signature = await this.authProvider.authenticateTx(payload, hash, this.address);
49
- const signatureAsFrArray = signature.toFields();
50
- const publicKeyAsBuffer = this.pubKey.toBuffer();
51
- const args = [payload, publicKeyAsBuffer, signatureAsFrArray, this.partialContractAddress];
52
- const abi = this.getEntrypointAbi();
53
- const selector = generateFunctionSelector(abi.name, abi.parameters);
54
- const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args), this.wasm);
55
- const txRequest = TxExecutionRequest.from({
56
- argsHash: packedArgs.hash,
57
- origin: this.address,
58
- functionData: new FunctionData(selector, true, false),
59
- txContext,
60
- packedArguments: [...callsPackedArguments, packedArgs],
61
- });
62
-
63
- return txRequest;
64
- }
65
-
66
- private getEntrypointAbi() {
67
- const abi = this.contractAbi.functions.find(f => f.name === 'entrypoint');
68
- if (!abi) throw new Error(`Entrypoint abi for account contract not found`);
69
- return abi;
70
- }
71
-
72
- private checkIsNotDeployment(txContext: TxContext) {
73
- if (txContext.isContractDeploymentTx) {
74
- throw new Error(`Cannot yet deploy contracts from an account contract`);
75
- }
76
- }
77
-
78
- private checkSender(executions: ExecutionRequest[]) {
79
- const wrongSender = executions.find(e => !e.from.equals(this.address));
80
- if (wrongSender) {
81
- throw new Error(
82
- `Sender ${wrongSender.from.toString()} does not match account address ${this.address.toString()}`,
83
- );
84
- }
85
- }
86
- }
87
-
88
- const ACCOUNT_MAX_PRIVATE_CALLS = 1;
89
- const ACCOUNT_MAX_PUBLIC_CALLS = 1;
90
-
91
- /** A call to a function in a noir contract */
92
- export type FunctionCall = {
93
- /** The encoded arguments */
94
- args: Fr[];
95
- /** The function selector */
96
- selector: Buffer;
97
- /** The address of the contract */
98
- target: AztecAddress;
99
- };
100
-
101
- /** Encoded payload for the account contract entrypoint */
102
- export type EntrypointPayload = {
103
- // eslint-disable-next-line camelcase
104
- /** Concatenated arguments for every call */
105
- flattened_args_hashes: Fr[];
106
- // eslint-disable-next-line camelcase
107
- /** Concatenated selectors for every call */
108
- flattened_selectors: Fr[];
109
- // eslint-disable-next-line camelcase
110
- /** Concatenated target addresses for every call */
111
- flattened_targets: Fr[];
112
- /** A nonce for replay protection */
113
- nonce: Fr;
114
- };
115
-
116
- /** Assembles an entrypoint payload from a set of private and public function calls */
117
- async function buildPayload(
118
- privateCalls: FunctionCall[],
119
- publicCalls: FunctionCall[],
120
- wasm: CircuitsWasm,
121
- ): Promise<{
122
- /**
123
- * The payload for the entrypoint function
124
- */
125
- payload: EntrypointPayload;
126
- /**
127
- * The packed arguments of functions called
128
- */
129
- packedArguments: PackedArguments[];
130
- }> {
131
- const nonce = Fr.random();
132
- const emptyCall = { args: [], selector: Buffer.alloc(32), target: AztecAddress.ZERO };
133
-
134
- const calls = [
135
- ...padArrayEnd(privateCalls, emptyCall, ACCOUNT_MAX_PRIVATE_CALLS),
136
- ...padArrayEnd(publicCalls, emptyCall, ACCOUNT_MAX_PUBLIC_CALLS),
137
- ];
138
-
139
- const packedArguments = [];
140
-
141
- for (const call of calls) {
142
- packedArguments.push(await PackedArguments.fromArgs(call.args, wasm));
143
- }
144
-
145
- return {
146
- payload: {
147
- // eslint-disable-next-line camelcase
148
- flattened_args_hashes: packedArguments.map(args => args.hash),
149
- // eslint-disable-next-line camelcase
150
- flattened_selectors: calls.map(call => Fr.fromBuffer(call.selector)),
151
- // eslint-disable-next-line camelcase
152
- flattened_targets: calls.map(call => call.target.toField()),
153
- nonce,
154
- },
155
- packedArguments,
156
- };
157
- }
158
-
159
- /** Hashes an entrypoint payload (useful for signing) */
160
- function hashPayload(payload: EntrypointPayload) {
161
- // TODO: Switch to keccak when avaiable in Noir
162
- return sha256(Buffer.concat(flattenPayload(payload).map(fr => fr.toBuffer())));
163
- }
164
-
165
- /** Flattens an entrypoint payload */
166
- function flattenPayload(payload: EntrypointPayload) {
167
- return [
168
- ...payload.flattened_args_hashes,
169
- ...payload.flattened_selectors,
170
- ...payload.flattened_targets,
171
- payload.nonce,
172
- ];
173
- }