@aztec/ethereum 0.76.4 → 0.77.0-testnet-ignition.17

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.
Files changed (105) hide show
  1. package/dest/chain.d.ts +7 -7
  2. package/dest/chain.d.ts.map +1 -1
  3. package/dest/chain.js +18 -21
  4. package/dest/client.d.ts +3 -3
  5. package/dest/client.d.ts.map +1 -1
  6. package/dest/client.js +11 -15
  7. package/dest/config.js +14 -15
  8. package/dest/constants.d.ts +1 -1
  9. package/dest/constants.d.ts.map +1 -1
  10. package/dest/constants.js +0 -1
  11. package/dest/contracts/empire_base.d.ts +1 -1
  12. package/dest/contracts/empire_base.d.ts.map +1 -1
  13. package/dest/contracts/empire_base.js +3 -2
  14. package/dest/contracts/fee_juice.d.ts +15 -0
  15. package/dest/contracts/fee_juice.d.ts.map +1 -0
  16. package/dest/contracts/fee_juice.js +52 -0
  17. package/dest/contracts/forwarder.d.ts +5 -5
  18. package/dest/contracts/forwarder.d.ts.map +1 -1
  19. package/dest/contracts/forwarder.js +46 -26
  20. package/dest/contracts/governance.d.ts +70 -5
  21. package/dest/contracts/governance.d.ts.map +1 -1
  22. package/dest/contracts/governance.js +226 -10
  23. package/dest/contracts/governance_proposer.d.ts +3 -3
  24. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  25. package/dest/contracts/governance_proposer.js +78 -67
  26. package/dest/contracts/index.d.ts +2 -0
  27. package/dest/contracts/index.d.ts.map +1 -1
  28. package/dest/contracts/index.js +2 -1
  29. package/dest/contracts/registry.d.ts +24 -0
  30. package/dest/contracts/registry.d.ts.map +1 -0
  31. package/dest/contracts/registry.js +85 -0
  32. package/dest/contracts/rollup.d.ts +23 -26
  33. package/dest/contracts/rollup.d.ts.map +1 -1
  34. package/dest/contracts/rollup.js +229 -205
  35. package/dest/contracts/slashing_proposer.d.ts +3 -3
  36. package/dest/contracts/slashing_proposer.d.ts.map +1 -1
  37. package/dest/contracts/slashing_proposer.js +18 -8
  38. package/dest/deploy_l1_contracts.d.ts +4137 -3597
  39. package/dest/deploy_l1_contracts.d.ts.map +1 -1
  40. package/dest/deploy_l1_contracts.js +343 -233
  41. package/dest/eth_cheat_codes.d.ts +4 -3
  42. package/dest/eth_cheat_codes.d.ts.map +1 -1
  43. package/dest/eth_cheat_codes.js +202 -169
  44. package/dest/index.js +0 -1
  45. package/dest/l1_contract_addresses.d.ts +7 -5
  46. package/dest/l1_contract_addresses.d.ts.map +1 -1
  47. package/dest/l1_contract_addresses.js +17 -20
  48. package/dest/l1_reader.d.ts +1 -1
  49. package/dest/l1_reader.d.ts.map +1 -1
  50. package/dest/l1_reader.js +8 -8
  51. package/dest/l1_tx_utils.d.ts +7 -6
  52. package/dest/l1_tx_utils.d.ts.map +1 -1
  53. package/dest/l1_tx_utils.js +235 -187
  54. package/dest/l1_tx_utils_with_blobs.js +24 -21
  55. package/dest/queries.d.ts +4 -7
  56. package/dest/queries.d.ts.map +1 -1
  57. package/dest/queries.js +5 -18
  58. package/dest/test/delayed_tx_utils.js +3 -3
  59. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
  60. package/dest/test/eth_cheat_codes_with_state.js +19 -19
  61. package/dest/test/index.d.ts +1 -0
  62. package/dest/test/index.d.ts.map +1 -1
  63. package/dest/test/index.js +1 -1
  64. package/dest/test/start_anvil.d.ts +4 -1
  65. package/dest/test/start_anvil.d.ts.map +1 -1
  66. package/dest/test/start_anvil.js +19 -10
  67. package/dest/test/tx_delayer.d.ts +3 -2
  68. package/dest/test/tx_delayer.d.ts.map +1 -1
  69. package/dest/test/tx_delayer.js +77 -74
  70. package/dest/test/upgrade_utils.d.ts +11 -0
  71. package/dest/test/upgrade_utils.d.ts.map +1 -0
  72. package/dest/test/upgrade_utils.js +104 -0
  73. package/dest/types.d.ts +11 -9
  74. package/dest/types.d.ts.map +1 -1
  75. package/dest/types.js +1 -2
  76. package/dest/utils.d.ts +2 -2
  77. package/dest/utils.d.ts.map +1 -1
  78. package/dest/utils.js +35 -36
  79. package/package.json +7 -6
  80. package/src/chain.ts +10 -10
  81. package/src/client.ts +11 -9
  82. package/src/config.ts +1 -1
  83. package/src/constants.ts +1 -1
  84. package/src/contracts/empire_base.ts +1 -1
  85. package/src/contracts/fee_juice.ts +43 -0
  86. package/src/contracts/forwarder.ts +7 -11
  87. package/src/contracts/governance.ts +245 -10
  88. package/src/contracts/governance_proposer.ts +4 -13
  89. package/src/contracts/index.ts +2 -0
  90. package/src/contracts/registry.ts +106 -0
  91. package/src/contracts/rollup.ts +36 -53
  92. package/src/contracts/slashing_proposer.ts +5 -12
  93. package/src/deploy_l1_contracts.ts +264 -217
  94. package/src/eth_cheat_codes.ts +79 -59
  95. package/src/l1_contract_addresses.ts +3 -4
  96. package/src/l1_reader.ts +4 -3
  97. package/src/l1_tx_utils.ts +11 -8
  98. package/src/queries.ts +5 -24
  99. package/src/test/eth_cheat_codes_with_state.ts +10 -8
  100. package/src/test/index.ts +1 -0
  101. package/src/test/start_anvil.ts +7 -3
  102. package/src/test/tx_delayer.ts +3 -2
  103. package/src/test/upgrade_utils.ts +100 -0
  104. package/src/types.ts +27 -20
  105. package/src/utils.ts +2 -2
package/dest/chain.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Chain } from 'viem';
1
+ import type { Chain } from 'viem';
2
2
  /**
3
3
  * Interface containing the connection and chain properties to interact with a blockchain.
4
4
  */
@@ -8,16 +8,16 @@ export interface EthereumChain {
8
8
  */
9
9
  chainInfo: Chain;
10
10
  /**
11
- * The actual url to be used.
11
+ * The list of actual urls to be used.
12
12
  */
13
- rpcUrl: string;
13
+ rpcUrls: string[];
14
14
  }
15
15
  /**
16
- * Helper function to create an instance of Aztec Chain from an rpc url and api key.
17
- * @param rpcUrl - The rpc url of the chain or a chain identifier (e.g. 'testnet')
18
- * @param apiKey - An optional API key for the chain client.
16
+ * Helper function to create an instance of Aztec Chain from an rpc url and chain id.
17
+ * @param rpcUrls - The rpc url of the chain or a chain identifier (e.g. 'http://localhost:8545')
18
+ * @param chainId - The chain id of the chain or a chain identifier (e.g. 1337)
19
19
  */
20
- export declare function createEthereumChain(rpcUrl: string, _chainId: number | string): EthereumChain;
20
+ export declare function createEthereumChain(rpcUrls: string[], _chainId: number | string): EthereumChain;
21
21
  /**
22
22
  * Helper function to determine if a chain id is an instance of Anvil
23
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAKlC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CA+B5F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CASnE"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAKlC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,SAAS,EAAE,KAAK,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CA+B/F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CASnE"}
package/dest/chain.js CHANGED
@@ -1,16 +1,14 @@
1
1
  import { foundry } from 'viem/chains';
2
2
  import { AZTEC_TEST_CHAIN_ID } from './constants.js';
3
3
  /**
4
- * Helper function to create an instance of Aztec Chain from an rpc url and api key.
5
- * @param rpcUrl - The rpc url of the chain or a chain identifier (e.g. 'testnet')
6
- * @param apiKey - An optional API key for the chain client.
7
- */
8
- export function createEthereumChain(rpcUrl, _chainId) {
4
+ * Helper function to create an instance of Aztec Chain from an rpc url and chain id.
5
+ * @param rpcUrls - The rpc url of the chain or a chain identifier (e.g. 'http://localhost:8545')
6
+ * @param chainId - The chain id of the chain or a chain identifier (e.g. 1337)
7
+ */ export function createEthereumChain(rpcUrls, _chainId) {
9
8
  let chainId;
10
9
  if (typeof _chainId === 'string') {
11
10
  chainId = +_chainId;
12
- }
13
- else {
11
+ } else {
14
12
  chainId = _chainId;
15
13
  }
16
14
  if (chainId) {
@@ -20,37 +18,36 @@ export function createEthereumChain(rpcUrl, _chainId) {
20
18
  name: 'Ethereum',
21
19
  rpcUrls: {
22
20
  default: {
23
- http: [rpcUrl],
24
- },
21
+ http: rpcUrls
22
+ }
25
23
  },
26
24
  nativeCurrency: {
27
25
  decimals: 18,
28
26
  name: 'Ether',
29
- symbol: 'ETH',
30
- },
27
+ symbol: 'ETH'
28
+ }
31
29
  },
32
- rpcUrl,
30
+ rpcUrls
33
31
  };
34
- }
35
- else {
32
+ } else {
36
33
  return {
37
34
  chainInfo: foundry,
38
- rpcUrl,
35
+ rpcUrls
39
36
  };
40
37
  }
41
38
  }
42
39
  /**
43
40
  * Helper function to determine if a chain id is an instance of Anvil
44
- */
45
- export function isAnvilTestChain(_chainId) {
41
+ */ export function isAnvilTestChain(_chainId) {
46
42
  let chainId;
47
43
  if (typeof _chainId === 'string') {
48
44
  chainId = +_chainId;
49
- }
50
- else {
45
+ } else {
51
46
  chainId = _chainId;
52
47
  }
53
- const testChains = [foundry.id, AZTEC_TEST_CHAIN_ID];
48
+ const testChains = [
49
+ foundry.id,
50
+ AZTEC_TEST_CHAIN_ID
51
+ ];
54
52
  return testChains.includes(chainId);
55
53
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWlCckQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7SUFDM0UsSUFBSSxPQUFlLENBQUM7SUFDcEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osT0FBTztZQUNMLFNBQVMsRUFBRTtnQkFDVCxFQUFFLEVBQUUsT0FBTztnQkFDWCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRTt3QkFDUCxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUM7cUJBQ2Y7aUJBQ0Y7Z0JBQ0QsY0FBYyxFQUFFO29CQUNkLFFBQVEsRUFBRSxFQUFFO29CQUNaLElBQUksRUFBRSxPQUFPO29CQUNiLE1BQU0sRUFBRSxLQUFLO2lCQUNkO2FBQ0Y7WUFDRCxNQUFNO1NBQ1AsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTztZQUNMLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUF5QjtJQUN4RCxJQUFJLE9BQWUsQ0FBQztJQUNwQixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztJQUN0QixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDckIsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDIn0=
package/dest/client.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { type Logger } from '@aztec/foundation/log';
2
- import { type ViemPublicClient } from './types.js';
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import type { ViemPublicClient } from './types.js';
3
3
  type Config = {
4
4
  /** The RPC Url of the ethereum host. */
5
- l1RpcUrl: string;
5
+ l1RpcUrls: string[];
6
6
  /** The chain ID of the ethereum host. */
7
7
  l1ChainId: number;
8
8
  /** The polling interval viem uses in ms */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,KAAK,MAAM,GAAG;IACZ,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAIF,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAOhE;AAED,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIpG"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAMpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,KAAK,MAAM,GAAG;IACZ,wCAAwC;IACxC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAIF,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAOhE;AAED,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIpG"}
package/dest/client.js CHANGED
@@ -1,35 +1,31 @@
1
1
  import { retryUntil } from '@aztec/foundation/retry';
2
- import { createPublicClient, http } from 'viem';
2
+ import { createPublicClient, fallback, http } from 'viem';
3
3
  import { createEthereumChain } from './chain.js';
4
4
  // TODO: Use these methods to abstract the creation of viem clients.
5
- /** Returns a viem public client given the L1 config. */
6
- export function getPublicClient(config) {
7
- const chain = createEthereumChain(config.l1RpcUrl, config.l1ChainId);
5
+ /** Returns a viem public client given the L1 config. */ export function getPublicClient(config) {
6
+ const chain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
8
7
  return createPublicClient({
9
8
  chain: chain.chainInfo,
10
- transport: http(chain.rpcUrl),
11
- pollingInterval: config.viemPollingIntervalMS,
9
+ transport: fallback(config.l1RpcUrls.map((url)=>http(url))),
10
+ pollingInterval: config.viemPollingIntervalMS
12
11
  });
13
12
  }
14
- /** Returns a viem public client after waiting for the L1 RPC node to become available. */
15
- export async function waitForPublicClient(config, logger) {
13
+ /** Returns a viem public client after waiting for the L1 RPC node to become available. */ export async function waitForPublicClient(config, logger) {
16
14
  const client = getPublicClient(config);
17
15
  await waitForRpc(client, config, logger);
18
16
  return client;
19
17
  }
20
18
  async function waitForRpc(client, config, logger) {
21
- const l1ChainId = await retryUntil(async () => {
19
+ const l1ChainId = await retryUntil(async ()=>{
22
20
  let chainId = 0;
23
21
  try {
24
22
  chainId = await client.getChainId();
25
- }
26
- catch (err) {
27
- logger?.warn(`Failed to connect to Ethereum node at ${config.l1RpcUrl}. Retrying...`);
23
+ } catch (err) {
24
+ logger?.warn(`Failed to connect to Ethereum node at ${config.l1RpcUrls.join(', ')}. Retrying...`);
28
25
  }
29
26
  return chainId;
30
- }, `L1 RPC url at ${config.l1RpcUrl}`, 600, 1);
27
+ }, `L1 RPC url at ${config.l1RpcUrls.join(', ')}`, 600, 1);
31
28
  if (l1ChainId !== config.l1ChainId) {
32
- throw new Error(`Ethereum node at ${config.l1RpcUrl} has chain ID ${l1ChainId} but expected ${config.l1ChainId}`);
29
+ throw new Error(`Ethereum node at ${config.l1RpcUrls.join(', ')} has chain ID ${l1ChainId} but expected ${config.l1ChainId}`);
33
30
  }
34
31
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFZakQsb0VBQW9FO0FBRXBFLHdEQUF3RDtBQUN4RCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWM7SUFDNUMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckUsT0FBTyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzdCLGVBQWUsRUFBRSxNQUFNLENBQUMscUJBQXFCO0tBQzlDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwwRkFBMEY7QUFDMUYsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsTUFBZTtJQUN2RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxNQUF3QixFQUFFLE1BQWMsRUFBRSxNQUFlO0lBQ2pGLE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUNoQyxLQUFLLElBQUksRUFBRTtRQUNULElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUM7WUFDSCxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxNQUFNLENBQUMsUUFBUSxlQUFlLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxFQUNELGlCQUFpQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2xDLEdBQUcsRUFDSCxDQUFDLENBQ0YsQ0FBQztJQUVGLElBQUksU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixNQUFNLENBQUMsUUFBUSxpQkFBaUIsU0FBUyxpQkFBaUIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDcEgsQ0FBQztBQUNILENBQUMifQ==
package/dest/config.js CHANGED
@@ -1,71 +1,70 @@
1
- import { bigintConfigHelper, getConfigFromMappings, numberConfigHelper, } from '@aztec/foundation/config';
1
+ import { bigintConfigHelper, getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
2
2
  import { l1TxUtilsConfigMappings } from './l1_tx_utils.js';
3
3
  export const DefaultL1ContractsConfig = {
4
4
  ethereumSlotDuration: 12,
5
5
  aztecSlotDuration: 24,
6
6
  aztecEpochDuration: 16,
7
7
  aztecTargetCommitteeSize: 48,
8
- aztecProofSubmissionWindow: 32, // you have a full epoch to submit a proof after the epoch to prove ends
8
+ aztecProofSubmissionWindow: 31,
9
9
  minimumStake: BigInt(100e18),
10
10
  slashingQuorum: 6,
11
11
  slashingRoundSize: 10,
12
12
  governanceProposerQuorum: 6,
13
- governanceProposerRoundSize: 10,
13
+ governanceProposerRoundSize: 10
14
14
  };
15
15
  export const l1ContractsConfigMappings = {
16
16
  ethereumSlotDuration: {
17
17
  env: 'ETHEREUM_SLOT_DURATION',
18
18
  description: 'How many seconds an L1 slot lasts.',
19
- ...numberConfigHelper(DefaultL1ContractsConfig.ethereumSlotDuration),
19
+ ...numberConfigHelper(DefaultL1ContractsConfig.ethereumSlotDuration)
20
20
  },
21
21
  aztecSlotDuration: {
22
22
  env: 'AZTEC_SLOT_DURATION',
23
23
  description: 'How many seconds an L2 slots lasts (must be multiple of ethereum slot duration).',
24
- ...numberConfigHelper(DefaultL1ContractsConfig.aztecSlotDuration),
24
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecSlotDuration)
25
25
  },
26
26
  aztecEpochDuration: {
27
27
  env: 'AZTEC_EPOCH_DURATION',
28
28
  description: `How many L2 slots an epoch lasts (maximum AZTEC_MAX_EPOCH_DURATION).`,
29
- ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochDuration),
29
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochDuration)
30
30
  },
31
31
  aztecTargetCommitteeSize: {
32
32
  env: 'AZTEC_TARGET_COMMITTEE_SIZE',
33
33
  description: 'The target validator committee size.',
34
- ...numberConfigHelper(DefaultL1ContractsConfig.aztecTargetCommitteeSize),
34
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecTargetCommitteeSize)
35
35
  },
36
36
  aztecProofSubmissionWindow: {
37
37
  env: 'AZTEC_PROOF_SUBMISSION_WINDOW',
38
38
  description: 'The number of L2 slots that a proof for an epoch can be submitted in, starting from the beginning of the epoch.',
39
- ...numberConfigHelper(DefaultL1ContractsConfig.aztecProofSubmissionWindow),
39
+ ...numberConfigHelper(DefaultL1ContractsConfig.aztecProofSubmissionWindow)
40
40
  },
41
41
  minimumStake: {
42
42
  env: 'AZTEC_MINIMUM_STAKE',
43
43
  description: 'The minimum stake for a validator.',
44
- ...bigintConfigHelper(DefaultL1ContractsConfig.minimumStake),
44
+ ...bigintConfigHelper(DefaultL1ContractsConfig.minimumStake)
45
45
  },
46
46
  slashingQuorum: {
47
47
  env: 'AZTEC_SLASHING_QUORUM',
48
48
  description: 'The slashing quorum',
49
- ...numberConfigHelper(DefaultL1ContractsConfig.slashingQuorum),
49
+ ...numberConfigHelper(DefaultL1ContractsConfig.slashingQuorum)
50
50
  },
51
51
  slashingRoundSize: {
52
52
  env: 'AZTEC_SLASHING_ROUND_SIZE',
53
53
  description: 'The slashing round size',
54
- ...numberConfigHelper(DefaultL1ContractsConfig.slashingRoundSize),
54
+ ...numberConfigHelper(DefaultL1ContractsConfig.slashingRoundSize)
55
55
  },
56
56
  governanceProposerQuorum: {
57
57
  env: 'AZTEC_GOVERNANCE_PROPOSER_QUORUM',
58
58
  description: 'The governance proposing quorum',
59
- ...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerQuorum),
59
+ ...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerQuorum)
60
60
  },
61
61
  governanceProposerRoundSize: {
62
62
  env: 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE',
63
63
  description: 'The governance proposing round size',
64
- ...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerRoundSize),
64
+ ...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerRoundSize)
65
65
  },
66
- ...l1TxUtilsConfigMappings,
66
+ ...l1TxUtilsConfigMappings
67
67
  };
68
68
  export function getL1ContractsConfigEnvVars() {
69
69
  return getConfigFromMappings(l1ContractsConfigMappings);
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQXdCLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUF5QmpGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHO0lBQ3RDLG9CQUFvQixFQUFFLEVBQUU7SUFDeEIsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLHdCQUF3QixFQUFFLEVBQUU7SUFDNUIsMEJBQTBCLEVBQUUsRUFBRSxFQUFFLHdFQUF3RTtJQUN4RyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1QixjQUFjLEVBQUUsQ0FBQztJQUNqQixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLHdCQUF3QixFQUFFLENBQUM7SUFDM0IsMkJBQTJCLEVBQUUsRUFBRTtDQUNKLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQTBDO0lBQzlFLG9CQUFvQixFQUFFO1FBQ3BCLEdBQUcsRUFBRSx3QkFBd0I7UUFDN0IsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDO0tBQ3JFO0lBQ0QsaUJBQWlCLEVBQUU7UUFDakIsR0FBRyxFQUFFLHFCQUFxQjtRQUMxQixXQUFXLEVBQUUsa0ZBQWtGO1FBQy9GLEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUM7S0FDbEU7SUFDRCxrQkFBa0IsRUFBRTtRQUNsQixHQUFHLEVBQUUsc0JBQXNCO1FBQzNCLFdBQVcsRUFBRSxzRUFBc0U7UUFDbkYsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQztLQUNuRTtJQUNELHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSw2QkFBNkI7UUFDbEMsV0FBVyxFQUFFLHNDQUFzQztRQUNuRCxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDO0tBQ3pFO0lBQ0QsMEJBQTBCLEVBQUU7UUFDMUIsR0FBRyxFQUFFLCtCQUErQjtRQUNwQyxXQUFXLEVBQ1QsaUhBQWlIO1FBQ25ILEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsMEJBQTBCLENBQUM7S0FDM0U7SUFDRCxZQUFZLEVBQUU7UUFDWixHQUFHLEVBQUUscUJBQXFCO1FBQzFCLFdBQVcsRUFBRSxvQ0FBb0M7UUFDakQsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUM7S0FDN0Q7SUFDRCxjQUFjLEVBQUU7UUFDZCxHQUFHLEVBQUUsdUJBQXVCO1FBQzVCLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUM7S0FDL0Q7SUFDRCxpQkFBaUIsRUFBRTtRQUNqQixHQUFHLEVBQUUsMkJBQTJCO1FBQ2hDLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUNsRTtJQUNELHdCQUF3QixFQUFFO1FBQ3hCLEdBQUcsRUFBRSxrQ0FBa0M7UUFDdkMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxHQUFHLGtCQUFrQixDQUFDLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDO0tBQ3pFO0lBQ0QsMkJBQTJCLEVBQUU7UUFDM0IsR0FBRyxFQUFFLHNDQUFzQztRQUMzQyxXQUFXLEVBQUUscUNBQXFDO1FBQ2xELEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsMkJBQTJCLENBQUM7S0FDNUU7SUFDRCxHQUFHLHVCQUF1QjtDQUMzQixDQUFDO0FBRUYsTUFBTSxVQUFVLDJCQUEyQjtJQUN6QyxPQUFPLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDMUQsQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import { type Hex } from 'viem';
1
+ import type { Hex } from 'viem';
2
2
  export declare const NULL_KEY: Hex;
3
3
  export declare const AZTEC_TEST_CHAIN_ID = 677692;
4
4
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,eAAO,MAAM,QAAQ,EAAE,GAA+E,CAAC;AACvG,eAAO,MAAM,mBAAmB,SAAS,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,eAAO,MAAM,QAAQ,EAAE,GAA+E,CAAC;AACvG,eAAO,MAAM,mBAAmB,SAAS,CAAC"}
package/dest/constants.js CHANGED
@@ -1,3 +1,2 @@
1
1
  export const NULL_KEY = `0x${'0000000000000000000000000000000000000000000000000000000000000000'}`;
2
2
  export const AZTEC_TEST_CHAIN_ID = 677692;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVEsS0FBSyxrRUFBa0UsRUFBRSxDQUFDO0FBQ3ZHLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyJ9
@@ -1,5 +1,5 @@
1
1
  import { type Hex } from 'viem';
2
- import { type L1TxRequest } from '../l1_tx_utils.js';
2
+ import type { L1TxRequest } from '../l1_tx_utils.js';
3
3
  export interface IEmpireBase {
4
4
  getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
5
5
  lastVote: bigint;
@@ -1 +1 @@
1
- {"version":3,"file":"empire_base.d.ts","sourceRoot":"","sources":["../../src/contracts/empire_base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAsB,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/G,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAM5C"}
1
+ {"version":3,"file":"empire_base.d.ts","sourceRoot":"","sources":["../../src/contracts/empire_base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAsB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/G,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC;CAC9C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAM5C"}
@@ -4,7 +4,8 @@ export function encodeVote(payload) {
4
4
  return encodeFunctionData({
5
5
  abi: EmpireBaseAbi,
6
6
  functionName: 'vote',
7
- args: [payload],
7
+ args: [
8
+ payload
9
+ ]
8
10
  });
9
11
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1waXJlX2Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2VtcGlyZV9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVsRSxPQUFPLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFVcEQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxPQUFZO0lBQ3JDLE9BQU8sa0JBQWtCLENBQUM7UUFDeEIsR0FBRyxFQUFFLGFBQWE7UUFDbEIsWUFBWSxFQUFFLE1BQU07UUFDcEIsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO0tBQ2hCLENBQUMsQ0FBQztBQUNMLENBQUMifQ==
@@ -0,0 +1,15 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { type Hex } from 'viem';
3
+ import type { L1Clients } from '../types.js';
4
+ export declare class FeeJuiceContract {
5
+ readonly publicClient: L1Clients['publicClient'];
6
+ readonly walletClient: L1Clients['walletClient'] | undefined;
7
+ private readonly publicFeeJuice;
8
+ private readonly walletFeeJuice;
9
+ constructor(address: Hex, publicClient: L1Clients['publicClient'], walletClient: L1Clients['walletClient'] | undefined);
10
+ get address(): EthAddress;
11
+ private assertWalletFeeJuice;
12
+ mint(to: Hex, amount: bigint): Promise<void>;
13
+ approve(spender: Hex, amount: bigint): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=fee_juice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee_juice.d.ts","sourceRoot":"","sources":["../../src/contracts/fee_juice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,gBAAgB;aAMT,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC;aACvC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS;IANrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuE;IACtG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmF;gBAGhH,OAAO,EAAE,GAAG,EACI,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,EACvC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS;IAMrE,IAAW,OAAO,eAEjB;IAED,OAAO,CAAC,oBAAoB;IAOf,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;IAM5B,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;CAKlD"}
@@ -0,0 +1,52 @@
1
+ import { EthAddress } from '@aztec/foundation/eth-address';
2
+ import { TestERC20Abi as FeeJuiceAbi } from '@aztec/l1-artifacts';
3
+ import { getContract } from 'viem';
4
+ export class FeeJuiceContract {
5
+ publicClient;
6
+ walletClient;
7
+ publicFeeJuice;
8
+ walletFeeJuice;
9
+ constructor(address, publicClient, walletClient){
10
+ this.publicClient = publicClient;
11
+ this.walletClient = walletClient;
12
+ this.publicFeeJuice = getContract({
13
+ address,
14
+ abi: FeeJuiceAbi,
15
+ client: publicClient
16
+ });
17
+ this.walletFeeJuice = walletClient ? getContract({
18
+ address,
19
+ abi: FeeJuiceAbi,
20
+ client: walletClient
21
+ }) : undefined;
22
+ }
23
+ get address() {
24
+ return EthAddress.fromString(this.publicFeeJuice.address);
25
+ }
26
+ assertWalletFeeJuice() {
27
+ if (!this.walletFeeJuice) {
28
+ throw new Error('Wallet client is required for this operation');
29
+ }
30
+ return this.walletFeeJuice;
31
+ }
32
+ async mint(to, amount) {
33
+ const walletFeeJuice = this.assertWalletFeeJuice();
34
+ const tx = await walletFeeJuice.write.mint([
35
+ to,
36
+ amount
37
+ ]);
38
+ await this.publicClient.waitForTransactionReceipt({
39
+ hash: tx
40
+ });
41
+ }
42
+ async approve(spender, amount) {
43
+ const walletFeeJuice = this.assertWalletFeeJuice();
44
+ const tx = await walletFeeJuice.write.approve([
45
+ spender,
46
+ amount
47
+ ]);
48
+ await this.publicClient.waitForTransactionReceipt({
49
+ hash: tx
50
+ });
51
+ }
52
+ }
@@ -1,13 +1,13 @@
1
- import { type Logger } from '@aztec/foundation/log';
2
- import { type Account, type Chain, type Hex, type HttpTransport, type PublicClient, type WalletClient } from 'viem';
3
- import { type L1Clients } from '../deploy_l1_contracts.js';
4
- import { type L1BlobInputs, type L1GasConfig, type L1TxRequest, type L1TxUtils } from '../l1_tx_utils.js';
1
+ import type { Logger } from '@aztec/foundation/log';
2
+ import { type Hex } from 'viem';
3
+ import type { L1BlobInputs, L1GasConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils.js';
4
+ import type { L1Clients, ViemPublicClient, ViemWalletClient } from '../types.js';
5
5
  export declare class ForwarderContract {
6
6
  readonly client: L1Clients['publicClient'];
7
7
  readonly rollupAddress: Hex;
8
8
  private readonly forwarder;
9
9
  constructor(client: L1Clients['publicClient'], address: Hex, rollupAddress: Hex);
10
- static create(owner: Hex, walletClient: WalletClient<HttpTransport, Chain, Account>, publicClient: PublicClient<HttpTransport, Chain>, logger: Logger, rollupAddress: Hex): Promise<ForwarderContract>;
10
+ static create(owner: Hex, walletClient: ViemWalletClient, publicClient: ViemPublicClient, logger: Logger, rollupAddress: Hex): Promise<ForwarderContract>;
11
11
  getAddress(): `0x${string}`;
12
12
  forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1GasConfig | undefined, blobConfig: L1BlobInputs | undefined, logger: Logger): Promise<{
13
13
  receipt: import("viem").TransactionReceipt;
@@ -1 +1 @@
1
- {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../../src/contracts/forwarder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAGV,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EAGlB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG1G,qBAAa,iBAAiB;aAGA,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;aAAgC,aAAa,EAAE,GAAG;IAF/G,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiF;gBAE/E,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAkB,aAAa,EAAE,GAAG;WAIlG,MAAM,CACjB,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,CAAC,EACzD,YAAY,EAAE,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,EAChD,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,GAAG;IAwBb,UAAU;IAIJ,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM;;;;;;;;;;;CAqEjB"}
1
+ {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../../src/contracts/forwarder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAGL,KAAK,GAAG,EAGT,MAAM,MAAM,CAAC;AAGd,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGjF,qBAAa,iBAAiB;aAGA,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC;aAAgC,aAAa,EAAE,GAAG;IAF/G,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+D;gBAE7D,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,GAAG,EAAkB,aAAa,EAAE,GAAG;WAIlG,MAAM,CACjB,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,gBAAgB,EAC9B,YAAY,EAAE,gBAAgB,EAC9B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,GAAG;IAwBb,UAAU;IAIJ,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM;;;;;;;;;;;CAqEjB"}
@@ -1,19 +1,30 @@
1
1
  import { toHex } from '@aztec/foundation/bigint-buffer';
2
2
  import { ForwarderAbi, ForwarderBytecode } from '@aztec/l1-artifacts';
3
- import { encodeFunctionData, getContract, } from 'viem';
3
+ import { encodeFunctionData, getContract } from 'viem';
4
4
  import { deployL1Contract } from '../deploy_l1_contracts.js';
5
5
  import { RollupContract } from './rollup.js';
6
6
  export class ForwarderContract {
7
- constructor(client, address, rollupAddress) {
7
+ client;
8
+ rollupAddress;
9
+ forwarder;
10
+ constructor(client, address, rollupAddress){
8
11
  this.client = client;
9
12
  this.rollupAddress = rollupAddress;
10
- this.forwarder = getContract({ address, abi: ForwarderAbi, client });
13
+ this.forwarder = getContract({
14
+ address,
15
+ abi: ForwarderAbi,
16
+ client
17
+ });
11
18
  }
12
19
  static async create(owner, walletClient, publicClient, logger, rollupAddress) {
13
20
  logger.info('Deploying forwarder contract');
14
- const { address, txHash } = await deployL1Contract(walletClient, publicClient, ForwarderAbi, ForwarderBytecode, [owner], owner, undefined, logger);
21
+ const { address, txHash } = await deployL1Contract(walletClient, publicClient, ForwarderAbi, ForwarderBytecode, [
22
+ owner
23
+ ], owner, undefined, logger);
15
24
  if (txHash) {
16
- await publicClient.waitForTransactionReceipt({ hash: txHash });
25
+ await publicClient.waitForTransactionReceipt({
26
+ hash: txHash
27
+ });
17
28
  }
18
29
  logger.info(`Forwarder contract deployed at ${address} with owner ${owner}`);
19
30
  return new ForwarderContract(publicClient, address.toString(), rollupAddress);
@@ -22,60 +33,69 @@ export class ForwarderContract {
22
33
  return this.forwarder.address;
23
34
  }
24
35
  async forward(requests, l1TxUtils, gasConfig, blobConfig, logger) {
25
- requests = requests.filter(request => request.to !== null);
26
- const toArgs = requests.map(request => request.to);
27
- const dataArgs = requests.map(request => request.data);
36
+ requests = requests.filter((request)=>request.to !== null);
37
+ const toArgs = requests.map((request)=>request.to);
38
+ const dataArgs = requests.map((request)=>request.data);
28
39
  const forwarderFunctionData = {
29
40
  abi: ForwarderAbi,
30
41
  functionName: 'forward',
31
- args: [toArgs, dataArgs],
42
+ args: [
43
+ toArgs,
44
+ dataArgs
45
+ ]
32
46
  };
33
47
  const encodedForwarderData = encodeFunctionData(forwarderFunctionData);
34
48
  const { receipt, gasPrice } = await l1TxUtils.sendAndMonitorTransaction({
35
49
  to: this.forwarder.address,
36
- data: encodedForwarderData,
50
+ data: encodedForwarderData
37
51
  }, gasConfig, blobConfig);
38
52
  if (receipt.status === 'success') {
39
53
  const stats = await l1TxUtils.getTransactionStats(receipt.transactionHash);
40
- return { receipt, gasPrice, stats };
41
- }
42
- else {
43
- logger.error('Forwarder transaction failed', undefined, { receipt });
54
+ return {
55
+ receipt,
56
+ gasPrice,
57
+ stats
58
+ };
59
+ } else {
60
+ logger.error('Forwarder transaction failed', undefined, {
61
+ receipt
62
+ });
44
63
  const args = {
45
64
  ...forwarderFunctionData,
46
- address: this.forwarder.address,
65
+ address: this.forwarder.address
47
66
  };
48
67
  let errorMsg;
49
68
  if (blobConfig) {
50
69
  const maxFeePerBlobGas = blobConfig.maxFeePerBlobGas ?? gasPrice.maxFeePerBlobGas;
51
70
  if (maxFeePerBlobGas === undefined) {
52
71
  errorMsg = 'maxFeePerBlobGas is required to get the error message';
53
- }
54
- else {
72
+ } else {
55
73
  logger.debug('Trying to get error from reverted tx with blob config');
56
74
  errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, {
57
75
  blobs: blobConfig.blobs,
58
76
  kzg: blobConfig.kzg,
59
- maxFeePerBlobGas,
77
+ maxFeePerBlobGas
60
78
  }, [
61
79
  {
62
80
  address: this.rollupAddress,
63
81
  stateDiff: [
64
82
  {
65
83
  slot: toHex(RollupContract.checkBlobStorageSlot, true),
66
- value: toHex(0n, true),
67
- },
68
- ],
69
- },
84
+ value: toHex(0n, true)
85
+ }
86
+ ]
87
+ }
70
88
  ]);
71
89
  }
72
- }
73
- else {
90
+ } else {
74
91
  logger.debug('Trying to get error from reverted tx without blob config');
75
92
  errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedForwarderData, args, undefined, []);
76
93
  }
77
- return { receipt, gasPrice, errorMsg };
94
+ return {
95
+ receipt,
96
+ gasPrice,
97
+ errorMsg
98
+ };
78
99
  }
79
100
  }
80
101
  }
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9mb3J3YXJkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXhELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFBNEIsTUFBaUMsRUFBRSxPQUFZLEVBQWtCLGFBQWtCO1FBQW5GLFdBQU0sR0FBTixNQUFNLENBQTJCO1FBQWdDLGtCQUFhLEdBQWIsYUFBYSxDQUFLO1FBQzdHLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEtBQVUsRUFDVixZQUF5RCxFQUN6RCxZQUFnRCxFQUNoRCxNQUFjLEVBQ2QsYUFBa0I7UUFFbEIsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FDaEQsWUFBWSxFQUNaLFlBQVksRUFDWixZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLENBQUMsS0FBSyxDQUFDLEVBQ1AsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLENBQ1AsQ0FBQztRQUVGLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLFlB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
@@ -1,14 +1,79 @@
1
1
  import { EthAddress } from '@aztec/foundation/eth-address';
2
- import { type Chain, type Hex, type HttpTransport, type PublicClient } from 'viem';
3
- import { type L1ContractAddresses } from '../l1_contract_addresses.js';
2
+ import type { Logger } from '@aztec/foundation/log';
3
+ import { type Hex } from 'viem';
4
+ import type { L1ContractAddresses } from '../l1_contract_addresses.js';
5
+ import type { ViemPublicClient, ViemWalletClient } from '../types.js';
4
6
  import { GovernanceProposerContract } from './governance_proposer.js';
5
7
  export type L1GovernanceContractAddresses = Pick<L1ContractAddresses, 'governanceAddress' | 'rollupAddress' | 'registryAddress' | 'governanceProposerAddress'>;
8
+ export declare enum ProposalState {
9
+ Pending = 0,
10
+ Active = 1,
11
+ Queued = 2,
12
+ Executable = 3,
13
+ Rejected = 4,
14
+ Executed = 5,
15
+ Dropped = 6,
16
+ Expired = 7
17
+ }
6
18
  export declare class GovernanceContract {
7
- readonly client: PublicClient<HttpTransport, Chain>;
8
- private readonly governance;
9
- constructor(client: PublicClient<HttpTransport, Chain>, address: Hex);
19
+ readonly publicClient: ViemPublicClient;
20
+ readonly walletClient: ViemWalletClient | undefined;
21
+ private readonly publicGovernance;
22
+ private readonly walletGovernance;
23
+ constructor(address: Hex, publicClient: ViemPublicClient, walletClient: ViemWalletClient | undefined);
10
24
  get address(): EthAddress;
11
25
  getProposer(): Promise<GovernanceProposerContract>;
12
26
  getGovernanceAddresses(): Promise<L1GovernanceContractAddresses>;
27
+ getProposal(proposalId: bigint): Promise<{
28
+ config: {
29
+ proposeConfig: {
30
+ lockDelay: bigint;
31
+ lockAmount: bigint;
32
+ };
33
+ votingDelay: bigint;
34
+ votingDuration: bigint;
35
+ executionDelay: bigint;
36
+ gracePeriod: bigint;
37
+ quorum: bigint;
38
+ voteDifferential: bigint;
39
+ minimumVotes: bigint;
40
+ };
41
+ state: number;
42
+ payload: `0x${string}`;
43
+ governanceProposer: `0x${string}`;
44
+ creation: bigint;
45
+ summedBallot: {
46
+ yea: bigint;
47
+ nea: bigint;
48
+ };
49
+ }>;
50
+ getProposalState(proposalId: bigint): Promise<ProposalState>;
51
+ private assertWalletGovernance;
52
+ deposit(onBehalfOf: Hex, amount: bigint): Promise<void>;
53
+ proposeWithLock({ payloadAddress, withdrawAddress, }: {
54
+ payloadAddress: Hex;
55
+ withdrawAddress: Hex;
56
+ }): Promise<number>;
57
+ awaitProposalActive({ proposalId, logger }: {
58
+ proposalId: bigint;
59
+ logger: Logger;
60
+ }): Promise<void>;
61
+ awaitProposalExecutable({ proposalId, logger }: {
62
+ proposalId: bigint;
63
+ logger: Logger;
64
+ }): Promise<void>;
65
+ getPower(): Promise<bigint>;
66
+ vote({ proposalId, voteAmount, inFavor, retries, logger, }: {
67
+ proposalId: bigint;
68
+ voteAmount: bigint | undefined;
69
+ inFavor: boolean;
70
+ retries: number;
71
+ logger: Logger;
72
+ }): Promise<void>;
73
+ executeProposal({ proposalId, retries, logger, }: {
74
+ proposalId: bigint;
75
+ retries: number;
76
+ logger: Logger;
77
+ }): Promise<void>;
13
78
  }
14
79
  //# sourceMappingURL=governance.d.ts.map