@aztec/aztec.js 0.73.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/README.md +1 -1
- package/dest/account/contract.js +5 -3
- package/dest/account/index.js +8 -2
- package/dest/account/interface.js +4 -3
- package/dest/account/wallet.js +3 -2
- package/dest/account_manager/deploy_account_method.js +22 -25
- package/dest/account_manager/deploy_account_sent_tx.js +16 -17
- package/dest/account_manager/index.js +67 -78
- package/dest/api/abi.js +0 -1
- package/dest/api/account.js +0 -1
- package/dest/api/addresses.js +0 -1
- package/dest/api/cheat_codes.js +25 -0
- package/dest/api/deployment.js +0 -1
- package/dest/api/entrypoint.js +0 -1
- package/dest/api/eth_address.js +0 -1
- package/dest/api/ethereum/anvil_test_watcher.js +113 -0
- package/dest/api/ethereum/chain_monitor.js +69 -0
- package/dest/api/ethereum/cheat_codes.js +142 -0
- package/dest/api/ethereum/index.js +6 -0
- package/dest/api/ethereum/l1_contracts.js +13 -0
- package/dest/api/ethereum/portal_manager.js +284 -0
- package/dest/api/fee.js +0 -1
- package/dest/api/fields.js +0 -1
- package/dest/api/interfaces/pxe.js +1 -2
- package/dest/api/log.js +1 -0
- package/dest/api/log_id.js +0 -1
- package/dest/api/tx_hash.js +0 -1
- package/dest/api/wallet.js +1 -2
- package/dest/contract/base_contract_interaction.js +75 -52
- package/dest/contract/batch_call.js +57 -39
- package/dest/contract/checker.js +29 -20
- package/dest/contract/contract.js +22 -27
- package/dest/contract/contract_base.js +21 -30
- package/dest/contract/contract_function_interaction.js +48 -48
- package/dest/contract/deploy_method.js +99 -84
- package/dest/contract/deploy_proven_tx.js +8 -11
- package/dest/contract/deploy_sent_tx.js +19 -22
- package/dest/contract/get_gas_limits.js +2 -4
- package/dest/contract/index.js +4 -6
- package/dest/contract/proven_tx.js +7 -10
- package/dest/contract/sent_tx.js +32 -34
- package/dest/contract/unsafe_contract.js +2 -10
- package/dest/deployment/broadcast_function.js +28 -26
- package/dest/deployment/contract_deployer.js +15 -14
- package/dest/deployment/deploy_instance.js +1 -3
- package/dest/deployment/index.js +0 -1
- package/dest/deployment/protocol_contracts.js +2 -5
- package/dest/deployment/register_class.js +8 -8
- package/dest/entrypoint/default_entrypoint.js +8 -5
- package/dest/entrypoint/default_multi_call_entrypoint.js +66 -23
- package/dest/entrypoint/entrypoint.js +0 -1
- package/dest/entrypoint/payload.js +73 -82
- package/dest/fee/fee_juice_payment_method.js +3 -4
- package/dest/fee/fee_juice_payment_method_with_claim.js +11 -14
- package/dest/fee/fee_payment_method.js +3 -2
- package/dest/fee/no_fee_payment_method.js +2 -4
- package/dest/fee/private_fee_payment_method.js +36 -34
- package/dest/fee/public_fee_payment_method.js +34 -31
- package/dest/index.js +8 -9
- package/dest/rpc_clients/index.js +0 -1
- package/dest/rpc_clients/node/index.js +30 -16
- package/dest/rpc_clients/pxe_client.js +5 -3
- package/dest/utils/abi_types.js +1 -2
- package/dest/utils/authwit.js +15 -15
- package/dest/utils/aztec_cheatcodes.js +62 -0
- package/dest/utils/field_compressed_string.js +2 -4
- package/dest/utils/index.js +5 -12
- package/dest/utils/node.js +4 -5
- package/dest/utils/pub_key.js +1 -3
- package/dest/utils/pxe.js +3 -5
- package/dest/wallet/account_wallet.js +118 -81
- package/dest/wallet/account_wallet_with_private_key.js +9 -15
- package/dest/wallet/base_wallet.js +7 -5
- package/dest/wallet/index.js +2 -4
- package/dest/wallet/signerless_wallet.js +4 -6
- package/package.json +14 -17
- package/src/api/account.ts +7 -1
- package/src/api/cheat_codes.ts +35 -0
- package/src/{utils → api/ethereum}/anvil_test_watcher.ts +2 -1
- package/src/{utils → api/ethereum}/cheat_codes.ts +6 -109
- package/src/api/ethereum/index.ts +15 -0
- package/src/{utils → api/ethereum}/l1_contracts.ts +1 -1
- package/src/{utils → api/ethereum}/portal_manager.ts +4 -9
- package/src/api/interfaces/pxe.ts +1 -1
- package/src/api/log.ts +1 -0
- package/src/api/wallet.ts +1 -1
- package/src/contract/contract_function_interaction.ts +1 -1
- package/src/contract/index.ts +2 -2
- package/src/entrypoint/default_multi_call_entrypoint.ts +2 -1
- package/src/entrypoint/entrypoint.ts +1 -1
- package/src/fee/fee_juice_payment_method_with_claim.ts +1 -1
- package/src/index.ts +7 -35
- package/src/utils/aztec_cheatcodes.ts +75 -0
- package/src/utils/index.ts +19 -11
- package/src/utils/node.ts +2 -0
- package/src/wallet/index.ts +1 -1
- package/dest/account/contract.d.ts +0 -33
- package/dest/account/contract.d.ts.map +0 -1
- package/dest/account/index.d.ts +0 -15
- package/dest/account/index.d.ts.map +0 -1
- package/dest/account/interface.d.ts +0 -30
- package/dest/account/interface.d.ts.map +0 -1
- package/dest/account/wallet.d.ts +0 -10
- package/dest/account/wallet.d.ts.map +0 -1
- package/dest/account_manager/deploy_account_method.d.ts +0 -15
- package/dest/account_manager/deploy_account_method.d.ts.map +0 -1
- package/dest/account_manager/deploy_account_sent_tx.d.ts +0 -29
- package/dest/account_manager/deploy_account_sent_tx.d.ts.map +0 -1
- package/dest/account_manager/index.d.ts +0 -99
- package/dest/account_manager/index.d.ts.map +0 -1
- package/dest/api/abi.d.ts +0 -4
- package/dest/api/abi.d.ts.map +0 -1
- package/dest/api/account.d.ts +0 -4
- package/dest/api/account.d.ts.map +0 -1
- package/dest/api/addresses.d.ts +0 -3
- package/dest/api/addresses.d.ts.map +0 -1
- package/dest/api/deployment.d.ts +0 -4
- package/dest/api/deployment.d.ts.map +0 -1
- package/dest/api/entrypoint.d.ts +0 -2
- package/dest/api/entrypoint.d.ts.map +0 -1
- package/dest/api/eth_address.d.ts +0 -2
- package/dest/api/eth_address.d.ts.map +0 -1
- package/dest/api/ethereum.d.ts +0 -3
- package/dest/api/ethereum.d.ts.map +0 -1
- package/dest/api/ethereum.js +0 -3
- package/dest/api/fee.d.ts +0 -7
- package/dest/api/fee.d.ts.map +0 -1
- package/dest/api/fields.d.ts +0 -2
- package/dest/api/fields.d.ts.map +0 -1
- package/dest/api/interfaces/pxe.d.ts +0 -2
- package/dest/api/interfaces/pxe.d.ts.map +0 -1
- package/dest/api/log_id.d.ts +0 -2
- package/dest/api/log_id.d.ts.map +0 -1
- package/dest/api/tx_hash.d.ts +0 -2
- package/dest/api/tx_hash.d.ts.map +0 -1
- package/dest/api/wallet.d.ts +0 -2
- package/dest/api/wallet.d.ts.map +0 -1
- package/dest/barretenberg-threads.wasm.gz +0 -0
- package/dest/barretenberg.wasm.gz +0 -0
- package/dest/contract/base_contract_interaction.d.ts +0 -82
- package/dest/contract/base_contract_interaction.d.ts.map +0 -1
- package/dest/contract/batch_call.d.ts +0 -27
- package/dest/contract/batch_call.d.ts.map +0 -1
- package/dest/contract/checker.d.ts +0 -11
- package/dest/contract/checker.d.ts.map +0 -1
- package/dest/contract/contract.d.ts +0 -41
- package/dest/contract/contract.d.ts.map +0 -1
- package/dest/contract/contract_base.d.ts +0 -61
- package/dest/contract/contract_base.d.ts.map +0 -1
- package/dest/contract/contract_function_interaction.d.ts +0 -67
- package/dest/contract/contract_function_interaction.d.ts.map +0 -1
- package/dest/contract/deploy_method.d.ts +0 -110
- package/dest/contract/deploy_method.d.ts.map +0 -1
- package/dest/contract/deploy_proven_tx.d.ts +0 -19
- package/dest/contract/deploy_proven_tx.d.ts.map +0 -1
- package/dest/contract/deploy_sent_tx.d.ts +0 -43
- package/dest/contract/deploy_sent_tx.d.ts.map +0 -1
- package/dest/contract/get_gas_limits.d.ts +0 -18
- package/dest/contract/get_gas_limits.d.ts.map +0 -1
- package/dest/contract/index.d.ts +0 -45
- package/dest/contract/index.d.ts.map +0 -1
- package/dest/contract/proven_tx.d.ts +0 -16
- package/dest/contract/proven_tx.d.ts.map +0 -1
- package/dest/contract/sent_tx.d.ts +0 -60
- package/dest/contract/sent_tx.d.ts.map +0 -1
- package/dest/contract/unsafe_contract.d.ts +0 -15
- package/dest/contract/unsafe_contract.d.ts.map +0 -1
- package/dest/deployment/broadcast_function.d.ts +0 -24
- package/dest/deployment/broadcast_function.d.ts.map +0 -1
- package/dest/deployment/contract_deployer.d.ts +0 -27
- package/dest/deployment/contract_deployer.d.ts.map +0 -1
- package/dest/deployment/deploy_instance.d.ts +0 -10
- package/dest/deployment/deploy_instance.d.ts.map +0 -1
- package/dest/deployment/index.d.ts +0 -2
- package/dest/deployment/index.d.ts.map +0 -1
- package/dest/deployment/protocol_contracts.d.ts +0 -7
- package/dest/deployment/protocol_contracts.d.ts.map +0 -1
- package/dest/deployment/register_class.d.ts +0 -6
- package/dest/deployment/register_class.d.ts.map +0 -1
- package/dest/entrypoint/default_entrypoint.d.ts +0 -12
- package/dest/entrypoint/default_entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts +0 -15
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/entrypoint.d.ts +0 -31
- package/dest/entrypoint/entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/payload.d.ts +0 -125
- package/dest/entrypoint/payload.d.ts.map +0 -1
- package/dest/fee/fee_juice_payment_method.d.ts +0 -14
- package/dest/fee/fee_juice_payment_method.d.ts.map +0 -1
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts +0 -17
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts.map +0 -1
- package/dest/fee/fee_payment_method.d.ts +0 -22
- package/dest/fee/fee_payment_method.d.ts.map +0 -1
- package/dest/fee/no_fee_payment_method.d.ts +0 -13
- package/dest/fee/no_fee_payment_method.d.ts.map +0 -1
- package/dest/fee/private_fee_payment_method.d.ts +0 -51
- package/dest/fee/private_fee_payment_method.d.ts.map +0 -1
- package/dest/fee/public_fee_payment_method.d.ts +0 -41
- package/dest/fee/public_fee_payment_method.d.ts.map +0 -1
- package/dest/index.d.ts +0 -51
- package/dest/index.d.ts.map +0 -1
- package/dest/main.js +0 -2
- package/dest/main.js.LICENSE.txt +0 -25
- package/dest/rpc_clients/index.d.ts +0 -3
- package/dest/rpc_clients/index.d.ts.map +0 -1
- package/dest/rpc_clients/node/index.d.ts +0 -11
- package/dest/rpc_clients/node/index.d.ts.map +0 -1
- package/dest/rpc_clients/pxe_client.d.ts +0 -9
- package/dest/rpc_clients/pxe_client.d.ts.map +0 -1
- package/dest/utils/abi_types.d.ts +0 -26
- package/dest/utils/abi_types.d.ts.map +0 -1
- package/dest/utils/anvil_test_watcher.d.ts +0 -28
- package/dest/utils/anvil_test_watcher.d.ts.map +0 -1
- package/dest/utils/anvil_test_watcher.js +0 -108
- package/dest/utils/authwit.d.ts +0 -59
- package/dest/utils/authwit.d.ts.map +0 -1
- package/dest/utils/chain_monitor.d.ts +0 -21
- package/dest/utils/chain_monitor.d.ts.map +0 -1
- package/dest/utils/chain_monitor.js +0 -58
- package/dest/utils/cheat_codes.d.ts +0 -137
- package/dest/utils/cheat_codes.d.ts.map +0 -1
- package/dest/utils/cheat_codes.js +0 -225
- package/dest/utils/field_compressed_string.d.ts +0 -17
- package/dest/utils/field_compressed_string.d.ts.map +0 -1
- package/dest/utils/index.d.ts +0 -12
- package/dest/utils/index.d.ts.map +0 -1
- package/dest/utils/l1_contracts.d.ts +0 -3
- package/dest/utils/l1_contracts.d.ts.map +0 -1
- package/dest/utils/l1_contracts.js +0 -15
- package/dest/utils/node.d.ts +0 -4
- package/dest/utils/node.d.ts.map +0 -1
- package/dest/utils/portal_manager.d.ts +0 -130
- package/dest/utils/portal_manager.d.ts.map +0 -1
- package/dest/utils/portal_manager.js +0 -265
- package/dest/utils/pub_key.d.ts +0 -8
- package/dest/utils/pub_key.d.ts.map +0 -1
- package/dest/utils/pxe.d.ts +0 -4
- package/dest/utils/pxe.d.ts.map +0 -1
- package/dest/wallet/account_wallet.d.ts +0 -73
- package/dest/wallet/account_wallet.d.ts.map +0 -1
- package/dest/wallet/account_wallet_with_private_key.d.ts +0 -26
- package/dest/wallet/account_wallet_with_private_key.d.ts.map +0 -1
- package/dest/wallet/base_wallet.d.ts +0 -64
- package/dest/wallet/base_wallet.d.ts.map +0 -1
- package/dest/wallet/index.d.ts +0 -17
- package/dest/wallet/index.d.ts.map +0 -1
- package/dest/wallet/signerless_wallet.d.ts +0 -22
- package/dest/wallet/signerless_wallet.d.ts.map +0 -1
- package/src/api/ethereum.ts +0 -2
- /package/src/{utils → api/ethereum}/chain_monitor.ts +0 -0
|
@@ -10,15 +10,29 @@ import { createPXEClient } from '../pxe_client.js';
|
|
|
10
10
|
* @param body - The body of the request.
|
|
11
11
|
* @param useApiEndpoints - Whether to use the API endpoints or inject the method in the body.
|
|
12
12
|
* @returns The response data.
|
|
13
|
-
*/
|
|
14
|
-
async function axiosFetch(host, rpcMethod, body, useApiEndpoints) {
|
|
13
|
+
*/ async function axiosFetch(host, rpcMethod, body, useApiEndpoints) {
|
|
15
14
|
const request = new Axios({
|
|
16
|
-
headers: {
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
headers: {
|
|
16
|
+
'content-type': 'application/json'
|
|
17
|
+
},
|
|
18
|
+
transformRequest: [
|
|
19
|
+
(data)=>jsonStringify(data)
|
|
20
|
+
],
|
|
21
|
+
transformResponse: [
|
|
22
|
+
(data)=>JSON.parse(data)
|
|
23
|
+
]
|
|
19
24
|
});
|
|
20
|
-
const [url, content] = useApiEndpoints ? [
|
|
21
|
-
|
|
25
|
+
const [url, content] = useApiEndpoints ? [
|
|
26
|
+
`${host}/${rpcMethod}`,
|
|
27
|
+
body
|
|
28
|
+
] : [
|
|
29
|
+
host,
|
|
30
|
+
{
|
|
31
|
+
...body,
|
|
32
|
+
method: rpcMethod
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
const resp = await request.post(url, content).catch((error)=>{
|
|
22
36
|
if (error.response) {
|
|
23
37
|
return error.response;
|
|
24
38
|
}
|
|
@@ -28,13 +42,11 @@ async function axiosFetch(host, rpcMethod, body, useApiEndpoints) {
|
|
|
28
42
|
const isOK = resp.status >= 200 && resp.status < 300;
|
|
29
43
|
if (isOK) {
|
|
30
44
|
return resp.data;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
45
|
+
} else {
|
|
33
46
|
const errorMessage = `(JSON-RPC PROPAGATED) (host ${host}) (method ${rpcMethod}) (code ${resp.status}) ${resp.data.error.message}`;
|
|
34
47
|
if (resp.status >= 400 && resp.status < 500) {
|
|
35
48
|
throw new NoRetryError(errorMessage);
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
49
|
+
} else {
|
|
38
50
|
throw new Error(errorMessage);
|
|
39
51
|
}
|
|
40
52
|
}
|
|
@@ -45,13 +57,15 @@ async function axiosFetch(host, rpcMethod, body, useApiEndpoints) {
|
|
|
45
57
|
* @param rpcUrl - URL of the RPC server wrapping the PXE.
|
|
46
58
|
* @param _logger - Debug logger to warn version incompatibilities.
|
|
47
59
|
* @returns A PXE client.
|
|
48
|
-
*/
|
|
49
|
-
export function createCompatibleClient(rpcUrl, logger) {
|
|
60
|
+
*/ export function createCompatibleClient(rpcUrl, logger) {
|
|
50
61
|
// Use axios due to timeout issues with fetch when proving TXs.
|
|
51
|
-
const fetch = async (host, rpcMethod, body, useApiEndpoints)
|
|
52
|
-
return await retry(()
|
|
62
|
+
const fetch = async (host, rpcMethod, body, useApiEndpoints)=>{
|
|
63
|
+
return await retry(()=>axiosFetch(host, rpcMethod, body, useApiEndpoints), `JsonRpcClient request ${rpcMethod} to ${host}`, makeBackoff([
|
|
64
|
+
1,
|
|
65
|
+
2,
|
|
66
|
+
3
|
|
67
|
+
]), logger, false);
|
|
53
68
|
};
|
|
54
69
|
const pxe = createPXEClient(rpcUrl, fetch);
|
|
55
70
|
return Promise.resolve(pxe);
|
|
56
71
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnBjX2NsaWVudHMvbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0UsT0FBTyxFQUFFLEtBQUssRUFBbUIsTUFBTSxPQUFPLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQ7Ozs7Ozs7R0FPRztBQUNILEtBQUssVUFBVSxVQUFVLENBQUMsSUFBWSxFQUFFLFNBQWlCLEVBQUUsSUFBUyxFQUFFLGVBQXdCO0lBQzVGLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDO1FBQ3hCLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRTtRQUMvQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyRCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNqSCxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUN4RSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDeEIsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLDRCQUE0QixJQUFJLGdCQUFnQixTQUFTLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3JELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLFlBQVksR0FBRywrQkFBK0IsSUFBSSxhQUFhLFNBQVMsV0FBVyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25JLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBYyxFQUFFLE1BQWM7SUFDbkUsK0RBQStEO0lBQy9ELE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsU0FBaUIsRUFBRSxJQUFTLEVBQUUsZUFBd0IsRUFBRSxFQUFFO1FBQzNGLE9BQU8sTUFBTSxLQUFLLENBQ2hCLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsRUFDeEQseUJBQXlCLFNBQVMsT0FBTyxJQUFJLEVBQUUsRUFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUN0QixNQUFNLEVBQ04sS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDLENBQUM7SUFDRixNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRTNDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixDQUFDIn0=
|
|
@@ -5,8 +5,10 @@ import { createSafeJsonRpcClient, makeFetch } from '@aztec/foundation/json-rpc/c
|
|
|
5
5
|
* @param url - The URL of the PXE.
|
|
6
6
|
* @param fetch - The fetch implementation to use.
|
|
7
7
|
* @returns A JSON-RPC client of PXE.
|
|
8
|
-
*/
|
|
9
|
-
|
|
8
|
+
*/ export function createPXEClient(url, fetch = makeFetch([
|
|
9
|
+
1,
|
|
10
|
+
2,
|
|
11
|
+
3
|
|
12
|
+
], false)) {
|
|
10
13
|
return createSafeJsonRpcClient(url, PXESchema, false, 'pxe', fetch);
|
|
11
14
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlX2NsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ycGNfY2xpZW50cy9weGVfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBWSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFdkY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDOUUsT0FBTyx1QkFBdUIsQ0FBTSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0UsQ0FBQyJ9
|
package/dest/utils/abi_types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJpX3R5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FiaV90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
1
|
+
/** Any type that can be converted into a struct with a single `inner` field. */ export { };
|
package/dest/utils/authwit.js
CHANGED
|
@@ -23,25 +23,23 @@ import { ContractFunctionInteraction } from '../contract/contract_function_inter
|
|
|
23
23
|
* The caller becomes part of the `inner_hash` and is dealt with entirely in application logic.
|
|
24
24
|
* @param metadata - The metadata for the intent (chainId, version)
|
|
25
25
|
* @returns The message hash for the action
|
|
26
|
-
*/
|
|
27
|
-
export const computeAuthWitMessageHash = async (intent, metadata) => {
|
|
26
|
+
*/ export const computeAuthWitMessageHash = async (intent, metadata)=>{
|
|
28
27
|
const chainId = metadata.chainId;
|
|
29
28
|
const version = metadata.version;
|
|
30
29
|
if ('caller' in intent) {
|
|
31
30
|
const action = intent.action instanceof ContractFunctionInteraction ? await intent.action.request() : intent.action;
|
|
32
31
|
return computeOuterAuthWitHash(action.to, chainId, version, await computeInnerAuthWitHashFromAction(intent.caller, action));
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
32
|
+
} else {
|
|
35
33
|
const inner = Buffer.isBuffer(intent.innerHash) ? Fr.fromBuffer(intent.innerHash) : intent.innerHash;
|
|
36
34
|
return computeOuterAuthWitHash(intent.consumer, chainId, version, inner);
|
|
37
35
|
}
|
|
38
36
|
};
|
|
39
37
|
// docs:end:authwit_computeAuthWitMessageHash
|
|
40
|
-
export const computeInnerAuthWitHashFromAction = async (caller, action)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
]);
|
|
38
|
+
export const computeInnerAuthWitHashFromAction = async (caller, action)=>computeInnerAuthWitHash([
|
|
39
|
+
caller.toField(),
|
|
40
|
+
action.selector.toField(),
|
|
41
|
+
(await HashedValues.fromValues(action.args)).hash
|
|
42
|
+
]);
|
|
45
43
|
/**
|
|
46
44
|
* Compute the inner hash for an authentication witness.
|
|
47
45
|
* This is the "intent" of the message, before siloed with the consumer.
|
|
@@ -49,8 +47,7 @@ export const computeInnerAuthWitHashFromAction = async (caller, action) => compu
|
|
|
49
47
|
* in case the message is not a "call" to a function, but arbitrary data.
|
|
50
48
|
* @param args - The arguments to hash
|
|
51
49
|
* @returns The inner hash for the witness
|
|
52
|
-
*/
|
|
53
|
-
export const computeInnerAuthWitHash = (args) => {
|
|
50
|
+
*/ export const computeInnerAuthWitHash = (args)=>{
|
|
54
51
|
return poseidon2HashWithSeparator(args, GeneratorIndex.AUTHWIT_INNER);
|
|
55
52
|
};
|
|
56
53
|
/**
|
|
@@ -66,8 +63,11 @@ export const computeInnerAuthWitHash = (args) => {
|
|
|
66
63
|
* @param version - The version that can "consume" the authwit
|
|
67
64
|
* @param innerHash - The inner hash for the witness
|
|
68
65
|
* @returns The outer hash for the witness
|
|
69
|
-
*/
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
*/ const computeOuterAuthWitHash = (consumer, chainId, version, innerHash)=>{
|
|
67
|
+
return poseidon2HashWithSeparator([
|
|
68
|
+
consumer.toField(),
|
|
69
|
+
chainId,
|
|
70
|
+
version,
|
|
71
|
+
innerHash
|
|
72
|
+
], GeneratorIndex.AUTHWIT_OUTER);
|
|
72
73
|
};
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aHdpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hdXRod2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxFQUFxQixFQUFFLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUEwQjNGLCtDQUErQztBQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLEVBQUUsTUFBc0MsRUFBRSxRQUF3QixFQUFFLEVBQUU7SUFDbEgsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNqQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBRWpDLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLFlBQVksMkJBQTJCLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNwSCxPQUFPLHVCQUF1QixDQUM1QixNQUFNLENBQUMsRUFBRSxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsTUFBTSxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDckcsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0UsQ0FBQztBQUNILENBQUMsQ0FBQztBQUNGLDZDQUE2QztBQUU3QyxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyxLQUFLLEVBQUUsTUFBb0IsRUFBRSxNQUFvQixFQUFFLEVBQUUsQ0FDcEcsdUJBQXVCLENBQUM7SUFDdEIsTUFBTSxDQUFDLE9BQU8sRUFBRTtJQUNoQixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUN6QixDQUFDLE1BQU0sWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO0NBQ2xELENBQUMsQ0FBQztBQUVMOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLElBQVUsRUFBRSxFQUFFO0lBQ3BELE9BQU8sMEJBQTBCLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFFBQXNCLEVBQUUsT0FBVyxFQUFFLE9BQVcsRUFBRSxTQUFhLEVBQUUsRUFBRTtJQUNsRyxPQUFPLDBCQUEwQixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JILENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Fr } from '@aztec/circuits.js';
|
|
2
|
+
import { deriveStorageSlotInMap } from '@aztec/circuits.js/hash';
|
|
3
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
4
|
+
/**
|
|
5
|
+
* A class that provides utility functions for interacting with the aztec chain.
|
|
6
|
+
*/ export class AztecCheatCodes {
|
|
7
|
+
pxe;
|
|
8
|
+
logger;
|
|
9
|
+
constructor(/**
|
|
10
|
+
* The PXE Service to use for interacting with the chain
|
|
11
|
+
*/ pxe, /**
|
|
12
|
+
* The logger to use for the aztec cheatcodes
|
|
13
|
+
*/ logger = createLogger('aztecjs:cheat_codes')){
|
|
14
|
+
this.pxe = pxe;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Computes the slot value for a given map and key.
|
|
19
|
+
* @param mapSlot - The slot of the map (specified in Aztec.nr contract)
|
|
20
|
+
* @param key - The key to lookup in the map
|
|
21
|
+
* @returns The storage slot of the value in the map
|
|
22
|
+
*/ computeSlotInMap(mapSlot, key) {
|
|
23
|
+
const keyFr = typeof key === 'bigint' ? new Fr(key) : key.toField();
|
|
24
|
+
return deriveStorageSlotInMap(mapSlot, keyFr);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the current blocknumber
|
|
28
|
+
* @returns The current block number
|
|
29
|
+
*/ async blockNumber() {
|
|
30
|
+
return await this.pxe.getBlockNumber();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get the current timestamp
|
|
34
|
+
* @returns The current timestamp
|
|
35
|
+
*/ async timestamp() {
|
|
36
|
+
const res = await this.pxe.getBlock(await this.blockNumber());
|
|
37
|
+
return res?.header.globalVariables.timestamp.toNumber() ?? 0;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Loads the value stored at the given slot in the public storage of the given contract.
|
|
41
|
+
* @param who - The address of the contract
|
|
42
|
+
* @param slot - The storage slot to lookup
|
|
43
|
+
* @returns The value stored at the given slot
|
|
44
|
+
*/ async loadPublic(who, slot) {
|
|
45
|
+
const storageValue = await this.pxe.getPublicStorageAt(who, new Fr(slot));
|
|
46
|
+
return storageValue;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Loads the value stored at the given slot in the private storage of the given contract.
|
|
50
|
+
* @param contract - The address of the contract
|
|
51
|
+
* @param owner - The owner for whom the notes are encrypted
|
|
52
|
+
* @param slot - The storage slot to lookup
|
|
53
|
+
* @returns The notes stored at the given slot
|
|
54
|
+
*/ async loadPrivate(owner, contract, slot) {
|
|
55
|
+
const extendedNotes = await this.pxe.getNotes({
|
|
56
|
+
owner,
|
|
57
|
+
contractAddress: contract,
|
|
58
|
+
storageSlot: new Fr(slot)
|
|
59
|
+
});
|
|
60
|
+
return extendedNotes.map((extendedNote)=>extendedNote.note);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -3,15 +3,13 @@ import { Fr } from '@aztec/circuits.js';
|
|
|
3
3
|
* This turns
|
|
4
4
|
* @param field - The field that contains the string
|
|
5
5
|
* @returns - the string that is decoded from the field
|
|
6
|
-
*/
|
|
7
|
-
export const readFieldCompressedString = (field) => {
|
|
6
|
+
*/ export const readFieldCompressedString = (field)=>{
|
|
8
7
|
const vals = Array.from(new Fr(field.value).toBuffer());
|
|
9
8
|
let str = '';
|
|
10
|
-
for
|
|
9
|
+
for(let i = 0; i < vals.length; i++){
|
|
11
10
|
if (vals[i] != 0) {
|
|
12
11
|
str += String.fromCharCode(Number(vals[i]));
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
14
|
return str;
|
|
16
15
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRfY29tcHJlc3NlZF9zdHJpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZmllbGRfY29tcHJlc3NlZF9zdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBV3hDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEtBQWdDLEVBQVUsRUFBRTtJQUNwRixNQUFNLElBQUksR0FBYSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRWxFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQyJ9
|
package/dest/utils/index.js
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export * from './pxe.js';
|
|
7
|
-
export * from './node.js';
|
|
8
|
-
export * from './anvil_test_watcher.js';
|
|
9
|
-
export * from './field_compressed_string.js';
|
|
10
|
-
export * from './portal_manager.js';
|
|
11
|
-
export * from './chain_monitor.js';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQyJ9
|
|
1
|
+
export { generatePublicKey } from './pub_key.js';
|
|
2
|
+
export { computeAuthWitMessageHash, computeInnerAuthWitHash, computeInnerAuthWitHashFromAction } from './authwit.js';
|
|
3
|
+
export { waitForPXE } from './pxe.js';
|
|
4
|
+
export { waitForNode, createAztecNodeClient, AztecNode } from './node.js';
|
|
5
|
+
export { readFieldCompressedString } from './field_compressed_string.js';
|
package/dest/utils/node.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
2
|
-
export const waitForNode = async (node, logger)
|
|
3
|
-
await retryUntil(async ()
|
|
2
|
+
export const waitForNode = async (node, logger)=>{
|
|
3
|
+
await retryUntil(async ()=>{
|
|
4
4
|
try {
|
|
5
5
|
logger?.verbose('Attempting to contact Aztec node...');
|
|
6
6
|
await node.getNodeInfo();
|
|
7
7
|
logger?.verbose('Contacted Aztec node');
|
|
8
8
|
return true;
|
|
9
|
-
}
|
|
10
|
-
catch (error) {
|
|
9
|
+
} catch (error) {
|
|
11
10
|
logger?.verbose('Failed to contact Aztec Node');
|
|
12
11
|
}
|
|
13
12
|
return undefined;
|
|
14
13
|
}, 'RPC Get Node Info');
|
|
15
14
|
};
|
|
16
|
-
|
|
15
|
+
export { createAztecNodeClient, AztecNode } from '@aztec/circuit-types';
|
package/dest/utils/pub_key.js
CHANGED
|
@@ -3,9 +3,7 @@ import { Grumpkin } from '@aztec/circuits.js/barretenberg';
|
|
|
3
3
|
* Method for generating a public grumpkin key from a private key.
|
|
4
4
|
* @param privateKey - The private key.
|
|
5
5
|
* @returns The generated public key.
|
|
6
|
-
*/
|
|
7
|
-
export function generatePublicKey(privateKey) {
|
|
6
|
+
*/ export function generatePublicKey(privateKey) {
|
|
8
7
|
const grumpkin = new Grumpkin();
|
|
9
8
|
return grumpkin.mul(grumpkin.generator(), privateKey);
|
|
10
9
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHViX2tleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wdWJfa2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFVBQTBCO0lBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7SUFDaEMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RCxDQUFDIn0=
|
package/dest/utils/pxe.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { retryUntil } from '@aztec/foundation/retry';
|
|
2
|
-
export const waitForPXE = async (pxe, logger)
|
|
3
|
-
await retryUntil(async ()
|
|
2
|
+
export const waitForPXE = async (pxe, logger)=>{
|
|
3
|
+
await retryUntil(async ()=>{
|
|
4
4
|
try {
|
|
5
5
|
logger?.verbose('Attempting to contact PXE...');
|
|
6
6
|
await pxe.getNodeInfo();
|
|
7
7
|
logger?.verbose('Contacted PXE');
|
|
8
8
|
return true;
|
|
9
|
-
}
|
|
10
|
-
catch (error) {
|
|
9
|
+
} catch (error) {
|
|
11
10
|
logger?.verbose('Failed to contact PXE');
|
|
12
11
|
}
|
|
13
12
|
return undefined;
|
|
14
13
|
}, 'RPC Get Node Info');
|
|
15
14
|
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHhlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3B4ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxHQUFRLEVBQUUsTUFBZSxFQUFFLEVBQUU7SUFDNUQsTUFBTSxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIn0=
|
|
@@ -2,15 +2,16 @@ import { Fr } from '@aztec/circuits.js';
|
|
|
2
2
|
import { FunctionType } from '@aztec/foundation/abi';
|
|
3
3
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
4
4
|
import { ContractFunctionInteraction } from '../contract/contract_function_interaction.js';
|
|
5
|
-
import { computeAuthWitMessageHash, computeInnerAuthWitHashFromAction
|
|
5
|
+
import { computeAuthWitMessageHash, computeInnerAuthWitHashFromAction } from '../utils/authwit.js';
|
|
6
6
|
import { BaseWallet } from './base_wallet.js';
|
|
7
7
|
/**
|
|
8
8
|
* A wallet implementation that forwards authentication requests to a provided account.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
constructor(pxe, account)
|
|
12
|
-
super(pxe, [
|
|
13
|
-
|
|
9
|
+
*/ export class AccountWallet extends BaseWallet {
|
|
10
|
+
account;
|
|
11
|
+
constructor(pxe, account){
|
|
12
|
+
super(pxe, [
|
|
13
|
+
account.getAddress()
|
|
14
|
+
]), this.account = account;
|
|
14
15
|
}
|
|
15
16
|
createTxExecutionRequest(exec) {
|
|
16
17
|
return this.account.createTxExecutionRequest(exec);
|
|
@@ -25,24 +26,21 @@ export class AccountWallet extends BaseWallet {
|
|
|
25
26
|
return this.pxe.isL1ToL2MessageSynced(l1ToL2Message);
|
|
26
27
|
}
|
|
27
28
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
async createAuthWit(messageHashOrIntent) {
|
|
29
|
+
* Computes an authentication witness from either a message hash or an intent.
|
|
30
|
+
*
|
|
31
|
+
* If a message hash is provided, it will create a witness for the hash directly.
|
|
32
|
+
* Otherwise, it will compute the message hash using the intent, along with the
|
|
33
|
+
* chain id and the version values provided by the wallet.
|
|
34
|
+
*
|
|
35
|
+
* @param messageHashOrIntent - The message hash of the intent to approve
|
|
36
|
+
* @returns The authentication witness
|
|
37
|
+
*/ async createAuthWit(messageHashOrIntent) {
|
|
38
38
|
let messageHash;
|
|
39
39
|
if (Buffer.isBuffer(messageHashOrIntent)) {
|
|
40
40
|
messageHash = Fr.fromBuffer(messageHashOrIntent);
|
|
41
|
-
}
|
|
42
|
-
else if (messageHashOrIntent instanceof Fr) {
|
|
41
|
+
} else if (messageHashOrIntent instanceof Fr) {
|
|
43
42
|
messageHash = messageHashOrIntent;
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
43
|
+
} else {
|
|
46
44
|
messageHash = await this.getMessageHash(messageHashOrIntent);
|
|
47
45
|
}
|
|
48
46
|
const witness = await this.account.createAuthWit(messageHash);
|
|
@@ -50,28 +48,25 @@ export class AccountWallet extends BaseWallet {
|
|
|
50
48
|
return witness;
|
|
51
49
|
}
|
|
52
50
|
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
async setPublicAuthWit(messageHashOrIntent, authorized) {
|
|
51
|
+
* Returns a function interaction to set a message hash as authorized or revoked in this account.
|
|
52
|
+
*
|
|
53
|
+
* Public calls can then consume this authorization.
|
|
54
|
+
*
|
|
55
|
+
* @param messageHashOrIntent - The message hash or intent to authorize/revoke
|
|
56
|
+
* @param authorized - True to authorize, false to revoke authorization.
|
|
57
|
+
* @returns - A function interaction.
|
|
58
|
+
*/ async setPublicAuthWit(messageHashOrIntent, authorized) {
|
|
62
59
|
let messageHash;
|
|
63
60
|
if (Buffer.isBuffer(messageHashOrIntent)) {
|
|
64
61
|
messageHash = Fr.fromBuffer(messageHashOrIntent);
|
|
65
|
-
}
|
|
66
|
-
else if (messageHashOrIntent instanceof Fr) {
|
|
62
|
+
} else if (messageHashOrIntent instanceof Fr) {
|
|
67
63
|
messageHash = messageHashOrIntent;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
64
|
+
} else {
|
|
70
65
|
messageHash = await this.getMessageHash(messageHashOrIntent);
|
|
71
66
|
}
|
|
72
67
|
return new ContractFunctionInteraction(this, ProtocolContractAddress.AuthRegistry, this.getSetAuthorizedAbi(), [
|
|
73
68
|
messageHash,
|
|
74
|
-
authorized
|
|
69
|
+
authorized
|
|
75
70
|
]);
|
|
76
71
|
}
|
|
77
72
|
async getInnerHashAndConsumer(intent) {
|
|
@@ -79,57 +74,67 @@ export class AccountWallet extends BaseWallet {
|
|
|
79
74
|
const action = intent.action instanceof ContractFunctionInteraction ? await intent.action.request() : intent.action;
|
|
80
75
|
return {
|
|
81
76
|
innerHash: await computeInnerAuthWitHashFromAction(intent.caller, action),
|
|
82
|
-
consumer: action.to
|
|
77
|
+
consumer: action.to
|
|
78
|
+
};
|
|
79
|
+
} else if (Buffer.isBuffer(intent.innerHash)) {
|
|
80
|
+
return {
|
|
81
|
+
innerHash: Fr.fromBuffer(intent.innerHash),
|
|
82
|
+
consumer: intent.consumer
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
return {
|
|
86
|
+
innerHash: intent.innerHash,
|
|
87
|
+
consumer: intent.consumer
|
|
88
|
+
};
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
getMessageHash(intent) {
|
|
91
|
+
* Returns the message hash for the given intent
|
|
92
|
+
*
|
|
93
|
+
* @param intent - A tuple of (consumer and inner hash) or (caller and action)
|
|
94
|
+
* @returns The message hash
|
|
95
|
+
*/ getMessageHash(intent) {
|
|
97
96
|
const chainId = this.getChainId();
|
|
98
97
|
const version = this.getVersion();
|
|
99
|
-
return computeAuthWitMessageHash(intent, {
|
|
98
|
+
return computeAuthWitMessageHash(intent, {
|
|
99
|
+
chainId,
|
|
100
|
+
version
|
|
101
|
+
});
|
|
100
102
|
}
|
|
101
103
|
/**
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
async lookupValidity(onBehalfOf, intent) {
|
|
104
|
+
* Lookup the validity of an authwit in private and public contexts.
|
|
105
|
+
*
|
|
106
|
+
* Uses the chain id and version of the wallet.
|
|
107
|
+
*
|
|
108
|
+
* @param onBehalfOf - The address of the "approver"
|
|
109
|
+
* @param intent - The consumer and inner hash or the caller and action to lookup
|
|
110
|
+
*
|
|
111
|
+
* @returns - A struct containing the validity of the authwit in private and public contexts.
|
|
112
|
+
*/ async lookupValidity(onBehalfOf, intent) {
|
|
112
113
|
const { innerHash, consumer } = await this.getInnerHashAndConsumer(intent);
|
|
113
114
|
const messageHash = await this.getMessageHash(intent);
|
|
114
|
-
const results = {
|
|
115
|
+
const results = {
|
|
116
|
+
isValidInPrivate: false,
|
|
117
|
+
isValidInPublic: false
|
|
118
|
+
};
|
|
115
119
|
// Check private
|
|
116
120
|
const witness = await this.getAuthWitness(messageHash);
|
|
117
121
|
if (witness !== undefined) {
|
|
118
|
-
results.isValidInPrivate =
|
|
122
|
+
results.isValidInPrivate = await new ContractFunctionInteraction(this, onBehalfOf, this.getLookupValidityAbi(), [
|
|
119
123
|
consumer,
|
|
120
|
-
innerHash
|
|
121
|
-
]).simulate()
|
|
124
|
+
innerHash
|
|
125
|
+
]).simulate();
|
|
122
126
|
}
|
|
123
127
|
// check public
|
|
124
|
-
results.isValidInPublic =
|
|
128
|
+
results.isValidInPublic = await new ContractFunctionInteraction(this, ProtocolContractAddress.AuthRegistry, this.getIsConsumableAbi(), [
|
|
129
|
+
onBehalfOf,
|
|
130
|
+
messageHash
|
|
131
|
+
]).simulate();
|
|
125
132
|
return results;
|
|
126
133
|
}
|
|
127
|
-
/** Returns the complete address of the account that implements this wallet. */
|
|
128
|
-
getCompleteAddress() {
|
|
134
|
+
/** Returns the complete address of the account that implements this wallet. */ getCompleteAddress() {
|
|
129
135
|
return this.account.getCompleteAddress();
|
|
130
136
|
}
|
|
131
|
-
/** Returns the address of the account that implements this wallet. */
|
|
132
|
-
getAddress() {
|
|
137
|
+
/** Returns the address of the account that implements this wallet. */ getAddress() {
|
|
133
138
|
return this.getCompleteAddress().address;
|
|
134
139
|
}
|
|
135
140
|
getSetAuthorizedAbi() {
|
|
@@ -142,17 +147,21 @@ export class AccountWallet extends BaseWallet {
|
|
|
142
147
|
parameters: [
|
|
143
148
|
{
|
|
144
149
|
name: 'message_hash',
|
|
145
|
-
type: {
|
|
146
|
-
|
|
150
|
+
type: {
|
|
151
|
+
kind: 'field'
|
|
152
|
+
},
|
|
153
|
+
visibility: 'private'
|
|
147
154
|
},
|
|
148
155
|
{
|
|
149
156
|
name: 'authorize',
|
|
150
|
-
type: {
|
|
151
|
-
|
|
152
|
-
|
|
157
|
+
type: {
|
|
158
|
+
kind: 'boolean'
|
|
159
|
+
},
|
|
160
|
+
visibility: 'private'
|
|
161
|
+
}
|
|
153
162
|
],
|
|
154
163
|
returnTypes: [],
|
|
155
|
-
errorTypes: {}
|
|
164
|
+
errorTypes: {}
|
|
156
165
|
};
|
|
157
166
|
}
|
|
158
167
|
getLookupValidityAbi() {
|
|
@@ -162,9 +171,21 @@ export class AccountWallet extends BaseWallet {
|
|
|
162
171
|
functionType: FunctionType.UNCONSTRAINED,
|
|
163
172
|
isInternal: false,
|
|
164
173
|
isStatic: false,
|
|
165
|
-
parameters: [
|
|
166
|
-
|
|
167
|
-
|
|
174
|
+
parameters: [
|
|
175
|
+
{
|
|
176
|
+
name: 'message_hash',
|
|
177
|
+
type: {
|
|
178
|
+
kind: 'field'
|
|
179
|
+
},
|
|
180
|
+
visibility: 'private'
|
|
181
|
+
}
|
|
182
|
+
],
|
|
183
|
+
returnTypes: [
|
|
184
|
+
{
|
|
185
|
+
kind: 'boolean'
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
errorTypes: {}
|
|
168
189
|
};
|
|
169
190
|
}
|
|
170
191
|
getIsConsumableAbi() {
|
|
@@ -178,17 +199,33 @@ export class AccountWallet extends BaseWallet {
|
|
|
178
199
|
{
|
|
179
200
|
name: 'address',
|
|
180
201
|
type: {
|
|
181
|
-
fields: [
|
|
202
|
+
fields: [
|
|
203
|
+
{
|
|
204
|
+
name: 'inner',
|
|
205
|
+
type: {
|
|
206
|
+
kind: 'field'
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
],
|
|
182
210
|
kind: 'struct',
|
|
183
|
-
path: 'authwit::aztec::protocol_types::address::aztec_address::AztecAddress'
|
|
211
|
+
path: 'authwit::aztec::protocol_types::address::aztec_address::AztecAddress'
|
|
184
212
|
},
|
|
185
|
-
visibility: 'private'
|
|
213
|
+
visibility: 'private'
|
|
186
214
|
},
|
|
187
|
-
{
|
|
215
|
+
{
|
|
216
|
+
name: 'message_hash',
|
|
217
|
+
type: {
|
|
218
|
+
kind: 'field'
|
|
219
|
+
},
|
|
220
|
+
visibility: 'private'
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
returnTypes: [
|
|
224
|
+
{
|
|
225
|
+
kind: 'boolean'
|
|
226
|
+
}
|
|
188
227
|
],
|
|
189
|
-
|
|
190
|
-
errorTypes: {},
|
|
228
|
+
errorTypes: {}
|
|
191
229
|
};
|
|
192
230
|
}
|
|
193
231
|
}
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudF93YWxsZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2FsbGV0L2FjY291bnRfd2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBcUIsRUFBRSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFpRCxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRixPQUFPLEVBR0wseUJBQXlCLEVBQ3pCLGlDQUFpQyxHQUNsQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsVUFBVTtJQUMzQyxZQUFZLEdBQVEsRUFBWSxPQUF5QjtRQUN2RCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQURMLFlBQU8sR0FBUCxPQUFPLENBQWtCO0lBRXpELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUEwQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVRLHFCQUFxQixDQUFDLGFBQWlCO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7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
|