@aztec/aztec.js 0.1.0-alpha47 → 0.1.0-alpha49
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/dest/abis/ecdsa_account_contract.json +3 -3
- package/dest/abis/schnorr_account_contract.json +3 -3
- package/dest/abis/schnorr_single_key_account_contract.json +2 -2
- package/dest/account/contract/index.d.ts +8 -4
- package/dest/account/contract/index.d.ts.map +1 -1
- package/dest/account/contract/index.js +2 -1
- package/dest/account/entrypoint/entrypoint_payload.d.ts +4 -3
- package/dest/account/entrypoint/entrypoint_payload.d.ts.map +1 -1
- package/dest/account/entrypoint/entrypoint_payload.js +12 -10
- 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 +2 -0
- package/dest/account/entrypoint/index.d.ts.map +1 -1
- package/dest/account/entrypoint/index.js +4 -1
- package/dest/account/entrypoint/single_key_account_entrypoint.d.ts.map +1 -1
- package/dest/account/entrypoint/single_key_account_entrypoint.js +5 -8
- package/dest/account/entrypoint/stored_key_account_entrypoint.d.ts.map +1 -1
- package/dest/account/entrypoint/stored_key_account_entrypoint.js +5 -8
- package/dest/aztec_rpc_client/aztec_rpc_client.d.ts.map +1 -1
- package/dest/aztec_rpc_client/aztec_rpc_client.js +4 -4
- package/dest/aztec_rpc_client/wallet.d.ts +3 -3
- package/dest/aztec_rpc_client/wallet.d.ts.map +1 -1
- package/dest/aztec_rpc_client/wallet.js +5 -5
- package/dest/contract/base_contract_interaction.d.ts +4 -0
- package/dest/contract/base_contract_interaction.d.ts.map +1 -1
- package/dest/contract/base_contract_interaction.js +2 -2
- package/dest/contract/contract.d.ts.map +1 -1
- package/dest/contract/contract.js +4 -4
- package/dest/contract/contract.test.js +16 -9
- package/dest/contract/contract_base.d.ts +6 -6
- package/dest/contract/contract_base.d.ts.map +1 -1
- package/dest/contract/contract_base.js +9 -6
- package/dest/contract_deployer/deploy_method.d.ts +3 -6
- package/dest/contract_deployer/deploy_method.d.ts.map +1 -1
- package/dest/contract_deployer/deploy_method.js +5 -8
- package/dest/index.d.ts +1 -1
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +2 -2
- package/dest/main.js +1 -1
- package/package.json +4 -4
- package/src/abis/ecdsa_account_contract.json +3 -3
- package/src/abis/schnorr_account_contract.json +3 -3
- package/src/abis/schnorr_single_key_account_contract.json +2 -2
- package/src/account/contract/index.ts +10 -4
- package/src/account/entrypoint/entrypoint_payload.ts +13 -13
- package/src/account/entrypoint/entrypoint_utils.ts +31 -0
- package/src/account/entrypoint/index.ts +6 -0
- package/src/account/entrypoint/single_key_account_entrypoint.ts +4 -8
- package/src/account/entrypoint/stored_key_account_entrypoint.ts +4 -8
- package/src/aztec_rpc_client/aztec_rpc_client.ts +3 -4
- package/src/aztec_rpc_client/wallet.ts +5 -5
- package/src/contract/base_contract_interaction.ts +5 -1
- package/src/contract/contract.test.ts +17 -8
- package/src/contract/contract.ts +3 -3
- package/src/contract/contract_base.ts +9 -6
- package/src/contract_deployer/deploy_method.ts +5 -10
- package/src/index.ts +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"isInternal": false,
|
|
8
8
|
"parameters": [],
|
|
9
9
|
"returnTypes": [],
|
|
10
|
-
"bytecode": "H4sIAAAAAAAA/9Xc12/
|
|
10
|
+
"bytecode": "H4sIAAAAAAAA/9Xc12/aUBzFcZIm6d4le+8dG9tg05Wme++9Ehro3u3/H44CEsprTh6+V7LAL+h8GPYdv8v/XC5XyW23tvrRXj86Gs+b5507zrsaz1tb83y18RgFxTiulgrVMAo3gkJWSZMgTirFNEzDJE02C2kUVdM4LWWVrBRkYRxVw1qSRbVgu3W3vFawy7aXOXsgOXshOfsgOfshOQcgOQchOYcgOYchOUcgOUchOccgOcchOScgOSchOacgOachOWcgOWchOecgOechORcgORchOZcgOZchOVcgOQNIzhCSswDJGUFyxpCcCSRnEZKzBMmZQnJmkJzlPcrZviNnsLsWthnNZyHmdqP5HMS8z2g+DzF3GM0XIOZOo/kixNxlNK9CzN1G8yWIucdoXoOYe43myxBzn9F8BWLuN5qvQswDRvM1iHnQaL4OMQ8ZzTcg5mGj+SbEPGI034KYR43m2xDzmNF8B2IeN5rvQswTRvM9iHnSaL4PMU8ZzQ8g5mmj+SHEPGM0P4KYZ43mxxDznNH8BGKeN5qfQswLRvMziHnRaH4OMS8ZzS8g5mWj+SXEvGI0v4KYA6P5NcQcGs1vIOaC0fwWYo6M5ncQc2w0v4eYE6N5HWIuGs0bEHPJaK5AzKnR/AFizozmTYi5bDRXIeb9RnMNYj5gNH+EmA8azZ8g5kNG82eI+bDR/AViPmI0f4WYjxrN3yDmY0bzd4j5uNH8A2I+YTT/hJhPGs2/IOZTRvNviPm00fwHYj5jNP+FmPNG8z+jOd94neb/9GlPlPYIac+M9pBoPKjxkcYL6j+rP6n+lfobuv/qfqTrs65X+v3q+6zPN9/yXpYbj9oLp71h2iulvUPNvTTaa7FWP1SLr9p01Wqrdlm1vKptVa2nah9VC6jaONWKqXZKtUSqrVGtiWovVIugtXmtVWvtVmuZWtvTWpfWfrQWorUBzZVr7lhzqev1Q3NtmnvSXIzmJjRW19hVYzmNbdTXV99XfUH1jdRX0L1T9xJdW3Wt0W9P30V9NlvHjzLRIFEAAA==",
|
|
11
11
|
"verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
}
|
|
97
97
|
],
|
|
98
98
|
"returnTypes": [],
|
|
99
|
-
"bytecode": "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",
|
|
99
|
+
"bytecode": "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",
|
|
100
100
|
"verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f"
|
|
101
101
|
}
|
|
102
102
|
]
|
|
@@ -7,14 +7,19 @@ export * from './ecdsa_account_contract.js';
|
|
|
7
7
|
export * from './schnorr_account_contract.js';
|
|
8
8
|
export * from './single_key_account_contract.js';
|
|
9
9
|
|
|
10
|
+
// docs:start:account-contract-interface
|
|
10
11
|
/**
|
|
11
|
-
* An account contract instance. Knows its ABI, deployment arguments, and to create
|
|
12
|
-
* requests out of function calls through an entrypoint.
|
|
12
|
+
* An account contract instance. Knows its ABI, deployment arguments, and to create
|
|
13
|
+
* transaction execution requests out of function calls through an entrypoint.
|
|
13
14
|
*/
|
|
14
15
|
export interface AccountContract {
|
|
15
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Returns the ABI of this account contract.
|
|
18
|
+
*/
|
|
16
19
|
getContractAbi(): ContractAbi;
|
|
17
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Returns the deployment arguments for this instance.
|
|
22
|
+
*/
|
|
18
23
|
getDeploymentArgs(): Promise<any[]>;
|
|
19
24
|
/**
|
|
20
25
|
* Creates an entrypoint for creating transaction execution requests for this account contract.
|
|
@@ -23,3 +28,4 @@ export interface AccountContract {
|
|
|
23
28
|
*/
|
|
24
29
|
getEntrypoint(address: CompleteAddress, nodeInfo: NodeInfo): Promise<Entrypoint>;
|
|
25
30
|
}
|
|
31
|
+
// docs:end:account-contract-interface
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { CircuitsWasm, Fr, GeneratorIndex } from '@aztec/circuits.js';
|
|
2
2
|
import { pedersenPlookupCompressWithHashIndex } from '@aztec/circuits.js/barretenberg';
|
|
3
3
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
4
|
-
import { IWasmModule } from '@aztec/foundation/wasm';
|
|
5
4
|
import { FunctionCall, PackedArguments, emptyFunctionCall } from '@aztec/types';
|
|
6
5
|
|
|
6
|
+
import partition from 'lodash.partition';
|
|
7
|
+
|
|
7
8
|
// These must match the values defined in yarn-project/noir-libs/noir-aztec/src/entrypoint.nr
|
|
8
|
-
const ACCOUNT_MAX_PRIVATE_CALLS = 2;
|
|
9
|
-
const ACCOUNT_MAX_PUBLIC_CALLS = 2;
|
|
9
|
+
export const ACCOUNT_MAX_PRIVATE_CALLS = 2;
|
|
10
|
+
export const ACCOUNT_MAX_PUBLIC_CALLS = 2;
|
|
10
11
|
|
|
11
12
|
/** Encoded payload for the account contract entrypoint */
|
|
12
13
|
export type EntrypointPayload = {
|
|
@@ -24,10 +25,7 @@ export type EntrypointPayload = {
|
|
|
24
25
|
};
|
|
25
26
|
|
|
26
27
|
/** Assembles an entrypoint payload from a set of private and public function calls */
|
|
27
|
-
export async function buildPayload(
|
|
28
|
-
privateCalls: FunctionCall[],
|
|
29
|
-
publicCalls: FunctionCall[],
|
|
30
|
-
): Promise<{
|
|
28
|
+
export async function buildPayload(calls: FunctionCall[]): Promise<{
|
|
31
29
|
/** The payload for the entrypoint function */
|
|
32
30
|
payload: EntrypointPayload;
|
|
33
31
|
/** The packed arguments of functions called */
|
|
@@ -35,7 +33,9 @@ export async function buildPayload(
|
|
|
35
33
|
}> {
|
|
36
34
|
const nonce = Fr.random();
|
|
37
35
|
|
|
38
|
-
const
|
|
36
|
+
const [privateCalls, publicCalls] = partition(calls, call => call.functionData.isPrivate);
|
|
37
|
+
|
|
38
|
+
const paddedCalls = [
|
|
39
39
|
...padArrayEnd(privateCalls, emptyFunctionCall(), ACCOUNT_MAX_PRIVATE_CALLS),
|
|
40
40
|
...padArrayEnd(publicCalls, emptyFunctionCall(), ACCOUNT_MAX_PUBLIC_CALLS),
|
|
41
41
|
];
|
|
@@ -43,7 +43,7 @@ export async function buildPayload(
|
|
|
43
43
|
const packedArguments = [];
|
|
44
44
|
const wasm = await CircuitsWasm.get();
|
|
45
45
|
|
|
46
|
-
for (const call of
|
|
46
|
+
for (const call of paddedCalls) {
|
|
47
47
|
packedArguments.push(await PackedArguments.fromArgs(call.args, wasm));
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -52,9 +52,9 @@ export async function buildPayload(
|
|
|
52
52
|
// eslint-disable-next-line camelcase
|
|
53
53
|
flattened_args_hashes: packedArguments.map(args => args.hash),
|
|
54
54
|
// eslint-disable-next-line camelcase
|
|
55
|
-
flattened_selectors:
|
|
55
|
+
flattened_selectors: paddedCalls.map(call => call.functionData.selector.toField()),
|
|
56
56
|
// eslint-disable-next-line camelcase
|
|
57
|
-
flattened_targets:
|
|
57
|
+
flattened_targets: paddedCalls.map(call => call.to.toField()),
|
|
58
58
|
nonce,
|
|
59
59
|
},
|
|
60
60
|
packedArguments,
|
|
@@ -62,9 +62,9 @@ export async function buildPayload(
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/** Compresses an entrypoint payload to a 32-byte buffer (useful for signing) */
|
|
65
|
-
export function hashPayload(payload: EntrypointPayload
|
|
65
|
+
export async function hashPayload(payload: EntrypointPayload) {
|
|
66
66
|
return pedersenPlookupCompressWithHashIndex(
|
|
67
|
-
|
|
67
|
+
await CircuitsWasm.get(),
|
|
68
68
|
flattenPayload(payload).map(fr => fr.toBuffer()),
|
|
69
69
|
GeneratorIndex.SIGNATURE_PAYLOAD,
|
|
70
70
|
);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AztecAddress, FunctionData, TxContext } from '@aztec/circuits.js';
|
|
2
|
+
import { FunctionAbi, encodeArguments } from '@aztec/foundation/abi';
|
|
3
|
+
import { NodeInfo, PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Utility for building a TxExecutionRequest in the context of an Entrypoint.
|
|
7
|
+
* @param origin - Address of the account contract sending this transaction.
|
|
8
|
+
* @param entrypointMethod - Initial method called in the account contract.
|
|
9
|
+
* @param args - Arguments used when calling this initial method.
|
|
10
|
+
* @param callsPackedArguments - Packed arguments of nested calls (if any).
|
|
11
|
+
* @param nodeInfo - Node info with chain id and version.
|
|
12
|
+
* @returns A TxExecutionRequest ready to be simulated, proven, and sent.
|
|
13
|
+
*/
|
|
14
|
+
export async function buildTxExecutionRequest(
|
|
15
|
+
origin: AztecAddress,
|
|
16
|
+
entrypointMethod: FunctionAbi,
|
|
17
|
+
args: any[],
|
|
18
|
+
callsPackedArguments: PackedArguments[],
|
|
19
|
+
nodeInfo: NodeInfo,
|
|
20
|
+
): Promise<TxExecutionRequest> {
|
|
21
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(entrypointMethod, args));
|
|
22
|
+
const { chainId, version } = nodeInfo;
|
|
23
|
+
|
|
24
|
+
return TxExecutionRequest.from({
|
|
25
|
+
argsHash: packedArgs.hash,
|
|
26
|
+
origin,
|
|
27
|
+
functionData: FunctionData.fromAbi(entrypointMethod),
|
|
28
|
+
txContext: TxContext.empty(chainId, version),
|
|
29
|
+
packedArguments: [...callsPackedArguments, packedArgs],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -2,6 +2,8 @@ import { AztecAddress } from '@aztec/circuits.js';
|
|
|
2
2
|
import { FunctionCall, TxExecutionRequest } from '@aztec/types';
|
|
3
3
|
|
|
4
4
|
export * from './entrypoint_collection.js';
|
|
5
|
+
export * from './entrypoint_payload.js';
|
|
6
|
+
export * from './entrypoint_utils.js';
|
|
5
7
|
export * from './single_key_account_entrypoint.js';
|
|
6
8
|
export * from './stored_key_account_entrypoint.js';
|
|
7
9
|
|
|
@@ -11,11 +13,13 @@ export type CreateTxRequestOpts = {
|
|
|
11
13
|
origin?: AztecAddress;
|
|
12
14
|
};
|
|
13
15
|
|
|
16
|
+
// docs:start:entrypoint-interface
|
|
14
17
|
/**
|
|
15
18
|
* Represents a transaction entrypoint in an account contract.
|
|
16
19
|
* Knows how to assemble a transaction execution request given a set of function calls.
|
|
17
20
|
*/
|
|
18
21
|
export interface Entrypoint {
|
|
22
|
+
// docs:start:entrypoint-interface
|
|
19
23
|
/**
|
|
20
24
|
* Generates an authenticated request out of set of intents
|
|
21
25
|
* @param executions - The execution intents to be run.
|
|
@@ -23,4 +27,6 @@ export interface Entrypoint {
|
|
|
23
27
|
* @returns The authenticated transaction execution request.
|
|
24
28
|
*/
|
|
25
29
|
createTxExecutionRequest(executions: FunctionCall[], opts?: CreateTxRequestOpts): Promise<TxExecutionRequest>;
|
|
30
|
+
// docs:end:entrypoint-interface
|
|
26
31
|
}
|
|
32
|
+
// docs:end:entrypoint-interface
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { AztecAddress,
|
|
1
|
+
import { AztecAddress, FunctionData, PartialAddress, PrivateKey, TxContext } from '@aztec/circuits.js';
|
|
2
2
|
import { Signer } from '@aztec/circuits.js/barretenberg';
|
|
3
3
|
import { ContractAbi, encodeArguments } from '@aztec/foundation/abi';
|
|
4
4
|
import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
5
5
|
|
|
6
|
-
import partition from 'lodash.partition';
|
|
7
|
-
|
|
8
6
|
import SchnorrSingleKeyAccountContractAbi from '../../abis/schnorr_single_key_account_contract.json' assert { type: 'json' };
|
|
9
7
|
import { generatePublicKey } from '../../index.js';
|
|
10
8
|
import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js';
|
|
@@ -34,16 +32,14 @@ export class SingleKeyAccountEntrypoint implements Entrypoint {
|
|
|
34
32
|
throw new Error(`Sender ${opts.origin.toString()} does not match account address ${this.address.toString()}`);
|
|
35
33
|
}
|
|
36
34
|
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const { payload, packedArguments: callsPackedArguments } = await buildPayload(privateCalls, publicCalls);
|
|
40
|
-
const message = hashPayload(payload, wasm);
|
|
35
|
+
const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions);
|
|
36
|
+
const message = await hashPayload(payload);
|
|
41
37
|
|
|
42
38
|
const signature = this.signer.constructSignature(message, this.privateKey).toBuffer();
|
|
43
39
|
const publicKey = await generatePublicKey(this.privateKey);
|
|
44
40
|
const args = [payload, publicKey.toBuffer(), signature, this.partialAddress];
|
|
45
41
|
const abi = this.getEntrypointAbi();
|
|
46
|
-
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args)
|
|
42
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args));
|
|
47
43
|
const txRequest = TxExecutionRequest.from({
|
|
48
44
|
argsHash: packedArgs.hash,
|
|
49
45
|
origin: this.address,
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { AztecAddress,
|
|
1
|
+
import { AztecAddress, FunctionData, PrivateKey, TxContext } from '@aztec/circuits.js';
|
|
2
2
|
import { Signer } from '@aztec/circuits.js/barretenberg';
|
|
3
3
|
import { ContractAbi, encodeArguments } from '@aztec/foundation/abi';
|
|
4
4
|
import { DebugLogger, createDebugLogger } from '@aztec/foundation/log';
|
|
5
5
|
import { FunctionCall, PackedArguments, TxExecutionRequest } from '@aztec/types';
|
|
6
6
|
|
|
7
|
-
import partition from 'lodash.partition';
|
|
8
|
-
|
|
9
7
|
import EcdsaAccountContractAbi from '../../abis/ecdsa_account_contract.json' assert { type: 'json' };
|
|
10
8
|
import { DEFAULT_CHAIN_ID, DEFAULT_VERSION } from '../../utils/defaults.js';
|
|
11
9
|
import { buildPayload, hashPayload } from './entrypoint_payload.js';
|
|
@@ -36,16 +34,14 @@ export class StoredKeyAccountEntrypoint implements Entrypoint {
|
|
|
36
34
|
throw new Error(`Sender ${opts.origin.toString()} does not match account address ${this.address.toString()}`);
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const { payload, packedArguments: callsPackedArguments } = await buildPayload(privateCalls, publicCalls);
|
|
42
|
-
const message = hashPayload(payload, wasm);
|
|
37
|
+
const { payload, packedArguments: callsPackedArguments } = await buildPayload(executions);
|
|
38
|
+
const message = await hashPayload(payload);
|
|
43
39
|
const signature = this.signer.constructSignature(message, this.privateKey).toBuffer();
|
|
44
40
|
this.log(`Signed challenge ${message.toString('hex')} as ${signature.toString('hex')}`);
|
|
45
41
|
|
|
46
42
|
const args = [payload, signature];
|
|
47
43
|
const abi = this.getEntrypointAbi();
|
|
48
|
-
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args)
|
|
44
|
+
const packedArgs = await PackedArguments.fromArgs(encodeArguments(abi, args));
|
|
49
45
|
const txRequest = TxExecutionRequest.from({
|
|
50
46
|
argsHash: packedArgs.hash,
|
|
51
47
|
origin: this.address,
|
|
@@ -3,8 +3,7 @@ import { createJsonRpcClient, defaultFetch } from '@aztec/foundation/json-rpc/cl
|
|
|
3
3
|
import {
|
|
4
4
|
AztecRPC,
|
|
5
5
|
ContractData,
|
|
6
|
-
|
|
7
|
-
ContractDeploymentTx,
|
|
6
|
+
ExtendedContractData,
|
|
8
7
|
L2BlockL2Logs,
|
|
9
8
|
Tx,
|
|
10
9
|
TxExecutionRequest,
|
|
@@ -22,14 +21,14 @@ export const createAztecRpcClient = (url: string, fetch = defaultFetch): AztecRP
|
|
|
22
21
|
AztecAddress,
|
|
23
22
|
TxExecutionRequest,
|
|
24
23
|
ContractData,
|
|
25
|
-
|
|
24
|
+
ExtendedContractData,
|
|
26
25
|
TxHash,
|
|
27
26
|
EthAddress,
|
|
28
27
|
Point,
|
|
29
28
|
PrivateKey,
|
|
30
29
|
Fr,
|
|
31
30
|
},
|
|
32
|
-
{ Tx,
|
|
31
|
+
{ Tx, TxReceipt, L2BlockL2Logs },
|
|
33
32
|
false,
|
|
34
33
|
fetch,
|
|
35
34
|
);
|
|
@@ -2,8 +2,8 @@ import { AztecAddress, CircuitsWasm, Fr, PartialAddress, PrivateKey, TxContext }
|
|
|
2
2
|
import {
|
|
3
3
|
AztecRPC,
|
|
4
4
|
ContractData,
|
|
5
|
-
ContractDataAndBytecode,
|
|
6
5
|
DeployedContract,
|
|
6
|
+
ExtendedContractData,
|
|
7
7
|
FunctionCall,
|
|
8
8
|
L2BlockL2Logs,
|
|
9
9
|
NodeInfo,
|
|
@@ -55,8 +55,8 @@ export abstract class BaseWallet implements Wallet {
|
|
|
55
55
|
getContracts(): Promise<AztecAddress[]> {
|
|
56
56
|
return this.rpc.getContracts();
|
|
57
57
|
}
|
|
58
|
-
simulateTx(txRequest: TxExecutionRequest): Promise<Tx> {
|
|
59
|
-
return this.rpc.simulateTx(txRequest);
|
|
58
|
+
simulateTx(txRequest: TxExecutionRequest, simulatePublic: boolean): Promise<Tx> {
|
|
59
|
+
return this.rpc.simulateTx(txRequest, simulatePublic);
|
|
60
60
|
}
|
|
61
61
|
sendTx(tx: Tx): Promise<TxHash> {
|
|
62
62
|
return this.rpc.sendTx(tx);
|
|
@@ -70,8 +70,8 @@ export abstract class BaseWallet implements Wallet {
|
|
|
70
70
|
viewTx(functionName: string, args: any[], to: AztecAddress, from?: AztecAddress | undefined): Promise<any> {
|
|
71
71
|
return this.rpc.viewTx(functionName, args, to, from);
|
|
72
72
|
}
|
|
73
|
-
|
|
74
|
-
return this.rpc.
|
|
73
|
+
getExtendedContractData(contractAddress: AztecAddress): Promise<ExtendedContractData | undefined> {
|
|
74
|
+
return this.rpc.getExtendedContractData(contractAddress);
|
|
75
75
|
}
|
|
76
76
|
getContractData(contractAddress: AztecAddress): Promise<ContractData | undefined> {
|
|
77
77
|
return this.rpc.getContractData(contractAddress);
|
|
@@ -12,6 +12,10 @@ export interface SendMethodOptions {
|
|
|
12
12
|
* Sender's address initiating the transaction.
|
|
13
13
|
*/
|
|
14
14
|
origin?: AztecAddress;
|
|
15
|
+
/**
|
|
16
|
+
* Wether to skip the simulation of the public part of the transaction.
|
|
17
|
+
*/
|
|
18
|
+
skipPublicSimulation?: boolean;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
/**
|
|
@@ -38,7 +42,7 @@ export abstract class BaseContractInteraction {
|
|
|
38
42
|
*/
|
|
39
43
|
public async simulate(options: SendMethodOptions = {}): Promise<Tx> {
|
|
40
44
|
const txRequest = this.txRequest ?? (await this.create(options));
|
|
41
|
-
this.tx = await this.rpc.simulateTx(txRequest);
|
|
45
|
+
this.tx = await this.rpc.simulateTx(txRequest, !options.skipPublicSimulation);
|
|
42
46
|
return this.tx;
|
|
43
47
|
}
|
|
44
48
|
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { AztecAddress, CompleteAddress, EthAddress } from '@aztec/circuits.js';
|
|
2
2
|
import { ABIParameterVisibility, ContractAbi, FunctionType } from '@aztec/foundation/abi';
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
DeployedContract,
|
|
5
|
+
ExtendedContractData,
|
|
5
6
|
NodeInfo,
|
|
6
7
|
Tx,
|
|
7
8
|
TxExecutionRequest,
|
|
8
9
|
TxHash,
|
|
9
10
|
TxReceipt,
|
|
11
|
+
randomContractAbi,
|
|
10
12
|
randomDeployedContract,
|
|
11
13
|
} from '@aztec/types';
|
|
12
14
|
|
|
@@ -17,8 +19,8 @@ import { Contract } from './contract.js';
|
|
|
17
19
|
|
|
18
20
|
describe('Contract Class', () => {
|
|
19
21
|
let wallet: MockProxy<Wallet>;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
let resolvedExtendedContractData: ExtendedContractData;
|
|
23
|
+
let contractAddress: AztecAddress;
|
|
22
24
|
let account: CompleteAddress;
|
|
23
25
|
|
|
24
26
|
const mockTx = { type: 'Tx' } as any as Tx;
|
|
@@ -26,7 +28,7 @@ describe('Contract Class', () => {
|
|
|
26
28
|
const mockTxHash = { type: 'TxHash' } as any as TxHash;
|
|
27
29
|
const mockTxReceipt = { type: 'TxReceipt' } as any as TxReceipt;
|
|
28
30
|
const mockViewResultValue = 1;
|
|
29
|
-
const mockNodeInfo: NodeInfo = { version: 1, chainId: 2, rollupAddress: EthAddress.random() };
|
|
31
|
+
const mockNodeInfo: NodeInfo = { version: 1, chainId: 2, rollupAddress: EthAddress.random(), client: '' };
|
|
30
32
|
|
|
31
33
|
const defaultAbi: ContractAbi = {
|
|
32
34
|
name: 'FooContract',
|
|
@@ -88,10 +90,13 @@ describe('Contract Class', () => {
|
|
|
88
90
|
};
|
|
89
91
|
|
|
90
92
|
beforeEach(async () => {
|
|
93
|
+
resolvedExtendedContractData = ExtendedContractData.random();
|
|
94
|
+
contractAddress = resolvedExtendedContractData.contractData.contractAddress;
|
|
91
95
|
account = await CompleteAddress.random();
|
|
96
|
+
|
|
92
97
|
wallet = mock<Wallet>();
|
|
93
98
|
wallet.createTxExecutionRequest.mockResolvedValue(mockTxRequest);
|
|
94
|
-
wallet.
|
|
99
|
+
wallet.getExtendedContractData.mockResolvedValue(resolvedExtendedContractData);
|
|
95
100
|
wallet.sendTx.mockResolvedValue(mockTxHash);
|
|
96
101
|
wallet.viewTx.mockResolvedValue(mockViewResultValue);
|
|
97
102
|
wallet.getTxReceipt.mockResolvedValue(mockTxReceipt);
|
|
@@ -139,8 +144,12 @@ describe('Contract Class', () => {
|
|
|
139
144
|
});
|
|
140
145
|
|
|
141
146
|
it('should add contract and dependencies to aztec rpc', async () => {
|
|
142
|
-
const entry =
|
|
143
|
-
|
|
147
|
+
const entry: DeployedContract = {
|
|
148
|
+
abi: randomContractAbi(),
|
|
149
|
+
completeAddress: resolvedExtendedContractData.getCompleteAddress(),
|
|
150
|
+
portalContract: EthAddress.random(),
|
|
151
|
+
};
|
|
152
|
+
const contract = await Contract.at(entry.completeAddress.address, entry.abi, wallet);
|
|
144
153
|
|
|
145
154
|
{
|
|
146
155
|
await contract.attach(entry.portalContract);
|
|
@@ -150,7 +159,7 @@ describe('Contract Class', () => {
|
|
|
150
159
|
}
|
|
151
160
|
|
|
152
161
|
{
|
|
153
|
-
const dependencies = [randomDeployedContract(), randomDeployedContract()];
|
|
162
|
+
const dependencies = [await randomDeployedContract(), await randomDeployedContract()];
|
|
154
163
|
await contract.attach(entry.portalContract, dependencies);
|
|
155
164
|
expect(wallet.addContracts).toHaveBeenCalledTimes(1);
|
|
156
165
|
expect(wallet.addContracts).toHaveBeenCalledWith([entry, ...dependencies]);
|
package/src/contract/contract.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { ContractAbi } from '@aztec/foundation/abi';
|
|
|
2
2
|
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
3
|
|
|
4
4
|
import { Wallet } from '../aztec_rpc_client/wallet.js';
|
|
5
|
-
import { isContractDeployed } from '../index.js';
|
|
6
5
|
import { ContractBase } from './contract_base.js';
|
|
7
6
|
|
|
8
7
|
/**
|
|
@@ -21,9 +20,10 @@ export class Contract extends ContractBase {
|
|
|
21
20
|
* @returns A promise that resolves to a new Contract instance.
|
|
22
21
|
*/
|
|
23
22
|
public static async at(address: AztecAddress, abi: ContractAbi, wallet: Wallet): Promise<Contract> {
|
|
24
|
-
|
|
23
|
+
const extendedContractData = await wallet.getExtendedContractData(address);
|
|
24
|
+
if (extendedContractData === undefined) {
|
|
25
25
|
throw new Error('Contract ' + address.toString() + ' is not deployed');
|
|
26
26
|
}
|
|
27
|
-
return new Contract(
|
|
27
|
+
return new Contract(extendedContractData.getCompleteAddress(), abi, wallet);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ContractAbi, FunctionAbi, FunctionSelector } from '@aztec/foundation/abi';
|
|
2
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
3
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
|
-
import { DeployedContract } from '@aztec/types';
|
|
3
|
+
import { CompleteAddress, DeployedContract } from '@aztec/types';
|
|
5
4
|
|
|
6
5
|
import { Wallet } from '../aztec_rpc_client/wallet.js';
|
|
7
6
|
import { ContractFunctionInteraction } from './contract_function_interaction.js';
|
|
@@ -28,9 +27,9 @@ export abstract class ContractBase {
|
|
|
28
27
|
|
|
29
28
|
protected constructor(
|
|
30
29
|
/**
|
|
31
|
-
* The deployed contract's address.
|
|
30
|
+
* The deployed contract's complete address.
|
|
32
31
|
*/
|
|
33
|
-
public readonly
|
|
32
|
+
public readonly completeAddress: CompleteAddress,
|
|
34
33
|
/**
|
|
35
34
|
* The Application Binary Interface for the contract.
|
|
36
35
|
*/
|
|
@@ -42,7 +41,7 @@ export abstract class ContractBase {
|
|
|
42
41
|
) {
|
|
43
42
|
abi.functions.forEach((f: FunctionAbi) => {
|
|
44
43
|
const interactionFunction = (...args: any[]) => {
|
|
45
|
-
return new ContractFunctionInteraction(this.wallet, this.address!, f, args);
|
|
44
|
+
return new ContractFunctionInteraction(this.wallet, this.completeAddress.address!, f, args);
|
|
46
45
|
};
|
|
47
46
|
|
|
48
47
|
this.methods[f.name] = Object.assign(interactionFunction, {
|
|
@@ -57,6 +56,10 @@ export abstract class ContractBase {
|
|
|
57
56
|
});
|
|
58
57
|
}
|
|
59
58
|
|
|
59
|
+
get address() {
|
|
60
|
+
return this.completeAddress.address;
|
|
61
|
+
}
|
|
62
|
+
|
|
60
63
|
/**
|
|
61
64
|
* Attach the current contract instance to a portal contract and optionally add its dependencies.
|
|
62
65
|
* The function will return a promise that resolves when all contracts have been added to the AztecRPCClient.
|
|
@@ -69,7 +72,7 @@ export abstract class ContractBase {
|
|
|
69
72
|
public attach(portalContract: EthAddress, dependencies: DeployedContract[] = []) {
|
|
70
73
|
const deployedContract: DeployedContract = {
|
|
71
74
|
abi: this.abi,
|
|
72
|
-
|
|
75
|
+
completeAddress: this.completeAddress,
|
|
73
76
|
portalContract,
|
|
74
77
|
};
|
|
75
78
|
return this.wallet.addContracts([deployedContract, ...dependencies]);
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CompleteAddress,
|
|
2
3
|
ContractDeploymentData,
|
|
3
4
|
FunctionData,
|
|
4
|
-
PartialAddress,
|
|
5
5
|
TxContext,
|
|
6
6
|
getContractDeploymentInfo,
|
|
7
7
|
} from '@aztec/circuits.js';
|
|
8
8
|
import { ContractAbi, FunctionAbi, encodeArguments } from '@aztec/foundation/abi';
|
|
9
|
-
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
10
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
11
10
|
import { Fr } from '@aztec/foundation/fields';
|
|
12
11
|
import { AztecRPC, PackedArguments, PublicKey, Tx, TxExecutionRequest } from '@aztec/types';
|
|
@@ -35,11 +34,8 @@ export interface DeployOptions extends SendMethodOptions {
|
|
|
35
34
|
* Extends the ContractFunctionInteraction class.
|
|
36
35
|
*/
|
|
37
36
|
export class DeployMethod<TContract extends ContractBase = Contract> extends BaseContractInteraction {
|
|
38
|
-
/** The
|
|
39
|
-
public
|
|
40
|
-
|
|
41
|
-
/** The complete contract address. */
|
|
42
|
-
public completeContractAddress?: AztecAddress = undefined;
|
|
37
|
+
/** The complete address of the contract. */
|
|
38
|
+
public completeAddress?: CompleteAddress = undefined;
|
|
43
39
|
|
|
44
40
|
/** Constructor function to call. */
|
|
45
41
|
private constructorAbi: FunctionAbi;
|
|
@@ -96,11 +92,10 @@ export class DeployMethod<TContract extends ContractBase = Contract> extends Bas
|
|
|
96
92
|
});
|
|
97
93
|
|
|
98
94
|
this.txRequest = txRequest;
|
|
99
|
-
this.
|
|
100
|
-
this.completeContractAddress = completeAddress.address;
|
|
95
|
+
this.completeAddress = completeAddress;
|
|
101
96
|
|
|
102
97
|
// TODO: Should we add the contracts to the DB here, or once the tx has been sent or mined?
|
|
103
|
-
await this.rpc.addContracts([{ abi: this.abi,
|
|
98
|
+
await this.rpc.addContracts([{ abi: this.abi, completeAddress, portalContract }]);
|
|
104
99
|
|
|
105
100
|
return this.txRequest;
|
|
106
101
|
}
|
package/src/index.ts
CHANGED
|
@@ -10,8 +10,7 @@ export { AztecAddress, EthAddress, Point, Fr } from '@aztec/circuits.js';
|
|
|
10
10
|
export {
|
|
11
11
|
AztecRPC,
|
|
12
12
|
ContractData,
|
|
13
|
-
|
|
14
|
-
ContractDataAndBytecode,
|
|
13
|
+
ExtendedContractData as ExtendedContractData,
|
|
15
14
|
DeployedContract,
|
|
16
15
|
FunctionCall,
|
|
17
16
|
L2BlockL2Logs,
|
|
@@ -19,6 +18,7 @@ export {
|
|
|
19
18
|
PackedArguments,
|
|
20
19
|
PublicKey,
|
|
21
20
|
PrivateKey,
|
|
21
|
+
SyncStatus,
|
|
22
22
|
Tx,
|
|
23
23
|
TxExecutionRequest,
|
|
24
24
|
TxHash,
|