Skip to content

Commit 83b9826

Browse files
committed
ignition testnet
1 parent b5e8b12 commit 83b9826

File tree

17 files changed

+5666
-379
lines changed

17 files changed

+5666
-379
lines changed

tooling/sparta/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,11 @@ GUILD_ID=your_guild_id
7676
# Ethereum Configuration
7777
ETHEREUM_HOST=http://localhost:8545
7878
ETHEREUM_ROLLUP_ADDRESS=your_rollup_address
79-
ETHEREUM_ADMIN_ADDRESS=your_admin_address
8079
ETHEREUM_CHAIN_ID=1337
81-
ETHEREUM_PRIVATE_KEY=your_private_key
80+
MINTER_PRIVATE_KEY=your_private_key
81+
WITHDRAWER_ADDRESS=address_to_withdraw_funds_to
8282
ETHEREUM_VALUE=20ether
83+
APPROVAL_AMOUNT=some_amount
8384
```
8485

8586
5. Start the bot in development mode:
@@ -151,6 +152,7 @@ terraform apply
151152

152153
### Admin Commands
153154
- `/admin validators get`: List validators
155+
- `/admin validators add`: Add a validator
154156
- `/admin validators remove`: Remove a validator
155157
- `/admin committee get`: Get committee information
156158
- `/admin stake manage`: Manage validator stakes

tooling/sparta/src/.env.example

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ GUILD_ID=your_guild_id_here
55

66
# Ethereum Configuration
77
ETHEREUM_HOST=http://localhost:8545
8-
ETHEREUM_PRIVATE_KEY=your_private_key_here
9-
ETHEREUM_ROLLUP_ADDRESS=your_rollup_address_here
8+
MINTER_PRIVATE_KEY=your_minter_private_key_here
9+
ETHEREUM_REGISTRY_ADDRESS=your_registry_address_here
10+
WITHDRAWER_ADDRESS=your_withdrawer_address_here
1011
ETHEREUM_CHAIN_ID=1337
1112
ETHEREUM_VALUE=20ether
12-
ETHEREUM_ADMIN_ADDRESS=your_admin_address_here
1313

1414
MINIMUM_STAKE=100000000000000000000
15+
APPROVAL_AMOUNT=10000000000000000000000

tooling/sparta/src/admins/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
import validators from "./editValidators.js";
1+
import validators from "./manageValidators.js";
22

33
export default { validators };

tooling/sparta/src/admins/editValidators.ts renamed to tooling/sparta/src/admins/manageValidators.ts

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ export default {
7979
.setDescription("Get committee")
8080
)
8181
)
82+
.addSubcommand((subcommand) =>
83+
subcommand
84+
.setName("add")
85+
.setDescription("Add a validator")
86+
.addStringOption((option) =>
87+
option
88+
.setName("address")
89+
.setDescription("The validator to add")
90+
.setRequired(true)
91+
)
92+
)
8293
.addSubcommand((subcommand) =>
8394
subcommand
8495
.setName("remove")
@@ -114,6 +125,7 @@ export default {
114125
interaction,
115126
"Committee"
116127
);
128+
return "Checked committee";
117129
} else if (interaction.options.getSubcommand() === "validators") {
118130
await paginate(
119131
filteredValidators,
@@ -122,25 +134,52 @@ export default {
122134
interaction,
123135
"Validators"
124136
);
137+
return "Checked validators";
125138
} else if (interaction.options.getSubcommand() === "remove") {
126139
const address = interaction.options.getString("address");
127140
if (!address) {
128141
await interaction.editReply({
129142
content: "Please provide an address to remove",
130143
});
131-
return;
144+
return `Failed`;
132145
}
133146
await ValidatorService.removeValidator(address);
134147
await interaction.editReply({
135148
content: `Removed validator ${address}`,
136149
});
150+
return "Removed validator";
151+
} else if (interaction.options.getSubcommand() === "add") {
152+
const address = interaction.options.getString("address");
153+
154+
if (!address) {
155+
await interaction.editReply({
156+
content: "Please provide an address to remove",
157+
});
158+
return `Failed`;
159+
}
160+
161+
// Basic address validation
162+
if (!address.match(/^0x[a-fA-F0-9]{40}$/)) {
163+
return interaction.reply({
164+
content: "Please provide a valid Ethereum address.",
165+
flags: MessageFlags.Ephemeral,
166+
});
167+
}
168+
169+
await ValidatorService.addValidator(address);
170+
await interaction.editReply({
171+
content: `Successfully added validator address: ${address}`,
172+
});
173+
return `Added validator ${address}`;
137174
}
138175
return;
139176
} catch (error) {
140-
console.error("Error in get-info command:", error);
141177
await interaction.editReply({
142-
content: `Failed to get chain info`,
178+
content: `Failed with error: ${error}`,
143179
});
180+
return `Failed with error: ${
181+
error instanceof Error && error.message
182+
}`;
144183
}
145184
},
146185
};

tooling/sparta/src/commands/addValidator.ts

Lines changed: 0 additions & 92 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import {
2+
SlashCommandBuilder,
3+
ChatInputCommandInteraction,
4+
MessageFlags,
5+
} from "discord.js";
6+
import { ChainInfoService } from "../services/chaininfo-service.js";
7+
8+
export default {
9+
data: new SlashCommandBuilder()
10+
.setName("validator")
11+
.setDescription("Manage validator addresses")
12+
.addSubcommand((subcommand) =>
13+
subcommand
14+
.setName("check")
15+
.setDescription("Check if you are a validator")
16+
.addStringOption((option) =>
17+
option
18+
.setName("address")
19+
.setDescription("The validator address to check")
20+
)
21+
),
22+
23+
execute: async (
24+
interaction: ChatInputCommandInteraction
25+
): Promise<string> => {
26+
try {
27+
const address = interaction.options.getString("address");
28+
if (!address) {
29+
await interaction.reply({
30+
content: "Address is required.",
31+
flags: MessageFlags.Ephemeral,
32+
});
33+
return `Address not provided`;
34+
}
35+
36+
// Basic address validation
37+
if (!address.match(/^0x[a-fA-F0-9]{40}$/)) {
38+
await interaction.reply({
39+
content: "Please provide a valid Ethereum address.",
40+
flags: MessageFlags.Ephemeral,
41+
});
42+
return `Invalid address`;
43+
}
44+
45+
await interaction.deferReply({ flags: MessageFlags.Ephemeral });
46+
47+
if (interaction.options.getSubcommand() === "check") {
48+
const info = await ChainInfoService.getInfo();
49+
const { validators, committee } = info;
50+
51+
let reply = "";
52+
if (validators.includes(address)) {
53+
reply += "You are a validator\n";
54+
}
55+
if (committee.includes(address)) {
56+
reply += "You are a committee member\n";
57+
}
58+
59+
await interaction.editReply({
60+
content:
61+
reply || "You are not a validator or committee member",
62+
});
63+
return `Checked validator ${address}`;
64+
}
65+
return `Unknown subcommand`;
66+
} catch (error) {
67+
await interaction.editReply({
68+
content: `Failed to check validator address`,
69+
});
70+
return `Failed with error: ${
71+
error instanceof Error && error.message
72+
}`;
73+
}
74+
},
75+
};

tooling/sparta/src/commands/getChainInfo.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export default {
1616
});
1717

1818
try {
19-
console.log("Getting chain info");
2019
const {
2120
pendingBlockNum,
2221
provenBlockNum,
@@ -28,11 +27,14 @@ export default {
2827
await interaction.editReply({
2928
content: `Pending block: ${pendingBlockNum}\nProven block: ${provenBlockNum}\nCurrent epoch: ${currentEpoch}\nCurrent slot: ${currentSlot}\nProposer now: ${proposerNow}`,
3029
});
30+
return `Got chain info`;
3131
} catch (error) {
32-
console.error("Error in get-info command:", error);
3332
await interaction.editReply({
3433
content: `Failed to get chain info`,
3534
});
35+
return `Failed with error: ${
36+
error instanceof Error && error.message
37+
}`;
3638
}
3739
},
3840
};

tooling/sparta/src/commands/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import addValidator from "./addValidator.js";
1+
import addValidator from "./checkValidator.js";
22
import getChainInfo from "./getChainInfo.js";
33

44
export default { addValidator, getChainInfo };

tooling/sparta/src/discord/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
Collection,
1111
Interaction,
1212
MessageFlags,
13+
TextChannel,
1314
} from "discord.js";
1415
import { deployCommands } from "../utils/deploy-commands.js";
1516
import usersCommands from "../commands/index.js";
@@ -66,8 +67,16 @@ client.on("interactionCreate", async (interaction: Interaction) => {
6667
if (!command) return;
6768

6869
try {
69-
console.log("Executing command:", command.data.name);
70-
await command.execute(interaction);
70+
const channel = interaction.channel as TextChannel;
71+
72+
const reply = await command.execute(interaction);
73+
console.log("Command:", {
74+
name: interaction.commandName,
75+
channel: channel.name,
76+
user: interaction.user.username,
77+
date: interaction.createdAt,
78+
result: reply,
79+
});
7180
} catch (error) {
7281
console.error(error);
7382
await interaction.reply({
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#! /bin/bash
2+
3+
docker run aztecprotocol/aztec:1dc66419e0e7e1543bee081471701f90192fa33e get-node-info --node-url {$1}:8080 --json

0 commit comments

Comments
 (0)