@aztec/entrypoints 0.0.1-commit.c31f2472 → 0.0.1-commit.c52d6e7
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/dest/account_entrypoint.d.ts +2 -2
- package/dest/account_entrypoint.d.ts.map +1 -1
- package/dest/account_entrypoint.js +20 -8
- package/dest/default_entrypoint.d.ts +2 -2
- package/dest/default_entrypoint.d.ts.map +1 -1
- package/dest/default_entrypoint.js +1 -1
- package/dest/default_multi_call_entrypoint.d.ts +2 -2
- package/dest/default_multi_call_entrypoint.d.ts.map +1 -1
- package/dest/default_multi_call_entrypoint.js +14 -6
- package/dest/encoding.d.ts +3 -3
- package/dest/encoding.d.ts.map +1 -1
- package/dest/encoding.js +7 -7
- package/dest/interfaces.d.ts +6 -11
- package/dest/interfaces.d.ts.map +1 -1
- package/package.json +7 -6
- package/src/account_entrypoint.ts +30 -16
- package/src/default_entrypoint.ts +1 -1
- package/src/default_multi_call_entrypoint.ts +20 -15
- package/src/encoding.ts +5 -5
- package/src/interfaces.ts +2 -1
|
@@ -53,7 +53,7 @@ export declare class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
53
53
|
private auth;
|
|
54
54
|
constructor(address: AztecAddress, auth: AuthWitnessProvider);
|
|
55
55
|
createTxExecutionRequest(exec: ExecutionPayload, gasSettings: GasSettings, chainInfo: ChainInfo, options: DefaultAccountEntrypointOptions): Promise<TxExecutionRequest>;
|
|
56
|
-
wrapExecutionPayload(exec: ExecutionPayload, options: DefaultAccountEntrypointOptions): Promise<ExecutionPayload>;
|
|
56
|
+
wrapExecutionPayload(exec: ExecutionPayload, chainInfo: ChainInfo, options: DefaultAccountEntrypointOptions): Promise<ExecutionPayload>;
|
|
57
57
|
private getEntrypointAbi;
|
|
58
58
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF9lbnRyeXBvaW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWNjb3VudF9lbnRyeXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVNwRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakcsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0Y7O0dBRUc7QUFDSCxvQkFBWSw4QkFBOEI7SUFDeEM7O09BRUc7SUFDSCxRQUFRLElBQUk7SUFDWjs7Ozs7T0FLRztJQUNILHFCQUFxQixJQUFJO0lBQ3pCOzs7Ozs7O09BT0c7SUFDSCxvQkFBb0IsSUFBSTtDQUN6QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxNQUFNLCtCQUErQixHQUFHO0lBQzVDLGdEQUFnRDtJQUNoRCxXQUFXLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDdEI7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNiLDRHQUE0RztJQUM1Ryx1QkFBdUIsRUFBRSw4QkFBOEIsQ0FBQztDQUN6RCxDQUFDO0FBRUY7OztHQUdHO0FBQ0gscUJBQWEsd0JBQXlCLFlBQVcsbUJBQW1COztJQUVoRSxPQUFPLENBQUMsT0FBTztJQUNmLE9BQU8sQ0FBQyxJQUFJO0lBRmQsWUFDVSxPQUFPLEVBQUUsWUFBWSxFQUNyQixJQUFJLEVBQUUsbUJBQW1CLEVBQy9CO0lBRUUsd0JBQXdCLENBQzVCLElBQUksRUFBRSxnQkFBZ0IsRUFDdEIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsT0FBTyxFQUFFLCtCQUErQixHQUN2QyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FnQjdCO0lBRUssb0JBQW9CLENBQ3hCLElBQUksRUFBRSxnQkFBZ0IsRUFDdEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsT0FBTyxFQUFFLCtCQUErQixHQUN2QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F1QjNCO0lBdUNELE9BQU8sQ0FBQyxnQkFBZ0I7Q0EwRHpCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_entrypoint.d.ts","sourceRoot":"","sources":["../src/account_entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"account_entrypoint.d.ts","sourceRoot":"","sources":["../src/account_entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AASpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAA2B,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3F;;GAEG;AACH,oBAAY,8BAA8B;IACxC;;OAEG;IACH,QAAQ,IAAI;IACZ;;;;;OAKG;IACH,qBAAqB,IAAI;IACzB;;;;;;;OAOG;IACH,oBAAoB,IAAI;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC;IACb,4GAA4G;IAC5G,uBAAuB,EAAE,8BAA8B,CAAC;CACzD,CAAC;AAEF;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,mBAAmB;;IAEhE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IAFd,YACU,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,mBAAmB,EAC/B;IAEE,wBAAwB,CAC5B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;IAEK,oBAAoB,CACxB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;IAuCD,OAAO,CAAC,gBAAgB;CA0DzB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import { FunctionCall, FunctionSelector, encodeArguments } from '@aztec/stdlib/abi';
|
|
2
|
+
import { FunctionCall, FunctionSelector, encodeArguments, getFunctionReturnType } from '@aztec/stdlib/abi';
|
|
3
|
+
import { computeOuterAuthWitHash } from '@aztec/stdlib/auth-witness';
|
|
3
4
|
import { ExecutionPayload, HashedValues, TxContext, TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
4
5
|
import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
5
6
|
/**
|
|
@@ -36,7 +37,7 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
36
37
|
}
|
|
37
38
|
async createTxExecutionRequest(exec, gasSettings, chainInfo, options) {
|
|
38
39
|
const { authWitnesses, capsules, extraHashedArgs } = exec;
|
|
39
|
-
const callData = await this.#buildEntrypointCallData(exec, options);
|
|
40
|
+
const callData = await this.#buildEntrypointCallData(exec, chainInfo, options);
|
|
40
41
|
const entrypointHashedArgs = await HashedValues.fromArgs(callData.encodedArgs);
|
|
41
42
|
const txRequest = TxExecutionRequest.from({
|
|
42
43
|
firstCallArgsHash: entrypointHashedArgs.hash,
|
|
@@ -57,11 +58,20 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
57
58
|
});
|
|
58
59
|
return txRequest;
|
|
59
60
|
}
|
|
60
|
-
async wrapExecutionPayload(exec, options) {
|
|
61
|
+
async wrapExecutionPayload(exec, chainInfo, options) {
|
|
61
62
|
const { authWitnesses, capsules, extraHashedArgs, feePayer } = exec;
|
|
62
|
-
const callData = await this.#buildEntrypointCallData(exec, options);
|
|
63
|
+
const callData = await this.#buildEntrypointCallData(exec, chainInfo, options);
|
|
63
64
|
// Build the entrypoint function call
|
|
64
|
-
const entrypointCall =
|
|
65
|
+
const entrypointCall = FunctionCall.from({
|
|
66
|
+
name: callData.abi.name,
|
|
67
|
+
to: this.address,
|
|
68
|
+
selector: callData.functionSelector,
|
|
69
|
+
type: callData.abi.functionType,
|
|
70
|
+
hideMsgSender: false,
|
|
71
|
+
isStatic: callData.abi.isStatic,
|
|
72
|
+
args: callData.encodedArgs,
|
|
73
|
+
returnType: getFunctionReturnType(callData.abi)
|
|
74
|
+
});
|
|
65
75
|
return new ExecutionPayload([
|
|
66
76
|
entrypointCall
|
|
67
77
|
], [
|
|
@@ -76,9 +86,10 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
76
86
|
* Builds the shared data needed for both creating a tx execution request and wrapping an execution payload.
|
|
77
87
|
* This includes encoding calls, building entrypoint arguments, and creating the authwitness.
|
|
78
88
|
* @param exec - The execution payload containing calls to encode
|
|
89
|
+
* @param chainInfo - Chain information (chainId and version) for replay protection
|
|
79
90
|
* @param options - Account entrypoint options including tx nonce and fee payment method
|
|
80
91
|
* @returns Encoded call data, ABI, function selector, and auth witness
|
|
81
|
-
*/ async #buildEntrypointCallData(exec, options) {
|
|
92
|
+
*/ async #buildEntrypointCallData(exec, chainInfo, options) {
|
|
82
93
|
const { calls } = exec;
|
|
83
94
|
const { cancellable, txNonce, feePaymentMethodOptions } = options;
|
|
84
95
|
const encodedCalls = await EncodedAppEntrypointCalls.create(calls, txNonce);
|
|
@@ -90,7 +101,9 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
90
101
|
];
|
|
91
102
|
const encodedArgs = encodeArguments(abi, args);
|
|
92
103
|
const functionSelector = await FunctionSelector.fromNameAndParameters(abi.name, abi.parameters);
|
|
93
|
-
const
|
|
104
|
+
const payloadHash = await encodedCalls.hash();
|
|
105
|
+
const messageHash = await computeOuterAuthWitHash(this.address, chainInfo.chainId, chainInfo.version, payloadHash);
|
|
106
|
+
const payloadAuthWitness = await this.auth.createAuthWit(messageHash);
|
|
94
107
|
return {
|
|
95
108
|
encodedCalls,
|
|
96
109
|
abi,
|
|
@@ -207,7 +220,6 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
207
220
|
}
|
|
208
221
|
}
|
|
209
222
|
],
|
|
210
|
-
returnTypes: [],
|
|
211
223
|
errorTypes: {}
|
|
212
224
|
};
|
|
213
225
|
}
|
|
@@ -6,6 +6,6 @@ import type { ChainInfo, EntrypointInterface } from './interfaces.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare class DefaultEntrypoint implements EntrypointInterface {
|
|
8
8
|
createTxExecutionRequest(exec: ExecutionPayload, gasSettings: GasSettings, chainInfo: ChainInfo): Promise<TxExecutionRequest>;
|
|
9
|
-
wrapExecutionPayload(exec: ExecutionPayload, _options?: any): Promise<ExecutionPayload>;
|
|
9
|
+
wrapExecutionPayload(exec: ExecutionPayload, _chainInfo: ChainInfo, _options?: any): Promise<ExecutionPayload>;
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdF9lbnRyeXBvaW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdF9lbnRyeXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBMkIsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRyxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RTs7R0FFRztBQUNILHFCQUFhLGlCQUFrQixZQUFXLG1CQUFtQjtJQUNyRCx3QkFBd0IsQ0FDNUIsSUFBSSxFQUFFLGdCQUFnQixFQUN0QixXQUFXLEVBQUUsV0FBVyxFQUN4QixTQUFTLEVBQUUsU0FBUyxHQUNuQixPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0EyQjdCO0lBRUssb0JBQW9CLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQWdCbkg7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default_entrypoint.d.ts","sourceRoot":"","sources":["../src/default_entrypoint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAA2B,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;GAEG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IACrD,wBAAwB,CAC5B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;IAEK,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"default_entrypoint.d.ts","sourceRoot":"","sources":["../src/default_entrypoint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAA2B,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;GAEG;AACH,qBAAa,iBAAkB,YAAW,mBAAmB;IACrD,wBAAwB,CAC5B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC,CA2B7B;IAEK,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgBnH;CACF"}
|
|
@@ -23,7 +23,7 @@ import { ExecutionPayload, HashedValues, TxContext, TxExecutionRequest } from '@
|
|
|
23
23
|
...extraHashedArgs
|
|
24
24
|
], authWitnesses, capsules);
|
|
25
25
|
}
|
|
26
|
-
async wrapExecutionPayload(exec, _options) {
|
|
26
|
+
async wrapExecutionPayload(exec, _chainInfo, _options) {
|
|
27
27
|
if (exec.calls.length !== 1) {
|
|
28
28
|
throw new Error(`DefaultEntrypoint can only wrap a single call, got ${exec.calls.length}`);
|
|
29
29
|
}
|
|
@@ -10,7 +10,7 @@ export declare class DefaultMultiCallEntrypoint implements EntrypointInterface {
|
|
|
10
10
|
private address;
|
|
11
11
|
constructor(address?: AztecAddress);
|
|
12
12
|
createTxExecutionRequest(exec: ExecutionPayload, gasSettings: GasSettings, chainInfo: ChainInfo): Promise<TxExecutionRequest>;
|
|
13
|
-
wrapExecutionPayload(exec: ExecutionPayload, _options?: any): Promise<ExecutionPayload>;
|
|
13
|
+
wrapExecutionPayload(exec: ExecutionPayload, _chainInfo: ChainInfo, _options?: any): Promise<ExecutionPayload>;
|
|
14
14
|
private getEntrypointAbi;
|
|
15
15
|
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdF9tdWx0aV9jYWxsX2VudHJ5cG9pbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0X211bHRpX2NhbGxfZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQTJCLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakcsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEU7O0dBRUc7QUFDSCxxQkFBYSwwQkFBMkIsWUFBVyxtQkFBbUI7O0lBQ3hELE9BQU8sQ0FBQyxPQUFPO0lBQTNCLFlBQW9CLE9BQU8sR0FBRSxZQUFxRCxFQUFJO0lBRWhGLHdCQUF3QixDQUM1QixJQUFJLEVBQUUsZ0JBQWdCLEVBQ3RCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFNBQVMsRUFBRSxTQUFTLEdBQ25CLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWlCN0I7SUFFSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBcUJuSDtJQTBCRCxPQUFPLENBQUMsZ0JBQWdCO0NBd0R6QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default_multi_call_entrypoint.d.ts","sourceRoot":"","sources":["../src/default_multi_call_entrypoint.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"default_multi_call_entrypoint.d.ts","sourceRoot":"","sources":["../src/default_multi_call_entrypoint.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAA2B,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGjG,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;GAEG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;;IACxD,OAAO,CAAC,OAAO;IAA3B,YAAoB,OAAO,GAAE,YAAqD,EAAI;IAEhF,wBAAwB,CAC5B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;IAEK,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqBnH;IA0BD,OAAO,CAAC,gBAAgB;CAwDzB"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import {
|
|
3
|
-
import { FunctionCall, FunctionSelector, encodeArguments } from '@aztec/stdlib/abi';
|
|
2
|
+
import { STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS } from '@aztec/standard-contracts/multi-call-entrypoint/constants';
|
|
3
|
+
import { FunctionCall, FunctionSelector, encodeArguments, getFunctionReturnType } from '@aztec/stdlib/abi';
|
|
4
4
|
import { ExecutionPayload, HashedValues, TxContext, TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
5
5
|
import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
6
6
|
/**
|
|
7
7
|
* Implementation for an entrypoint interface that can execute multiple function calls in a single transaction
|
|
8
8
|
*/ export class DefaultMultiCallEntrypoint {
|
|
9
9
|
address;
|
|
10
|
-
constructor(address =
|
|
10
|
+
constructor(address = STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS){
|
|
11
11
|
this.address = address;
|
|
12
12
|
}
|
|
13
13
|
async createTxExecutionRequest(exec, gasSettings, chainInfo) {
|
|
@@ -30,10 +30,19 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
30
30
|
});
|
|
31
31
|
return Promise.resolve(txRequest);
|
|
32
32
|
}
|
|
33
|
-
async wrapExecutionPayload(exec, _options) {
|
|
33
|
+
async wrapExecutionPayload(exec, _chainInfo, _options) {
|
|
34
34
|
const { authWitnesses, capsules, extraHashedArgs } = exec;
|
|
35
35
|
const callData = await this.#buildEntrypointCallData(exec);
|
|
36
|
-
const entrypointCall =
|
|
36
|
+
const entrypointCall = FunctionCall.from({
|
|
37
|
+
name: callData.abi.name,
|
|
38
|
+
to: this.address,
|
|
39
|
+
selector: callData.functionSelector,
|
|
40
|
+
type: callData.abi.functionType,
|
|
41
|
+
hideMsgSender: false,
|
|
42
|
+
isStatic: callData.abi.isStatic,
|
|
43
|
+
args: callData.encodedArgs,
|
|
44
|
+
returnType: getFunctionReturnType(callData.abi)
|
|
45
|
+
});
|
|
37
46
|
return new ExecutionPayload([
|
|
38
47
|
entrypointCall
|
|
39
48
|
], authWitnesses, capsules, [
|
|
@@ -155,7 +164,6 @@ import { EncodedAppEntrypointCalls } from './encoding.js';
|
|
|
155
164
|
visibility: 'public'
|
|
156
165
|
}
|
|
157
166
|
],
|
|
158
|
-
returnTypes: [],
|
|
159
167
|
errorTypes: {}
|
|
160
168
|
};
|
|
161
169
|
}
|
package/dest/encoding.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
37
37
|
/** The hashed args for the call, ready to be injected in the execution cache */
|
|
38
38
|
hashedArguments: HashedValues[];
|
|
39
39
|
/** The index of the generator to use for hashing */
|
|
40
|
-
|
|
40
|
+
domainSeparator: number;
|
|
41
41
|
/**
|
|
42
42
|
* A nonce to inject into the payload of the transaction. When used with cancellable=true, this nonce will be
|
|
43
43
|
* used to compute a nullifier that allows cancelling this transaction by submitting a new one with the same nonce
|
|
@@ -50,7 +50,7 @@ export declare class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
50
50
|
/** The hashed args for the call, ready to be injected in the execution cache */
|
|
51
51
|
hashedArguments: HashedValues[],
|
|
52
52
|
/** The index of the generator to use for hashing */
|
|
53
|
-
|
|
53
|
+
domainSeparator: number,
|
|
54
54
|
/**
|
|
55
55
|
* A nonce to inject into the payload of the transaction. When used with cancellable=true, this nonce will be
|
|
56
56
|
* used to compute a nullifier that allows cancelling this transaction by submitting a new one with the same nonce
|
|
@@ -85,4 +85,4 @@ export declare class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
85
85
|
}
|
|
86
86
|
/** Encodes FunctionCalls for execution, following Noir's convention */
|
|
87
87
|
export declare function encode(calls: FunctionCall[]): Promise<EncodedCalls>;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmcuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNvZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJaEQsZUFBTyxNQUFNLGFBQWEsSUFBSSxDQUFDO0FBRS9CLG9EQUFvRDtBQUNwRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUc7SUFDaEMsbUNBQW1DO0lBQ25DLG9HQUFvRztJQUNwRyxTQUFTLEVBQUUsRUFBRSxDQUFDO0lBQ2QsdUNBQXVDO0lBQ3ZDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztJQUN0QixzQ0FBc0M7SUFDdEMsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQixnREFBZ0Q7SUFDaEQsU0FBUyxFQUFFLE9BQU8sQ0FBQztJQUNuQix3R0FBd0c7SUFDeEcsZUFBZSxFQUFFLE9BQU8sQ0FBQztJQUN6QiwyQ0FBMkM7SUFDM0MsU0FBUyxFQUFFLE9BQU8sQ0FBQztDQUNwQixDQUFDO0FBRUYsc0ZBQXNGO0FBQ3RGLE1BQU0sTUFBTSxZQUFZLEdBQUc7SUFDekIsZ0VBQWdFO0lBQ2hFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDNUMsZ0ZBQWdGO0lBQ2hGLGVBQWUsRUFBRSxZQUFZLEVBQUUsQ0FBQztDQUNqQyxDQUFDO0FBRUY7Ozs7S0FJSztBQUNMLHFCQUFhLHlCQUEwQixZQUFXLFlBQVk7SUFFMUQsZ0VBQWdFO0lBQ3pELG9CQUFvQixFQUFFLG1CQUFtQixFQUFFO0lBQ2xELGdGQUFnRjtJQUN6RSxlQUFlLEVBQUUsWUFBWSxFQUFFO0lBQ3RDLG9EQUFvRDtJQUM3QyxlQUFlLEVBQUUsTUFBTTtJQUM5Qjs7OztPQUlHO0lBRUksUUFBUSxFQUFFLEVBQUU7SUFickI7SUFDRSxnRUFBZ0U7SUFDekQsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUU7SUFDbEQsZ0ZBQWdGO0lBQ3pFLGVBQWUsRUFBRSxZQUFZLEVBQUU7SUFDdEMsb0RBQW9EO0lBQzdDLGVBQWUsRUFBRSxNQUFNO0lBQzlCOzs7O09BSUc7SUFFSSxRQUFRLEVBQUUsRUFBRSxFQUNqQjtJQUdKOzs7T0FHRztJQUNILElBQUksY0FBYywwQkFFakI7SUFHRDs7O09BR0c7SUFDSCxRQUFRLElBQUksRUFBRSxFQUFFLENBRWY7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGdCQUVIO0lBRUQsMkRBQTJEO0lBQzNELFNBQVMsQ0FBQyxxQkFBcUIsU0FTOUI7SUFFRDs7Ozs7O09BTUc7SUFDSCxPQUFhLE1BQU0sQ0FDakIsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsT0FBTyxhQUFhLENBQUMsRUFDekUsT0FBTyxLQUFjLHNDQWF0QjtDQUNGO0FBRUQsdUVBQXVFO0FBQ3ZFLHdCQUFzQixNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0F3QnpFIn0=
|
package/dest/encoding.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mCAAmC;IACnC,oGAAoG;IACpG,SAAS,EAAE,EAAE,CAAC;IACd,uCAAuC;IACvC,iBAAiB,EAAE,EAAE,CAAC;IACtB,sCAAsC;IACtC,cAAc,EAAE,EAAE,CAAC;IACnB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,wGAAwG;IACxG,eAAe,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG;IACzB,gEAAgE;IAChE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gFAAgF;IAChF,eAAe,EAAE,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF;;;;KAIK;AACL,qBAAa,yBAA0B,YAAW,YAAY;IAE1D,gEAAgE;IACzD,oBAAoB,EAAE,mBAAmB,EAAE;IAClD,gFAAgF;IACzE,eAAe,EAAE,YAAY,EAAE;IACtC,oDAAoD;IAC7C,
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mCAAmC;IACnC,oGAAoG;IACpG,SAAS,EAAE,EAAE,CAAC;IACd,uCAAuC;IACvC,iBAAiB,EAAE,EAAE,CAAC;IACtB,sCAAsC;IACtC,cAAc,EAAE,EAAE,CAAC;IACnB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,wGAAwG;IACxG,eAAe,EAAE,OAAO,CAAC;IACzB,2CAA2C;IAC3C,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG;IACzB,gEAAgE;IAChE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,gFAAgF;IAChF,eAAe,EAAE,YAAY,EAAE,CAAC;CACjC,CAAC;AAEF;;;;KAIK;AACL,qBAAa,yBAA0B,YAAW,YAAY;IAE1D,gEAAgE;IACzD,oBAAoB,EAAE,mBAAmB,EAAE;IAClD,gFAAgF;IACzE,eAAe,EAAE,YAAY,EAAE;IACtC,oDAAoD;IAC7C,eAAe,EAAE,MAAM;IAC9B;;;;OAIG;IAEI,QAAQ,EAAE,EAAE;IAbrB;IACE,gEAAgE;IACzD,oBAAoB,EAAE,mBAAmB,EAAE;IAClD,gFAAgF;IACzE,eAAe,EAAE,YAAY,EAAE;IACtC,oDAAoD;IAC7C,eAAe,EAAE,MAAM;IAC9B;;;;OAIG;IAEI,QAAQ,EAAE,EAAE,EACjB;IAGJ;;;OAGG;IACH,IAAI,cAAc,0BAEjB;IAGD;;;OAGG;IACH,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED;;;OAGG;IACH,IAAI,gBAEH;IAED,2DAA2D;IAC3D,SAAS,CAAC,qBAAqB,SAS9B;IAED;;;;;;OAMG;IACH,OAAa,MAAM,CACjB,aAAa,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,aAAa,CAAC,EACzE,OAAO,KAAc,sCAatB;CACF;AAED,uEAAuE;AACvE,wBAAsB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAwBzE"}
|
package/dest/encoding.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
5
5
|
import { FunctionCall, FunctionType } from '@aztec/stdlib/abi';
|
|
6
6
|
import { HashedValues } from '@aztec/stdlib/tx';
|
|
7
7
|
// These must match the values defined in:
|
|
8
|
-
// - noir-projects/aztec-nr/aztec/src/entrypoint/app.nr
|
|
8
|
+
// - noir-projects/labs/aztec-nr/aztec/src/authwit/entrypoint/app.nr
|
|
9
9
|
export const APP_MAX_CALLS = 5;
|
|
10
10
|
/**
|
|
11
11
|
* Entrypoints derive their arguments from the calls that they'll ultimate make.
|
|
@@ -14,9 +14,9 @@ export const APP_MAX_CALLS = 5;
|
|
|
14
14
|
* */ export class EncodedAppEntrypointCalls {
|
|
15
15
|
encodedFunctionCalls;
|
|
16
16
|
hashedArguments;
|
|
17
|
-
|
|
17
|
+
domainSeparator;
|
|
18
18
|
tx_nonce;
|
|
19
|
-
constructor(/** Function calls in the expected format (Noir's convention) */ encodedFunctionCalls, /** The hashed args for the call, ready to be injected in the execution cache */ hashedArguments, /** The index of the generator to use for hashing */
|
|
19
|
+
constructor(/** Function calls in the expected format (Noir's convention) */ encodedFunctionCalls, /** The hashed args for the call, ready to be injected in the execution cache */ hashedArguments, /** The index of the generator to use for hashing */ domainSeparator, /**
|
|
20
20
|
* A nonce to inject into the payload of the transaction. When used with cancellable=true, this nonce will be
|
|
21
21
|
* used to compute a nullifier that allows cancelling this transaction by submitting a new one with the same nonce
|
|
22
22
|
* but higher fee. The nullifier ensures only one transaction can succeed.
|
|
@@ -24,7 +24,7 @@ export const APP_MAX_CALLS = 5;
|
|
|
24
24
|
tx_nonce){
|
|
25
25
|
this.encodedFunctionCalls = encodedFunctionCalls;
|
|
26
26
|
this.hashedArguments = hashedArguments;
|
|
27
|
-
this.
|
|
27
|
+
this.domainSeparator = domainSeparator;
|
|
28
28
|
this.tx_nonce = tx_nonce;
|
|
29
29
|
}
|
|
30
30
|
/* eslint-disable camelcase */ /**
|
|
@@ -46,7 +46,7 @@ export const APP_MAX_CALLS = 5;
|
|
|
46
46
|
* Hashes the payload
|
|
47
47
|
* @returns The hash of the payload
|
|
48
48
|
*/ hash() {
|
|
49
|
-
return poseidon2HashWithSeparator(this.toFields(), this.
|
|
49
|
+
return poseidon2HashWithSeparator(this.toFields(), this.domainSeparator);
|
|
50
50
|
}
|
|
51
51
|
/** Serializes the function calls to an array of fields. */ functionCallsToFields() {
|
|
52
52
|
return this.encodedFunctionCalls.flatMap((call)=>[
|
|
@@ -70,7 +70,7 @@ export const APP_MAX_CALLS = 5;
|
|
|
70
70
|
}
|
|
71
71
|
const paddedCalls = padArrayEnd(functionCalls, FunctionCall.empty(), APP_MAX_CALLS);
|
|
72
72
|
const encoded = await encode(paddedCalls);
|
|
73
|
-
return new EncodedAppEntrypointCalls(encoded.encodedFunctionCalls, encoded.hashedArguments,
|
|
73
|
+
return new EncodedAppEntrypointCalls(encoded.encodedFunctionCalls, encoded.hashedArguments, DomainSeparator.SIGNATURE_PAYLOAD, txNonce);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
/** Encodes FunctionCalls for execution, following Noir's convention */ export async function encode(calls) {
|
package/dest/interfaces.d.ts
CHANGED
|
@@ -17,15 +17,9 @@ export type ChainInfo = {
|
|
|
17
17
|
* Zod schema for ChainInfo
|
|
18
18
|
*/
|
|
19
19
|
export declare const ChainInfoSchema: z.ZodObject<{
|
|
20
|
-
chainId: z.ZodType<Fr,
|
|
21
|
-
version: z.ZodType<Fr,
|
|
22
|
-
},
|
|
23
|
-
chainId: Fr;
|
|
24
|
-
version: Fr;
|
|
25
|
-
}, {
|
|
26
|
-
chainId: string;
|
|
27
|
-
version: string;
|
|
28
|
-
}>;
|
|
20
|
+
chainId: z.ZodType<Fr, string, z.core.$ZodTypeInternals<Fr, string>>;
|
|
21
|
+
version: z.ZodType<Fr, string, z.core.$ZodTypeInternals<Fr, string>>;
|
|
22
|
+
}, z.core.$strip>;
|
|
29
23
|
/**
|
|
30
24
|
* Creates transaction execution requests out of a set of function calls, a fee payment method and
|
|
31
25
|
* general options for the transaction
|
|
@@ -47,11 +41,12 @@ export interface EntrypointInterface {
|
|
|
47
41
|
* of a single entrypoint call.
|
|
48
42
|
*
|
|
49
43
|
* @param exec - The execution payload to wrap
|
|
44
|
+
* @param chainInfo - Chain information (chainId and version) for replay protection
|
|
50
45
|
* @param options - Implementation-specific options
|
|
51
46
|
* @returns A new execution payload with a single call to this entrypoint
|
|
52
47
|
* @throws Error if the payload cannot be wrapped (e.g., exceeds call limit)
|
|
53
48
|
*/
|
|
54
|
-
wrapExecutionPayload(exec: ExecutionPayload, options?: any): Promise<ExecutionPayload>;
|
|
49
|
+
wrapExecutionPayload(exec: ExecutionPayload, chainInfo: ChainInfo, options?: any): Promise<ExecutionPayload>;
|
|
55
50
|
}
|
|
56
51
|
/** Creates authorization witnesses. */
|
|
57
52
|
export interface AuthWitnessProvider {
|
|
@@ -62,4 +57,4 @@ export interface AuthWitnessProvider {
|
|
|
62
57
|
*/
|
|
63
58
|
createAuthWit(messageHash: Fr | Buffer): Promise<AuthWitness>;
|
|
64
59
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFN0UsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qjs7O0dBR0c7QUFDSCxNQUFNLE1BQU0sU0FBUyxHQUFHO0lBQ3RCLHNCQUFzQjtJQUN0QixPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ1osaUNBQWlDO0lBQ2pDLE9BQU8sRUFBRSxFQUFFLENBQUM7Q0FDYixDQUFDO0FBRUY7O0dBRUc7QUFDSCxlQUFPLE1BQU0sZUFBZTs7O2lCQUcxQixDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQzs7Ozs7OztPQU9HO0lBQ0gsd0JBQXdCLENBQ3RCLElBQUksRUFBRSxnQkFBZ0IsRUFDdEIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUNaLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRS9COzs7Ozs7Ozs7OztPQVdHO0lBQ0gsb0JBQW9CLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0NBQzlHO0FBRUQsdUNBQXVDO0FBQ3ZDLE1BQU0sV0FBVyxtQkFBbUI7SUFDbEM7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Q0FDL0QifQ==
|
package/dest/interfaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,sBAAsB;IACtB,OAAO,EAAE,EAAE,CAAC;IACZ,iCAAiC;IACjC,OAAO,EAAE,EAAE,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,sBAAsB;IACtB,OAAO,EAAE,EAAE,CAAC;IACZ,iCAAiC;IACjC,OAAO,EAAE,EAAE,CAAC;CACb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;OAOG;IACH,wBAAwB,CACtB,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9G;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,aAAa,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC/D"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@aztec/entrypoints",
|
|
3
3
|
"homepage": "https://github.com/AztecProtocol/aztec-packages/tree/master/yarn-project/entrypoints",
|
|
4
4
|
"description": "Implementation of sample contract entrypoints for the Aztec Network",
|
|
5
|
-
"version": "0.0.1-commit.
|
|
5
|
+
"version": "0.0.1-commit.c52d6e7",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
8
8
|
"./account": "./dest/account_entrypoint.js",
|
|
@@ -67,12 +67,13 @@
|
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@aztec/constants": "0.0.1-commit.
|
|
71
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
72
|
-
"@aztec/protocol-contracts": "0.0.1-commit.
|
|
73
|
-
"@aztec/
|
|
70
|
+
"@aztec/constants": "0.0.1-commit.c52d6e7",
|
|
71
|
+
"@aztec/foundation": "0.0.1-commit.c52d6e7",
|
|
72
|
+
"@aztec/protocol-contracts": "0.0.1-commit.c52d6e7",
|
|
73
|
+
"@aztec/standard-contracts": "0.0.1-commit.c52d6e7",
|
|
74
|
+
"@aztec/stdlib": "0.0.1-commit.c52d6e7",
|
|
74
75
|
"tslib": "^2.4.0",
|
|
75
|
-
"zod": "^
|
|
76
|
+
"zod": "^4"
|
|
76
77
|
},
|
|
77
78
|
"devDependencies": {
|
|
78
79
|
"@jest/globals": "^30.0.0",
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
type FunctionAbi,
|
|
4
|
+
FunctionCall,
|
|
5
|
+
FunctionSelector,
|
|
6
|
+
encodeArguments,
|
|
7
|
+
getFunctionReturnType,
|
|
8
|
+
} from '@aztec/stdlib/abi';
|
|
9
|
+
import { computeOuterAuthWitHash } from '@aztec/stdlib/auth-witness';
|
|
3
10
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
11
|
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
5
12
|
import { ExecutionPayload, HashedValues, TxContext, TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
@@ -66,7 +73,7 @@ export class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
66
73
|
options: DefaultAccountEntrypointOptions,
|
|
67
74
|
): Promise<TxExecutionRequest> {
|
|
68
75
|
const { authWitnesses, capsules, extraHashedArgs } = exec;
|
|
69
|
-
const callData = await this.#buildEntrypointCallData(exec, options);
|
|
76
|
+
const callData = await this.#buildEntrypointCallData(exec, chainInfo, options);
|
|
70
77
|
const entrypointHashedArgs = await HashedValues.fromArgs(callData.encodedArgs);
|
|
71
78
|
const txRequest = TxExecutionRequest.from({
|
|
72
79
|
firstCallArgsHash: entrypointHashedArgs.hash,
|
|
@@ -84,22 +91,23 @@ export class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
84
91
|
|
|
85
92
|
async wrapExecutionPayload(
|
|
86
93
|
exec: ExecutionPayload,
|
|
94
|
+
chainInfo: ChainInfo,
|
|
87
95
|
options: DefaultAccountEntrypointOptions,
|
|
88
96
|
): Promise<ExecutionPayload> {
|
|
89
97
|
const { authWitnesses, capsules, extraHashedArgs, feePayer } = exec;
|
|
90
|
-
const callData = await this.#buildEntrypointCallData(exec, options);
|
|
98
|
+
const callData = await this.#buildEntrypointCallData(exec, chainInfo, options);
|
|
91
99
|
|
|
92
100
|
// Build the entrypoint function call
|
|
93
|
-
const entrypointCall =
|
|
94
|
-
callData.abi.name,
|
|
95
|
-
this.address,
|
|
96
|
-
callData.functionSelector,
|
|
97
|
-
callData.abi.functionType,
|
|
98
|
-
false,
|
|
99
|
-
callData.abi.isStatic,
|
|
100
|
-
callData.encodedArgs,
|
|
101
|
-
callData.abi
|
|
102
|
-
);
|
|
101
|
+
const entrypointCall = FunctionCall.from({
|
|
102
|
+
name: callData.abi.name,
|
|
103
|
+
to: this.address,
|
|
104
|
+
selector: callData.functionSelector,
|
|
105
|
+
type: callData.abi.functionType,
|
|
106
|
+
hideMsgSender: false,
|
|
107
|
+
isStatic: callData.abi.isStatic,
|
|
108
|
+
args: callData.encodedArgs,
|
|
109
|
+
returnType: getFunctionReturnType(callData.abi),
|
|
110
|
+
});
|
|
103
111
|
|
|
104
112
|
return new ExecutionPayload(
|
|
105
113
|
[entrypointCall],
|
|
@@ -114,10 +122,15 @@ export class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
114
122
|
* Builds the shared data needed for both creating a tx execution request and wrapping an execution payload.
|
|
115
123
|
* This includes encoding calls, building entrypoint arguments, and creating the authwitness.
|
|
116
124
|
* @param exec - The execution payload containing calls to encode
|
|
125
|
+
* @param chainInfo - Chain information (chainId and version) for replay protection
|
|
117
126
|
* @param options - Account entrypoint options including tx nonce and fee payment method
|
|
118
127
|
* @returns Encoded call data, ABI, function selector, and auth witness
|
|
119
128
|
*/
|
|
120
|
-
async #buildEntrypointCallData(
|
|
129
|
+
async #buildEntrypointCallData(
|
|
130
|
+
exec: ExecutionPayload,
|
|
131
|
+
chainInfo: ChainInfo,
|
|
132
|
+
options: DefaultAccountEntrypointOptions,
|
|
133
|
+
) {
|
|
121
134
|
const { calls } = exec;
|
|
122
135
|
const { cancellable, txNonce, feePaymentMethodOptions } = options;
|
|
123
136
|
|
|
@@ -129,7 +142,9 @@ export class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
129
142
|
|
|
130
143
|
const functionSelector = await FunctionSelector.fromNameAndParameters(abi.name, abi.parameters);
|
|
131
144
|
|
|
132
|
-
const
|
|
145
|
+
const payloadHash = await encodedCalls.hash();
|
|
146
|
+
const messageHash = await computeOuterAuthWitHash(this.address, chainInfo.chainId, chainInfo.version, payloadHash);
|
|
147
|
+
const payloadAuthWitness = await this.auth.createAuthWit(messageHash);
|
|
133
148
|
|
|
134
149
|
return {
|
|
135
150
|
encodedCalls,
|
|
@@ -195,7 +210,6 @@ export class DefaultAccountEntrypoint implements EntrypointInterface {
|
|
|
195
210
|
{ name: 'fee_payment_method', type: { kind: 'integer', sign: 'unsigned', width: 8 } },
|
|
196
211
|
{ name: 'cancellable', type: { kind: 'boolean' } },
|
|
197
212
|
],
|
|
198
|
-
returnTypes: [],
|
|
199
213
|
errorTypes: {},
|
|
200
214
|
} as FunctionAbi;
|
|
201
215
|
}
|
|
@@ -41,7 +41,7 @@ export class DefaultEntrypoint implements EntrypointInterface {
|
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
async wrapExecutionPayload(exec: ExecutionPayload, _options?: any): Promise<ExecutionPayload> {
|
|
44
|
+
async wrapExecutionPayload(exec: ExecutionPayload, _chainInfo: ChainInfo, _options?: any): Promise<ExecutionPayload> {
|
|
45
45
|
if (exec.calls.length !== 1) {
|
|
46
46
|
throw new Error(`DefaultEntrypoint can only wrap a single call, got ${exec.calls.length}`);
|
|
47
47
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS } from '@aztec/standard-contracts/multi-call-entrypoint/constants';
|
|
3
|
+
import {
|
|
4
|
+
type FunctionAbi,
|
|
5
|
+
FunctionCall,
|
|
6
|
+
FunctionSelector,
|
|
7
|
+
encodeArguments,
|
|
8
|
+
getFunctionReturnType,
|
|
9
|
+
} from '@aztec/stdlib/abi';
|
|
4
10
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
11
|
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
6
12
|
import { ExecutionPayload, HashedValues, TxContext, TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
@@ -12,7 +18,7 @@ import type { ChainInfo, EntrypointInterface } from './interfaces.js';
|
|
|
12
18
|
* Implementation for an entrypoint interface that can execute multiple function calls in a single transaction
|
|
13
19
|
*/
|
|
14
20
|
export class DefaultMultiCallEntrypoint implements EntrypointInterface {
|
|
15
|
-
constructor(private address: AztecAddress =
|
|
21
|
+
constructor(private address: AztecAddress = STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS) {}
|
|
16
22
|
|
|
17
23
|
async createTxExecutionRequest(
|
|
18
24
|
exec: ExecutionPayload,
|
|
@@ -37,19 +43,19 @@ export class DefaultMultiCallEntrypoint implements EntrypointInterface {
|
|
|
37
43
|
return Promise.resolve(txRequest);
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
async wrapExecutionPayload(exec: ExecutionPayload, _options?: any): Promise<ExecutionPayload> {
|
|
46
|
+
async wrapExecutionPayload(exec: ExecutionPayload, _chainInfo: ChainInfo, _options?: any): Promise<ExecutionPayload> {
|
|
41
47
|
const { authWitnesses, capsules, extraHashedArgs } = exec;
|
|
42
48
|
const callData = await this.#buildEntrypointCallData(exec);
|
|
43
|
-
const entrypointCall =
|
|
44
|
-
callData.abi.name,
|
|
45
|
-
this.address,
|
|
46
|
-
callData.functionSelector,
|
|
47
|
-
callData.abi.functionType,
|
|
48
|
-
false,
|
|
49
|
-
callData.abi.isStatic,
|
|
50
|
-
callData.encodedArgs,
|
|
51
|
-
callData.abi
|
|
52
|
-
);
|
|
49
|
+
const entrypointCall = FunctionCall.from({
|
|
50
|
+
name: callData.abi.name,
|
|
51
|
+
to: this.address,
|
|
52
|
+
selector: callData.functionSelector,
|
|
53
|
+
type: callData.abi.functionType,
|
|
54
|
+
hideMsgSender: false,
|
|
55
|
+
isStatic: callData.abi.isStatic,
|
|
56
|
+
args: callData.encodedArgs,
|
|
57
|
+
returnType: getFunctionReturnType(callData.abi),
|
|
58
|
+
});
|
|
53
59
|
|
|
54
60
|
return new ExecutionPayload(
|
|
55
61
|
[entrypointCall],
|
|
@@ -137,7 +143,6 @@ export class DefaultMultiCallEntrypoint implements EntrypointInterface {
|
|
|
137
143
|
visibility: 'public',
|
|
138
144
|
},
|
|
139
145
|
],
|
|
140
|
-
returnTypes: [],
|
|
141
146
|
errorTypes: {},
|
|
142
147
|
} as FunctionAbi;
|
|
143
148
|
}
|
package/src/encoding.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DomainSeparator } from '@aztec/constants';
|
|
2
2
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
3
3
|
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
4
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
@@ -7,7 +7,7 @@ import { FunctionCall, FunctionType } from '@aztec/stdlib/abi';
|
|
|
7
7
|
import { HashedValues } from '@aztec/stdlib/tx';
|
|
8
8
|
|
|
9
9
|
// These must match the values defined in:
|
|
10
|
-
// - noir-projects/aztec-nr/aztec/src/entrypoint/app.nr
|
|
10
|
+
// - noir-projects/labs/aztec-nr/aztec/src/authwit/entrypoint/app.nr
|
|
11
11
|
export const APP_MAX_CALLS = 5;
|
|
12
12
|
|
|
13
13
|
/** Encoded function call for an Aztec entrypoint */
|
|
@@ -47,7 +47,7 @@ export class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
47
47
|
/** The hashed args for the call, ready to be injected in the execution cache */
|
|
48
48
|
public hashedArguments: HashedValues[],
|
|
49
49
|
/** The index of the generator to use for hashing */
|
|
50
|
-
public
|
|
50
|
+
public domainSeparator: number,
|
|
51
51
|
/**
|
|
52
52
|
* A nonce to inject into the payload of the transaction. When used with cancellable=true, this nonce will be
|
|
53
53
|
* used to compute a nullifier that allows cancelling this transaction by submitting a new one with the same nonce
|
|
@@ -80,7 +80,7 @@ export class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
80
80
|
* @returns The hash of the payload
|
|
81
81
|
*/
|
|
82
82
|
hash() {
|
|
83
|
-
return poseidon2HashWithSeparator(this.toFields(), this.
|
|
83
|
+
return poseidon2HashWithSeparator(this.toFields(), this.domainSeparator);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** Serializes the function calls to an array of fields. */
|
|
@@ -114,7 +114,7 @@ export class EncodedAppEntrypointCalls implements EncodedCalls {
|
|
|
114
114
|
return new EncodedAppEntrypointCalls(
|
|
115
115
|
encoded.encodedFunctionCalls,
|
|
116
116
|
encoded.hashedArguments,
|
|
117
|
-
|
|
117
|
+
DomainSeparator.SIGNATURE_PAYLOAD,
|
|
118
118
|
txNonce,
|
|
119
119
|
);
|
|
120
120
|
}
|
package/src/interfaces.ts
CHANGED
|
@@ -51,11 +51,12 @@ export interface EntrypointInterface {
|
|
|
51
51
|
* of a single entrypoint call.
|
|
52
52
|
*
|
|
53
53
|
* @param exec - The execution payload to wrap
|
|
54
|
+
* @param chainInfo - Chain information (chainId and version) for replay protection
|
|
54
55
|
* @param options - Implementation-specific options
|
|
55
56
|
* @returns A new execution payload with a single call to this entrypoint
|
|
56
57
|
* @throws Error if the payload cannot be wrapped (e.g., exceeds call limit)
|
|
57
58
|
*/
|
|
58
|
-
wrapExecutionPayload(exec: ExecutionPayload, options?: any): Promise<ExecutionPayload>;
|
|
59
|
+
wrapExecutionPayload(exec: ExecutionPayload, chainInfo: ChainInfo, options?: any): Promise<ExecutionPayload>;
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
/** Creates authorization witnesses. */
|