@aztec/ethereum 0.0.0-test.1 → 0.0.1-commit.21caa21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/account.d.ts +2 -0
- package/dest/account.d.ts.map +1 -0
- package/dest/account.js +4 -0
- package/dest/chain.d.ts +1 -1
- package/dest/client.d.ts +6 -4
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +16 -2
- package/dest/config.d.ts +111 -17
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +462 -22
- package/dest/constants.d.ts +1 -1
- package/dest/contracts/empire_base.d.ts +24 -8
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/empire_base.js +75 -2
- package/dest/contracts/empire_slashing_proposer.d.ts +66 -0
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/empire_slashing_proposer.js +200 -0
- package/dest/contracts/errors.d.ts +7 -0
- package/dest/contracts/errors.d.ts.map +1 -0
- package/dest/contracts/errors.js +12 -0
- package/dest/contracts/fee_asset_handler.d.ts +19 -0
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
- package/dest/contracts/fee_asset_handler.js +57 -0
- package/dest/contracts/fee_juice.d.ts +6 -7
- package/dest/contracts/fee_juice.d.ts.map +1 -1
- package/dest/contracts/fee_juice.js +27 -20
- package/dest/contracts/governance.d.ts +43 -32
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +87 -84
- package/dest/contracts/governance_proposer.d.ts +16 -13
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +37 -17
- package/dest/contracts/gse.d.ts +32 -0
- package/dest/contracts/gse.d.ts.map +1 -0
- package/dest/contracts/gse.js +72 -0
- package/dest/contracts/inbox.d.ts +26 -0
- package/dest/contracts/inbox.d.ts.map +1 -0
- package/dest/contracts/inbox.js +45 -0
- package/dest/contracts/index.d.ts +9 -3
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +8 -2
- package/dest/contracts/multicall.d.ts +21 -0
- package/dest/contracts/multicall.d.ts.map +1 -0
- package/dest/contracts/multicall.js +156 -0
- package/dest/contracts/registry.d.ts +10 -5
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +44 -16
- package/dest/contracts/rollup.d.ts +204 -40
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +529 -79
- package/dest/contracts/slasher_contract.d.ts +44 -0
- package/dest/contracts/slasher_contract.d.ts.map +1 -0
- package/dest/contracts/slasher_contract.js +75 -0
- package/dest/contracts/tally_slashing_proposer.d.ts +139 -0
- package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/tally_slashing_proposer.js +313 -0
- package/dest/contracts/utils.d.ts +3 -0
- package/dest/contracts/utils.d.ts.map +1 -0
- package/dest/contracts/utils.js +11 -0
- package/dest/deploy_l1_contracts.d.ts +577 -21114
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +1225 -421
- package/dest/eth-signer/eth-signer.d.ts +21 -0
- package/dest/eth-signer/eth-signer.d.ts.map +1 -0
- package/dest/eth-signer/eth-signer.js +5 -0
- package/dest/eth-signer/index.d.ts +2 -0
- package/dest/eth-signer/index.d.ts.map +1 -0
- package/dest/eth-signer/index.js +1 -0
- package/dest/index.d.ts +7 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +6 -2
- package/dest/l1_artifacts.d.ts +77344 -0
- package/dest/l1_artifacts.d.ts.map +1 -0
- package/dest/l1_artifacts.js +166 -0
- package/dest/l1_contract_addresses.d.ts +24 -4
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +22 -18
- package/dest/l1_reader.d.ts +2 -2
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +8 -8
- package/dest/l1_tx_utils/config.d.ts +59 -0
- package/dest/l1_tx_utils/config.d.ts.map +1 -0
- package/dest/l1_tx_utils/config.js +82 -0
- package/dest/l1_tx_utils/constants.d.ts +6 -0
- package/dest/l1_tx_utils/constants.d.ts.map +1 -0
- package/dest/l1_tx_utils/constants.js +14 -0
- package/dest/l1_tx_utils/factory.d.ts +24 -0
- package/dest/l1_tx_utils/factory.d.ts.map +1 -0
- package/dest/l1_tx_utils/factory.js +12 -0
- package/dest/l1_tx_utils/index.d.ts +10 -0
- package/dest/l1_tx_utils/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/index.js +10 -0
- package/dest/l1_tx_utils/interfaces.d.ts +76 -0
- package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
- package/dest/l1_tx_utils/interfaces.js +4 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +94 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.js +610 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +26 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +26 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +94 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +430 -0
- package/dest/l1_tx_utils/signer.d.ts +4 -0
- package/dest/l1_tx_utils/signer.d.ts.map +1 -0
- package/dest/l1_tx_utils/signer.js +16 -0
- package/dest/l1_tx_utils/types.d.ts +67 -0
- package/dest/l1_tx_utils/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/types.js +26 -0
- package/dest/l1_tx_utils/utils.d.ts +4 -0
- package/dest/l1_tx_utils/utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/utils.js +14 -0
- package/dest/l1_types.d.ts +6 -0
- package/dest/l1_types.d.ts.map +1 -0
- package/dest/l1_types.js +1 -0
- package/dest/publisher_manager.d.ts +15 -0
- package/dest/publisher_manager.d.ts.map +1 -0
- package/dest/publisher_manager.js +88 -0
- package/dest/queries.d.ts +4 -2
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +53 -12
- package/dest/test/chain_monitor.d.ts +73 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +215 -0
- package/dest/test/delayed_tx_utils.d.ts +8 -3
- package/dest/test/delayed_tx_utils.d.ts.map +1 -1
- package/dest/test/delayed_tx_utils.js +13 -6
- package/dest/test/eth_cheat_codes.d.ts +217 -0
- package/dest/test/eth_cheat_codes.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes.js +558 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts +2 -2
- package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes_with_state.js +1 -1
- package/dest/test/index.d.ts +4 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +3 -0
- package/dest/test/rollup_cheat_codes.d.ts +87 -0
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
- package/dest/test/rollup_cheat_codes.js +266 -0
- package/dest/test/start_anvil.d.ts +7 -1
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +16 -7
- package/dest/test/tx_delayer.d.ts +18 -7
- package/dest/test/tx_delayer.d.ts.map +1 -1
- package/dest/test/tx_delayer.js +95 -19
- package/dest/test/upgrade_utils.d.ts +6 -5
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +23 -16
- package/dest/types.d.ts +7 -8
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +3 -1
- package/dest/utils.d.ts +2 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +43 -88
- package/dest/zkPassportVerifierAddress.d.ts +15 -0
- package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
- package/dest/zkPassportVerifierAddress.js +11 -0
- package/package.json +28 -19
- package/src/account.ts +5 -0
- package/src/client.ts +42 -4
- package/src/config.ts +592 -31
- package/src/contracts/empire_base.ts +77 -7
- package/src/contracts/empire_slashing_proposer.ts +265 -0
- package/src/contracts/errors.ts +13 -0
- package/src/contracts/fee_asset_handler.ts +63 -0
- package/src/contracts/fee_juice.ts +29 -15
- package/src/contracts/governance.ts +80 -77
- package/src/contracts/governance_proposer.ts +66 -24
- package/src/contracts/gse.ts +88 -0
- package/src/contracts/inbox.ts +63 -0
- package/src/contracts/index.ts +8 -2
- package/src/contracts/multicall.ts +155 -0
- package/src/contracts/registry.ts +51 -26
- package/src/contracts/rollup.ts +596 -74
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/tally_slashing_proposer.ts +316 -0
- package/src/contracts/utils.ts +14 -0
- package/src/deploy_l1_contracts.ts +1459 -538
- package/src/eth-signer/eth-signer.ts +25 -0
- package/src/eth-signer/index.ts +1 -0
- package/src/index.ts +6 -2
- package/src/l1_artifacts.ts +254 -0
- package/src/l1_contract_addresses.ts +32 -19
- package/src/l1_reader.ts +9 -9
- package/src/l1_tx_utils/README.md +177 -0
- package/src/l1_tx_utils/config.ts +143 -0
- package/src/l1_tx_utils/constants.ts +18 -0
- package/src/l1_tx_utils/factory.ts +64 -0
- package/src/l1_tx_utils/index.ts +12 -0
- package/src/l1_tx_utils/interfaces.ts +86 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +718 -0
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +77 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +558 -0
- package/src/l1_tx_utils/signer.ts +28 -0
- package/src/l1_tx_utils/types.ts +85 -0
- package/src/l1_tx_utils/utils.ts +16 -0
- package/src/l1_types.ts +6 -0
- package/src/publisher_manager.ts +106 -0
- package/src/queries.ts +73 -15
- package/src/test/chain_monitor.ts +243 -0
- package/src/test/delayed_tx_utils.ts +34 -6
- package/src/test/eth_cheat_codes.ts +588 -0
- package/src/test/eth_cheat_codes_with_state.ts +1 -1
- package/src/test/index.ts +3 -0
- package/src/test/rollup_cheat_codes.ts +307 -0
- package/src/test/start_anvil.ts +22 -5
- package/src/test/tx_delayer.ts +127 -26
- package/src/test/upgrade_utils.ts +30 -21
- package/src/types.ts +10 -8
- package/src/utils.ts +49 -90
- package/src/zkPassportVerifierAddress.ts +15 -0
- package/dest/contracts/forwarder.d.ts +0 -24
- package/dest/contracts/forwarder.d.ts.map +0 -1
- package/dest/contracts/forwarder.js +0 -101
- package/dest/contracts/slashing_proposer.d.ts +0 -21
- package/dest/contracts/slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/slashing_proposer.js +0 -47
- package/dest/eth_cheat_codes.d.ts +0 -147
- package/dest/eth_cheat_codes.d.ts.map +0 -1
- package/dest/eth_cheat_codes.js +0 -303
- package/dest/l1_tx_utils.d.ts +0 -192
- package/dest/l1_tx_utils.d.ts.map +0 -1
- package/dest/l1_tx_utils.js +0 -641
- package/dest/l1_tx_utils_with_blobs.d.ts +0 -12
- package/dest/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils_with_blobs.js +0 -64
- package/src/contracts/forwarder.ts +0 -132
- package/src/contracts/slashing_proposer.ts +0 -51
- package/src/eth_cheat_codes.ts +0 -314
- package/src/l1_tx_utils.ts +0 -847
- package/src/l1_tx_utils_with_blobs.ts +0 -86
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import { sleep } from '@aztec/foundation/sleep';
|
|
3
|
-
import { GovernanceAbi } from '@aztec/l1-artifacts';
|
|
4
|
-
import { encodeFunctionData, getContract } from 'viem';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { GovernanceAbi } from '@aztec/l1-artifacts/GovernanceAbi';
|
|
4
|
+
import { encodeFunctionData, getContract, parseEventLogs } from 'viem';
|
|
5
|
+
import { createL1TxUtilsFromViemWallet } from '../l1_tx_utils/index.js';
|
|
6
|
+
import { isExtendedClient } from '../types.js';
|
|
7
7
|
// NOTE: Must be kept in sync with DataStructures.ProposalState in l1-contracts
|
|
8
8
|
export var ProposalState = /*#__PURE__*/ function(ProposalState) {
|
|
9
9
|
ProposalState[ProposalState["Pending"] = 0] = "Pending";
|
|
@@ -16,90 +16,52 @@ export var ProposalState = /*#__PURE__*/ function(ProposalState) {
|
|
|
16
16
|
ProposalState[ProposalState["Expired"] = 7] = "Expired";
|
|
17
17
|
return ProposalState;
|
|
18
18
|
}({});
|
|
19
|
-
export
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
export function extractProposalIdFromLogs(logs) {
|
|
20
|
+
const parsedLogs = parseEventLogs({
|
|
21
|
+
abi: GovernanceAbi,
|
|
22
|
+
logs: logs,
|
|
23
|
+
eventName: 'Proposed'
|
|
24
|
+
});
|
|
25
|
+
if (parsedLogs.length === 0) {
|
|
26
|
+
throw new Error('Proposal log not found');
|
|
27
|
+
}
|
|
28
|
+
return parsedLogs[0].args.proposalId;
|
|
29
|
+
}
|
|
30
|
+
export class ReadOnlyGovernanceContract {
|
|
31
|
+
client;
|
|
32
|
+
governanceContract;
|
|
33
|
+
constructor(address, client){
|
|
34
|
+
this.client = client;
|
|
35
|
+
this.governanceContract = getContract({
|
|
28
36
|
address,
|
|
29
37
|
abi: GovernanceAbi,
|
|
30
|
-
client:
|
|
38
|
+
client: client
|
|
31
39
|
});
|
|
32
|
-
this.walletGovernance = walletClient ? getContract({
|
|
33
|
-
address,
|
|
34
|
-
abi: GovernanceAbi,
|
|
35
|
-
client: walletClient
|
|
36
|
-
}) : undefined;
|
|
37
40
|
}
|
|
38
41
|
get address() {
|
|
39
|
-
return EthAddress.fromString(this.
|
|
42
|
+
return EthAddress.fromString(this.governanceContract.address);
|
|
40
43
|
}
|
|
41
|
-
async
|
|
42
|
-
|
|
43
|
-
return new GovernanceProposerContract(this.publicClient, governanceProposerAddress.toString());
|
|
44
|
+
async getGovernanceProposerAddress() {
|
|
45
|
+
return EthAddress.fromString(await this.governanceContract.read.governanceProposer());
|
|
44
46
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const [rollupAddress, registryAddress] = await Promise.all([
|
|
48
|
-
governanceProposer.getRollupAddress(),
|
|
49
|
-
governanceProposer.getRegistryAddress()
|
|
50
|
-
]);
|
|
51
|
-
return {
|
|
52
|
-
governanceAddress: this.address,
|
|
53
|
-
rollupAddress,
|
|
54
|
-
registryAddress,
|
|
55
|
-
governanceProposerAddress: governanceProposer.address
|
|
56
|
-
};
|
|
47
|
+
getConfiguration() {
|
|
48
|
+
return this.governanceContract.read.getConfiguration();
|
|
57
49
|
}
|
|
58
50
|
getProposal(proposalId) {
|
|
59
|
-
return this.
|
|
51
|
+
return this.governanceContract.read.getProposal([
|
|
60
52
|
proposalId
|
|
61
53
|
]);
|
|
62
54
|
}
|
|
63
55
|
async getProposalState(proposalId) {
|
|
64
|
-
const state = await this.
|
|
56
|
+
const state = await this.governanceContract.read.getProposalState([
|
|
65
57
|
proposalId
|
|
66
58
|
]);
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
67
60
|
if (state < 0 || state > 7) {
|
|
68
61
|
throw new Error(`Invalid proposal state: ${state}`);
|
|
69
62
|
}
|
|
70
63
|
return state;
|
|
71
64
|
}
|
|
72
|
-
assertWalletGovernance() {
|
|
73
|
-
if (!this.walletGovernance) {
|
|
74
|
-
throw new Error('Wallet client is required for this operation');
|
|
75
|
-
}
|
|
76
|
-
return this.walletGovernance;
|
|
77
|
-
}
|
|
78
|
-
async deposit(onBehalfOf, amount) {
|
|
79
|
-
const walletGovernance = this.assertWalletGovernance();
|
|
80
|
-
const depositTx = await walletGovernance.write.deposit([
|
|
81
|
-
onBehalfOf,
|
|
82
|
-
amount
|
|
83
|
-
]);
|
|
84
|
-
await this.publicClient.waitForTransactionReceipt({
|
|
85
|
-
hash: depositTx
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async proposeWithLock({ payloadAddress, withdrawAddress }) {
|
|
89
|
-
const walletGovernance = this.assertWalletGovernance();
|
|
90
|
-
const proposeTx = await walletGovernance.write.proposeWithLock([
|
|
91
|
-
payloadAddress,
|
|
92
|
-
withdrawAddress
|
|
93
|
-
]);
|
|
94
|
-
const receipt = await this.publicClient.waitForTransactionReceipt({
|
|
95
|
-
hash: proposeTx
|
|
96
|
-
});
|
|
97
|
-
if (receipt.status !== 'success') {
|
|
98
|
-
throw new Error(`Proposal failed: ${receipt.status}`);
|
|
99
|
-
}
|
|
100
|
-
const proposalId = Number(receipt.logs[1].topics[1]);
|
|
101
|
-
return proposalId;
|
|
102
|
-
}
|
|
103
65
|
async awaitProposalActive({ proposalId, logger }) {
|
|
104
66
|
const state = await this.getProposalState(proposalId);
|
|
105
67
|
if (state === 1) {
|
|
@@ -109,7 +71,7 @@ export class GovernanceContract {
|
|
|
109
71
|
} else {
|
|
110
72
|
const proposal = await this.getProposal(proposalId);
|
|
111
73
|
const startOfActive = proposal.creation + proposal.config.votingDelay;
|
|
112
|
-
const block = await this.
|
|
74
|
+
const block = await this.client.getBlock();
|
|
113
75
|
// Add 12 seconds to the time to make sure we don't vote too early
|
|
114
76
|
const secondsToActive = Number(startOfActive - block.timestamp) + 12;
|
|
115
77
|
const now = new Date();
|
|
@@ -135,7 +97,7 @@ export class GovernanceContract {
|
|
|
135
97
|
} else {
|
|
136
98
|
const proposal = await this.getProposal(proposalId);
|
|
137
99
|
const startOfExecutable = proposal.creation + proposal.config.votingDelay + proposal.config.votingDuration + proposal.config.executionDelay;
|
|
138
|
-
const block = await this.
|
|
100
|
+
const block = await this.client.getBlock();
|
|
139
101
|
const secondsToExecutable = Number(startOfExecutable - block.timestamp) + 12;
|
|
140
102
|
const now = new Date();
|
|
141
103
|
logger.info(`
|
|
@@ -146,17 +108,57 @@ export class GovernanceContract {
|
|
|
146
108
|
await sleep(secondsToExecutable * 1000);
|
|
147
109
|
}
|
|
148
110
|
}
|
|
111
|
+
}
|
|
112
|
+
export class GovernanceContract extends ReadOnlyGovernanceContract {
|
|
113
|
+
client;
|
|
114
|
+
governanceContract;
|
|
115
|
+
constructor(address, client){
|
|
116
|
+
if (address instanceof EthAddress) {
|
|
117
|
+
address = address.toString();
|
|
118
|
+
}
|
|
119
|
+
super(address, client), this.client = client;
|
|
120
|
+
if (!isExtendedClient(client)) {
|
|
121
|
+
throw new Error('GovernanceContract has to be instantiated with a wallet client.');
|
|
122
|
+
}
|
|
123
|
+
this.governanceContract = getContract({
|
|
124
|
+
address,
|
|
125
|
+
abi: GovernanceAbi,
|
|
126
|
+
client
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async deposit(onBehalfOf, amount) {
|
|
130
|
+
const depositTx = await this.governanceContract.write.deposit([
|
|
131
|
+
onBehalfOf,
|
|
132
|
+
amount
|
|
133
|
+
]);
|
|
134
|
+
await this.client.waitForTransactionReceipt({
|
|
135
|
+
hash: depositTx
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async proposeWithLock({ payloadAddress, withdrawAddress }) {
|
|
139
|
+
const proposeTx = await this.governanceContract.write.proposeWithLock([
|
|
140
|
+
payloadAddress,
|
|
141
|
+
withdrawAddress
|
|
142
|
+
]);
|
|
143
|
+
const receipt = await this.client.waitForTransactionReceipt({
|
|
144
|
+
hash: proposeTx
|
|
145
|
+
});
|
|
146
|
+
if (receipt.status !== 'success') {
|
|
147
|
+
throw new Error(`Proposal failed: ${receipt.status}`);
|
|
148
|
+
}
|
|
149
|
+
return extractProposalIdFromLogs(receipt.logs);
|
|
150
|
+
}
|
|
149
151
|
async getPower() {
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
this.walletClient.account.address,
|
|
152
|
+
const now = await this.client.getBlock();
|
|
153
|
+
return this.governanceContract.read.powerAt([
|
|
154
|
+
this.client.account.address,
|
|
154
155
|
now.timestamp
|
|
155
156
|
]);
|
|
156
157
|
}
|
|
157
158
|
async vote({ proposalId, voteAmount, inFavor, retries = 10, logger }) {
|
|
158
|
-
const
|
|
159
|
-
|
|
159
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
|
|
160
|
+
logger
|
|
161
|
+
});
|
|
160
162
|
const retryDelaySeconds = 12;
|
|
161
163
|
voteAmount = voteAmount ?? await this.getPower();
|
|
162
164
|
let success = false;
|
|
@@ -173,7 +175,7 @@ export class GovernanceContract {
|
|
|
173
175
|
};
|
|
174
176
|
const encodedVoteData = encodeFunctionData(voteFunctionData);
|
|
175
177
|
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
176
|
-
to:
|
|
178
|
+
to: this.governanceContract.address,
|
|
177
179
|
data: encodedVoteData
|
|
178
180
|
});
|
|
179
181
|
if (receipt.status === 'success') {
|
|
@@ -182,7 +184,7 @@ export class GovernanceContract {
|
|
|
182
184
|
} else {
|
|
183
185
|
const args = {
|
|
184
186
|
...voteFunctionData,
|
|
185
|
-
address:
|
|
187
|
+
address: this.governanceContract.address
|
|
186
188
|
};
|
|
187
189
|
const errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedVoteData, args, undefined, []);
|
|
188
190
|
logger.error(`Error voting on proposal ${proposalId}: ${errorMsg}`);
|
|
@@ -198,13 +200,14 @@ export class GovernanceContract {
|
|
|
198
200
|
}
|
|
199
201
|
logger.info(`Voted [${inFavor ? 'yea' : 'nay'}] on proposal [${proposalId}]`);
|
|
200
202
|
const proposal = await this.getProposal(proposalId);
|
|
201
|
-
logger.info(`Proposal [${proposalId}] has state [${proposal.
|
|
203
|
+
logger.info(`Proposal [${proposalId}] has cached state [${proposal.cachedState}]`);
|
|
202
204
|
logger.info(`Proposal [${proposalId}] has summedBallot yea [${proposal.summedBallot.yea}]`);
|
|
203
|
-
logger.info(`Proposal [${proposalId}] has summedBallot
|
|
205
|
+
logger.info(`Proposal [${proposalId}] has summedBallot nay [${proposal.summedBallot.nay}]`);
|
|
204
206
|
}
|
|
205
207
|
async executeProposal({ proposalId, retries = 10, logger }) {
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
+
const l1TxUtils = createL1TxUtilsFromViemWallet(this.client, {
|
|
209
|
+
logger
|
|
210
|
+
});
|
|
208
211
|
const retryDelaySeconds = 12;
|
|
209
212
|
let success = false;
|
|
210
213
|
for(let i = 0; i < retries; i++){
|
|
@@ -218,7 +221,7 @@ export class GovernanceContract {
|
|
|
218
221
|
};
|
|
219
222
|
const encodedExecuteData = encodeFunctionData(executeFunctionData);
|
|
220
223
|
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
221
|
-
to:
|
|
224
|
+
to: this.governanceContract.address,
|
|
222
225
|
data: encodedExecuteData
|
|
223
226
|
});
|
|
224
227
|
if (receipt.status === 'success') {
|
|
@@ -227,7 +230,7 @@ export class GovernanceContract {
|
|
|
227
230
|
} else {
|
|
228
231
|
const args = {
|
|
229
232
|
...executeFunctionData,
|
|
230
|
-
address:
|
|
233
|
+
address: this.governanceContract.address
|
|
231
234
|
};
|
|
232
235
|
const errorMsg = await l1TxUtils.tryGetErrorFromRevertedTx(encodedExecuteData, args, undefined, []);
|
|
233
236
|
logger.error(`Error executing proposal ${proposalId}: ${errorMsg}`);
|
|
@@ -1,28 +1,31 @@
|
|
|
1
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
import { type Hex, type TransactionReceipt } from 'viem';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
3
|
+
import { type Hex, type TransactionReceipt, type TypedDataDefinition } from 'viem';
|
|
4
|
+
import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
5
|
+
import type { ViemClient } from '../types.js';
|
|
5
6
|
import { type IEmpireBase } from './empire_base.js';
|
|
6
7
|
export declare class GovernanceProposerContract implements IEmpireBase {
|
|
7
|
-
readonly client:
|
|
8
|
+
readonly client: ViemClient;
|
|
8
9
|
private readonly proposer;
|
|
9
|
-
constructor(client:
|
|
10
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
10
11
|
get address(): EthAddress;
|
|
11
12
|
getRollupAddress(): Promise<EthAddress>;
|
|
12
13
|
getRegistryAddress(): Promise<EthAddress>;
|
|
13
14
|
getQuorumSize(): Promise<bigint>;
|
|
14
15
|
getRoundSize(): Promise<bigint>;
|
|
15
|
-
|
|
16
|
+
getInstance(): Promise<`0x${string}`>;
|
|
17
|
+
computeRound(slot: SlotNumber): Promise<bigint>;
|
|
16
18
|
getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
lastSignalSlot: SlotNumber;
|
|
20
|
+
payloadWithMostSignals: Hex;
|
|
19
21
|
executed: boolean;
|
|
20
22
|
}>;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
getPayloadSignals(rollupAddress: Hex, round: bigint, payload: Hex): Promise<bigint>;
|
|
24
|
+
createSignalRequest(payload: Hex): L1TxRequest;
|
|
25
|
+
createSignalRequestWithSignature(payload: Hex, slot: SlotNumber, chainId: number, signerAddress: Hex, signer: (msg: TypedDataDefinition) => Promise<Hex>): Promise<L1TxRequest>;
|
|
26
|
+
submitRoundWinner(round: bigint, l1TxUtils: L1TxUtils): Promise<{
|
|
24
27
|
receipt: TransactionReceipt;
|
|
25
|
-
|
|
28
|
+
proposalId: bigint;
|
|
26
29
|
}>;
|
|
27
30
|
}
|
|
28
|
-
//# sourceMappingURL=
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFHaEgscUJBQWEsMEJBQTJCLFlBQVcsV0FBVzthQUkxQyxNQUFNLEVBQUUsVUFBVTtJQUhwQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBa0U7SUFFM0YsWUFDa0IsTUFBTSxFQUFFLFVBQVUsRUFDbEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBTTFCO0lBRUQsSUFBVyxPQUFPLGVBRWpCO0lBRVksZ0JBQWdCLHdCQUU1QjtJQUdZLGtCQUFrQix3QkFFOUI7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV0QztJQUVNLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJDO0lBRU0sV0FBVywyQkFFakI7SUFFTSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJEO0lBRVksWUFBWSxDQUN2QixhQUFhLEVBQUUsR0FBRyxFQUNsQixLQUFLLEVBQUUsTUFBTSxHQUNaLE9BQU8sQ0FBQztRQUFFLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUM7UUFBQyxRQUFRLEVBQUUsT0FBTyxDQUFBO0tBQUUsQ0FBQyxDQU96RjtJQUVNLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekY7SUFFTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFdBQVcsQ0FLcEQ7SUFFWSxnQ0FBZ0MsQ0FDM0MsT0FBTyxFQUFFLEdBQUcsRUFDWixJQUFJLEVBQUUsVUFBVSxFQUNoQixPQUFPLEVBQUUsTUFBTSxFQUNmLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQ2pELE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FhdEI7SUFFWSxpQkFBaUIsQ0FDNUIsS0FBSyxFQUFFLE1BQU0sRUFDYixTQUFTLEVBQUUsU0FBUyxHQUNuQixPQUFPLENBQUM7UUFDVCxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFDNUIsVUFBVSxFQUFFLE1BQU0sQ0FBQztLQUNwQixDQUFDLENBV0Q7Q0FDRiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAGhH,qBAAa,0BAA2B,YAAW,WAAW;aAI1C,MAAM,EAAE,UAAU;IAHpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,eAEjB;IAEY,gBAAgB,wBAE5B;IAGY,kBAAkB,wBAE9B;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,WAAW,2BAEjB;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAOzF;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAKpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CAatB;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAWD;CACF"}
|
|
@@ -4,16 +4,21 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
4
4
|
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
}
|
|
7
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
7
8
|
import { memoize } from '@aztec/foundation/decorators';
|
|
8
9
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
9
|
-
import { GovernanceProposerAbi } from '@aztec/l1-artifacts';
|
|
10
|
+
import { GovernanceProposerAbi } from '@aztec/l1-artifacts/GovernanceProposerAbi';
|
|
10
11
|
import { encodeFunctionData, getContract } from 'viem';
|
|
11
|
-
import {
|
|
12
|
+
import { encodeSignal, encodeSignalWithSignature, signSignalWithSig } from './empire_base.js';
|
|
13
|
+
import { extractProposalIdFromLogs } from './governance.js';
|
|
12
14
|
export class GovernanceProposerContract {
|
|
13
15
|
client;
|
|
14
16
|
proposer;
|
|
15
17
|
constructor(client, address){
|
|
16
18
|
this.client = client;
|
|
19
|
+
if (address instanceof EthAddress) {
|
|
20
|
+
address = address.toString();
|
|
21
|
+
}
|
|
17
22
|
this.proposer = getContract({
|
|
18
23
|
address,
|
|
19
24
|
abi: GovernanceProposerAbi,
|
|
@@ -30,51 +35,66 @@ export class GovernanceProposerContract {
|
|
|
30
35
|
return EthAddress.fromString(await this.proposer.read.REGISTRY());
|
|
31
36
|
}
|
|
32
37
|
getQuorumSize() {
|
|
33
|
-
return this.proposer.read.
|
|
38
|
+
return this.proposer.read.QUORUM_SIZE();
|
|
34
39
|
}
|
|
35
40
|
getRoundSize() {
|
|
36
|
-
return this.proposer.read.
|
|
41
|
+
return this.proposer.read.ROUND_SIZE();
|
|
42
|
+
}
|
|
43
|
+
getInstance() {
|
|
44
|
+
return this.proposer.read.getInstance();
|
|
37
45
|
}
|
|
38
46
|
computeRound(slot) {
|
|
39
47
|
return this.proposer.read.computeRound([
|
|
40
|
-
slot
|
|
48
|
+
BigInt(slot)
|
|
41
49
|
]);
|
|
42
50
|
}
|
|
43
51
|
async getRoundInfo(rollupAddress, round) {
|
|
44
|
-
const
|
|
52
|
+
const result = await this.proposer.read.getRoundData([
|
|
45
53
|
rollupAddress,
|
|
46
54
|
round
|
|
47
55
|
]);
|
|
48
56
|
return {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
executed:
|
|
57
|
+
lastSignalSlot: SlotNumber.fromBigInt(result.lastSignalSlot),
|
|
58
|
+
payloadWithMostSignals: result.payloadWithMostSignals,
|
|
59
|
+
executed: result.executed
|
|
52
60
|
};
|
|
53
61
|
}
|
|
54
|
-
|
|
55
|
-
return this.proposer.read.
|
|
62
|
+
getPayloadSignals(rollupAddress, round, payload) {
|
|
63
|
+
return this.proposer.read.signalCount([
|
|
56
64
|
rollupAddress,
|
|
57
65
|
round,
|
|
58
|
-
|
|
66
|
+
payload
|
|
59
67
|
]);
|
|
60
68
|
}
|
|
61
|
-
|
|
69
|
+
createSignalRequest(payload) {
|
|
62
70
|
return {
|
|
63
71
|
to: this.address.toString(),
|
|
64
|
-
data:
|
|
72
|
+
data: encodeSignal(payload)
|
|
65
73
|
};
|
|
66
74
|
}
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
async createSignalRequestWithSignature(payload, slot, chainId, signerAddress, signer) {
|
|
76
|
+
const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
|
|
77
|
+
return {
|
|
78
|
+
to: this.address.toString(),
|
|
79
|
+
data: encodeSignalWithSignature(payload, signature)
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async submitRoundWinner(round, l1TxUtils) {
|
|
83
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
69
84
|
to: this.address.toString(),
|
|
70
85
|
data: encodeFunctionData({
|
|
71
86
|
abi: this.proposer.abi,
|
|
72
|
-
functionName: '
|
|
87
|
+
functionName: 'submitRoundWinner',
|
|
73
88
|
args: [
|
|
74
89
|
round
|
|
75
90
|
]
|
|
76
91
|
})
|
|
77
92
|
});
|
|
93
|
+
const proposalId = extractProposalIdFromLogs(receipt.logs);
|
|
94
|
+
return {
|
|
95
|
+
receipt,
|
|
96
|
+
proposalId
|
|
97
|
+
};
|
|
78
98
|
}
|
|
79
99
|
}
|
|
80
100
|
_ts_decorate([
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import type { ProjPointType } from '@noble/curves/abstract/weierstrass';
|
|
3
|
+
import { type Hex } from 'viem';
|
|
4
|
+
import type { ViemClient } from '../types.js';
|
|
5
|
+
export type RegistrationTuple = {
|
|
6
|
+
publicKeyInG1: {
|
|
7
|
+
x: bigint;
|
|
8
|
+
y: bigint;
|
|
9
|
+
};
|
|
10
|
+
publicKeyInG2: {
|
|
11
|
+
x0: bigint;
|
|
12
|
+
x1: bigint;
|
|
13
|
+
y0: bigint;
|
|
14
|
+
y1: bigint;
|
|
15
|
+
};
|
|
16
|
+
proofOfPossession: {
|
|
17
|
+
x: bigint;
|
|
18
|
+
y: bigint;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export declare class GSEContract {
|
|
22
|
+
readonly client: ViemClient;
|
|
23
|
+
address: EthAddress;
|
|
24
|
+
private readonly gse;
|
|
25
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
26
|
+
getOwner(): Promise<EthAddress>;
|
|
27
|
+
getGovernance(): Promise<EthAddress>;
|
|
28
|
+
getAttestersFromIndicesAtTime(instance: Hex | EthAddress, ts: bigint, indices: bigint[]): Promise<readonly `0x${string}`[]>;
|
|
29
|
+
getRegistrationDigest(publicKey: ProjPointType<bigint>): Promise<ProjPointType<bigint>>;
|
|
30
|
+
makeRegistrationTuple(privateKey: bigint): Promise<RegistrationTuple>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3NlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2dzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUE4QixLQUFLLEdBQUcsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLGFBQWEsRUFBRTtRQUNiLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDVixDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ1gsQ0FBQztJQUNGLGFBQWEsRUFBRTtRQUNiLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7S0FDWixDQUFDO0lBQ0YsaUJBQWlCLEVBQUU7UUFDakIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNWLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDWCxDQUFDO0NBQ0gsQ0FBQztBQUVGLHFCQUFhLFdBQVc7YUFLSixNQUFNLEVBQUUsVUFBVTtJQUo3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFtRDtJQUV2RSxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFPMUI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUzQztJQUVZLGFBQWEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRWhEO0lBRUQsNkJBQTZCLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLHFDQUt0RjtJQUVZLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUluRztJQUVZLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBd0JqRjtDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gse.d.ts","sourceRoot":"","sources":["../../src/contracts/gse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CAAC;AAEF,qBAAa,WAAW;aAKJ,MAAM,EAAE,UAAU;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmD;IAEvE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAO1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAE3C;IAEY,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAEhD;IAED,6BAA6B,CAAC,QAAQ,EAAE,GAAG,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,qCAKtF;IAEY,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAInG;IAEY,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBjF;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
+
import { GSEAbi } from '@aztec/l1-artifacts/GSEAbi';
|
|
3
|
+
import { bn254 } from '@noble/curves/bn254';
|
|
4
|
+
import { getContract } from 'viem';
|
|
5
|
+
export class GSEContract {
|
|
6
|
+
client;
|
|
7
|
+
address;
|
|
8
|
+
gse;
|
|
9
|
+
constructor(client, address){
|
|
10
|
+
this.client = client;
|
|
11
|
+
if (address instanceof EthAddress) {
|
|
12
|
+
address = address.toString();
|
|
13
|
+
}
|
|
14
|
+
this.address = EthAddress.fromString(address);
|
|
15
|
+
this.gse = getContract({
|
|
16
|
+
address,
|
|
17
|
+
abi: GSEAbi,
|
|
18
|
+
client
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async getOwner() {
|
|
22
|
+
return EthAddress.fromString(await this.gse.read.owner());
|
|
23
|
+
}
|
|
24
|
+
async getGovernance() {
|
|
25
|
+
return EthAddress.fromString(await this.gse.read.getGovernance());
|
|
26
|
+
}
|
|
27
|
+
getAttestersFromIndicesAtTime(instance, ts, indices) {
|
|
28
|
+
if (instance instanceof EthAddress) {
|
|
29
|
+
instance = instance.toString();
|
|
30
|
+
}
|
|
31
|
+
return this.gse.read.getAttestersFromIndicesAtTime([
|
|
32
|
+
instance,
|
|
33
|
+
ts,
|
|
34
|
+
indices
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
async getRegistrationDigest(publicKey) {
|
|
38
|
+
const affinePublicKey = publicKey.toAffine();
|
|
39
|
+
const g1PointDigest = await this.gse.read.getRegistrationDigest([
|
|
40
|
+
{
|
|
41
|
+
x: affinePublicKey.x,
|
|
42
|
+
y: affinePublicKey.y
|
|
43
|
+
}
|
|
44
|
+
]);
|
|
45
|
+
return bn254.G1.ProjectivePoint.fromAffine(g1PointDigest);
|
|
46
|
+
}
|
|
47
|
+
async makeRegistrationTuple(privateKey) {
|
|
48
|
+
const publicKeyG1 = bn254.G1.ProjectivePoint.BASE.multiply(privateKey);
|
|
49
|
+
const digest = await this.getRegistrationDigest(publicKeyG1);
|
|
50
|
+
const signature = digest.multiply(privateKey);
|
|
51
|
+
const publicKeyG2 = bn254.G2.ProjectivePoint.BASE.multiply(privateKey);
|
|
52
|
+
const publicKeyG1Affine = publicKeyG1.toAffine();
|
|
53
|
+
const signatureAffine = signature.toAffine();
|
|
54
|
+
const publicKeyG2Affine = publicKeyG2.toAffine();
|
|
55
|
+
return {
|
|
56
|
+
publicKeyInG1: {
|
|
57
|
+
x: publicKeyG1Affine.x,
|
|
58
|
+
y: publicKeyG1Affine.y
|
|
59
|
+
},
|
|
60
|
+
publicKeyInG2: {
|
|
61
|
+
x0: publicKeyG2Affine.x.c0,
|
|
62
|
+
x1: publicKeyG2Affine.x.c1,
|
|
63
|
+
y0: publicKeyG2Affine.y.c0,
|
|
64
|
+
y1: publicKeyG2Affine.y.c1
|
|
65
|
+
},
|
|
66
|
+
proofOfPossession: {
|
|
67
|
+
x: signatureAffine.x,
|
|
68
|
+
y: signatureAffine.y
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Buffer16 } from '@aztec/foundation/buffer';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
|
|
4
|
+
import { type BlockTag, type GetContractReturnType, type Hex } from 'viem';
|
|
5
|
+
import type { DeployL1ContractsReturnType } from '../deploy_l1_contracts.js';
|
|
6
|
+
import type { L1ReaderConfig } from '../l1_reader.js';
|
|
7
|
+
import type { ViemClient } from '../types.js';
|
|
8
|
+
export declare class InboxContract {
|
|
9
|
+
readonly client: ViemClient;
|
|
10
|
+
private readonly inbox;
|
|
11
|
+
static getFromL1ContractsValues(deployL1ContractsValues: DeployL1ContractsReturnType): InboxContract;
|
|
12
|
+
static getFromConfig(config: L1ReaderConfig): InboxContract;
|
|
13
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
14
|
+
get address(): `0x${string}`;
|
|
15
|
+
getContract(): GetContractReturnType<typeof InboxAbi, ViemClient>;
|
|
16
|
+
getState(opts?: {
|
|
17
|
+
blockTag?: BlockTag;
|
|
18
|
+
blockNumber?: bigint;
|
|
19
|
+
}): Promise<InboxContractState>;
|
|
20
|
+
}
|
|
21
|
+
export type InboxContractState = {
|
|
22
|
+
totalMessagesInserted: bigint;
|
|
23
|
+
messagesRollingHash: Buffer16;
|
|
24
|
+
treeInProgress: bigint;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEQsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUMscUJBQWEsYUFBYTthQWtCTixNQUFNLEVBQUUsVUFBVTtJQWpCcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQXFEO0lBRTNFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsRUFBRSwyQkFBMkIsaUJBTW5GO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxpQkFJMUM7SUFFRCxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFNMUI7SUFFRCxJQUFXLE9BQU8sa0JBRWpCO0lBRU0sV0FBVyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUV2RTtJQUVZLFFBQVEsQ0FBQyxJQUFJLEdBQUU7UUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7UUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVEzRztDQUNGO0FBRUQsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLHFCQUFxQixFQUFFLE1BQU0sQ0FBQztJQUM5QixtQkFBbUIsRUFBRSxRQUFRLENBQUM7SUFDOUIsY0FBYyxFQUFFLE1BQU0sQ0FBQztDQUN4QixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/contracts/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,qBAAqB,EAAE,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAGxF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,qBAAa,aAAa;aAkBN,MAAM,EAAE,UAAU;IAjBpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;IAE3E,MAAM,CAAC,wBAAwB,CAAC,uBAAuB,EAAE,2BAA2B,iBAMnF;IAED,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,iBAI1C;IAED,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,kBAEjB;IAEM,WAAW,IAAI,qBAAqB,CAAC,OAAO,QAAQ,EAAE,UAAU,CAAC,CAEvE;IAEY,QAAQ,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQ3G;CACF;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,QAAQ,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Buffer16 } from '@aztec/foundation/buffer';
|
|
2
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
|
+
import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
|
|
4
|
+
import { getContract } from 'viem';
|
|
5
|
+
import { getPublicClient } from '../client.js';
|
|
6
|
+
import { checkBlockTag } from './utils.js';
|
|
7
|
+
export class InboxContract {
|
|
8
|
+
client;
|
|
9
|
+
inbox;
|
|
10
|
+
static getFromL1ContractsValues(deployL1ContractsValues) {
|
|
11
|
+
const { l1Client, l1ContractAddresses: { inboxAddress } } = deployL1ContractsValues;
|
|
12
|
+
return new InboxContract(l1Client, inboxAddress.toString());
|
|
13
|
+
}
|
|
14
|
+
static getFromConfig(config) {
|
|
15
|
+
const client = getPublicClient(config);
|
|
16
|
+
const address = config.l1Contracts.inboxAddress.toString();
|
|
17
|
+
return new InboxContract(client, address);
|
|
18
|
+
}
|
|
19
|
+
constructor(client, address){
|
|
20
|
+
this.client = client;
|
|
21
|
+
if (address instanceof EthAddress) {
|
|
22
|
+
address = address.toString();
|
|
23
|
+
}
|
|
24
|
+
this.inbox = getContract({
|
|
25
|
+
address,
|
|
26
|
+
abi: InboxAbi,
|
|
27
|
+
client
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
get address() {
|
|
31
|
+
return this.inbox.address;
|
|
32
|
+
}
|
|
33
|
+
getContract() {
|
|
34
|
+
return this.inbox;
|
|
35
|
+
}
|
|
36
|
+
async getState(opts = {}) {
|
|
37
|
+
await checkBlockTag(opts.blockNumber, this.client);
|
|
38
|
+
const state = await this.inbox.read.getState(opts);
|
|
39
|
+
return {
|
|
40
|
+
totalMessagesInserted: state.totalMessagesInserted,
|
|
41
|
+
messagesRollingHash: Buffer16.fromString(state.rollingHash),
|
|
42
|
+
treeInProgress: state.inProgress
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
export * from './empire_base.js';
|
|
2
|
+
export * from './errors.js';
|
|
3
|
+
export * from './fee_asset_handler.js';
|
|
2
4
|
export * from './fee_juice.js';
|
|
3
|
-
export * from './forwarder.js';
|
|
4
5
|
export * from './governance.js';
|
|
5
6
|
export * from './governance_proposer.js';
|
|
7
|
+
export * from './gse.js';
|
|
8
|
+
export * from './inbox.js';
|
|
9
|
+
export * from './multicall.js';
|
|
6
10
|
export * from './registry.js';
|
|
7
11
|
export * from './rollup.js';
|
|
8
|
-
export * from './
|
|
9
|
-
|
|
12
|
+
export * from './empire_slashing_proposer.js';
|
|
13
|
+
export * from './tally_slashing_proposer.js';
|
|
14
|
+
export * from './slasher_contract.js';
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUMifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC"}
|