@helium/helium-admin-cli 0.10.1 → 0.10.2
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/lib/cjs/backfill-recent-proposals.js +10 -35
- package/lib/cjs/backfill-recent-proposals.js.map +1 -1
- package/lib/esm/src/backfill-recent-proposals.js +12 -37
- package/lib/esm/src/backfill-recent-proposals.js.map +1 -1
- package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/src/backfill-recent-proposals.d.ts.map +1 -1
- package/package.json +14 -14
- package/lib/cjs/backfill-proxy-markers.js +0 -121
- package/lib/cjs/backfill-proxy-markers.js.map +0 -1
- package/lib/cjs/remove-authorities.js +0 -134
- package/lib/cjs/remove-authorities.js.map +0 -1
- package/lib/esm/src/backfill-proxy-markers.js +0 -80
- package/lib/esm/src/backfill-proxy-markers.js.map +0 -1
- package/lib/esm/src/remove-authorities.js +0 -93
- package/lib/esm/src/remove-authorities.js.map +0 -1
- package/lib/types/src/backfill-proxy-markers.d.ts +0 -2
- package/lib/types/src/backfill-proxy-markers.d.ts.map +0 -1
- package/lib/types/src/remove-authorities.d.ts +0 -2
- package/lib/types/src/remove-authorities.d.ts.map +0 -1
|
@@ -40,10 +40,7 @@ const anchor = __importStar(require("@coral-xyz/anchor"));
|
|
|
40
40
|
const account_fetch_cache_1 = require("@helium/account-fetch-cache");
|
|
41
41
|
const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
|
|
42
42
|
const spl_utils_1 = require("@helium/spl-utils");
|
|
43
|
-
const voter_stake_registry_sdk_1 = require("@helium/voter-stake-registry-sdk");
|
|
44
|
-
const web3_js_1 = require("@solana/web3.js");
|
|
45
43
|
const bn_js_1 = require("bn.js");
|
|
46
|
-
const fs_1 = __importDefault(require("fs"));
|
|
47
44
|
const os_1 = __importDefault(require("os"));
|
|
48
45
|
const yargs_1 = __importDefault(require("yargs/yargs"));
|
|
49
46
|
function run(args = process.argv) {
|
|
@@ -59,14 +56,8 @@ function run(args = process.argv) {
|
|
|
59
56
|
default: "http://127.0.0.1:8899",
|
|
60
57
|
describe: "The solana url",
|
|
61
58
|
},
|
|
62
|
-
recentProposalsFile: {
|
|
63
|
-
alias: "m",
|
|
64
|
-
describe: "The mistake file",
|
|
65
|
-
default: "mistake.json",
|
|
66
|
-
},
|
|
67
59
|
});
|
|
68
60
|
const argv = yield yarg.argv;
|
|
69
|
-
const recentProposals = JSON.parse(fs_1.default.readFileSync(argv.recentProposalsFile, "utf8"));
|
|
70
61
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
71
62
|
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
72
63
|
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
@@ -77,35 +68,20 @@ function run(args = process.argv) {
|
|
|
77
68
|
extendConnection: true,
|
|
78
69
|
});
|
|
79
70
|
const hsdProgram = yield (0, helium_sub_daos_sdk_1.init)(provider);
|
|
80
|
-
const
|
|
71
|
+
const daoK = (0, helium_sub_daos_sdk_1.daoKey)(spl_utils_1.HNT_MINT)[0];
|
|
72
|
+
const dao = yield hsdProgram.account.daoV0.fetch(daoK);
|
|
73
|
+
const oldestProposal = dao.recentProposals[3].ts;
|
|
74
|
+
const daoEpochInfos = yield hsdProgram.account.daoEpochInfoV0.all();
|
|
75
|
+
const affectedDaoEpochInfos = daoEpochInfos.filter((e) => e.account.epoch.mul(new bn_js_1.BN(helium_sub_daos_sdk_1.EPOCH_LENGTH)).gt(oldestProposal));
|
|
81
76
|
let instructions = [];
|
|
82
|
-
let delIndex = 0;
|
|
83
77
|
let i = 0;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const delegation = delegations[delIndex];
|
|
88
|
-
if (delegation === null || delegation === void 0 ? void 0 : delegation.deprecatedRecentProposals) {
|
|
89
|
-
const deprecatedProposals = delegation.deprecatedRecentProposals.map((p) => p.proposal.toBase58());
|
|
90
|
-
const currentProposals = proposals.map((p) => p.proposal);
|
|
91
|
-
if (!arrayEquals(deprecatedProposals, currentProposals)) {
|
|
92
|
-
throw new Error(`Deprecated recent proposals mismatch for delegation ${delegation.position.toBase58()}:\n` +
|
|
93
|
-
`Deprecated: ${deprecatedProposals.join(", ")}\n` +
|
|
94
|
-
`Current: ${currentProposals.join(", ")}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
instructions.push(yield vsrProgram.methods
|
|
98
|
-
.tempBackfillRecentProposals({
|
|
99
|
-
recentProposals: proposals.map(({ proposal, ts }) => ({
|
|
100
|
-
proposal: new web3_js_1.PublicKey(proposal),
|
|
101
|
-
ts: new bn_js_1.BN(ts),
|
|
102
|
-
})),
|
|
103
|
-
})
|
|
78
|
+
for (const daoEpochInfo of affectedDaoEpochInfos) {
|
|
79
|
+
instructions.push(yield hsdProgram.methods
|
|
80
|
+
.tempBackfillDaoRecentProposals()
|
|
104
81
|
.accountsStrict({
|
|
105
82
|
authority: provider.wallet.publicKey,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
systemProgram: web3_js_1.SystemProgram.programId,
|
|
83
|
+
dao: daoK,
|
|
84
|
+
daoEpochInfo: daoEpochInfo.publicKey,
|
|
109
85
|
})
|
|
110
86
|
.instruction());
|
|
111
87
|
if (i > 20) {
|
|
@@ -117,7 +93,6 @@ function run(args = process.argv) {
|
|
|
117
93
|
instructions = [];
|
|
118
94
|
}
|
|
119
95
|
i++;
|
|
120
|
-
delIndex++;
|
|
121
96
|
}
|
|
122
97
|
yield (0, spl_utils_1.batchParallelInstructionsWithPriorityFee)(provider, instructions, {
|
|
123
98
|
onProgress: console.log,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-recent-proposals.js","sourceRoot":"","sources":["../../src/backfill-recent-proposals.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4C;AAC5C,qEAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"backfill-recent-proposals.js","sourceRoot":"","sources":["../../src/backfill-recent-proposals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import * as anchor from "@coral-xyz/anchor";
|
|
2
2
|
import { AccountFetchCache } from "@helium/account-fetch-cache";
|
|
3
|
-
import {
|
|
4
|
-
import { batchParallelInstructionsWithPriorityFee } from "@helium/spl-utils";
|
|
5
|
-
import { init as initVsr } from "@helium/voter-stake-registry-sdk";
|
|
6
|
-
import { PublicKey, SystemProgram, } from "@solana/web3.js";
|
|
3
|
+
import { daoKey, EPOCH_LENGTH, init as initHsd } from "@helium/helium-sub-daos-sdk";
|
|
4
|
+
import { batchParallelInstructionsWithPriorityFee, HNT_MINT } from "@helium/spl-utils";
|
|
7
5
|
import { BN } from "bn.js";
|
|
8
|
-
import fs from "fs";
|
|
9
6
|
import os from "os";
|
|
10
7
|
import yargs from "yargs/yargs";
|
|
11
8
|
export async function run(args = process.argv) {
|
|
@@ -20,14 +17,8 @@ export async function run(args = process.argv) {
|
|
|
20
17
|
default: "http://127.0.0.1:8899",
|
|
21
18
|
describe: "The solana url",
|
|
22
19
|
},
|
|
23
|
-
recentProposalsFile: {
|
|
24
|
-
alias: "m",
|
|
25
|
-
describe: "The mistake file",
|
|
26
|
-
default: "mistake.json",
|
|
27
|
-
},
|
|
28
20
|
});
|
|
29
21
|
const argv = await yarg.argv;
|
|
30
|
-
const recentProposals = JSON.parse(fs.readFileSync(argv.recentProposalsFile, "utf8"));
|
|
31
22
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
32
23
|
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
33
24
|
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
@@ -38,35 +29,20 @@ export async function run(args = process.argv) {
|
|
|
38
29
|
extendConnection: true,
|
|
39
30
|
});
|
|
40
31
|
const hsdProgram = await initHsd(provider);
|
|
41
|
-
const
|
|
32
|
+
const daoK = daoKey(HNT_MINT)[0];
|
|
33
|
+
const dao = await hsdProgram.account.daoV0.fetch(daoK);
|
|
34
|
+
const oldestProposal = dao.recentProposals[3].ts;
|
|
35
|
+
const daoEpochInfos = await hsdProgram.account.daoEpochInfoV0.all();
|
|
36
|
+
const affectedDaoEpochInfos = daoEpochInfos.filter((e) => e.account.epoch.mul(new BN(EPOCH_LENGTH)).gt(oldestProposal));
|
|
42
37
|
let instructions = [];
|
|
43
|
-
let delIndex = 0;
|
|
44
38
|
let i = 0;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const delegation = delegations[delIndex];
|
|
49
|
-
if (delegation?.deprecatedRecentProposals) {
|
|
50
|
-
const deprecatedProposals = delegation.deprecatedRecentProposals.map((p) => p.proposal.toBase58());
|
|
51
|
-
const currentProposals = proposals.map((p) => p.proposal);
|
|
52
|
-
if (!arrayEquals(deprecatedProposals, currentProposals)) {
|
|
53
|
-
throw new Error(`Deprecated recent proposals mismatch for delegation ${delegation.position.toBase58()}:\n` +
|
|
54
|
-
`Deprecated: ${deprecatedProposals.join(", ")}\n` +
|
|
55
|
-
`Current: ${currentProposals.join(", ")}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
instructions.push(await vsrProgram.methods
|
|
59
|
-
.tempBackfillRecentProposals({
|
|
60
|
-
recentProposals: proposals.map(({ proposal, ts }) => ({
|
|
61
|
-
proposal: new PublicKey(proposal),
|
|
62
|
-
ts: new BN(ts),
|
|
63
|
-
})),
|
|
64
|
-
})
|
|
39
|
+
for (const daoEpochInfo of affectedDaoEpochInfos) {
|
|
40
|
+
instructions.push(await hsdProgram.methods
|
|
41
|
+
.tempBackfillDaoRecentProposals()
|
|
65
42
|
.accountsStrict({
|
|
66
43
|
authority: provider.wallet.publicKey,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
systemProgram: SystemProgram.programId,
|
|
44
|
+
dao: daoK,
|
|
45
|
+
daoEpochInfo: daoEpochInfo.publicKey,
|
|
70
46
|
})
|
|
71
47
|
.instruction());
|
|
72
48
|
if (i > 20) {
|
|
@@ -78,7 +54,6 @@ export async function run(args = process.argv) {
|
|
|
78
54
|
instructions = [];
|
|
79
55
|
}
|
|
80
56
|
i++;
|
|
81
|
-
delIndex++;
|
|
82
57
|
}
|
|
83
58
|
await batchParallelInstructionsWithPriorityFee(provider, instructions, {
|
|
84
59
|
onProgress: console.log,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-recent-proposals.js","sourceRoot":"","sources":["../../../src/backfill-recent-proposals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"backfill-recent-proposals.js","sourceRoot":"","sources":["../../../src/backfill-recent-proposals.ts"],"names":[],"mappings":"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"}
|