|
@@ -13,7 +13,7 @@ const parser = yargs(hideBin(process.argv))
|
|
|
.usage(
|
|
.usage(
|
|
|
"Tries to execute all vaas on a vault.\n" +
|
|
"Tries to execute all vaas on a vault.\n" +
|
|
|
"Useful for batch upgrades.\n" +
|
|
"Useful for batch upgrades.\n" +
|
|
|
- "Usage: $0 --vault <mainnet|devnet> --private-key <private-key> --offset <offset> [--dryrun]",
|
|
|
|
|
|
|
+ "Usage: $0 --vault <mainnet|devnet> --private-key <private-key> (--offset <offset> | --sequence <sequence>) [--dryrun]",
|
|
|
)
|
|
)
|
|
|
.options({
|
|
.options({
|
|
|
vault: {
|
|
vault: {
|
|
@@ -25,14 +25,25 @@ const parser = yargs(hideBin(process.argv))
|
|
|
"private-key": COMMON_DEPLOY_OPTIONS["private-key"],
|
|
"private-key": COMMON_DEPLOY_OPTIONS["private-key"],
|
|
|
offset: {
|
|
offset: {
|
|
|
type: "number",
|
|
type: "number",
|
|
|
- demandOption: true,
|
|
|
|
|
desc: "Offset to use from the last executed sequence number",
|
|
desc: "Offset to use from the last executed sequence number",
|
|
|
|
|
+ conflicts: ["sequence"],
|
|
|
|
|
+ },
|
|
|
|
|
+ sequence: {
|
|
|
|
|
+ type: "number",
|
|
|
|
|
+ desc: "Specific sequence number to execute",
|
|
|
|
|
+ conflicts: ["offset"],
|
|
|
},
|
|
},
|
|
|
dryrun: {
|
|
dryrun: {
|
|
|
type: "boolean",
|
|
type: "boolean",
|
|
|
default: false,
|
|
default: false,
|
|
|
desc: "Whether to execute the VAAs or just print them",
|
|
desc: "Whether to execute the VAAs or just print them",
|
|
|
},
|
|
},
|
|
|
|
|
+ })
|
|
|
|
|
+ .check((argv) => {
|
|
|
|
|
+ if (!argv.offset && !argv.sequence) {
|
|
|
|
|
+ throw new Error("Either --offset or --sequence must be provided");
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
async function main() {
|
|
async function main() {
|
|
@@ -54,14 +65,29 @@ async function main() {
|
|
|
"Executing VAAs for emitter",
|
|
"Executing VAAs for emitter",
|
|
|
(await vault.getEmitter()).toBase58(),
|
|
(await vault.getEmitter()).toBase58(),
|
|
|
);
|
|
);
|
|
|
- const lastSequenceNumber = await vault.getLastSequenceNumber();
|
|
|
|
|
- const startSequenceNumber = lastSequenceNumber - argv.offset;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ let startSequenceNumber: number;
|
|
|
|
|
+ let endSequenceNumber: number;
|
|
|
|
|
+
|
|
|
|
|
+ if (argv.sequence !== undefined) {
|
|
|
|
|
+ startSequenceNumber = argv.sequence;
|
|
|
|
|
+ endSequenceNumber = argv.sequence;
|
|
|
|
|
+ } else if (argv.offset !== undefined) {
|
|
|
|
|
+ const lastSequenceNumber = await vault.getLastSequenceNumber();
|
|
|
|
|
+ startSequenceNumber = lastSequenceNumber - argv.offset;
|
|
|
|
|
+ endSequenceNumber = lastSequenceNumber;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // this is unreachable but it makes the typescript linter happy.
|
|
|
|
|
+ throw new Error("Either --offset or --sequence must be provided");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
console.log(
|
|
console.log(
|
|
|
- `Going from sequence number ${startSequenceNumber} to ${lastSequenceNumber}`,
|
|
|
|
|
|
|
+ `Going from sequence number ${startSequenceNumber} to ${endSequenceNumber}`,
|
|
|
);
|
|
);
|
|
|
|
|
+
|
|
|
for (
|
|
for (
|
|
|
let seqNumber = startSequenceNumber;
|
|
let seqNumber = startSequenceNumber;
|
|
|
- seqNumber <= lastSequenceNumber;
|
|
|
|
|
|
|
+ seqNumber <= endSequenceNumber;
|
|
|
seqNumber++
|
|
seqNumber++
|
|
|
) {
|
|
) {
|
|
|
const submittedWormholeMessage = new SubmittedWormholeMessage(
|
|
const submittedWormholeMessage = new SubmittedWormholeMessage(
|