@aztec/aztec.js 0.1.0-alpha13

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 (101) hide show
  1. package/.eslintrc.cjs +1 -0
  2. package/.tsbuildinfo +1 -0
  3. package/README.md +44 -0
  4. package/dest/account_impl/account_collection.d.ts +24 -0
  5. package/dest/account_impl/account_collection.d.ts.map +1 -0
  6. package/dest/account_impl/account_collection.js +36 -0
  7. package/dest/account_impl/account_contract.d.ts +45 -0
  8. package/dest/account_impl/account_contract.d.ts.map +1 -0
  9. package/dest/account_impl/account_contract.js +108 -0
  10. package/dest/account_impl/index.d.ts +11 -0
  11. package/dest/account_impl/index.d.ts.map +1 -0
  12. package/dest/account_impl/index.js +3 -0
  13. package/dest/auth/ecdsa.d.ts +13 -0
  14. package/dest/auth/ecdsa.d.ts.map +1 -0
  15. package/dest/auth/ecdsa.js +17 -0
  16. package/dest/auth/index.d.ts +25 -0
  17. package/dest/auth/index.d.ts.map +1 -0
  18. package/dest/auth/index.js +13 -0
  19. package/dest/aztec_rpc_client/aztec_rpc_client.d.ts +25 -0
  20. package/dest/aztec_rpc_client/aztec_rpc_client.d.ts.map +1 -0
  21. package/dest/aztec_rpc_client/aztec_rpc_client.js +20 -0
  22. package/dest/aztec_rpc_client/index.d.ts +3 -0
  23. package/dest/aztec_rpc_client/index.d.ts.map +1 -0
  24. package/dest/aztec_rpc_client/index.js +3 -0
  25. package/dest/aztec_rpc_client/wallet.d.ts +44 -0
  26. package/dest/aztec_rpc_client/wallet.d.ts.map +1 -0
  27. package/dest/aztec_rpc_client/wallet.js +69 -0
  28. package/dest/contract/checker.d.ts +11 -0
  29. package/dest/contract/checker.d.ts.map +1 -0
  30. package/dest/contract/checker.js +98 -0
  31. package/dest/contract/checker.test.d.ts +2 -0
  32. package/dest/contract/checker.test.d.ts.map +1 -0
  33. package/dest/contract/checker.test.js +168 -0
  34. package/dest/contract/contract.d.ts +69 -0
  35. package/dest/contract/contract.d.ts.map +1 -0
  36. package/dest/contract/contract.js +64 -0
  37. package/dest/contract/contract.test.d.ts +2 -0
  38. package/dest/contract/contract.test.d.ts.map +1 -0
  39. package/dest/contract/contract.test.js +141 -0
  40. package/dest/contract/contract_function_interaction.d.ts +81 -0
  41. package/dest/contract/contract_function_interaction.d.ts.map +1 -0
  42. package/dest/contract/contract_function_interaction.js +96 -0
  43. package/dest/contract/index.d.ts +4 -0
  44. package/dest/contract/index.d.ts.map +1 -0
  45. package/dest/contract/index.js +4 -0
  46. package/dest/contract/sent_tx.d.ts +36 -0
  47. package/dest/contract/sent_tx.d.ts.map +1 -0
  48. package/dest/contract/sent_tx.js +50 -0
  49. package/dest/contract_deployer/contract_deployer.d.ts +23 -0
  50. package/dest/contract_deployer/contract_deployer.d.ts.map +1 -0
  51. package/dest/contract_deployer/contract_deployer.js +25 -0
  52. package/dest/contract_deployer/contract_deployer.test.d.ts +2 -0
  53. package/dest/contract_deployer/contract_deployer.test.d.ts.map +1 -0
  54. package/dest/contract_deployer/contract_deployer.test.js +48 -0
  55. package/dest/contract_deployer/deploy_method.d.ts +72 -0
  56. package/dest/contract_deployer/deploy_method.d.ts.map +1 -0
  57. package/dest/contract_deployer/deploy_method.js +114 -0
  58. package/dest/contract_deployer/index.d.ts +2 -0
  59. package/dest/contract_deployer/index.d.ts.map +1 -0
  60. package/dest/contract_deployer/index.js +2 -0
  61. package/dest/index.d.ts +8 -0
  62. package/dest/index.d.ts.map +1 -0
  63. package/dest/index.js +9 -0
  64. package/dest/utils/account.d.ts +9 -0
  65. package/dest/utils/account.d.ts.map +1 -0
  66. package/dest/utils/account.js +38 -0
  67. package/dest/utils/index.d.ts +4 -0
  68. package/dest/utils/index.d.ts.map +1 -0
  69. package/dest/utils/index.js +4 -0
  70. package/dest/utils/pub_key.d.ts +18 -0
  71. package/dest/utils/pub_key.d.ts.map +1 -0
  72. package/dest/utils/pub_key.js +25 -0
  73. package/dest/utils/secrets.d.ts +8 -0
  74. package/dest/utils/secrets.d.ts.map +1 -0
  75. package/dest/utils/secrets.js +12 -0
  76. package/package.json +14 -0
  77. package/src/account_impl/account_collection.ts +41 -0
  78. package/src/account_impl/account_contract.ts +173 -0
  79. package/src/account_impl/index.ts +12 -0
  80. package/src/auth/ecdsa.ts +18 -0
  81. package/src/auth/index.ts +32 -0
  82. package/src/aztec_rpc_client/aztec_rpc_client.ts +59 -0
  83. package/src/aztec_rpc_client/index.ts +2 -0
  84. package/src/aztec_rpc_client/wallet.ts +87 -0
  85. package/src/contract/checker.test.ts +177 -0
  86. package/src/contract/checker.ts +117 -0
  87. package/src/contract/contract.test.ts +160 -0
  88. package/src/contract/contract.ts +80 -0
  89. package/src/contract/contract_function_interaction.ts +141 -0
  90. package/src/contract/index.ts +3 -0
  91. package/src/contract/sent_tx.ts +55 -0
  92. package/src/contract_deployer/contract_deployer.test.ts +56 -0
  93. package/src/contract_deployer/contract_deployer.ts +24 -0
  94. package/src/contract_deployer/deploy_method.ts +165 -0
  95. package/src/contract_deployer/index.ts +1 -0
  96. package/src/index.ts +9 -0
  97. package/src/utils/account.ts +59 -0
  98. package/src/utils/index.ts +3 -0
  99. package/src/utils/pub_key.ts +26 -0
  100. package/src/utils/secrets.ts +12 -0
  101. package/tsconfig.json +26 -0
@@ -0,0 +1,36 @@
1
+ /**
2
+ * A concrete account implementation that manages multiple accounts.
3
+ */
4
+ export class AccountCollection {
5
+ constructor() {
6
+ this.accounts = new Map();
7
+ }
8
+ /**
9
+ * Registers an account implementation against an aztec address
10
+ * @param addr - The aztec address agianst which to register the implementation.
11
+ * @param impl - The account implementation to be registered.
12
+ */
13
+ registerAccount(addr, impl) {
14
+ this.accounts.set(addr, impl);
15
+ }
16
+ getAddress() {
17
+ if (!this.accounts)
18
+ throw new Error(`No accounts registered`);
19
+ return this.accounts.keys().next().value;
20
+ }
21
+ /**
22
+ * Uses a registered account implementation to generate an authenticated request
23
+ * @param executions - The execution intent to be authenticated.
24
+ * @param txContext - The tx context under with the execution is to be made.
25
+ * @returns - The authenticated transaction execution request.
26
+ */
27
+ createAuthenticatedTxRequest(executions, txContext) {
28
+ // TODO: Check all executions have the same origin
29
+ const sender = executions[0].from;
30
+ const impl = this.accounts.get(sender);
31
+ if (!impl)
32
+ throw new Error(`No account implementation registered for ${sender}`);
33
+ return impl.createAuthenticatedTxRequest(executions, txContext);
34
+ }
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9jb2xsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjY291bnRfaW1wbC9hY2NvdW50X2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ1UsYUFBUSxHQUE2QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBZ0N6RSxDQUFDO0lBOUJDOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsSUFBa0IsRUFBRSxJQUEyQjtRQUNwRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQXFCLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNEJBQTRCLENBQ2pDLFVBQThCLEVBQzlCLFNBQW9CO1FBRXBCLGtEQUFrRDtRQUNsRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGIn0=
@@ -0,0 +1,45 @@
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 { TxAuthProvider } 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: TxAuthProvider, 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
@@ -0,0 +1 @@
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,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;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,cAAc,EAC5B,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"}
@@ -0,0 +1,108 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9jb250cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NvdW50X2ltcGwvYWNjb3VudF9jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsT0FBTyxFQUFvQixlQUFlLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdHLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUt2RDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1UsT0FBcUIsRUFDckIsTUFBaUIsRUFDakIsWUFBNEIsRUFDNUIsc0JBQThDLEVBQzlDLFdBQXdCLEVBQ3hCLElBQWtCO1FBTGxCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFjO0lBQ3pCLENBQUM7SUFFSixVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLFVBQThCLEVBQzlCLFNBQW9CO1FBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFD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
@@ -0,0 +1,11 @@
1
+ import { AztecAddress, TxContext } from '@aztec/circuits.js';
2
+ import { ExecutionRequest, TxExecutionRequest } from '@aztec/types';
3
+ export * from './account_contract.js';
4
+ export * from './account_collection.js';
5
+ /** Represents an implementation for a user account contract. Knows how to encode and sign a tx for that particular implementation. */
6
+ export interface AccountImplementation {
7
+ getAddress(): AztecAddress;
8
+ /** Creates a tx to be sent from a given account contract given a set of execution requests. */
9
+ createAuthenticatedTxRequest(executions: ExecutionRequest[], txContext: TxContext): Promise<TxExecutionRequest>;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/account_impl/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEpE,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AAExC,sIAAsI;AACtI,MAAM,WAAW,qBAAqB;IACpC,UAAU,IAAI,YAAY,CAAC;IAC3B,+FAA+F;IAC/F,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjH"}
@@ -0,0 +1,3 @@
1
+ export * from './account_contract.js';
2
+ export * from './account_collection.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWNjb3VudF9pbXBsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx5QkFBeUIsQ0FBQyJ9
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { AztecAddress } from '../index.js';
3
+ import { AuthPayload, TxAuthProvider } from './index.js';
4
+ import { EntrypointPayload } from '../account_impl/account_contract.js';
5
+ /**
6
+ * An ecdsa implementation of TxAuthProvider.
7
+ */
8
+ export declare class EcdsaAuthProvider implements TxAuthProvider {
9
+ private privKey;
10
+ constructor(privKey: Buffer);
11
+ authenticateTx(payload: EntrypointPayload, payloadHash: Buffer, _address: AztecAddress): Promise<AuthPayload>;
12
+ }
13
+ //# sourceMappingURL=ecdsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../src/auth/ecdsa.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE;;GAEG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IAC1C,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"}
@@ -0,0 +1,17 @@
1
+ import { secp256k1 } from '@noble/curves/secp256k1';
2
+ import { EcdsaSignature } from '@aztec/circuits.js/barretenberg';
3
+ /**
4
+ * An ecdsa implementation of TxAuthProvider.
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9lY2RzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFDdkMsY0FBYyxDQUFDLE9BQTBCLEVBQUUsV0FBbUIsRUFBRSxRQUFzQjtRQUNwRixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDbkYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7Q0FDRiJ9
@@ -0,0 +1,25 @@
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
+ /**
6
+ * An interface for the payload returned from auth operations.
7
+ */
8
+ export interface AuthPayload {
9
+ toBuffer(): Buffer;
10
+ toFields(): Fr[];
11
+ }
12
+ /**
13
+ * The interface for an auth operations provider.
14
+ * TODO: How coupled should the auth provider be a to a specific account contract implementation? Can we remove the dependency on a specific EntrypointPayload format here?
15
+ */
16
+ export interface TxAuthProvider {
17
+ authenticateTx(payload: EntrypointPayload, payloadHash: Buffer, address: AztecAddress): Promise<AuthPayload>;
18
+ }
19
+ /**
20
+ * A dummy implementation of the auth provider
21
+ */
22
+ export declare class DummyAuthProvider implements TxAuthProvider {
23
+ authenticateTx(_payload: EntrypointPayload, _payloadHash: Buffer, _address: AztecAddress): Promise<AuthPayload>;
24
+ }
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
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;AAE3B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,IAAI,EAAE,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC9G;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAMhH"}
@@ -0,0 +1,13 @@
1
+ export * from './ecdsa.js';
2
+ /**
3
+ * A dummy implementation of the auth provider
4
+ */
5
+ export class DummyAuthProvider {
6
+ authenticateTx(_payload, _payloadHash, _address) {
7
+ return Promise.resolve({
8
+ toBuffer: () => Buffer.alloc(0),
9
+ toFields: () => [],
10
+ });
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxjQUFjLFlBQVksQ0FBQztBQWtCM0I7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLGNBQWMsQ0FBQyxRQUEyQixFQUFFLFlBQW9CLEVBQUUsUUFBc0I7UUFDdEYsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvQixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtTQUNKLENBQUMsQ0FBQztJQUNwQixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,25 @@
1
+ import { AztecRPC, EthAddress } from '@aztec/aztec-rpc';
2
+ /**
3
+ * A dictionary of the Aztec-deployed L1 contracts.
4
+ */
5
+ export type L1ContractAddresses = {
6
+ /**
7
+ * Address fo the main Aztec rollup contract.
8
+ */
9
+ rollup: EthAddress;
10
+ /**
11
+ * Address of the contract that emits events on public contract deployment.
12
+ */
13
+ contractDeploymentEmitter: EthAddress;
14
+ /**
15
+ * Address of the L1/L2 messaging inbox contract.
16
+ */
17
+ inbox: EthAddress;
18
+ /**
19
+ * Registry Address.
20
+ */
21
+ registry: EthAddress;
22
+ };
23
+ export declare const createAztecRpcClient: (url: string) => AztecRPC;
24
+ export declare const getL1ContractAddresses: (url: string) => Promise<L1ContractAddresses>;
25
+ //# sourceMappingURL=aztec_rpc_client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aztec_rpc_client.d.ts","sourceRoot":"","sources":["../../src/aztec_rpc_client/aztec_rpc_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AAI7F;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,yBAAyB,EAAE,UAAU,CAAC;IACtC;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AASF,eAAO,MAAM,oBAAoB,QAAS,MAAM,KAAG,QAehD,CAAC;AAEJ,eAAO,MAAM,sBAAsB,QAAe,MAAM,KAAG,QAAQ,mBAAmB,CAOrF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { AztecAddress, EthAddress, Fr, Point, Tx, TxHash } from '@aztec/aztec-rpc';
2
+ import { createJsonRpcClient } from '@aztec/foundation/json-rpc';
3
+ import { ContractData, ContractDeploymentTx, ContractPublicData, TxExecutionRequest } from '@aztec/types';
4
+ export const createAztecRpcClient = (url) => createJsonRpcClient(url, {
5
+ AztecAddress,
6
+ TxExecutionRequest,
7
+ ContractData,
8
+ ContractPublicData,
9
+ TxHash,
10
+ EthAddress,
11
+ Point,
12
+ Fr,
13
+ }, { Tx, ContractDeploymentTx }, false);
14
+ export const getL1ContractAddresses = async (url) => {
15
+ const reqUrl = new URL(`${url}/api/l1-contract-addresses`);
16
+ const response = (await (await fetch(reqUrl.toString())).json());
17
+ const result = Object.fromEntries(Object.entries(response).map(([key, value]) => [key, EthAddress.fromString(value)]));
18
+ return result;
19
+ };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfcnBjX2NsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9henRlY19ycGNfY2xpZW50L2F6dGVjX3JwY19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWdDMUcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFXLEVBQVksRUFBRSxDQUM1RCxtQkFBbUIsQ0FDakIsR0FBRyxFQUNIO0lBQ0UsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLE1BQU07SUFDTixVQUFVO0lBQ1YsS0FBSztJQUNMLEVBQUU7Q0FDSCxFQUNELEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQzVCLEtBQUssQ0FDTixDQUFDO0FBRUosTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxFQUFFLEdBQVcsRUFBZ0MsRUFBRTtJQUN4RixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsNEJBQTRCLENBQUMsQ0FBQztJQUMzRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUF1QyxDQUFDO0lBQ3ZHLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNwRixDQUFDO0lBQ0YsT0FBTyxNQUE2QixDQUFDO0FBQ3ZDLENBQUMsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export * from './aztec_rpc_client.js';
2
+ export * from './wallet.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aztec_rpc_client/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './aztec_rpc_client.js';
2
+ export * from './wallet.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWNfcnBjX2NsaWVudC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDIn0=
@@ -0,0 +1,44 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { AztecAddress, AztecRPC, DeployedContract, Fr, NodeInfo, Point, Tx, TxHash, TxReceipt } from '@aztec/aztec-rpc';
3
+ import { TxContext } from '@aztec/circuits.js';
4
+ import { ContractAbi } from '@aztec/foundation/abi';
5
+ import { ContractData, ContractPublicData, ExecutionRequest, L2BlockL2Logs, TxExecutionRequest } from '@aztec/types';
6
+ import { AccountImplementation } from '../account_impl/index.js';
7
+ /**
8
+ * The wallet interface.
9
+ */
10
+ export type Wallet = AccountImplementation & AztecRPC;
11
+ /**
12
+ * A base class for Wallet implementations
13
+ */
14
+ export declare abstract class BaseWallet implements Wallet {
15
+ protected readonly rpc: AztecRPC;
16
+ constructor(rpc: AztecRPC);
17
+ abstract getAddress(): AztecAddress;
18
+ abstract createAuthenticatedTxRequest(executions: ExecutionRequest[], txContext: TxContext): Promise<TxExecutionRequest>;
19
+ addAccount(privKey: Buffer, address: AztecAddress, partialContractAddress: Fr, abi?: ContractAbi | undefined): Promise<AztecAddress>;
20
+ getAccounts(): Promise<AztecAddress[]>;
21
+ getAccountPublicKey(address: AztecAddress): Promise<Point>;
22
+ addContracts(contracts: DeployedContract[]): Promise<void>;
23
+ isContractDeployed(contract: AztecAddress): Promise<boolean>;
24
+ simulateTx(txRequest: TxExecutionRequest, optionalFromAddress?: AztecAddress | undefined): Promise<Tx>;
25
+ sendTx(tx: Tx): Promise<TxHash>;
26
+ getTxReceipt(txHash: TxHash): Promise<TxReceipt>;
27
+ getStorageAt(contract: AztecAddress, storageSlot: Fr): Promise<any>;
28
+ viewTx(functionName: string, args: any[], to: AztecAddress, from?: AztecAddress | undefined): Promise<any>;
29
+ getContractData(contractAddress: AztecAddress): Promise<ContractPublicData | undefined>;
30
+ getContractInfo(contractAddress: AztecAddress): Promise<ContractData | undefined>;
31
+ getUnencryptedLogs(from: number, take: number): Promise<L2BlockL2Logs[]>;
32
+ getBlockNum(): Promise<number>;
33
+ getNodeInfo(): Promise<NodeInfo>;
34
+ }
35
+ /**
36
+ * A simple wallet implementation that forwards authentication requests to a provided account implementation.
37
+ */
38
+ export declare class AccountWallet extends BaseWallet {
39
+ protected accountImpl: AccountImplementation;
40
+ constructor(rpc: AztecRPC, accountImpl: AccountImplementation);
41
+ getAddress(): AztecAddress;
42
+ createAuthenticatedTxRequest(executions: ExecutionRequest[], txContext: TxContext): Promise<TxExecutionRequest>;
43
+ }
44
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/aztec_rpc_client/wallet.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrH,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,qBAAqB,GAAG,QAAQ,CAAC;AAEtD;;GAEG;AACH,8BAAsB,UAAW,YAAW,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ;gBAAb,GAAG,EAAE,QAAQ;IAC5C,QAAQ,CAAC,UAAU,IAAI,YAAY;IACnC,QAAQ,CAAC,4BAA4B,CACnC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAC9B,UAAU,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,sBAAsB,EAAE,EAAE,EAC1B,GAAG,CAAC,EAAE,WAAW,GAAG,SAAS,GAC5B,OAAO,CAAC,YAAY,CAAC;IAGxB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAGtC,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IAG1D,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1D,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAG5D,UAAU,CAAC,SAAS,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;IAGtG,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAG/B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAGhD,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAGnE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAG1G,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAGvF,eAAe,CAAC,eAAe,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAGjF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAGxE,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAG9B,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;CAGjC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAChB,SAAS,CAAC,WAAW,EAAE,qBAAqB;gBAA3D,GAAG,EAAE,QAAQ,EAAY,WAAW,EAAE,qBAAqB;IAGvE,UAAU,IAAI,YAAY;IAG1B,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGhH"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * A base class for Wallet implementations
3
+ */
4
+ export class BaseWallet {
5
+ constructor(rpc) {
6
+ this.rpc = rpc;
7
+ }
8
+ addAccount(privKey, address, partialContractAddress, abi) {
9
+ return this.rpc.addAccount(privKey, address, partialContractAddress, abi);
10
+ }
11
+ getAccounts() {
12
+ return this.rpc.getAccounts();
13
+ }
14
+ getAccountPublicKey(address) {
15
+ return this.rpc.getAccountPublicKey(address);
16
+ }
17
+ addContracts(contracts) {
18
+ return this.rpc.addContracts(contracts);
19
+ }
20
+ isContractDeployed(contract) {
21
+ return this.rpc.isContractDeployed(contract);
22
+ }
23
+ simulateTx(txRequest, optionalFromAddress) {
24
+ return this.rpc.simulateTx(txRequest, optionalFromAddress);
25
+ }
26
+ sendTx(tx) {
27
+ return this.rpc.sendTx(tx);
28
+ }
29
+ getTxReceipt(txHash) {
30
+ return this.rpc.getTxReceipt(txHash);
31
+ }
32
+ getStorageAt(contract, storageSlot) {
33
+ return this.rpc.getStorageAt(contract, storageSlot);
34
+ }
35
+ viewTx(functionName, args, to, from) {
36
+ return this.rpc.viewTx(functionName, args, to, from);
37
+ }
38
+ getContractData(contractAddress) {
39
+ return this.rpc.getContractData(contractAddress);
40
+ }
41
+ getContractInfo(contractAddress) {
42
+ return this.rpc.getContractInfo(contractAddress);
43
+ }
44
+ getUnencryptedLogs(from, take) {
45
+ return this.rpc.getUnencryptedLogs(from, take);
46
+ }
47
+ getBlockNum() {
48
+ return this.rpc.getBlockNum();
49
+ }
50
+ getNodeInfo() {
51
+ return this.rpc.getNodeInfo();
52
+ }
53
+ }
54
+ /**
55
+ * A simple wallet implementation that forwards authentication requests to a provided account implementation.
56
+ */
57
+ export class AccountWallet extends BaseWallet {
58
+ constructor(rpc, accountImpl) {
59
+ super(rpc);
60
+ this.accountImpl = accountImpl;
61
+ }
62
+ getAddress() {
63
+ return this.accountImpl.getAddress();
64
+ }
65
+ createAuthenticatedTxRequest(executions, txContext) {
66
+ return this.accountImpl.createAuthenticatedTxRequest(executions, txContext);
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjX3JwY19jbGllbnQvd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixVQUFVO0lBQzlCLFlBQStCLEdBQWE7UUFBYixRQUFHLEdBQUgsR0FBRyxDQUFVO0lBQUcsQ0FBQztJQU1oRCxVQUFVLENBQ1IsT0FBZSxFQUNmLE9BQXFCLEVBQ3JCLHNCQUEwQixFQUMxQixHQUE2QjtRQUU3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUNELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUNELG1CQUFtQixDQUFDLE9BQXFCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLFNBQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELGtCQUFrQixDQUFDLFFBQXNCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsVUFBVSxDQUFDLFNBQTZCLEVBQUUsbUJBQThDO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE1BQU0sQ0FBQyxFQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsWUFBWSxDQUFDLE1BQWM7UUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFBWSxDQUFDLFFBQXNCLEVBQUUsV0FBZTtRQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsTUFBTSxDQUFDLFlBQW9CLEVBQUUsSUFBVyxFQUFFLEVBQWdCLEVBQUUsSUFBK0I7UUFDekYsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLGVBQTZCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELGVBQWUsQ0FBQyxlQUE2QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxVQUFVO0lBQzNDLFlBQVksR0FBYSxFQUFZLFdBQWtDO1FBQ3JFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUR3QixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7SUFFdkUsQ0FBQztJQUNELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUNELDRCQUE0QixDQUFDLFVBQThCLEVBQUUsU0FBb0I7UUFDL0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0YifQ==
@@ -0,0 +1,11 @@
1
+ import { ContractAbi } from '@aztec/foundation/abi';
2
+ /**
3
+ * Validates the given ContractAbi object by checking its functions and their parameters.
4
+ * Ensures that the ABI has at least one function, a constructor, valid bytecode, and correct parameter types.
5
+ * Throws an error if any inconsistency is detected during the validation process.
6
+ *
7
+ * @param abi - The ContractAbi object to be validated.
8
+ * @returns A boolean value indicating whether the ABI is valid or not.
9
+ */
10
+ export declare function abiChecker(abi: ContractAbi): boolean;
11
+ //# sourceMappingURL=checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/contract/checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAQpF;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,WA8B1C"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Validates the given ContractAbi object by checking its functions and their parameters.
3
+ * Ensures that the ABI has at least one function, a constructor, valid bytecode, and correct parameter types.
4
+ * Throws an error if any inconsistency is detected during the validation process.
5
+ *
6
+ * @param abi - The ContractAbi object to be validated.
7
+ * @returns A boolean value indicating whether the ABI is valid or not.
8
+ */
9
+ export function abiChecker(abi) {
10
+ if (!abi.functions || abi.functions.length === 0) {
11
+ throw new Error('ABI has no functions');
12
+ }
13
+ abi.functions.forEach(func => {
14
+ if (!('name' in func && typeof func.name === 'string' && func.name.length > 0)) {
15
+ throw new Error('ABI function has no name');
16
+ }
17
+ // TODO: implement a better check for bytecode (right now only checks if it's > 0)
18
+ if (!('bytecode' in func && typeof func.bytecode === 'string' && func.bytecode.length > 0)) {
19
+ throw new Error('ABI function parameter has incorrect bytecode');
20
+ }
21
+ func.parameters.forEach(param => {
22
+ if (!param.type) {
23
+ throw new Error('ABI function parameter has no type');
24
+ }
25
+ abiParameterTypeChecker(param.type);
26
+ });
27
+ });
28
+ // TODO: implement a better check for constructor (right now only checks if it has it or not)
29
+ if (!abi.functions.find(func => func.name === 'constructor')) {
30
+ throw new Error('ABI has no constructor');
31
+ }
32
+ return true;
33
+ }
34
+ /**
35
+ * Validates the ABI function parameter's type by checking its kind and attributes.
36
+ * Throws an error if the type has an unrecognized kind or incorrectly formed attributes.
37
+ * Additionally, checks nested types for array and struct kinds.
38
+ *
39
+ * @param type - The ABIType object representing the type of the ABI function parameter.
40
+ * @returns A boolean value indicating whether the type is valid or not.
41
+ */
42
+ function abiParameterTypeChecker(type) {
43
+ switch (type.kind) {
44
+ case 'field':
45
+ case 'boolean':
46
+ return checkAttributes(type, {});
47
+ case 'integer':
48
+ return checkAttributes(type, { sign: 'string', width: 'number' });
49
+ case 'string':
50
+ return checkAttributes(type, { length: 'number' });
51
+ case 'array':
52
+ return checkAttributes(type, { length: 'number', type: 'object' }) && abiParameterTypeChecker(type.type);
53
+ case 'struct':
54
+ return checkAttributes(type, { fields: 'object' }) && checkStruct(type);
55
+ default:
56
+ throw new Error('ABI function parameter has an unrecognised type');
57
+ }
58
+ }
59
+ /**
60
+ * Check if the structure of the ABIType 'struct' is valid by ensuring field names are strings
61
+ * and their type attribute passes the abiParameterTypeChecker. Returns true on successful validation,
62
+ * otherwise throws an error providing insight into the incorrect formation in the struct.
63
+ *
64
+ * @param type - The StructType object containing an array of fields to validate.
65
+ * @returns A boolean value indicating successful validation of the struct's fields.
66
+ */
67
+ function checkStruct(type) {
68
+ return type.fields.reduce((acc, field) => {
69
+ if (!('name' in field && typeof field.name === 'string')) {
70
+ throw new Error('ABI function parameter has an incorrectly formed struct');
71
+ }
72
+ return acc && abiParameterTypeChecker(field.type);
73
+ }, true);
74
+ }
75
+ /**
76
+ * Check if a provided ABI type has the correct attributes and their associated types.
77
+ * This function compares the given 'type' object's keys with the expected attribute types
78
+ * specified in 'incompleteAttributes', as well as the required 'kind' property.
79
+ * Throws an error if there are any unrecognised attributes or incorrect attribute types.
80
+ *
81
+ * @param type - The ABI type object to be checked for correct attributes.
82
+ * @param incompleteAttributes - An object representing the expected attribute types without the 'kind' property.
83
+ * @returns Returns true if the provided ABI type has the correct attributes and their associated types, otherwise throws an error.
84
+ */
85
+ function checkAttributes(type, incompleteAttributes) {
86
+ const typeKeys = Object.keys(type);
87
+ const attributes = { ...incompleteAttributes, kind: 'string' };
88
+ if (typeKeys.length !== Object.keys(attributes).length) {
89
+ throw new Error(`Unrecognised attribute on type ${type.kind}`);
90
+ }
91
+ typeKeys.forEach(element => {
92
+ if (!(element in type && typeof type[element] === attributes[element])) {
93
+ throw new Error(`ABI function parameter has an incorrectly formed ${type.kind}`);
94
+ }
95
+ });
96
+ return true;
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQWdCO0lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7S0FDekM7SUFFRCxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDOUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsa0ZBQWtGO1FBQ2xGLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtZQUMxRixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7YUFDdkQ7WUFFRCx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENB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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=checker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.test.d.ts","sourceRoot":"","sources":["../../src/contract/checker.test.ts"],"names":[],"mappings":""}