@wonderland/aztec-fee-payment 0.0.0 → 4.1.0-rc.4
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/LICENSE +17 -2
- package/README.md +127 -2
- package/dist/src/artifacts/BridgedFPC.d.ts +67 -0
- package/dist/src/artifacts/BridgedFPC.d.ts.map +1 -0
- package/dist/src/artifacts/BridgedFPC.js +62 -0
- package/dist/src/artifacts/Counter.d.ts +63 -0
- package/dist/src/artifacts/Counter.d.ts.map +1 -0
- package/dist/src/artifacts/Counter.js +62 -0
- package/dist/src/ts/artifactRegistry.d.ts +46 -0
- package/dist/src/ts/artifactRegistry.d.ts.map +1 -0
- package/dist/src/ts/artifactRegistry.js +128 -0
- package/dist/src/ts/fee-payment-methods/bridged.d.ts +34 -0
- package/dist/src/ts/fee-payment-methods/bridged.d.ts.map +1 -0
- package/dist/src/ts/fee-payment-methods/bridged.js +69 -0
- package/dist/src/ts/fee-payment-methods/index.d.ts +3 -0
- package/dist/src/ts/fee-payment-methods/index.d.ts.map +1 -0
- package/dist/src/ts/fee-payment-methods/index.js +3 -0
- package/dist/src/ts/fee-payment-methods/shared.d.ts +34 -0
- package/dist/src/ts/fee-payment-methods/shared.d.ts.map +1 -0
- package/dist/src/ts/fee-payment-methods/shared.js +72 -0
- package/dist/src/ts/index.d.ts +27 -0
- package/dist/src/ts/index.d.ts.map +1 -0
- package/dist/src/ts/index.js +34 -0
- package/dist/src/ts/utils/deploy.d.ts +22 -0
- package/dist/src/ts/utils/deploy.d.ts.map +1 -0
- package/dist/src/ts/utils/deploy.js +28 -0
- package/dist/src/ts/utils/gas.d.ts +51 -0
- package/dist/src/ts/utils/gas.d.ts.map +1 -0
- package/dist/src/ts/utils/gas.js +60 -0
- package/dist/src/ts/utils/index.d.ts +3 -0
- package/dist/src/ts/utils/index.d.ts.map +1 -0
- package/dist/src/ts/utils/index.js +5 -0
- package/dist/target/bridged_contract-BridgedFPC.json +8821 -0
- package/dist/target/counter_contract-Counter.json +2691 -0
- package/package.json +29 -8
- package/target/bridged_contract-BridgedFPC.json +8821 -0
- package/target/bridged_contract-BridgedFPC.json.bak +1 -0
- package/target/counter_contract-Counter.json +2691 -0
- package/target/counter_contract-Counter.json.bak +1 -0
- package/index.d.ts +0 -1
- package/index.js +0 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025
|
|
3
|
+
Copyright (c) 2025 Wonderland
|
|
4
|
+
|
|
4
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
6
|
-
in the Software without restriction
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,128 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Aztec Fee Payment Contracts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A Fee Payment Contract (FPC) for Aztec that enables transaction fee sponsorship via bridged FeeJuice.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
| Contract | Description | Auth model |
|
|
8
|
+
|----------|-------------|-----------|
|
|
9
|
+
| **BridgedFPC** | Fully private. Users bridge FeeJuice from L1; the bridge claim converts to internal wFJ balance for fee sponsorship. | Cryptographic bridge proof (no owner, no agent) |
|
|
10
|
+
|
|
11
|
+
## Project Structure
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
├── src/
|
|
15
|
+
│ ├── artifacts/ # Generated contract bindings
|
|
16
|
+
│ ├── nr/ # Noir smart contracts
|
|
17
|
+
│ │ ├── counter_contract/ # Test utility contract
|
|
18
|
+
│ │ └── bridged_contract/ # BridgedFPC
|
|
19
|
+
│ └── ts/ # TypeScript package
|
|
20
|
+
│ ├── fee-payment-methods/ # Fee payment method classes
|
|
21
|
+
│ ├── utils/ # Utilities (gas, deploy)
|
|
22
|
+
│ └── test/ # Integration tests
|
|
23
|
+
├── target/ # Compiled contract artifacts
|
|
24
|
+
├── benchmarks/ # Performance benchmarks
|
|
25
|
+
└── docs/ # Product requirements
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Setup
|
|
29
|
+
|
|
30
|
+
### Prerequisites
|
|
31
|
+
|
|
32
|
+
- [Aztec Sandbox](https://docs.aztec.network/getting_started) v3.0.0 or later
|
|
33
|
+
- Node.js 22+
|
|
34
|
+
- Yarn 1.22+
|
|
35
|
+
|
|
36
|
+
### Installation
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
yarn install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Compile Contracts
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Full rebuild: compile Noir + generate TS bindings
|
|
46
|
+
yarn ccc
|
|
47
|
+
|
|
48
|
+
# Or step by step
|
|
49
|
+
aztec compile
|
|
50
|
+
aztec codegen target --outdir src/artifacts
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Testing
|
|
54
|
+
|
|
55
|
+
Start the Aztec sandbox:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
aztec start --local-network
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Run all tests:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
yarn test # Noir unit tests + JS integration tests
|
|
65
|
+
yarn test:nr # Noir unit tests only
|
|
66
|
+
yarn test:js # JS integration tests only
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## External Usage
|
|
70
|
+
|
|
71
|
+
See [src/ts/README.md](src/ts/README.md) for detailed documentation on using the published NPM package.
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
yarn add @defi-wonderland/aztec-fee-payment
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### BridgedFPC
|
|
78
|
+
|
|
79
|
+
Fully private; no owner and no off-chain agent. Users bridge FeeJuice from L1 to the FPC address, then call `mint` to convert the bridge claim into private wFJ balance.
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import {
|
|
83
|
+
BridgedFPCContract,
|
|
84
|
+
FPCFeePaymentMethod,
|
|
85
|
+
BridgedMintAndPayFeePaymentMethod,
|
|
86
|
+
registerBridgedContract,
|
|
87
|
+
} from '@defi-wonderland/aztec-fee-payment';
|
|
88
|
+
|
|
89
|
+
// Register the BridgedFPC — no deployment transaction needed (fully private contract)
|
|
90
|
+
const fpc = await registerBridgedContract(wallet);
|
|
91
|
+
|
|
92
|
+
// --- L1: deposit to FeeJuicePortal with a claimer-bound secretHash ---
|
|
93
|
+
// secretHash = computeSecretHash(poseidon2([salt, claimerAddress], DOM_SEP))
|
|
94
|
+
// FeeJuicePortal.depositToAztecPublic(_to=fpc.address, _amount, secretHash)
|
|
95
|
+
|
|
96
|
+
// --- L2: two-step flow ---
|
|
97
|
+
// Step 1: claim FeeJuice on L2 (emits FeeJuice nullifier)
|
|
98
|
+
await feeJuice.methods.claim(fpc.address, amount, secret, leafIndex).send();
|
|
99
|
+
|
|
100
|
+
// Step 2: mint internal wFJ balance by proving the bridge claim
|
|
101
|
+
await fpc.methods.mint(amount, salt, leafIndex).send();
|
|
102
|
+
|
|
103
|
+
// User sponsors a transaction from their internal balance
|
|
104
|
+
await myContract.methods.doSomething()
|
|
105
|
+
.send({ fee: { paymentMethod: new FPCFeePaymentMethod(fpc.address) } });
|
|
106
|
+
|
|
107
|
+
// --- Cold-start: claim + mint + pay fee in one transaction ---
|
|
108
|
+
await myContract.methods.doSomething()
|
|
109
|
+
.send({
|
|
110
|
+
fee: {
|
|
111
|
+
paymentMethod: new BridgedMintAndPayFeePaymentMethod(
|
|
112
|
+
fpc.address, amount, secret, salt, leafIndex,
|
|
113
|
+
),
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Benchmarks
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
yarn benchmark
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Benchmarks are defined in `Nargo.toml` under `[benchmark]` and run against a live local network. Each contract has its own benchmark file in `benchmarks/`.
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type AztecAddressLike, type ContractArtifact, type FieldLike } from '@aztec/aztec.js/abi';
|
|
3
|
+
import { ContractBase, ContractFunctionInteraction, type ContractMethod, type ContractStorageLayout, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { PublicKeys } from '@aztec/aztec.js/keys';
|
|
5
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
6
|
+
export declare const BridgedFPCContractArtifact: ContractArtifact;
|
|
7
|
+
/**
|
|
8
|
+
* Type-safe interface for contract BridgedFPC;
|
|
9
|
+
*/
|
|
10
|
+
export declare class BridgedFPCContract extends ContractBase {
|
|
11
|
+
private constructor();
|
|
12
|
+
/**
|
|
13
|
+
* Creates a contract instance.
|
|
14
|
+
* @param address - The deployed contract's address.
|
|
15
|
+
* @param wallet - The wallet to use when interacting with the contract.
|
|
16
|
+
* @returns A new Contract instance.
|
|
17
|
+
*/
|
|
18
|
+
static at(address: AztecAddress, wallet: Wallet): BridgedFPCContract;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a tx to deploy a new instance of this contract.
|
|
21
|
+
*/
|
|
22
|
+
static deploy(wallet: Wallet): DeployMethod<BridgedFPCContract>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
25
|
+
*/
|
|
26
|
+
static deployWithPublicKeys(publicKeys: PublicKeys, wallet: Wallet): DeployMethod<BridgedFPCContract>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a tx to deploy a new instance of this contract using the specified constructor method.
|
|
29
|
+
*/
|
|
30
|
+
static deployWithOpts<M extends keyof BridgedFPCContract['methods']>(opts: {
|
|
31
|
+
publicKeys?: PublicKeys;
|
|
32
|
+
method?: M;
|
|
33
|
+
wallet: Wallet;
|
|
34
|
+
}, ...args: Parameters<BridgedFPCContract['methods'][M]>): DeployMethod<BridgedFPCContract>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns this contract's artifact.
|
|
37
|
+
*/
|
|
38
|
+
static get artifact(): ContractArtifact;
|
|
39
|
+
/**
|
|
40
|
+
* Returns this contract's artifact with public bytecode.
|
|
41
|
+
*/
|
|
42
|
+
static get artifactForPublic(): ContractArtifact;
|
|
43
|
+
static get storage(): ContractStorageLayout<'balances'>;
|
|
44
|
+
/** Type-safe wrappers for the public methods exposed by the contract. */
|
|
45
|
+
methods: {
|
|
46
|
+
/** balance_of(account: struct) */
|
|
47
|
+
balance_of: ((account: AztecAddressLike) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
48
|
+
/** mint(amount: integer, salt: field, leaf_index: field) */
|
|
49
|
+
mint: ((amount: (bigint | number), salt: FieldLike, leaf_index: FieldLike) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
50
|
+
/** mint_and_pay_fee(amount: integer, salt: field, leaf_index: field) */
|
|
51
|
+
mint_and_pay_fee: ((amount: (bigint | number), salt: FieldLike, leaf_index: FieldLike) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
52
|
+
/** pay_fee() */
|
|
53
|
+
pay_fee: (() => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
54
|
+
/** process_message(message_ciphertext: struct, message_context: struct) */
|
|
55
|
+
process_message: ((message_ciphertext: FieldLike[], message_context: {
|
|
56
|
+
tx_hash: FieldLike;
|
|
57
|
+
unique_note_hashes_in_tx: FieldLike[];
|
|
58
|
+
first_nullifier_in_tx: FieldLike;
|
|
59
|
+
recipient: AztecAddressLike;
|
|
60
|
+
}) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
61
|
+
/** public_dispatch(selector: field) */
|
|
62
|
+
public_dispatch: ((selector: FieldLike) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
63
|
+
/** sync_state() */
|
|
64
|
+
sync_state: (() => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=BridgedFPC.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BridgedFPC.d.ts","sourceRoot":"","sources":["../../../src/artifacts/BridgedFPC.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* Autogenerated file, do not edit! */
|
|
2
|
+
import { loadContractArtifact, loadContractArtifactForPublic } from '@aztec/aztec.js/abi';
|
|
3
|
+
import { Contract, ContractBase, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { PublicKeys } from '@aztec/aztec.js/keys';
|
|
6
|
+
import BridgedFPCContractArtifactJson from '../../target/bridged_contract-BridgedFPC.json' with { type: 'json' };
|
|
7
|
+
export const BridgedFPCContractArtifact = loadContractArtifact(BridgedFPCContractArtifactJson);
|
|
8
|
+
/**
|
|
9
|
+
* Type-safe interface for contract BridgedFPC;
|
|
10
|
+
*/
|
|
11
|
+
export class BridgedFPCContract extends ContractBase {
|
|
12
|
+
constructor(address, wallet) {
|
|
13
|
+
super(address, BridgedFPCContractArtifact, wallet);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a contract instance.
|
|
17
|
+
* @param address - The deployed contract's address.
|
|
18
|
+
* @param wallet - The wallet to use when interacting with the contract.
|
|
19
|
+
* @returns A new Contract instance.
|
|
20
|
+
*/
|
|
21
|
+
static at(address, wallet) {
|
|
22
|
+
return Contract.at(address, BridgedFPCContract.artifact, wallet);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a tx to deploy a new instance of this contract.
|
|
26
|
+
*/
|
|
27
|
+
static deploy(wallet) {
|
|
28
|
+
return new DeployMethod(PublicKeys.default(), wallet, BridgedFPCContractArtifact, (instance, wallet) => BridgedFPCContract.at(instance.address, wallet), Array.from(arguments).slice(1));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
32
|
+
*/
|
|
33
|
+
static deployWithPublicKeys(publicKeys, wallet) {
|
|
34
|
+
return new DeployMethod(publicKeys, wallet, BridgedFPCContractArtifact, (instance, wallet) => BridgedFPCContract.at(instance.address, wallet), Array.from(arguments).slice(2));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates a tx to deploy a new instance of this contract using the specified constructor method.
|
|
38
|
+
*/
|
|
39
|
+
static deployWithOpts(opts, ...args) {
|
|
40
|
+
return new DeployMethod(opts.publicKeys ?? PublicKeys.default(), opts.wallet, BridgedFPCContractArtifact, (instance, wallet) => BridgedFPCContract.at(instance.address, wallet), Array.from(arguments).slice(1), opts.method ?? 'constructor');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns this contract's artifact.
|
|
44
|
+
*/
|
|
45
|
+
static get artifact() {
|
|
46
|
+
return BridgedFPCContractArtifact;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns this contract's artifact with public bytecode.
|
|
50
|
+
*/
|
|
51
|
+
static get artifactForPublic() {
|
|
52
|
+
return loadContractArtifactForPublic(BridgedFPCContractArtifactJson);
|
|
53
|
+
}
|
|
54
|
+
static get storage() {
|
|
55
|
+
return {
|
|
56
|
+
balances: {
|
|
57
|
+
slot: new Fr(1n),
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnJpZGdlZEZQQy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcnRpZmFjdHMvQnJpZGdlZEZQQy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxzQ0FBc0M7QUFJdEMsT0FBTyxFQUE0SixvQkFBb0IsRUFBRSw2QkFBNkIsRUFBb0YsTUFBTSxxQkFBcUIsQ0FBQztBQUN0VSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBZ0YsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0osT0FBTyxFQUFFLEVBQUUsRUFBUyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyw4QkFBOEIsTUFBTSwrQ0FBK0MsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxvQkFBb0IsQ0FBQyw4QkFBc0QsQ0FBQyxDQUFDO0FBSXZIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFlBQVk7SUFFbEQsWUFDRSxPQUFxQixFQUNyQixNQUFjO1FBRWQsS0FBSyxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBSUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQXFCLEVBQ3JCLE1BQWM7UUFFZCxPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQXVCLENBQUM7SUFDekYsQ0FBQztJQUdEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sSUFBSSxZQUFZLENBQXFCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9NLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxVQUFzQixFQUFFLE1BQWM7UUFDdkUsT0FBTyxJQUFJLFlBQVksQ0FBcUIsVUFBVSxFQUFFLE1BQU0sRUFBRSwwQkFBMEIsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDck0sQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsSUFBNkQsRUFDN0QsR0FBRyxJQUFrRDtRQUVyRCxPQUFPLElBQUksWUFBWSxDQUNyQixJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFDWCwwQkFBMEIsRUFDMUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFDckUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzlCLElBQUksQ0FBQyxNQUFNLElBQUksYUFBYSxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUlEOztPQUVHO0lBQ0ksTUFBTSxLQUFLLFFBQVE7UUFDeEIsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLEtBQUssaUJBQWlCO1FBQ2pDLE9BQU8sNkJBQTZCLENBQUMsOEJBQXNELENBQUMsQ0FBQztJQUMvRixDQUFDO0lBR00sTUFBTSxLQUFLLE9BQU87UUFDckIsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDWixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2pCO1NBQ3VDLENBQUM7SUFDekMsQ0FBQztDQTZCSiJ9
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { AztecAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type AztecAddressLike, type ContractArtifact, type FieldLike } from '@aztec/aztec.js/abi';
|
|
3
|
+
import { ContractBase, ContractFunctionInteraction, type ContractMethod, type ContractStorageLayout, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { PublicKeys } from '@aztec/aztec.js/keys';
|
|
5
|
+
import type { Wallet } from '@aztec/aztec.js/wallet';
|
|
6
|
+
export declare const CounterContractArtifact: ContractArtifact;
|
|
7
|
+
/**
|
|
8
|
+
* Type-safe interface for contract Counter;
|
|
9
|
+
*/
|
|
10
|
+
export declare class CounterContract extends ContractBase {
|
|
11
|
+
private constructor();
|
|
12
|
+
/**
|
|
13
|
+
* Creates a contract instance.
|
|
14
|
+
* @param address - The deployed contract's address.
|
|
15
|
+
* @param wallet - The wallet to use when interacting with the contract.
|
|
16
|
+
* @returns A new Contract instance.
|
|
17
|
+
*/
|
|
18
|
+
static at(address: AztecAddress, wallet: Wallet): CounterContract;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a tx to deploy a new instance of this contract.
|
|
21
|
+
*/
|
|
22
|
+
static deploy(wallet: Wallet): DeployMethod<CounterContract>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
25
|
+
*/
|
|
26
|
+
static deployWithPublicKeys(publicKeys: PublicKeys, wallet: Wallet): DeployMethod<CounterContract>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a tx to deploy a new instance of this contract using the specified constructor method.
|
|
29
|
+
*/
|
|
30
|
+
static deployWithOpts<M extends keyof CounterContract['methods']>(opts: {
|
|
31
|
+
publicKeys?: PublicKeys;
|
|
32
|
+
method?: M;
|
|
33
|
+
wallet: Wallet;
|
|
34
|
+
}, ...args: Parameters<CounterContract['methods'][M]>): DeployMethod<CounterContract>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns this contract's artifact.
|
|
37
|
+
*/
|
|
38
|
+
static get artifact(): ContractArtifact;
|
|
39
|
+
/**
|
|
40
|
+
* Returns this contract's artifact with public bytecode.
|
|
41
|
+
*/
|
|
42
|
+
static get artifactForPublic(): ContractArtifact;
|
|
43
|
+
static get storage(): ContractStorageLayout<'counter'>;
|
|
44
|
+
/** Type-safe wrappers for the public methods exposed by the contract. */
|
|
45
|
+
methods: {
|
|
46
|
+
/** get_counter() */
|
|
47
|
+
get_counter: (() => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
48
|
+
/** increment() */
|
|
49
|
+
increment: (() => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
50
|
+
/** process_message(message_ciphertext: struct, message_context: struct) */
|
|
51
|
+
process_message: ((message_ciphertext: FieldLike[], message_context: {
|
|
52
|
+
tx_hash: FieldLike;
|
|
53
|
+
unique_note_hashes_in_tx: FieldLike[];
|
|
54
|
+
first_nullifier_in_tx: FieldLike;
|
|
55
|
+
recipient: AztecAddressLike;
|
|
56
|
+
}) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
57
|
+
/** public_dispatch(selector: field) */
|
|
58
|
+
public_dispatch: ((selector: FieldLike) => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
59
|
+
/** sync_state() */
|
|
60
|
+
sync_state: (() => ContractFunctionInteraction) & Pick<ContractMethod, 'selector'>;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Counter.d.ts","sourceRoot":"","sources":["../../../src/artifacts/Counter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAmB,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAgB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAqD,KAAK,SAAS,EAAoK,MAAM,qBAAqB,CAAC;AACtU,OAAO,EAAY,YAAY,EAAE,2BAA2B,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAG/J,OAAO,EAAkB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,eAAO,MAAM,uBAAuB,kBAA4E,CAAC;AAIjH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAE/C,OAAO;IASP;;;;;OAKG;WACW,EAAE,CACd,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,GACb,eAAe;IAKlB;;OAEG;WACW,MAAM,CAAC,MAAM,EAAE,MAAM;IAInC;;OAEG;WACW,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM;IAIzE;;OAEG;WACW,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,CAAC,SAAS,CAAC,EACrE,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC7D,GAAG,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAcpD;;OAEG;IACH,WAAkB,QAAQ,IAAI,gBAAgB,CAE7C;IAED;;OAEG;IACH,WAAkB,iBAAiB,IAAI,gBAAgB,CAEtD;IAGD,WAAkB,OAAO,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAM1D;IAGH,yEAAyE;IAC1D,OAAO,EAAE;QAEtB,oBAAoB;QACpB,WAAW,EAAE,CAAC,MAAM,2BAA2B,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAEpF,kBAAkB;QAClB,SAAS,EAAE,CAAC,MAAM,2BAA2B,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAElF,2EAA2E;QAC3E,eAAe,EAAE,CAAC,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE;YAAE,OAAO,EAAE,SAAS,CAAC;YAAC,wBAAwB,EAAE,SAAS,EAAE,CAAC;YAAC,qBAAqB,EAAE,SAAS,CAAC;YAAC,SAAS,EAAE,gBAAgB,CAAA;SAAE,KAAK,2BAA2B,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAEtQ,uCAAuC;QACvC,eAAe,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAK,2BAA2B,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAE3G,mBAAmB;QACnB,UAAU,EAAE,CAAC,MAAM,2BAA2B,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;KACpF,CAAC;CAGH"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* Autogenerated file, do not edit! */
|
|
2
|
+
import { loadContractArtifact, loadContractArtifactForPublic } from '@aztec/aztec.js/abi';
|
|
3
|
+
import { Contract, ContractBase, DeployMethod } from '@aztec/aztec.js/contracts';
|
|
4
|
+
import { Fr } from '@aztec/aztec.js/fields';
|
|
5
|
+
import { PublicKeys } from '@aztec/aztec.js/keys';
|
|
6
|
+
import CounterContractArtifactJson from '../../target/counter_contract-Counter.json' with { type: 'json' };
|
|
7
|
+
export const CounterContractArtifact = loadContractArtifact(CounterContractArtifactJson);
|
|
8
|
+
/**
|
|
9
|
+
* Type-safe interface for contract Counter;
|
|
10
|
+
*/
|
|
11
|
+
export class CounterContract extends ContractBase {
|
|
12
|
+
constructor(address, wallet) {
|
|
13
|
+
super(address, CounterContractArtifact, wallet);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a contract instance.
|
|
17
|
+
* @param address - The deployed contract's address.
|
|
18
|
+
* @param wallet - The wallet to use when interacting with the contract.
|
|
19
|
+
* @returns A new Contract instance.
|
|
20
|
+
*/
|
|
21
|
+
static at(address, wallet) {
|
|
22
|
+
return Contract.at(address, CounterContract.artifact, wallet);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a tx to deploy a new instance of this contract.
|
|
26
|
+
*/
|
|
27
|
+
static deploy(wallet) {
|
|
28
|
+
return new DeployMethod(PublicKeys.default(), wallet, CounterContractArtifact, (instance, wallet) => CounterContract.at(instance.address, wallet), Array.from(arguments).slice(1));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates a tx to deploy a new instance of this contract using the specified public keys hash to derive the address.
|
|
32
|
+
*/
|
|
33
|
+
static deployWithPublicKeys(publicKeys, wallet) {
|
|
34
|
+
return new DeployMethod(publicKeys, wallet, CounterContractArtifact, (instance, wallet) => CounterContract.at(instance.address, wallet), Array.from(arguments).slice(2));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Creates a tx to deploy a new instance of this contract using the specified constructor method.
|
|
38
|
+
*/
|
|
39
|
+
static deployWithOpts(opts, ...args) {
|
|
40
|
+
return new DeployMethod(opts.publicKeys ?? PublicKeys.default(), opts.wallet, CounterContractArtifact, (instance, wallet) => CounterContract.at(instance.address, wallet), Array.from(arguments).slice(1), opts.method ?? 'constructor');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns this contract's artifact.
|
|
44
|
+
*/
|
|
45
|
+
static get artifact() {
|
|
46
|
+
return CounterContractArtifact;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns this contract's artifact with public bytecode.
|
|
50
|
+
*/
|
|
51
|
+
static get artifactForPublic() {
|
|
52
|
+
return loadContractArtifactForPublic(CounterContractArtifactJson);
|
|
53
|
+
}
|
|
54
|
+
static get storage() {
|
|
55
|
+
return {
|
|
56
|
+
counter: {
|
|
57
|
+
slot: new Fr(1n),
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ291bnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcnRpZmFjdHMvQ291bnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxzQ0FBc0M7QUFJdEMsT0FBTyxFQUE0SixvQkFBb0IsRUFBRSw2QkFBNkIsRUFBb0YsTUFBTSxxQkFBcUIsQ0FBQztBQUN0VSxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBZ0YsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0osT0FBTyxFQUFFLEVBQUUsRUFBUyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTywyQkFBMkIsTUFBTSw0Q0FBNEMsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUMzRyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxvQkFBb0IsQ0FBQywyQkFBbUQsQ0FBQyxDQUFDO0FBSWpIOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsWUFBWTtJQUUvQyxZQUNFLE9BQXFCLEVBQ3JCLE1BQWM7UUFFZCxLQUFLLENBQUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFJRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQ2QsT0FBcUIsRUFDckIsTUFBYztRQUVkLE9BQU8sUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQW9CLENBQUM7SUFDbkYsQ0FBQztJQUdEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sSUFBSSxZQUFZLENBQWtCLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0TSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsVUFBc0IsRUFBRSxNQUFjO1FBQ3ZFLE9BQU8sSUFBSSxZQUFZLENBQWtCLFVBQVUsRUFBRSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1TCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUMxQixJQUE2RCxFQUM3RCxHQUFHLElBQStDO1FBRWxELE9BQU8sSUFBSSxZQUFZLENBQ3JCLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUN2QyxJQUFJLENBQUMsTUFBTSxFQUNYLHVCQUF1QixFQUN2QixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFDbEUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzlCLElBQUksQ0FBQyxNQUFNLElBQUksYUFBYSxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUlEOztPQUVHO0lBQ0ksTUFBTSxLQUFLLFFBQVE7UUFDeEIsT0FBTyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLEtBQUssaUJBQWlCO1FBQ2pDLE9BQU8sNkJBQTZCLENBQUMsMkJBQW1ELENBQUMsQ0FBQztJQUM1RixDQUFDO0lBR00sTUFBTSxLQUFLLE9BQU87UUFDckIsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2pCO1NBQ3NDLENBQUM7SUFDeEMsQ0FBQztDQXVCSiJ9
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { NoirCompiledContract } from "@aztec/aztec.js/abi";
|
|
2
|
+
export type ArtifactRegistryUploadResponse = {
|
|
3
|
+
success: true;
|
|
4
|
+
filename?: string;
|
|
5
|
+
classId?: string;
|
|
6
|
+
contractName?: string;
|
|
7
|
+
functionCount?: number;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
} | {
|
|
10
|
+
success: false;
|
|
11
|
+
error?: string;
|
|
12
|
+
message?: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
};
|
|
15
|
+
export declare function getArtifactRegistryBaseUrl(): string;
|
|
16
|
+
export declare function shouldUploadArtifacts(): boolean;
|
|
17
|
+
export declare function isStrictUpload(): boolean;
|
|
18
|
+
export declare function uploadArtifactToRegistry(params: {
|
|
19
|
+
artifact: unknown;
|
|
20
|
+
filename: string;
|
|
21
|
+
registryBaseUrl?: string;
|
|
22
|
+
}): Promise<ArtifactRegistryUploadResponse>;
|
|
23
|
+
export declare function uploadArtifactFileToRegistry(params: {
|
|
24
|
+
artifactPath: string;
|
|
25
|
+
filename?: string;
|
|
26
|
+
registryBaseUrl?: string;
|
|
27
|
+
}): Promise<ArtifactRegistryUploadResponse>;
|
|
28
|
+
export declare function maybeUploadArtifactToRegistry(params: {
|
|
29
|
+
artifact: unknown;
|
|
30
|
+
filename: string;
|
|
31
|
+
registryBaseUrl?: string;
|
|
32
|
+
}): Promise<ArtifactRegistryUploadResponse | null>;
|
|
33
|
+
export declare function fetchArtifactFromRegistry(params: {
|
|
34
|
+
classId: string;
|
|
35
|
+
registryBaseUrl?: string;
|
|
36
|
+
}): Promise<unknown>;
|
|
37
|
+
/**
|
|
38
|
+
* Loads an artifact from the registry with fallback to local file.
|
|
39
|
+
* Tries registry first if classId is provided, then falls back to local file.
|
|
40
|
+
*/
|
|
41
|
+
export declare function loadArtifactWithRegistryFallback(params: {
|
|
42
|
+
classId?: string;
|
|
43
|
+
localPath: string;
|
|
44
|
+
registryBaseUrl?: string;
|
|
45
|
+
}): Promise<NoirCompiledContract>;
|
|
46
|
+
//# sourceMappingURL=artifactRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifactRegistry.d.ts","sourceRoot":"","sources":["../../../src/ts/artifactRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,MAAM,8BAA8B,GACtC;IACE,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAMN,wBAAgB,0BAA0B,IAAI,MAAM,CAKnD;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE;IACrD,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAsC1C;AAED,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAU1C;AAED,wBAAsB,6BAA6B,CAAC,MAAM,EAAE;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC,CAejD;AAED,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,OAAO,CAAC,CAmBnB;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,MAAM,EAAE;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAmChC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { dirname } from "node:path";
|
|
6
|
+
function normalizeBaseUrl(baseUrl) {
|
|
7
|
+
return baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
|
|
8
|
+
}
|
|
9
|
+
export function getArtifactRegistryBaseUrl() {
|
|
10
|
+
return (process.env.AZTEC_ARTIFACT_REGISTRY_URL ??
|
|
11
|
+
"https://devnet.aztec-registry.xyz/");
|
|
12
|
+
}
|
|
13
|
+
export function shouldUploadArtifacts() {
|
|
14
|
+
const v = process.env.AZTEC_ARTIFACT_REGISTRY_UPLOAD ?? "";
|
|
15
|
+
return v === "1" || v.toLowerCase() === "true";
|
|
16
|
+
}
|
|
17
|
+
export function isStrictUpload() {
|
|
18
|
+
const v = process.env.AZTEC_ARTIFACT_REGISTRY_STRICT ?? "";
|
|
19
|
+
return v === "1" || v.toLowerCase() === "true";
|
|
20
|
+
}
|
|
21
|
+
export async function uploadArtifactToRegistry(params) {
|
|
22
|
+
const base = normalizeBaseUrl(params.registryBaseUrl ?? getArtifactRegistryBaseUrl());
|
|
23
|
+
const uploadUrl = new URL("api/upload", base).toString();
|
|
24
|
+
const body = new FormData();
|
|
25
|
+
const payload = JSON.stringify(params.artifact);
|
|
26
|
+
body.set("file", new Blob([payload], { type: "application/json" }), params.filename);
|
|
27
|
+
const res = await fetch(uploadUrl, { method: "POST", body });
|
|
28
|
+
// The registry commonly returns JSON even on 409; treat duplicates as non-fatal by default.
|
|
29
|
+
const text = await res.text();
|
|
30
|
+
const parsed = text ? safeJsonParse(text) : { success: res.ok };
|
|
31
|
+
if (res.ok) {
|
|
32
|
+
return isRegistryResponseObject(parsed)
|
|
33
|
+
? parsed
|
|
34
|
+
: { success: true };
|
|
35
|
+
}
|
|
36
|
+
// Duplicate artifact (already uploaded) should not break deploys unless strict mode is enabled.
|
|
37
|
+
if (res.status === 409) {
|
|
38
|
+
return isRegistryResponseObject(parsed)
|
|
39
|
+
? { ...parsed, success: true }
|
|
40
|
+
: { success: true, message: "Artifact already exists in registry" };
|
|
41
|
+
}
|
|
42
|
+
const msg = typeof parsed === "object" && parsed
|
|
43
|
+
? JSON.stringify(parsed)
|
|
44
|
+
: text || `HTTP ${res.status} ${res.statusText}`;
|
|
45
|
+
throw new Error(`Artifact registry upload failed (${res.status}): ${msg}`);
|
|
46
|
+
}
|
|
47
|
+
export async function uploadArtifactFileToRegistry(params) {
|
|
48
|
+
const buf = await readFile(params.artifactPath, "utf8");
|
|
49
|
+
const artifact = JSON.parse(buf);
|
|
50
|
+
const filename = params.filename ?? params.artifactPath.split("/").pop() ?? "artifact.json";
|
|
51
|
+
return await uploadArtifactToRegistry({
|
|
52
|
+
artifact,
|
|
53
|
+
filename,
|
|
54
|
+
registryBaseUrl: params.registryBaseUrl,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export async function maybeUploadArtifactToRegistry(params) {
|
|
58
|
+
if (!shouldUploadArtifacts())
|
|
59
|
+
return null;
|
|
60
|
+
try {
|
|
61
|
+
const resp = await uploadArtifactToRegistry(params);
|
|
62
|
+
return resp;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (isStrictUpload())
|
|
66
|
+
throw err;
|
|
67
|
+
// Best-effort upload; do not fail deployments by default.
|
|
68
|
+
console.warn(`[artifact-registry] Upload failed (continuing): ${err instanceof Error ? err.message : String(err)}`);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function fetchArtifactFromRegistry(params) {
|
|
73
|
+
const base = normalizeBaseUrl(params.registryBaseUrl ?? getArtifactRegistryBaseUrl());
|
|
74
|
+
const fetchUrl = new URL(`api/artifacts/${params.classId}`, base).toString();
|
|
75
|
+
const res = await fetch(fetchUrl, { method: "GET" });
|
|
76
|
+
if (!res.ok) {
|
|
77
|
+
if (res.status === 404) {
|
|
78
|
+
throw new Error(`Artifact not found in registry: ${params.classId}`);
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Failed to fetch artifact from registry (${res.status}): ${res.statusText}`);
|
|
81
|
+
}
|
|
82
|
+
const text = await res.text();
|
|
83
|
+
return safeJsonParse(text);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Loads an artifact from the registry with fallback to local file.
|
|
87
|
+
* Tries registry first if classId is provided, then falls back to local file.
|
|
88
|
+
*/
|
|
89
|
+
export async function loadArtifactWithRegistryFallback(params) {
|
|
90
|
+
// Try registry first if classId is provided
|
|
91
|
+
if (params.classId) {
|
|
92
|
+
try {
|
|
93
|
+
const artifact = await fetchArtifactFromRegistry({
|
|
94
|
+
classId: params.classId,
|
|
95
|
+
registryBaseUrl: params.registryBaseUrl,
|
|
96
|
+
});
|
|
97
|
+
return artifact;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
// Fall through to local file if registry fetch fails
|
|
101
|
+
console.warn(`Failed to fetch artifact from registry, using local file: ${error instanceof Error ? error.message : String(error)}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Fallback to local file
|
|
105
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
106
|
+
const __dirname = dirname(__filename);
|
|
107
|
+
const localArtifactPath = join(__dirname, "../../..", params.localPath);
|
|
108
|
+
if (!existsSync(localArtifactPath)) {
|
|
109
|
+
throw new Error(`Artifact not found at local path: ${localArtifactPath}. ` +
|
|
110
|
+
(params.classId
|
|
111
|
+
? `Registry fetch also failed for classId: ${params.classId}`
|
|
112
|
+
: "No classId provided for registry fetch."));
|
|
113
|
+
}
|
|
114
|
+
const buf = await readFile(localArtifactPath, "utf8");
|
|
115
|
+
return JSON.parse(buf);
|
|
116
|
+
}
|
|
117
|
+
function safeJsonParse(text) {
|
|
118
|
+
try {
|
|
119
|
+
return JSON.parse(text);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return text;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function isRegistryResponseObject(value) {
|
|
126
|
+
return typeof value === "object" && value !== null && "success" in value;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cy9hcnRpZmFjdFJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBbUJwQyxTQUFTLGdCQUFnQixDQUFDLE9BQWU7SUFDdkMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUM7QUFDekQsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsT0FBTyxDQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCO1FBQ3ZDLG9DQUFvQyxDQUNyQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUI7SUFDbkMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsSUFBSSxFQUFFLENBQUM7SUFDM0QsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjO0lBQzVCLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLElBQUksRUFBRSxDQUFDO0lBQzNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUFDLE1BSTlDO0lBQ0MsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQzNCLE1BQU0sQ0FBQyxlQUFlLElBQUksMEJBQTBCLEVBQUUsQ0FDdkQsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUV6RCxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQyxHQUFHLENBQ04sTUFBTSxFQUNOLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxFQUNqRCxNQUFNLENBQUMsUUFBUSxDQUNoQixDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTdELDRGQUE0RjtJQUM1RixNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBRXpFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1gsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLENBQUM7WUFDckMsQ0FBQyxDQUFFLE1BQXlDO1lBQzVDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0dBQWdHO0lBQ2hHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN2QixPQUFPLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDLENBQUMsRUFBRSxHQUFJLE1BQXlDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtZQUNsRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FDUCxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTTtRQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSw0QkFBNEIsQ0FBQyxNQUlsRDtJQUNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQVksQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FDWixNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLGVBQWUsQ0FBQztJQUM3RSxPQUFPLE1BQU0sd0JBQXdCLENBQUM7UUFDcEMsUUFBUTtRQUNSLFFBQVE7UUFDUixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7S0FDeEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsNkJBQTZCLENBQUMsTUFJbkQ7SUFDQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLGNBQWMsRUFBRTtZQUFFLE1BQU0sR0FBRyxDQUFDO1FBQ2hDLDBEQUEwRDtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUNWLG1EQUNFLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2pELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUseUJBQXlCLENBQUMsTUFHL0M7SUFDQyxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FDM0IsTUFBTSxDQUFDLGVBQWUsSUFBSSwwQkFBMEIsRUFBRSxDQUN2RCxDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3RSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUVyRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1osSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDJDQUEyQyxHQUFHLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQ0FBZ0MsQ0FBQyxNQUl0RDtJQUNDLDRDQUE0QztJQUM1QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLHlCQUF5QixDQUFDO2dCQUMvQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTthQUN4QyxDQUFDLENBQUM7WUFDSCxPQUFPLFFBQWdDLENBQUM7UUFDMUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixxREFBcUQ7WUFDckQsT0FBTyxDQUFDLElBQUksQ0FDViw2REFDRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2RCxFQUFFLENBQ0gsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUNiLHFDQUFxQyxpQkFBaUIsSUFBSTtZQUN4RCxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUNiLENBQUMsQ0FBQywyQ0FBMkMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDN0QsQ0FBQyxDQUFDLHlDQUF5QyxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBeUIsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFBWTtJQUNqQyxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFZLENBQUM7SUFDckMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLEtBQWM7SUFDOUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDO0FBQzNFLENBQUMifQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FeePaymentMethod } from "@aztec/aztec.js/fee";
|
|
2
|
+
import { AztecAddress } from "@aztec/stdlib/aztec-address";
|
|
3
|
+
import type { GasSettings } from "@aztec/stdlib/gas";
|
|
4
|
+
import { ExecutionPayload } from "@aztec/stdlib/tx";
|
|
5
|
+
import { Fr } from "@aztec/foundation/curves/bn254";
|
|
6
|
+
/**
|
|
7
|
+
* Fee payment method for BridgedFPC that bundles FeeJuice.claim +
|
|
8
|
+
* mint_and_pay_fee in a single transaction setup phase.
|
|
9
|
+
*
|
|
10
|
+
* Enables cold-start fee sponsorship directly from a L1 bridge deposit,
|
|
11
|
+
* with no prior `mint` call needed. The caller's wallet only needs to
|
|
12
|
+
* have done the L1 deposit; the L2 claim and wFJ credit happen atomically here.
|
|
13
|
+
*
|
|
14
|
+
* The payment calls (in order):
|
|
15
|
+
* 1. FeeJuice.claim(fpcAddress, amount, secret, leafIndex)
|
|
16
|
+
* - Consumes the L1→L2 message; emits the FeeJuice nullifier.
|
|
17
|
+
* 2. BridgedFPC.mint_and_pay_fee(amount, salt, leafIndex)
|
|
18
|
+
* - Asserts the FeeJuice nullifier exists (pending from step 1).
|
|
19
|
+
* - Credits (amount - max_gas_cost) to msg_sender.
|
|
20
|
+
* - Sets BridgedFPC as fee payer and ends setup.
|
|
21
|
+
*/
|
|
22
|
+
export declare class BridgedMintAndPayFeePaymentMethod implements FeePaymentMethod {
|
|
23
|
+
private readonly fpcAddress;
|
|
24
|
+
private readonly amount;
|
|
25
|
+
private readonly secret;
|
|
26
|
+
private readonly salt;
|
|
27
|
+
private readonly leafIndex;
|
|
28
|
+
constructor(fpcAddress: AztecAddress, amount: bigint, secret: Fr, salt: Fr, leafIndex: Fr);
|
|
29
|
+
getAsset(): Promise<AztecAddress>;
|
|
30
|
+
getFeePayer(): Promise<AztecAddress>;
|
|
31
|
+
getExecutionPayload(): Promise<ExecutionPayload>;
|
|
32
|
+
getGasSettings(): GasSettings | undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=bridged.d.ts.map
|