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