@aztec/aztec.js 0.7.2 → 0.7.3
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.
- package/.tsbuildinfo +1 -0
- package/dest/abis/ecdsa_account_contract.json +160 -0
- package/dest/abis/schnorr_account_contract.json +148 -0
- package/dest/abis/schnorr_auth_witness_account_contract.json +643 -0
- package/dest/abis/schnorr_single_key_account_contract.json +103 -0
- package/dest/account/account.d.ts +72 -0
- package/dest/account/account.d.ts.map +1 -0
- package/dest/account/account.js +115 -0
- package/dest/account/contract/auth_witness_account_contract.d.ts +17 -0
- package/dest/account/contract/auth_witness_account_contract.d.ts.map +1 -0
- package/dest/account/contract/auth_witness_account_contract.js +23 -0
- package/dest/account/contract/ecdsa_account_contract.d.ts +16 -0
- package/dest/account/contract/ecdsa_account_contract.d.ts.map +1 -0
- package/dest/account/contract/ecdsa_account_contract.js +24 -0
- package/dest/account/contract/index.d.ts +28 -0
- package/dest/account/contract/index.d.ts.map +1 -0
- package/dest/account/contract/index.js +6 -0
- package/dest/account/contract/schnorr_account_contract.d.ts +16 -0
- package/dest/account/contract/schnorr_account_contract.d.ts.map +1 -0
- package/dest/account/contract/schnorr_account_contract.js +25 -0
- package/dest/account/contract/single_key_account_contract.d.ts +16 -0
- package/dest/account/contract/single_key_account_contract.d.ts.map +1 -0
- package/dest/account/contract/single_key_account_contract.js +21 -0
- package/dest/account/deploy_account_sent_tx.d.ts +28 -0
- package/dest/account/deploy_account_sent_tx.d.ts.map +1 -0
- package/dest/account/deploy_account_sent_tx.js +29 -0
- package/dest/account/entrypoint/auth_witness_account_entrypoint.d.ts +74 -0
- package/dest/account/entrypoint/auth_witness_account_entrypoint.d.ts.map +1 -0
- package/dest/account/entrypoint/auth_witness_account_entrypoint.js +68 -0
- package/dest/account/entrypoint/entrypoint_payload.d.ts +28 -0
- package/dest/account/entrypoint/entrypoint_payload.d.ts.map +1 -0
- package/dest/account/entrypoint/entrypoint_payload.js +48 -0
- package/dest/account/entrypoint/entrypoint_utils.d.ts +14 -0
- package/dest/account/entrypoint/entrypoint_utils.d.ts.map +1 -0
- package/dest/account/entrypoint/entrypoint_utils.js +24 -0
- package/dest/account/entrypoint/index.d.ts +20 -0
- package/dest/account/entrypoint/index.d.ts.map +1 -0
- package/dest/account/entrypoint/index.js +7 -0
- package/dest/account/entrypoint/single_key_account_entrypoint.d.ts +19 -0
- package/dest/account/entrypoint/single_key_account_entrypoint.d.ts.map +1 -0
- package/dest/account/entrypoint/single_key_account_entrypoint.js +50 -0
- package/dest/account/entrypoint/stored_key_account_entrypoint.d.ts +20 -0
- package/dest/account/entrypoint/stored_key_account_entrypoint.d.ts.map +1 -0
- package/dest/account/entrypoint/stored_key_account_entrypoint.js +47 -0
- package/dest/account/index.d.ts +50 -0
- package/dest/account/index.d.ts.map +1 -0
- package/dest/account/index.js +66 -0
- package/dest/aztec_rpc_client/aztec_rpc_client.d.ts +5 -0
- package/dest/aztec_rpc_client/aztec_rpc_client.d.ts.map +1 -0
- package/dest/aztec_rpc_client/aztec_rpc_client.js +18 -0
- package/dest/aztec_rpc_client/index.d.ts +3 -0
- package/dest/aztec_rpc_client/index.d.ts.map +1 -0
- package/dest/aztec_rpc_client/index.js +3 -0
- package/dest/aztec_rpc_client/wallet.d.ts +109 -0
- package/dest/aztec_rpc_client/wallet.d.ts.map +1 -0
- package/dest/aztec_rpc_client/wallet.js +186 -0
- package/dest/contract/base_contract_interaction.d.ts +45 -0
- package/dest/contract/base_contract_interaction.d.ts.map +1 -0
- package/dest/contract/base_contract_interaction.js +37 -0
- package/dest/contract/batch_call.d.ts +15 -0
- package/dest/contract/batch_call.d.ts.map +1 -0
- package/dest/contract/batch_call.js +21 -0
- package/dest/contract/checker.d.ts +11 -0
- package/dest/contract/checker.d.ts.map +1 -0
- package/dest/contract/checker.js +98 -0
- package/dest/contract/checker.test.d.ts +2 -0
- package/dest/contract/checker.test.d.ts.map +1 -0
- package/dest/contract/checker.test.js +168 -0
- package/dest/contract/contract.d.ts +39 -0
- package/dest/contract/contract.d.ts.map +1 -0
- package/dest/contract/contract.js +45 -0
- package/dest/contract/contract.test.d.ts +2 -0
- package/dest/contract/contract.test.d.ts.map +1 -0
- package/dest/contract/contract.test.js +141 -0
- package/dest/contract/contract_base.d.ts +72 -0
- package/dest/contract/contract_base.d.ts.map +1 -0
- package/dest/contract/contract_base.js +74 -0
- package/dest/contract/contract_function_interaction.d.ts +49 -0
- package/dest/contract/contract_function_interaction.d.ts.map +1 -0
- package/dest/contract/contract_function_interaction.js +59 -0
- package/dest/contract/index.d.ts +6 -0
- package/dest/contract/index.d.ts.map +1 -0
- package/dest/contract/index.js +6 -0
- package/dest/contract/sent_tx.d.ts +58 -0
- package/dest/contract/sent_tx.d.ts.map +1 -0
- package/dest/contract/sent_tx.js +86 -0
- package/dest/contract/sent_tx.test.d.ts +2 -0
- package/dest/contract/sent_tx.test.d.ts.map +1 -0
- package/dest/contract/sent_tx.test.js +42 -0
- package/dest/contract_deployer/contract_deployer.d.ts +25 -0
- package/dest/contract_deployer/contract_deployer.d.ts.map +1 -0
- package/dest/contract_deployer/contract_deployer.js +26 -0
- package/dest/contract_deployer/contract_deployer.test.d.ts +2 -0
- package/dest/contract_deployer/contract_deployer.test.d.ts.map +1 -0
- package/dest/contract_deployer/contract_deployer.test.js +46 -0
- package/dest/contract_deployer/deploy_method.d.ts +63 -0
- package/dest/contract_deployer/deploy_method.d.ts.map +1 -0
- package/dest/contract_deployer/deploy_method.js +80 -0
- package/dest/contract_deployer/deploy_sent_tx.d.ts +35 -0
- package/dest/contract_deployer/deploy_sent_tx.d.ts.map +1 -0
- package/dest/contract_deployer/deploy_sent_tx.js +39 -0
- package/dest/contract_deployer/index.d.ts +2 -0
- package/dest/contract_deployer/index.d.ts.map +1 -0
- package/dest/contract_deployer/index.js +2 -0
- package/dest/index.d.ts +13 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +13 -0
- package/dest/main.js +2 -0
- package/dest/main.js.LICENSE.txt +10 -0
- package/dest/sandbox/index.d.ts +111 -0
- package/dest/sandbox/index.d.ts.map +1 -0
- package/dest/sandbox/index.js +69 -0
- package/dest/utils/abi_types.d.ts +7 -0
- package/dest/utils/abi_types.d.ts.map +1 -0
- package/dest/utils/abi_types.js +2 -0
- package/dest/utils/account.d.ts +23 -0
- package/dest/utils/account.d.ts.map +1 -0
- package/dest/utils/account.js +40 -0
- package/dest/utils/cheat_codes.d.ts +199 -0
- package/dest/utils/cheat_codes.d.ts.map +1 -0
- package/dest/utils/cheat_codes.js +279 -0
- package/dest/utils/defaults.d.ts +5 -0
- package/dest/utils/defaults.d.ts.map +1 -0
- package/dest/utils/defaults.js +5 -0
- package/dest/utils/index.d.ts +8 -0
- package/dest/utils/index.d.ts.map +1 -0
- package/dest/utils/index.js +8 -0
- package/dest/utils/l1_contracts.d.ts +32 -0
- package/dest/utils/l1_contracts.d.ts.map +1 -0
- package/dest/utils/l1_contracts.js +16 -0
- package/dest/utils/l2_contracts.d.ts +10 -0
- package/dest/utils/l2_contracts.d.ts.map +1 -0
- package/dest/utils/l2_contracts.js +10 -0
- package/dest/utils/pub_key.d.ts +8 -0
- package/dest/utils/pub_key.d.ts.map +1 -0
- package/dest/utils/pub_key.js +11 -0
- package/dest/utils/secrets.d.ts +8 -0
- package/dest/utils/secrets.d.ts.map +1 -0
- package/dest/utils/secrets.js +12 -0
- package/package.json +4 -4
- package/src/abis/ecdsa_account_contract.json +1 -1
- package/src/abis/schnorr_account_contract.json +1 -1
- package/Dockerfile +0 -15
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { FieldsOf } from '@aztec/circuits.js';
|
|
2
|
+
import { TxHash, TxReceipt } from '@aztec/types';
|
|
3
|
+
import { SentTx, WaitOpts, Wallet } from '../index.js';
|
|
4
|
+
/** Extends a transaction receipt with a wallet instance for the newly deployed contract. */
|
|
5
|
+
export type DeployAccountTxReceipt = FieldsOf<TxReceipt> & {
|
|
6
|
+
/** Wallet that corresponds to the newly deployed account contract. */
|
|
7
|
+
wallet: Wallet;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A deployment transaction for an account contract sent to the network, extending SentTx with methods to get the resulting wallet.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DeployAccountSentTx extends SentTx {
|
|
13
|
+
private wallet;
|
|
14
|
+
constructor(wallet: Wallet, txHashPromise: Promise<TxHash>);
|
|
15
|
+
/**
|
|
16
|
+
* Awaits for the tx to be mined and returns the contract instance. Throws if tx is not mined.
|
|
17
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
18
|
+
* @returns The deployed contract instance.
|
|
19
|
+
*/
|
|
20
|
+
getWallet(opts?: WaitOpts): Promise<Wallet>;
|
|
21
|
+
/**
|
|
22
|
+
* Awaits for the tx to be mined and returns the receipt along with a wallet instance. Throws if tx is not mined.
|
|
23
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
24
|
+
* @returns The transaction receipt with the wallet for the deployed account contract.
|
|
25
|
+
*/
|
|
26
|
+
wait(opts?: WaitOpts): Promise<DeployAccountTxReceipt>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=deploy_account_sent_tx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy_account_sent_tx.d.ts","sourceRoot":"","sources":["../../src/account/deploy_account_sent_tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAEvD,4FAA4F;AAC5F,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG;IACzD,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,MAAM;IACjC,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;IAIlE;;;;OAIG;IACU,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAKxD;;;;OAIG;IACU,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAIpE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SentTx } from '../index.js';
|
|
2
|
+
/**
|
|
3
|
+
* A deployment transaction for an account contract sent to the network, extending SentTx with methods to get the resulting wallet.
|
|
4
|
+
*/
|
|
5
|
+
export class DeployAccountSentTx extends SentTx {
|
|
6
|
+
constructor(wallet, txHashPromise) {
|
|
7
|
+
super(wallet, txHashPromise);
|
|
8
|
+
this.wallet = wallet;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Awaits for the tx to be mined and returns the contract instance. Throws if tx is not mined.
|
|
12
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
13
|
+
* @returns The deployed contract instance.
|
|
14
|
+
*/
|
|
15
|
+
async getWallet(opts) {
|
|
16
|
+
const receipt = await this.wait(opts);
|
|
17
|
+
return receipt.wallet;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Awaits for the tx to be mined and returns the receipt along with a wallet instance. Throws if tx is not mined.
|
|
21
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
22
|
+
* @returns The transaction receipt with the wallet for the deployed account contract.
|
|
23
|
+
*/
|
|
24
|
+
async wait(opts) {
|
|
25
|
+
const receipt = await super.wait(opts);
|
|
26
|
+
return { ...receipt, wallet: this.wallet };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2FjY291bnRfc2VudF90eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NvdW50L2RlcGxveV9hY2NvdW50X3NlbnRfdHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE1BQU0sRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFRdkQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsTUFBTTtJQUM3QyxZQUFvQixNQUFjLEVBQUUsYUFBOEI7UUFDaEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQURYLFdBQU0sR0FBTixNQUFNLENBQVE7SUFFbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQWU7UUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBZTtRQUMvQixNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { AztecAddress, Fr, GrumpkinPrivateKey, PartialAddress } from '@aztec/circuits.js';
|
|
3
|
+
import { Schnorr } from '@aztec/circuits.js/barretenberg';
|
|
4
|
+
import { FunctionCall, TxExecutionRequest } from '@aztec/types';
|
|
5
|
+
import { Entrypoint } from './index.js';
|
|
6
|
+
/**
|
|
7
|
+
* An extended interface for entrypoints that support signing and adding auth witnesses.
|
|
8
|
+
*/
|
|
9
|
+
export interface IAuthWitnessAccountEntrypoint extends Entrypoint {
|
|
10
|
+
/**
|
|
11
|
+
* Sign a message hash with the private key.
|
|
12
|
+
* @param message - The message hash to sign.
|
|
13
|
+
* @returns The signature as a Buffer.
|
|
14
|
+
*/
|
|
15
|
+
sign(message: Buffer): Buffer;
|
|
16
|
+
/**
|
|
17
|
+
* Creates an AuthWitness witness for the given message. In this case, witness is the public key, the signature
|
|
18
|
+
* and the partial address, to be used for verification.
|
|
19
|
+
* @param message - The message hash to sign.
|
|
20
|
+
* @param opts - Options.
|
|
21
|
+
* @returns [publicKey, signature, partialAddress] as Fr[].
|
|
22
|
+
*/
|
|
23
|
+
createAuthWitness(message: Buffer): Promise<Fr[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the transaction request and the auth witness for the given function calls.
|
|
26
|
+
* Returning the witness here as a nonce is generated in the buildPayload action.
|
|
27
|
+
* @param executions - The function calls to execute
|
|
28
|
+
* @param opts - The options
|
|
29
|
+
* @returns The TxRequest, the auth witness to insert in db and the message signed
|
|
30
|
+
*/
|
|
31
|
+
createTxExecutionRequestWithWitness(executions: FunctionCall[]): Promise<{
|
|
32
|
+
/** The transaction request */
|
|
33
|
+
txRequest: TxExecutionRequest;
|
|
34
|
+
/** The auth witness */
|
|
35
|
+
witness: Fr[];
|
|
36
|
+
/** The message signed */
|
|
37
|
+
message: Buffer;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Account contract implementation that uses a single key for signing and encryption. This public key is not
|
|
42
|
+
* stored in the contract, but rather verified against the contract address. Note that this approach is not
|
|
43
|
+
* secure and should not be used in real use cases.
|
|
44
|
+
* The entrypoint is extended to support signing and creating eip1271-like witnesses.
|
|
45
|
+
*/
|
|
46
|
+
export declare class AuthWitnessAccountEntrypoint implements IAuthWitnessAccountEntrypoint {
|
|
47
|
+
private address;
|
|
48
|
+
private partialAddress;
|
|
49
|
+
private privateKey;
|
|
50
|
+
private signer;
|
|
51
|
+
private chainId;
|
|
52
|
+
private version;
|
|
53
|
+
constructor(address: AztecAddress, partialAddress: PartialAddress, privateKey: GrumpkinPrivateKey, signer: Schnorr, chainId?: number, version?: number);
|
|
54
|
+
sign(message: Buffer): Buffer;
|
|
55
|
+
createAuthWitness(message: Buffer): Promise<Fr[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Returns the transaction request and the auth witness for the given function calls.
|
|
58
|
+
* Returning the witness here as a nonce is generated in the buildPayload action.
|
|
59
|
+
* @param executions - The function calls to execute
|
|
60
|
+
* @param opts - The options
|
|
61
|
+
* @returns The TxRequest, the auth witness to insert in db and the message signed
|
|
62
|
+
*/
|
|
63
|
+
createTxExecutionRequestWithWitness(executions: FunctionCall[]): Promise<{
|
|
64
|
+
/** The transaction request */
|
|
65
|
+
txRequest: TxExecutionRequest;
|
|
66
|
+
/** The auth witness */
|
|
67
|
+
witness: Fr[];
|
|
68
|
+
/** The message signed */
|
|
69
|
+
message: Buffer;
|
|
70
|
+
}>;
|
|
71
|
+
createTxExecutionRequest(_executions: FunctionCall[]): Promise<TxExecutionRequest>;
|
|
72
|
+
private getEntrypointAbi;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=auth_witness_account_entrypoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth_witness_account_entrypoint.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/auth_witness_account_entrypoint.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,EAAE,EAAgB,kBAAkB,EAAE,cAAc,EAAa,MAAM,oBAAoB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAmB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAMjF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,UAAU;IAC/D;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAElD;;;;;;OAMG;IACH,mCAAmC,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QACvE,8BAA8B;QAC9B,SAAS,EAAE,kBAAkB,CAAC;QAC9B,uBAAuB;QACvB,OAAO,EAAE,EAAE,EAAE,CAAC;QACd,yBAAyB;QACzB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,qBAAa,4BAA6B,YAAW,6BAA6B;IAE9E,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBALP,OAAO,EAAE,YAAY,EACrB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,MAAyB,EAClC,OAAO,GAAE,MAAwB;IAGpC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI9B,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAYvD;;;;;;OAMG;IACG,mCAAmC,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAC7E,8BAA8B;QAC9B,SAAS,EAAE,kBAAkB,CAAC;QAC9B,uBAAuB;QACvB,OAAO,EAAE,EAAE,EAAE,CAAC;QACd,yBAAyB;QACzB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAmBF,wBAAwB,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIlF,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Fr, FunctionData, TxContext } from '@aztec/circuits.js';
|
|
2
|
+
import { encodeArguments } from '@aztec/foundation/abi';
|
|
3
|
+
import { PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
4
|
+
import SchnorrAuthWitnessAccountContractAbi from '../../abis/schnorr_auth_witness_account_contract.json' assert { type: 'json' };
|
|
5
|
+
import { generatePublicKey } from '../../index.js';
|
|
6
|
+
import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js';
|
|
7
|
+
import { buildPayload, hashPayload } from './entrypoint_payload.js';
|
|
8
|
+
/**
|
|
9
|
+
* Account contract implementation that uses a single key for signing and encryption. This public key is not
|
|
10
|
+
* stored in the contract, but rather verified against the contract address. Note that this approach is not
|
|
11
|
+
* secure and should not be used in real use cases.
|
|
12
|
+
* The entrypoint is extended to support signing and creating eip1271-like witnesses.
|
|
13
|
+
*/
|
|
14
|
+
export class AuthWitnessAccountEntrypoint {
|
|
15
|
+
constructor(address, partialAddress, privateKey, signer, chainId = DEFAULT_CHAIN_ID, version = DEFAULT_VERSION) {
|
|
16
|
+
this.address = address;
|
|
17
|
+
this.partialAddress = partialAddress;
|
|
18
|
+
this.privateKey = privateKey;
|
|
19
|
+
this.signer = signer;
|
|
20
|
+
this.chainId = chainId;
|
|
21
|
+
this.version = version;
|
|
22
|
+
}
|
|
23
|
+
sign(message) {
|
|
24
|
+
return this.signer.constructSignature(message, this.privateKey).toBuffer();
|
|
25
|
+
}
|
|
26
|
+
async createAuthWitness(message) {
|
|
27
|
+
const signature = this.sign(message);
|
|
28
|
+
const publicKey = await generatePublicKey(this.privateKey);
|
|
29
|
+
const sigFr = [];
|
|
30
|
+
for (let i = 0; i < 64; i++) {
|
|
31
|
+
sigFr.push(new Fr(signature[i]));
|
|
32
|
+
}
|
|
33
|
+
return [...publicKey.toFields(), ...sigFr, this.partialAddress];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the transaction request and the auth witness for the given function calls.
|
|
37
|
+
* Returning the witness here as a nonce is generated in the buildPayload action.
|
|
38
|
+
* @param executions - The function calls to execute
|
|
39
|
+
* @param opts - The options
|
|
40
|
+
* @returns The TxRequest, the auth witness to insert in db and the message signed
|
|
41
|
+
*/
|
|
42
|
+
async createTxExecutionRequestWithWitness(executions) {
|
|
43
|
+
const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions);
|
|
44
|
+
const message = await hashPayload(payload);
|
|
45
|
+
const witness = await this.createAuthWitness(message);
|
|
46
|
+
const args = [payload];
|
|
47
|
+
const abi = this.getEntrypointAbi();
|
|
48
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args));
|
|
49
|
+
const txRequest = TxExecutionRequest.from({
|
|
50
|
+
argsHash: packedArgs.hash,
|
|
51
|
+
origin: this.address,
|
|
52
|
+
functionData: FunctionData.fromAbi(abi),
|
|
53
|
+
txContext: TxContext.empty(this.chainId, this.version),
|
|
54
|
+
packedArguments: [...callsPackedArguments, packedArgs],
|
|
55
|
+
});
|
|
56
|
+
return { txRequest, message, witness };
|
|
57
|
+
}
|
|
58
|
+
createTxExecutionRequest(_executions) {
|
|
59
|
+
throw new Error(`Not implemented, use createTxExecutionRequestWithWitness instead`);
|
|
60
|
+
}
|
|
61
|
+
getEntrypointAbi() {
|
|
62
|
+
const abi = SchnorrAuthWitnessAccountContractAbi.functions.find(f => f.name === 'entrypoint');
|
|
63
|
+
if (!abi)
|
|
64
|
+
throw new Error(`Entrypoint abi for account contract not found`);
|
|
65
|
+
return abi;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aF93aXRuZXNzX2FjY291bnRfZW50cnlwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hY2NvdW50L2VudHJ5cG9pbnQvYXV0aF93aXRuZXNzX2FjY291bnRfZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLEVBQUUsRUFBRSxZQUFZLEVBQXNDLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRW5ILE9BQU8sRUFBNEIsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEYsT0FBTyxFQUFnQixlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFakYsT0FBTyxvQ0FBb0MsTUFBTSx1REFBdUQsQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXdDcEU7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ1UsT0FBcUIsRUFDckIsY0FBOEIsRUFDOUIsVUFBOEIsRUFDOUIsTUFBZSxFQUNmLFVBQWtCLGdCQUFnQixFQUNsQyxVQUFrQixlQUFlO1FBTGpDLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQVM7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtJQUN4QyxDQUFDO0lBRUcsSUFBSSxDQUFDLE9BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFM0QsTUFBTSxLQUFLLEdBQVMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLFVBQTBCO1FBUWxFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUN4QyxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN2QyxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEQsZUFBZSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxVQUFVLENBQUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELHdCQUF3QixDQUFDLFdBQTJCO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sR0FBRyxHQUFJLG9DQUEyRCxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3JGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQzdCLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUMzRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { Fr } from '@aztec/circuits.js';
|
|
3
|
+
import { FunctionCall, PackedArguments } from '@aztec/types';
|
|
4
|
+
export declare const ACCOUNT_MAX_PRIVATE_CALLS = 2;
|
|
5
|
+
export declare const ACCOUNT_MAX_PUBLIC_CALLS = 2;
|
|
6
|
+
/** Encoded payload for the account contract entrypoint */
|
|
7
|
+
export type EntrypointPayload = {
|
|
8
|
+
/** Concatenated arguments for every call */
|
|
9
|
+
flattened_args_hashes: Fr[];
|
|
10
|
+
/** Concatenated selectors for every call */
|
|
11
|
+
flattened_selectors: Fr[];
|
|
12
|
+
/** Concatenated target addresses for every call */
|
|
13
|
+
flattened_targets: Fr[];
|
|
14
|
+
/** A nonce for replay protection */
|
|
15
|
+
nonce: Fr;
|
|
16
|
+
};
|
|
17
|
+
/** Assembles an entrypoint payload from a set of private and public function calls */
|
|
18
|
+
export declare function buildPayload(calls: FunctionCall[]): Promise<{
|
|
19
|
+
/** The payload for the entrypoint function */
|
|
20
|
+
payload: EntrypointPayload;
|
|
21
|
+
/** The packed arguments of functions called */
|
|
22
|
+
packedArguments: PackedArguments[];
|
|
23
|
+
}>;
|
|
24
|
+
/** Compresses an entrypoint payload to a 32-byte buffer (useful for signing) */
|
|
25
|
+
export declare function hashPayload(payload: EntrypointPayload): Promise<Buffer>;
|
|
26
|
+
/** Flattens an entrypoint payload */
|
|
27
|
+
export declare function flattenPayload(payload: EntrypointPayload): Fr[];
|
|
28
|
+
//# sourceMappingURL=entrypoint_payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoint_payload.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/entrypoint_payload.ts"],"names":[],"mappings":";AAAA,OAAO,EAAgB,EAAE,EAAkB,MAAM,oBAAoB,CAAC;AAGtE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAqB,MAAM,cAAc,CAAC;AAKhF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,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;AAEF,sFAAsF;AACtF,wBAAsB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACjE,8CAA8C;IAC9C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,+CAA+C;IAC/C,eAAe,EAAE,eAAe,EAAE,CAAC;CACpC,CAAC,CA6BD;AAED,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,OAAO,EAAE,iBAAiB,mBAM3D;AAED,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,QAOxD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CircuitsWasm, Fr, GeneratorIndex } from '@aztec/circuits.js';
|
|
2
|
+
import { pedersenPlookupCompressWithHashIndex } from '@aztec/circuits.js/barretenberg';
|
|
3
|
+
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
4
|
+
import { PackedArguments, emptyFunctionCall } from '@aztec/types';
|
|
5
|
+
import partition from 'lodash.partition';
|
|
6
|
+
// These must match the values defined in yarn-project/aztec-nr/aztec/src/entrypoint.nr
|
|
7
|
+
export const ACCOUNT_MAX_PRIVATE_CALLS = 2;
|
|
8
|
+
export const ACCOUNT_MAX_PUBLIC_CALLS = 2;
|
|
9
|
+
/** Assembles an entrypoint payload from a set of private and public function calls */
|
|
10
|
+
export async function buildPayload(calls) {
|
|
11
|
+
const nonce = Fr.random();
|
|
12
|
+
const [privateCalls, publicCalls] = partition(calls, call => call.functionData.isPrivate);
|
|
13
|
+
const paddedCalls = [
|
|
14
|
+
...padArrayEnd(privateCalls, emptyFunctionCall(), ACCOUNT_MAX_PRIVATE_CALLS),
|
|
15
|
+
...padArrayEnd(publicCalls, emptyFunctionCall(), ACCOUNT_MAX_PUBLIC_CALLS),
|
|
16
|
+
];
|
|
17
|
+
const packedArguments = [];
|
|
18
|
+
const wasm = await CircuitsWasm.get();
|
|
19
|
+
for (const call of paddedCalls) {
|
|
20
|
+
packedArguments.push(await PackedArguments.fromArgs(call.args, wasm));
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
payload: {
|
|
24
|
+
// eslint-disable-next-line camelcase
|
|
25
|
+
flattened_args_hashes: packedArguments.map(args => args.hash),
|
|
26
|
+
// eslint-disable-next-line camelcase
|
|
27
|
+
flattened_selectors: paddedCalls.map(call => call.functionData.selector.toField()),
|
|
28
|
+
// eslint-disable-next-line camelcase
|
|
29
|
+
flattened_targets: paddedCalls.map(call => call.to.toField()),
|
|
30
|
+
nonce,
|
|
31
|
+
},
|
|
32
|
+
packedArguments,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** Compresses an entrypoint payload to a 32-byte buffer (useful for signing) */
|
|
36
|
+
export async function hashPayload(payload) {
|
|
37
|
+
return pedersenPlookupCompressWithHashIndex(await CircuitsWasm.get(), flattenPayload(payload).map(fr => fr.toBuffer()), GeneratorIndex.SIGNATURE_PAYLOAD);
|
|
38
|
+
}
|
|
39
|
+
/** Flattens an entrypoint payload */
|
|
40
|
+
export function flattenPayload(payload) {
|
|
41
|
+
return [
|
|
42
|
+
...payload.flattened_args_hashes,
|
|
43
|
+
...payload.flattened_selectors,
|
|
44
|
+
...payload.flattened_targets,
|
|
45
|
+
payload.nonce,
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlwb2ludF9wYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FjY291bnQvZW50cnlwb2ludC9lbnRyeXBvaW50X3BheWxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWhGLE9BQU8sU0FBUyxNQUFNLGtCQUFrQixDQUFDO0FBRXpDLHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBaUIxQyxzRkFBc0Y7QUFDdEYsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsS0FBcUI7SUFNdEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRTFCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFMUYsTUFBTSxXQUFXLEdBQUc7UUFDbEIsR0FBRyxXQUFXLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLEVBQUUseUJBQXlCLENBQUM7UUFDNUUsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsd0JBQXdCLENBQUM7S0FDM0UsQ0FBQztJQUVGLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUMzQixNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUV0QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRTtRQUM5QixlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDdkU7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFO1lBQ1AscUNBQXFDO1lBQ3JDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdELHFDQUFxQztZQUNyQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEYscUNBQXFDO1lBQ3JDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdELEtBQUs7U0FDTjtRQUNELGVBQWU7S0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsT0FBMEI7SUFDMUQsT0FBTyxvQ0FBb0MsQ0FDekMsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQ3hCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDaEQsY0FBYyxDQUFDLGlCQUFpQixDQUNqQyxDQUFDO0FBQ0osQ0FBQztBQUVELHFDQUFxQztBQUNyQyxNQUFNLFVBQVUsY0FBYyxDQUFDLE9BQTBCO0lBQ3ZELE9BQU87UUFDTCxHQUFHLE9BQU8sQ0FBQyxxQkFBcUI7UUFDaEMsR0FBRyxPQUFPLENBQUMsbUJBQW1CO1FBQzlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQjtRQUM1QixPQUFPLENBQUMsS0FBSztLQUNkLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/circuits.js';
|
|
2
|
+
import { FunctionAbi } from '@aztec/foundation/abi';
|
|
3
|
+
import { NodeInfo, PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
4
|
+
/**
|
|
5
|
+
* Utility for building a TxExecutionRequest in the context of an Entrypoint.
|
|
6
|
+
* @param origin - Address of the account contract sending this transaction.
|
|
7
|
+
* @param entrypointMethod - Initial method called in the account contract.
|
|
8
|
+
* @param args - Arguments used when calling this initial method.
|
|
9
|
+
* @param callsPackedArguments - Packed arguments of nested calls (if any).
|
|
10
|
+
* @param nodeInfo - Node info with chain id and version.
|
|
11
|
+
* @returns A TxExecutionRequest ready to be simulated, proven, and sent.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTxExecutionRequest(origin: AztecAddress, entrypointMethod: FunctionAbi, args: any[], callsPackedArguments: PackedArguments[], nodeInfo: NodeInfo): Promise<TxExecutionRequest>;
|
|
14
|
+
//# sourceMappingURL=entrypoint_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoint_utils.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/entrypoint_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAmB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE7E;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,WAAW,EAC7B,IAAI,EAAE,GAAG,EAAE,EACX,oBAAoB,EAAE,eAAe,EAAE,EACvC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAW7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { FunctionData, TxContext } from '@aztec/circuits.js';
|
|
2
|
+
import { encodeArguments } from '@aztec/foundation/abi';
|
|
3
|
+
import { PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
4
|
+
/**
|
|
5
|
+
* Utility for building a TxExecutionRequest in the context of an Entrypoint.
|
|
6
|
+
* @param origin - Address of the account contract sending this transaction.
|
|
7
|
+
* @param entrypointMethod - Initial method called in the account contract.
|
|
8
|
+
* @param args - Arguments used when calling this initial method.
|
|
9
|
+
* @param callsPackedArguments - Packed arguments of nested calls (if any).
|
|
10
|
+
* @param nodeInfo - Node info with chain id and version.
|
|
11
|
+
* @returns A TxExecutionRequest ready to be simulated, proven, and sent.
|
|
12
|
+
*/
|
|
13
|
+
export async function buildTxExecutionRequest(origin, entrypointMethod, args, callsPackedArguments, nodeInfo) {
|
|
14
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(entrypointMethod, args));
|
|
15
|
+
const { chainId, version } = nodeInfo;
|
|
16
|
+
return TxExecutionRequest.from({
|
|
17
|
+
argsHash: packedArgs.hash,
|
|
18
|
+
origin,
|
|
19
|
+
functionData: FunctionData.fromAbi(entrypointMethod),
|
|
20
|
+
txContext: TxContext.empty(chainId, version),
|
|
21
|
+
packedArguments: [...callsPackedArguments, packedArgs],
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlwb2ludF91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hY2NvdW50L2VudHJ5cG9pbnQvZW50cnlwb2ludF91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFZLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3RTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLE1BQW9CLEVBQ3BCLGdCQUE2QixFQUM3QixJQUFXLEVBQ1gsb0JBQXVDLEVBQ3ZDLFFBQWtCO0lBRWxCLE1BQU0sVUFBVSxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUV0QyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQztRQUM3QixRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDekIsTUFBTTtRQUNOLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1FBQ3BELFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDNUMsZUFBZSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxVQUFVLENBQUM7S0FDdkQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { FunctionCall, TxExecutionRequest } from '@aztec/types';
|
|
2
|
+
export * from './auth_witness_account_entrypoint.js';
|
|
3
|
+
export * from './entrypoint_payload.js';
|
|
4
|
+
export * from './entrypoint_utils.js';
|
|
5
|
+
export * from './single_key_account_entrypoint.js';
|
|
6
|
+
export * from './stored_key_account_entrypoint.js';
|
|
7
|
+
/**
|
|
8
|
+
* Represents a transaction entrypoint in an account contract.
|
|
9
|
+
* Knows how to assemble a transaction execution request given a set of function calls.
|
|
10
|
+
*/
|
|
11
|
+
export interface Entrypoint {
|
|
12
|
+
/**
|
|
13
|
+
* Generates an authenticated request out of set of intents
|
|
14
|
+
* @param executions - The execution intents to be run.
|
|
15
|
+
* @param opts - Options.
|
|
16
|
+
* @returns The authenticated transaction execution request.
|
|
17
|
+
*/
|
|
18
|
+
createTxExecutionRequest(executions: FunctionCall[]): Promise<TxExecutionRequest>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEhE,cAAc,sCAAsC,CAAC;AACrD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AAGnD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,wBAAwB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './auth_witness_account_entrypoint.js';
|
|
2
|
+
export * from './entrypoint_payload.js';
|
|
3
|
+
export * from './entrypoint_utils.js';
|
|
4
|
+
export * from './single_key_account_entrypoint.js';
|
|
5
|
+
export * from './stored_key_account_entrypoint.js';
|
|
6
|
+
// docs:end:entrypoint-interface
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWNjb3VudC9lbnRyeXBvaW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxvQ0FBb0MsQ0FBQztBQWdCbkQsZ0NBQWdDIn0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AztecAddress, GrumpkinPrivateKey, PartialAddress } from '@aztec/circuits.js';
|
|
2
|
+
import { FunctionCall, TxExecutionRequest } from '@aztec/types';
|
|
3
|
+
import { Entrypoint } from './index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Account contract implementation that uses a single key for signing and encryption. This public key is not
|
|
6
|
+
* stored in the contract, but rather verified against the contract address. Note that this approach is not
|
|
7
|
+
* secure and should not be used in real use cases.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SingleKeyAccountEntrypoint implements Entrypoint {
|
|
10
|
+
private address;
|
|
11
|
+
private partialAddress;
|
|
12
|
+
private privateKey;
|
|
13
|
+
private chainId;
|
|
14
|
+
private version;
|
|
15
|
+
constructor(address: AztecAddress, partialAddress: PartialAddress, privateKey: GrumpkinPrivateKey, chainId?: number, version?: number);
|
|
16
|
+
createTxExecutionRequest(executions: FunctionCall[]): Promise<TxExecutionRequest>;
|
|
17
|
+
private getEntrypointAbi;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=single_key_account_entrypoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single_key_account_entrypoint.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/single_key_account_entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,kBAAkB,EAAE,cAAc,EAAa,MAAM,oBAAoB,CAAC;AAG/G,OAAO,EAAE,YAAY,EAAmB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAMjF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;GAIG;AACH,qBAAa,0BAA2B,YAAW,UAAU;IAEzD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBAJP,OAAO,EAAE,YAAY,EACrB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,kBAAkB,EAC9B,OAAO,GAAE,MAAyB,EAClC,OAAO,GAAE,MAAwB;IAGrC,wBAAwB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqBvF,OAAO,CAAC,gBAAgB;CAQzB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FunctionData, TxContext } from '@aztec/circuits.js';
|
|
2
|
+
import { Schnorr } from '@aztec/circuits.js/barretenberg';
|
|
3
|
+
import { encodeArguments } from '@aztec/foundation/abi';
|
|
4
|
+
import { PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
5
|
+
import SchnorrSingleKeyAccountContractAbi from '../../abis/schnorr_single_key_account_contract.json' assert { type: 'json' };
|
|
6
|
+
import { generatePublicKey } from '../../index.js';
|
|
7
|
+
import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js';
|
|
8
|
+
import { buildPayload, hashPayload } from './entrypoint_payload.js';
|
|
9
|
+
/**
|
|
10
|
+
* Account contract implementation that uses a single key for signing and encryption. This public key is not
|
|
11
|
+
* stored in the contract, but rather verified against the contract address. Note that this approach is not
|
|
12
|
+
* secure and should not be used in real use cases.
|
|
13
|
+
*/
|
|
14
|
+
export class SingleKeyAccountEntrypoint {
|
|
15
|
+
constructor(address, partialAddress, privateKey, chainId = DEFAULT_CHAIN_ID, version = DEFAULT_VERSION) {
|
|
16
|
+
this.address = address;
|
|
17
|
+
this.partialAddress = partialAddress;
|
|
18
|
+
this.privateKey = privateKey;
|
|
19
|
+
this.chainId = chainId;
|
|
20
|
+
this.version = version;
|
|
21
|
+
}
|
|
22
|
+
async createTxExecutionRequest(executions) {
|
|
23
|
+
const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions);
|
|
24
|
+
const message = await hashPayload(payload);
|
|
25
|
+
const signer = await Schnorr.new();
|
|
26
|
+
const signature = signer.constructSignature(message, this.privateKey).toBuffer();
|
|
27
|
+
const publicKey = await generatePublicKey(this.privateKey);
|
|
28
|
+
const args = [payload, publicKey.toBuffer(), signature, this.partialAddress];
|
|
29
|
+
const abi = this.getEntrypointAbi();
|
|
30
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args));
|
|
31
|
+
const txRequest = TxExecutionRequest.from({
|
|
32
|
+
argsHash: packedArgs.hash,
|
|
33
|
+
origin: this.address,
|
|
34
|
+
functionData: FunctionData.fromAbi(abi),
|
|
35
|
+
txContext: TxContext.empty(this.chainId, this.version),
|
|
36
|
+
packedArguments: [...callsPackedArguments, packedArgs],
|
|
37
|
+
});
|
|
38
|
+
return txRequest;
|
|
39
|
+
}
|
|
40
|
+
getEntrypointAbi() {
|
|
41
|
+
// We use the SchnorrSingleKeyAccountContract because it implements the interface we need, but ideally
|
|
42
|
+
// we should have an interface that defines the entrypoint for SingleKeyAccountContracts and
|
|
43
|
+
// load the abi from it.
|
|
44
|
+
const abi = SchnorrSingleKeyAccountContractAbi.functions.find(f => f.name === 'entrypoint');
|
|
45
|
+
if (!abi)
|
|
46
|
+
throw new Error(`Entrypoint abi for account contract not found`);
|
|
47
|
+
return abi;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlX2tleV9hY2NvdW50X2VudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWNjb3VudC9lbnRyeXBvaW50L3NpbmdsZV9rZXlfYWNjb3VudF9lbnRyeXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFzQyxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpGLE9BQU8sa0NBQWtDLE1BQU0scURBQXFELENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHcEU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFDVSxPQUFxQixFQUNyQixjQUE4QixFQUM5QixVQUE4QixFQUM5QixVQUFrQixnQkFBZ0IsRUFDbEMsVUFBa0IsZUFBZTtRQUpqQyxZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUEwQjtJQUN4QyxDQUFDO0lBRUosS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQTBCO1FBQ3ZELE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakYsTUFBTSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0UsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RSxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDeEMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDdkMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RELGVBQWUsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsVUFBVSxDQUFDO1NBQ3ZELENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsc0dBQXNHO1FBQ3RHLDRGQUE0RjtRQUM1Rix3QkFBd0I7UUFDeEIsTUFBTSxHQUFHLEdBQUksa0NBQXlELENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { AztecAddress } from '@aztec/circuits.js';
|
|
3
|
+
import { Signature } from '@aztec/circuits.js/barretenberg';
|
|
4
|
+
import { FunctionCall, TxExecutionRequest } from '@aztec/types';
|
|
5
|
+
import { Entrypoint } from './index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Account contract implementation that keeps a signing public key in storage, and is retrieved on
|
|
8
|
+
* every new request in order to validate the payload signature.
|
|
9
|
+
*/
|
|
10
|
+
export declare class StoredKeyAccountEntrypoint implements Entrypoint {
|
|
11
|
+
private address;
|
|
12
|
+
private sign;
|
|
13
|
+
private chainId;
|
|
14
|
+
private version;
|
|
15
|
+
private log;
|
|
16
|
+
constructor(address: AztecAddress, sign: (msg: Buffer) => Signature, chainId?: number, version?: number);
|
|
17
|
+
createTxExecutionRequest(executions: FunctionCall[]): Promise<TxExecutionRequest>;
|
|
18
|
+
private getEntrypointAbi;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=stored_key_account_entrypoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stored_key_account_entrypoint.d.ts","sourceRoot":"","sources":["../../../src/account/entrypoint/stored_key_account_entrypoint.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAAE,YAAY,EAAmB,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAKjF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;GAGG;AACH,qBAAa,0BAA2B,YAAW,UAAU;IAIzD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,GAAG,CAAc;gBAGf,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,EAChC,OAAO,GAAE,MAAyB,EAClC,OAAO,GAAE,MAAwB;IAKrC,wBAAwB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBvF,OAAO,CAAC,gBAAgB;CAQzB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { FunctionData, TxContext } from '@aztec/circuits.js';
|
|
2
|
+
import { encodeArguments } from '@aztec/foundation/abi';
|
|
3
|
+
import { createDebugLogger } from '@aztec/foundation/log';
|
|
4
|
+
import { PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
5
|
+
import EcdsaAccountContractAbi from '../../abis/ecdsa_account_contract.json' assert { type: 'json' };
|
|
6
|
+
import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js';
|
|
7
|
+
import { buildPayload, hashPayload } from './entrypoint_payload.js';
|
|
8
|
+
/**
|
|
9
|
+
* Account contract implementation that keeps a signing public key in storage, and is retrieved on
|
|
10
|
+
* every new request in order to validate the payload signature.
|
|
11
|
+
*/
|
|
12
|
+
export class StoredKeyAccountEntrypoint {
|
|
13
|
+
constructor(address, sign, chainId = DEFAULT_CHAIN_ID, version = DEFAULT_VERSION) {
|
|
14
|
+
this.address = address;
|
|
15
|
+
this.sign = sign;
|
|
16
|
+
this.chainId = chainId;
|
|
17
|
+
this.version = version;
|
|
18
|
+
this.log = createDebugLogger('aztec:client:accounts:stored_key');
|
|
19
|
+
}
|
|
20
|
+
async createTxExecutionRequest(executions) {
|
|
21
|
+
const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions);
|
|
22
|
+
const message = await hashPayload(payload);
|
|
23
|
+
const signature = this.sign(message).toBuffer();
|
|
24
|
+
this.log(`Signed challenge ${message.toString('hex')} as ${signature.toString('hex')}`);
|
|
25
|
+
const args = [payload, signature];
|
|
26
|
+
const abi = this.getEntrypointAbi();
|
|
27
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args));
|
|
28
|
+
const txRequest = TxExecutionRequest.from({
|
|
29
|
+
argsHash: packedArgs.hash,
|
|
30
|
+
origin: this.address,
|
|
31
|
+
functionData: FunctionData.fromAbi(abi),
|
|
32
|
+
txContext: TxContext.empty(this.chainId, this.version),
|
|
33
|
+
packedArguments: [...callsPackedArguments, packedArgs],
|
|
34
|
+
});
|
|
35
|
+
return txRequest;
|
|
36
|
+
}
|
|
37
|
+
getEntrypointAbi() {
|
|
38
|
+
// We use the EcdsaAccountContractAbi because it implements the interface we need, but ideally
|
|
39
|
+
// we should have an interface that defines the entrypoint for StoredKeyAccountContracts and
|
|
40
|
+
// load the abi from it.
|
|
41
|
+
const abi = EcdsaAccountContractAbi.functions.find(f => f.name === 'entrypoint');
|
|
42
|
+
if (!abi)
|
|
43
|
+
throw new Error(`Entrypoint abi for account contract not found`);
|
|
44
|
+
return abi;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkX2tleV9hY2NvdW50X2VudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWNjb3VudC9lbnRyeXBvaW50L3N0b3JlZF9rZXlfYWNjb3VudF9lbnRyeXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTNFLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQWUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRixPQUFPLHVCQUF1QixNQUFNLHdDQUF3QyxDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BFOzs7R0FHRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFDVSxPQUFxQixFQUNyQixJQUFnQyxFQUNoQyxVQUFrQixnQkFBZ0IsRUFDbEMsVUFBa0IsZUFBZTtRQUhqQyxZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQTRCO1FBQ2hDLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBRXpDLElBQUksQ0FBQyxHQUFHLEdBQUcsaUJBQWlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQTBCO1FBQ3ZELE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUYsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhGLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDO1lBQ3hDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSTtZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsWUFBWSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLG9CQUFvQixFQUFFLFVBQVUsQ0FBQztTQUN2RCxDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLDhGQUE4RjtRQUM5Riw0RkFBNEY7UUFDNUYsd0JBQXdCO1FBQ3hCLE1BQU0sR0FBRyxHQUFJLHVCQUE4QyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { AztecRPC, CompleteAddress, GrumpkinPrivateKey } from '@aztec/types';
|
|
3
|
+
import { AccountContract, AccountWallet, AztecAddress, Fr } from '../index.js';
|
|
4
|
+
import { Account } from './account.js';
|
|
5
|
+
export { Account } from './account.js';
|
|
6
|
+
export * from './contract/index.js';
|
|
7
|
+
export * from './entrypoint/index.js';
|
|
8
|
+
export { CompleteAddress };
|
|
9
|
+
/** A contract deployment salt. */
|
|
10
|
+
export type Salt = Fr | number | bigint;
|
|
11
|
+
/**
|
|
12
|
+
* Creates an Account that relies on an ECDSA signing key for authentication.
|
|
13
|
+
* @param rpc - An AztecRPC server instance.
|
|
14
|
+
* @param encryptionPrivateKey - Grumpkin key used for note encryption.
|
|
15
|
+
* @param signingPrivateKey - Secp256k1 key used for signing transactions.
|
|
16
|
+
* @param saltOrAddress - Deployment salt or complete address if account contract is already deployed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getEcdsaAccount(rpc: AztecRPC, encryptionPrivateKey: GrumpkinPrivateKey, signingPrivateKey: Buffer, saltOrAddress?: Salt | CompleteAddress): Account;
|
|
19
|
+
/**
|
|
20
|
+
* Creates an Account that relies on a Grumpkin signing key for authentication.
|
|
21
|
+
* @param rpc - An AztecRPC server instance.
|
|
22
|
+
* @param encryptionPrivateKey - Grumpkin key used for note encryption.
|
|
23
|
+
* @param signingPrivateKey - Grumpkin key used for signing transactions.
|
|
24
|
+
* @param saltOrAddress - Deployment salt or complete address if account contract is already deployed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getSchnorrAccount(rpc: AztecRPC, encryptionPrivateKey: GrumpkinPrivateKey, signingPrivateKey: GrumpkinPrivateKey, saltOrAddress?: Salt | CompleteAddress): Account;
|
|
27
|
+
/**
|
|
28
|
+
* Creates an Account that uses the same Grumpkin key for encryption and authentication.
|
|
29
|
+
* @param rpc - An AztecRPC server instance.
|
|
30
|
+
* @param encryptionAndSigningPrivateKey - Grumpkin key used for note encryption and signing transactions.
|
|
31
|
+
* @param saltOrAddress - Deployment salt or complete address if account contract is already deployed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getUnsafeSchnorrAccount(rpc: AztecRPC, encryptionAndSigningPrivateKey: GrumpkinPrivateKey, saltOrAddress?: Salt | CompleteAddress): Account;
|
|
34
|
+
/**
|
|
35
|
+
* Gets a wallet for an already registered account using Schnorr signatures with a single key for encryption and authentication.
|
|
36
|
+
* @param rpc - An AztecRPC server instance.
|
|
37
|
+
* @param address - Address for the account.
|
|
38
|
+
* @param signingPrivateKey - Grumpkin key used for note encryption and signing transactions.
|
|
39
|
+
* @returns A wallet for this account that can be used to interact with a contract instance.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getUnsafeSchnorrWallet(rpc: AztecRPC, address: AztecAddress, signingKey: GrumpkinPrivateKey): Promise<AccountWallet>;
|
|
42
|
+
/**
|
|
43
|
+
* Gets a wallet for an already registered account.
|
|
44
|
+
* @param rpc - An AztecRPC server instance.
|
|
45
|
+
* @param address - Address for the account.
|
|
46
|
+
* @param accountContract - Account contract implementation.
|
|
47
|
+
* * @returns A wallet for this account that can be used to interact with a contract instance.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getWallet(rpc: AztecRPC, address: AztecAddress, accountContract: AccountContract): Promise<AccountWallet>;
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/account/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,kCAAkC;AAClC,MAAM,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,QAAQ,EACb,oBAAoB,EAAE,kBAAkB,EACxC,iBAAiB,EAAE,MAAM,EACzB,aAAa,CAAC,EAAE,IAAI,GAAG,eAAe,GACrC,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,QAAQ,EACb,oBAAoB,EAAE,kBAAkB,EACxC,iBAAiB,EAAE,kBAAkB,EACrC,aAAa,CAAC,EAAE,IAAI,GAAG,eAAe,GACrC,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,QAAQ,EACb,8BAA8B,EAAE,kBAAkB,EAClD,aAAa,CAAC,EAAE,IAAI,GAAG,eAAe,GACrC,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC,aAAa,CAAC,CAExB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,aAAa,CAAC,CAQxB"}
|