@helium/helium-admin-cli 0.9.19 → 0.9.20-next.23

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 (55) hide show
  1. package/lib/cjs/add-expiration-to-delegations.js +52 -26
  2. package/lib/cjs/add-expiration-to-delegations.js.map +1 -1
  3. package/lib/cjs/backfill-vote-markers.js +189 -0
  4. package/lib/cjs/backfill-vote-markers.js.map +1 -0
  5. package/lib/cjs/dump-vote-markers.js +304 -0
  6. package/lib/cjs/dump-vote-markers.js.map +1 -0
  7. package/lib/cjs/fix-claimed-epochs.js +91 -0
  8. package/lib/cjs/fix-claimed-epochs.js.map +1 -0
  9. package/lib/cjs/release-iot-mobile-positions.js +91 -0
  10. package/lib/cjs/release-iot-mobile-positions.js.map +1 -0
  11. package/lib/cjs/unrug-hotspots.js +167 -0
  12. package/lib/cjs/unrug-hotspots.js.map +1 -0
  13. package/lib/cjs/update-matching-destinations.js +116 -0
  14. package/lib/cjs/update-matching-destinations.js.map +1 -0
  15. package/lib/cjs/update-mathing-destinations.js +103 -0
  16. package/lib/cjs/update-mathing-destinations.js.map +1 -0
  17. package/lib/cjs/update-proxy-config.js +128 -0
  18. package/lib/cjs/update-proxy-config.js.map +1 -0
  19. package/lib/esm/src/add-expiration-to-delegations.js +53 -27
  20. package/lib/esm/src/add-expiration-to-delegations.js.map +1 -1
  21. package/lib/esm/src/backfill-vote-markers.js +148 -0
  22. package/lib/esm/src/backfill-vote-markers.js.map +1 -0
  23. package/lib/esm/src/dump-vote-markers.js +256 -0
  24. package/lib/esm/src/dump-vote-markers.js.map +1 -0
  25. package/lib/esm/src/fix-claimed-epochs.js +50 -0
  26. package/lib/esm/src/fix-claimed-epochs.js.map +1 -0
  27. package/lib/esm/src/release-iot-mobile-positions.js +50 -0
  28. package/lib/esm/src/release-iot-mobile-positions.js.map +1 -0
  29. package/lib/esm/src/unrug-hotspots.js +126 -0
  30. package/lib/esm/src/unrug-hotspots.js.map +1 -0
  31. package/lib/esm/src/update-matching-destinations.js +75 -0
  32. package/lib/esm/src/update-matching-destinations.js.map +1 -0
  33. package/lib/esm/src/update-mathing-destinations.js +62 -0
  34. package/lib/esm/src/update-mathing-destinations.js.map +1 -0
  35. package/lib/esm/src/update-proxy-config.js +87 -0
  36. package/lib/esm/src/update-proxy-config.js.map +1 -0
  37. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  38. package/lib/types/src/add-expiration-to-delegations.d.ts.map +1 -1
  39. package/lib/types/src/backfill-vote-markers.d.ts +2 -0
  40. package/lib/types/src/backfill-vote-markers.d.ts.map +1 -0
  41. package/lib/types/src/dump-vote-markers.d.ts +2 -0
  42. package/lib/types/src/dump-vote-markers.d.ts.map +1 -0
  43. package/lib/types/src/fix-claimed-epochs.d.ts +2 -0
  44. package/lib/types/src/fix-claimed-epochs.d.ts.map +1 -0
  45. package/lib/types/src/release-iot-mobile-positions.d.ts +2 -0
  46. package/lib/types/src/release-iot-mobile-positions.d.ts.map +1 -0
  47. package/lib/types/src/unrug-hotspots.d.ts +2 -0
  48. package/lib/types/src/unrug-hotspots.d.ts.map +1 -0
  49. package/lib/types/src/update-matching-destinations.d.ts +2 -0
  50. package/lib/types/src/update-matching-destinations.d.ts.map +1 -0
  51. package/lib/types/src/update-mathing-destinations.d.ts +2 -0
  52. package/lib/types/src/update-mathing-destinations.d.ts.map +1 -0
  53. package/lib/types/src/update-proxy-config.d.ts +2 -0
  54. package/lib/types/src/update-proxy-config.d.ts.map +1 -0
  55. package/package.json +14 -13
@@ -0,0 +1,256 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { organizationKey } from "@helium/organization-sdk";
3
+ import { init as initProposal } from "@helium/proposal-sdk";
4
+ import { init as initVsr } from "@helium/voter-stake-registry-sdk";
5
+ import { PublicKey } from "@solana/web3.js";
6
+ import b58 from "bs58";
7
+ import os from "os";
8
+ import yargs from "yargs/yargs";
9
+ import { loadKeypair } from "./utils";
10
+ export async function run(args = process.argv) {
11
+ const yarg = yargs(args).options({
12
+ wallet: {
13
+ alias: "k",
14
+ describe: "Anchor wallet keypair",
15
+ default: `${os.homedir()}/.config/solana/id.json`,
16
+ },
17
+ url: {
18
+ alias: "u",
19
+ default: "http://127.0.0.1:8899",
20
+ describe: "The solana url",
21
+ },
22
+ outputPath: {
23
+ type: "string",
24
+ describe: "The path to the output file",
25
+ default: "vote-markers.json",
26
+ },
27
+ });
28
+ const argv = await yarg.argv;
29
+ process.env.ANCHOR_WALLET = argv.wallet;
30
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
31
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
32
+ const provider = anchor.getProvider();
33
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
34
+ const hvsrProgram = await initVsr(provider);
35
+ const proposalProgram = await initProposal(provider);
36
+ let myOrgs = new Set([
37
+ organizationKey("Helium")[0],
38
+ organizationKey("Helium MOBILE")[0],
39
+ organizationKey("Helium IOT")[0],
40
+ ].map(k => k.toBase58()));
41
+ const proposals = (await proposalProgram.account.proposalV0.all()).filter(p => myOrgs.has(p.account.namespace.toBase58()));
42
+ // Track votes in a map: proposalKey -> voter marker id --> VoteMarkerV0
43
+ const votesByProposal = new Map();
44
+ for (const proposal of proposals) {
45
+ votesByProposal.set(proposal.publicKey.toBase58(), new Map());
46
+ }
47
+ // Add position cache
48
+ const positionCache = new Map();
49
+ for (const proposal of proposals) {
50
+ console.log(`Getting vote markers for ${proposal.publicKey.toBase58()}`);
51
+ let signatures = [];
52
+ let lastSig = undefined;
53
+ // // Keep fetching until we get all signatures
54
+ while (true) {
55
+ const sigs = await provider.connection.getSignaturesForAddress(proposal.publicKey, { before: lastSig, limit: 1000 }, "confirmed");
56
+ if (sigs.length === 0)
57
+ break;
58
+ signatures.push(...sigs);
59
+ lastSig = sigs[sigs.length - 1].signature;
60
+ // If we got less than 1000, we've hit the end
61
+ if (sigs.length < 1000)
62
+ break;
63
+ }
64
+ console.log("signatures", signatures.length);
65
+ const hvsrCoder = new anchor.BorshInstructionCoder(hvsrProgram.idl);
66
+ const proposalCoder = new anchor.BorshInstructionCoder(proposalProgram.idl);
67
+ // Process signatures in chunks of 100
68
+ const chunkSize = 100;
69
+ signatures = signatures.reverse();
70
+ for (let i = 0; i < signatures.length; i += chunkSize) {
71
+ const chunk = signatures.slice(i, i + chunkSize);
72
+ const txs = await provider.connection.getTransactions(chunk.map(sig => sig.signature), { maxSupportedTransactionVersion: 0, commitment: "confirmed" });
73
+ for (const tx of txs) {
74
+ if (!tx?.meta || tx.meta.err)
75
+ continue;
76
+ let message = tx.transaction.message;
77
+ let index = -1;
78
+ for (const ix of message.compiledInstructions) {
79
+ index++;
80
+ try {
81
+ // Check if instruction is from VSR program
82
+ if (message.staticAccountKeys[ix.programIdIndex].toBase58() !== hvsrProgram.programId.toBase58())
83
+ continue;
84
+ let decoded = hvsrCoder.decode(Buffer.from(ix.data));
85
+ if (!decoded)
86
+ continue;
87
+ let formatted = hvsrCoder.format(decoded, ix.accountKeyIndexes.map(i => {
88
+ return {
89
+ pubkey: message.staticAccountKeys[i] || PublicKey.default,
90
+ isSigner: false,
91
+ isWritable: false,
92
+ };
93
+ }));
94
+ if (!formatted)
95
+ continue;
96
+ // Handle vote instruction
97
+ if (decoded.name === "voteV0") {
98
+ const voter = formatted.accounts.find((acc) => acc.name === "Voter")?.pubkey;
99
+ const registrar = formatted.accounts.find((acc) => acc.name === "Registrar")?.pubkey;
100
+ const mint = formatted.accounts.find((acc) => acc.name === "Mint")?.pubkey;
101
+ const proposal = formatted.accounts.find((acc) => acc.name === "Proposal")?.pubkey;
102
+ const marker = formatted.accounts.find((acc) => acc.name === "Marker")?.pubkey;
103
+ const innerIxs = tx.meta.innerInstructions?.find((ix) => ix.index === index);
104
+ const innerVoteIx = innerIxs?.instructions.find((ix) => message.staticAccountKeys[ix.programIdIndex]?.toBase58() ===
105
+ proposalProgram.programId.toBase58());
106
+ const innerVoteDecoded = proposalCoder.decode(Buffer.from(b58.decode(innerVoteIx?.data || "")));
107
+ if (!innerVoteDecoded) {
108
+ console.log("innerVoteDecoded missing", index, tx.meta.innerInstructions, innerVoteIx, innerIxs, chunk);
109
+ }
110
+ ;
111
+ // @ts-ignore
112
+ let { weight, choice } = innerVoteDecoded.data.args;
113
+ let propMap = votesByProposal.get(proposal.toBase58());
114
+ let voteMarker = propMap.get(marker.toBase58());
115
+ if (!voteMarker) {
116
+ voteMarker = {
117
+ address: marker,
118
+ voter,
119
+ registrar,
120
+ proposal,
121
+ mint,
122
+ // @ts-ignore
123
+ choices: [choice],
124
+ weight: weight,
125
+ bumpSeed: 0,
126
+ deprecatedRelinquished: false,
127
+ proxyIndex: 0,
128
+ rentRefund: PublicKey.default,
129
+ };
130
+ }
131
+ if (!voteMarker.choices.some((c) => c === choice)) {
132
+ voteMarker.choices.push(choice);
133
+ }
134
+ if (!voteMarker.weight.eq(weight)) {
135
+ voteMarker.weight = weight;
136
+ }
137
+ propMap.set(marker.toBase58(), voteMarker);
138
+ }
139
+ else if (decoded.name === "proxiedVoteV0") {
140
+ const voter = formatted.accounts.find((acc) => acc.name === "Voter")?.pubkey;
141
+ const position = formatted.accounts.find((acc) => acc.name === "Position")?.pubkey;
142
+ const registrar = formatted.accounts.find((acc) => acc.name === "Registrar")?.pubkey;
143
+ const proposal = formatted.accounts.find((acc) => acc.name === "Proposal")?.pubkey;
144
+ const marker = formatted.accounts.find((acc) => acc.name === "Marker")?.pubkey;
145
+ // Use cache for position lookup
146
+ let mint;
147
+ if (position) {
148
+ const positionKey = position.toBase58();
149
+ if (!positionCache.has(positionKey)) {
150
+ const posData = await hvsrProgram.account.positionV0.fetchNullable(position);
151
+ positionCache.set(positionKey, { mint: posData?.mint || PublicKey.default });
152
+ }
153
+ mint = positionCache.get(positionKey).mint;
154
+ }
155
+ else {
156
+ mint = PublicKey.default;
157
+ }
158
+ const innerIxs = tx.meta.innerInstructions?.find((ix) => ix.index === index);
159
+ const innerVoteIx = innerIxs?.instructions.find((ix) => message.staticAccountKeys[ix.programIdIndex]?.toBase58() ===
160
+ proposalProgram.programId.toBase58());
161
+ const innerVoteDecoded = proposalCoder.decode(Buffer.from(b58.decode(innerVoteIx?.data || "")));
162
+ if (!innerVoteDecoded) {
163
+ console.log("innerVoteDecoded missing", index, tx.meta.innerInstructions, innerVoteIx, innerIxs, chunk);
164
+ }
165
+ // @ts-ignore
166
+ let { weight, choice } = innerVoteDecoded.data.args;
167
+ let propMap = votesByProposal.get(proposal.toBase58());
168
+ let voteMarker = propMap.get(marker.toBase58());
169
+ if (!voteMarker) {
170
+ voteMarker = {
171
+ address: marker,
172
+ voter,
173
+ registrar,
174
+ proposal,
175
+ mint,
176
+ // @ts-ignore
177
+ choices: [choice],
178
+ weight,
179
+ bumpSeed: 0,
180
+ deprecatedRelinquished: false,
181
+ proxyIndex: 0,
182
+ rentRefund: PublicKey.default,
183
+ };
184
+ }
185
+ if (!voteMarker.choices.some((c) => c === choice)) {
186
+ voteMarker.choices.push(choice);
187
+ }
188
+ if (!voteMarker.weight.eq(weight)) {
189
+ voteMarker.weight = weight;
190
+ }
191
+ propMap.set(marker.toBase58(), voteMarker);
192
+ }
193
+ else if (decoded.name === "relinquishVoteV1" || decoded.name === "proxiedRelinquishVoteV0") {
194
+ const firstIsSigner = message.isAccountSigner(ix.accountKeyIndexes[0]);
195
+ // HACK: At some point we removed rent refund as first account and made it the last account.
196
+ if (firstIsSigner && decoded.name === "relinquishVoteV1") {
197
+ const len = ix.accountKeyIndexes.length;
198
+ let refund = ix.accountKeyIndexes.shift();
199
+ if (len != 12) { // super legacy
200
+ ix.accountKeyIndexes.push(refund);
201
+ }
202
+ decoded = hvsrCoder.decode(Buffer.from(ix.data));
203
+ formatted = hvsrCoder.format(decoded, ix.accountKeyIndexes.map((i) => {
204
+ return {
205
+ pubkey: message.staticAccountKeys[i] || PublicKey.default,
206
+ isSigner: false,
207
+ isWritable: false,
208
+ };
209
+ }));
210
+ }
211
+ const marker = formatted.accounts.find((acc) => acc.name === "Marker")?.pubkey;
212
+ const proposal = formatted.accounts.find((acc) => acc.name === "Proposal")?.pubkey;
213
+ const propMap = votesByProposal.get(proposal.toBase58());
214
+ let voteMarker = propMap.get(marker.toBase58());
215
+ if (voteMarker) {
216
+ // @ts-ignore
217
+ voteMarker.choices = voteMarker.choices.filter(c => c !== decoded.data.args.choice);
218
+ if (voteMarker.choices.length === 0) {
219
+ propMap.delete(marker.toBase58());
220
+ }
221
+ else {
222
+ propMap.set(marker.toBase58(), voteMarker);
223
+ }
224
+ }
225
+ }
226
+ }
227
+ catch (e) {
228
+ console.log("error", index, tx.transaction.signatures[0]);
229
+ throw e;
230
+ // Skip instructions that can't be decoded
231
+ continue;
232
+ }
233
+ }
234
+ }
235
+ }
236
+ }
237
+ let flattened = Array.from(votesByProposal.values()).flatMap((markers) => {
238
+ return Array.from(markers.values()).map(marker => ({
239
+ address: marker.address.toBase58(),
240
+ voter: marker.voter.toBase58(),
241
+ registrar: marker.registrar.toBase58(),
242
+ proposal: marker.proposal.toBase58(),
243
+ mint: marker.mint.toBase58(),
244
+ choices: marker.choices,
245
+ weight: marker.weight.toString(),
246
+ bumpSeed: marker.bumpSeed,
247
+ deprecatedRelinquished: marker.deprecatedRelinquished,
248
+ proxyIndex: marker.proxyIndex,
249
+ rentRefund: marker.rentRefund.toBase58(),
250
+ }));
251
+ });
252
+ // Write results to file
253
+ const fs = require('fs');
254
+ fs.writeFileSync(argv.outputPath, JSON.stringify(flattened, null, 2));
255
+ }
256
+ //# sourceMappingURL=dump-vote-markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump-vote-markers.js","sourceRoot":"","sources":["../../../src/dump-vote-markers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHsd } from "@helium/helium-sub-daos-sdk";
3
+ import { batchParallelInstructionsWithPriorityFee } from "@helium/spl-utils";
4
+ import { PublicKey } from "@solana/web3.js";
5
+ import fs from "fs";
6
+ import os from "os";
7
+ import yargs from "yargs/yargs";
8
+ import { loadKeypair, } from "./utils";
9
+ export async function run(args = process.argv) {
10
+ const yarg = yargs(args).options({
11
+ wallet: {
12
+ alias: "k",
13
+ describe: "Anchor wallet keypair",
14
+ default: `${os.homedir()}/.config/solana/id.json`,
15
+ },
16
+ url: {
17
+ alias: "u",
18
+ default: "http://127.0.0.1:8899",
19
+ describe: "The solana url",
20
+ },
21
+ delegatedPositions: {
22
+ type: "string",
23
+ describe: "Path to the delegated positions file",
24
+ default: __dirname + "/delegatedPositions.txt",
25
+ },
26
+ });
27
+ const argv = await yarg.argv;
28
+ process.env.ANCHOR_WALLET = argv.wallet;
29
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
30
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
31
+ const provider = anchor.getProvider();
32
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
33
+ const hsdProgram = await initHsd(provider);
34
+ const delegatedPositions = fs.readFileSync(argv.delegatedPositions, "utf-8")
35
+ .split("\n")
36
+ .filter(line => line.trim() !== ""); // Remove empty lines
37
+ const instructions = [];
38
+ for (const delegatedPosition of delegatedPositions) {
39
+ console.log(delegatedPosition, new PublicKey(delegatedPosition).toBase58());
40
+ instructions.push(await hsdProgram.methods
41
+ .tempFixClaimedEpoch()
42
+ .accounts({
43
+ authority: wallet.publicKey,
44
+ delegatedPosition: new PublicKey(delegatedPosition),
45
+ })
46
+ .instruction());
47
+ }
48
+ await batchParallelInstructionsWithPriorityFee(provider, instructions, { maxSignatureBatch: 100 });
49
+ }
50
+ //# sourceMappingURL=fix-claimed-epochs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-claimed-epochs.js","sourceRoot":"","sources":["../../../src/fix-claimed-epochs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAI5C,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EACL,wCAAwC,EACzC,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AAEpE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,WAAW,GAGZ,MAAM,SAAS,CAAC;AAEjB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAY,OAAO,CAAC,IAAI;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE;YACN,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,yBAAyB;SAClD;QACD,GAAG,EAAE;YACH,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,gBAAgB;SAC3B;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,sCAAsC;YAChD,OAAO,EAAE,SAAS,GAAG,yBAAyB;SAC/C;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,kBAAkB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC;SACzE,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAE5D,MAAM,YAAY,GAA6B,EAAE,CAAC;IAClD,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE;QAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5E,YAAY,CAAC,IAAI,CACf,MAAM,UAAU,CAAC,OAAO;aACrB,mBAAmB,EAAE;aACrB,QAAQ,CAAC;YACR,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,iBAAiB,EAAE,IAAI,SAAS,CAAC,iBAAiB,CAAC;SACpD,CAAC;aACD,WAAW,EAAE,CACjB,CAAC;KACH;IACD,MAAM,wCAAwC,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAC,iBAAiB,EAAE,GAAG,EAAC,CAAC,CAAC;AACnG,CAAC"}
@@ -0,0 +1,50 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { batchInstructionsToTxsWithPriorityFee, bulkSendTransactions } from "@helium/spl-utils";
3
+ import { init as initVsr, } from "@helium/voter-stake-registry-sdk";
4
+ import { PublicKey } from "@solana/web3.js";
5
+ import BN from "bn.js";
6
+ import os from "os";
7
+ import yargs from "yargs/yargs";
8
+ import { loadKeypair } from "./utils";
9
+ const MOBILE_REGISTRAR = new PublicKey("C4DWaps9bLiqy4e81wJ7VTQ6QR7C4MWvwsei3ZjsaDuW");
10
+ const IOT_REGISTRAR = new PublicKey("7ZZopN1mx6ECcb3YCG8dbxeLpA44xq4gzA1ETEiaLoeL");
11
+ export async function run(args = process.argv) {
12
+ const yarg = yargs(args).options({
13
+ wallet: {
14
+ alias: "k",
15
+ describe: "Anchor wallet keypair",
16
+ default: `${os.homedir()}/.config/solana/id.json`,
17
+ },
18
+ url: {
19
+ alias: "u",
20
+ default: "http://127.0.0.1:8899",
21
+ describe: "The solana url",
22
+ },
23
+ });
24
+ const argv = await yarg.argv;
25
+ process.env.ANCHOR_WALLET = argv.wallet;
26
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
27
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
28
+ const provider = anchor.getProvider();
29
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
30
+ const vsrProgram = await initVsr(provider);
31
+ const positions = await vsrProgram.account.positionV0.all();
32
+ const registrars = new Set([MOBILE_REGISTRAR, IOT_REGISTRAR].map((p) => p.toBase58()));
33
+ const validPositions = positions.filter((p) => registrars.has(p.account.registrar.toBase58()) &&
34
+ (!p.account.lockup.endTs.eq(new BN(1738195200)) ||
35
+ !!p.account.lockup.kind.constant));
36
+ console.log(`Updating ${validPositions.length} positions`);
37
+ const instructions = await Promise.all(validPositions.map((p) => {
38
+ return vsrProgram.methods.tempReleasePositionV0().accountsStrict({
39
+ position: p.publicKey,
40
+ authority: wallet.publicKey,
41
+ }).instruction();
42
+ }));
43
+ console.log(`Constructing ${instructions.length} instructions`);
44
+ const transactions = await batchInstructionsToTxsWithPriorityFee(provider, instructions, {
45
+ useFirstEstimateForAll: true,
46
+ });
47
+ console.log(`Sending ${transactions.length} transactions`);
48
+ await bulkSendTransactions(provider, transactions, console.log, 10, [], 100);
49
+ }
50
+ //# sourceMappingURL=release-iot-mobile-positions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-iot-mobile-positions.js","sourceRoot":"","sources":["../../../src/release-iot-mobile-positions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { entityCreatorKey } from "@helium/helium-entity-manager-sdk";
3
+ import { daoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { bulkSendRawTransactions, getAssetProof, HNT_MINT, populateMissingDraftInfo, searchAssets, toVersionedTx, withPriorityFees, } from "@helium/spl-utils";
5
+ import { createTransferInstruction } from "@metaplex-foundation/mpl-bubblegum";
6
+ import { ConcurrentMerkleTreeAccount, SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, SPL_NOOP_PROGRAM_ID, } from "@solana/spl-account-compression";
7
+ import { PublicKey, } from "@solana/web3.js";
8
+ import bs58 from "bs58";
9
+ import os from "os";
10
+ import yargs from "yargs/yargs";
11
+ import { loadKeypair } from "./utils";
12
+ export async function run(args = process.argv) {
13
+ const yarg = yargs(args).options({
14
+ ruggedWallet: {
15
+ describe: "Anchor wallet keypair",
16
+ required: true,
17
+ type: "string",
18
+ },
19
+ recipient: {
20
+ describe: "Recipient of the hotspots",
21
+ type: "string",
22
+ required: true,
23
+ },
24
+ wallet: {
25
+ alias: "k",
26
+ describe: "Anchor wallet keypair",
27
+ default: `${os.homedir()}/.config/solana/id.json`,
28
+ },
29
+ url: {
30
+ alias: "u",
31
+ default: "http://127.0.0.1:8899",
32
+ describe: "The solana url",
33
+ },
34
+ hntMint: {
35
+ type: "string",
36
+ describe: "HNT mint of the dao to be updated",
37
+ default: HNT_MINT.toBase58(),
38
+ },
39
+ });
40
+ const argv = await yarg.argv;
41
+ process.env.ANCHOR_WALLET = argv.wallet;
42
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
43
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
44
+ const provider = anchor.getProvider();
45
+ const ruggedWallet = new anchor.Wallet(loadKeypair(argv.ruggedWallet));
46
+ const ruggedWalletKeypair = loadKeypair(argv.ruggedWallet);
47
+ const myKeypair = loadKeypair(argv.wallet);
48
+ const cNFTs = await searchAssets(provider.connection.rpcEndpoint, {
49
+ ownerAddress: ruggedWallet.publicKey.toBase58(),
50
+ limit: 1000,
51
+ creatorVerified: true,
52
+ burnt: false,
53
+ creatorAddress: entityCreatorKey(daoKey(HNT_MINT)[0])[0].toBase58(),
54
+ });
55
+ const drafts = [];
56
+ for (const cNFT of cNFTs) {
57
+ const draft = await transferCompressedCollectable(provider.connection, provider.wallet.publicKey, cNFT, new PublicKey(argv.recipient));
58
+ drafts.push(draft);
59
+ }
60
+ for (const draft of drafts) {
61
+ const tx = await toVersionedTx(await populateMissingDraftInfo(provider.connection, draft));
62
+ await tx.sign([ruggedWalletKeypair, myKeypair]);
63
+ await bulkSendRawTransactions(provider.connection, [Buffer.from(tx.serialize())], console.log);
64
+ }
65
+ }
66
+ function getBubblegumAuthorityPDA(merkleRollPubKey) {
67
+ const [bubblegumAuthorityPDAKey] = PublicKey.findProgramAddressSync([merkleRollPubKey.toBuffer()], new PublicKey("BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY"));
68
+ return bubblegumAuthorityPDAKey;
69
+ }
70
+ function bufferToArray(buffer) {
71
+ const nums = [];
72
+ for (let i = 0; i < buffer.length; i += 1) {
73
+ nums.push(buffer[i]);
74
+ }
75
+ return nums;
76
+ }
77
+ const mapProof = (assetProof) => {
78
+ if (!assetProof.proof || assetProof.proof.length === 0) {
79
+ throw new Error("Proof is empty");
80
+ }
81
+ return assetProof.proof.map((node) => ({
82
+ pubkey: new PublicKey(node),
83
+ isSigner: false,
84
+ isWritable: false,
85
+ }));
86
+ };
87
+ const transferCompressedCollectable = async (conn, payer, collectable, recipientPubKey) => {
88
+ const instructions = [];
89
+ const assetProof = (await getAssetProof(conn.rpcEndpoint, collectable.id));
90
+ const treeAuthority = getBubblegumAuthorityPDA(new PublicKey(assetProof.treeId));
91
+ const leafDelegate = collectable.ownership.delegate
92
+ ? new PublicKey(collectable.ownership.delegate)
93
+ : new PublicKey(collectable.ownership.owner);
94
+ const merkleTree = new PublicKey(assetProof.treeId);
95
+ const tree = await ConcurrentMerkleTreeAccount.fromAccountAddress(conn, merkleTree, "confirmed");
96
+ const canopyHeight = tree.getCanopyDepth();
97
+ const proofPath = mapProof(assetProof);
98
+ const anchorRemainingAccounts = proofPath.slice(0, proofPath.length - (canopyHeight || 0));
99
+ const ix = createTransferInstruction({
100
+ treeAuthority,
101
+ leafOwner: new PublicKey(collectable.ownership.owner),
102
+ leafDelegate,
103
+ newLeafOwner: recipientPubKey,
104
+ merkleTree,
105
+ logWrapper: SPL_NOOP_PROGRAM_ID,
106
+ compressionProgram: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
107
+ anchorRemainingAccounts,
108
+ }, {
109
+ root: bufferToArray(assetProof.root.toBuffer()),
110
+ dataHash: bufferToArray(Buffer.from(bs58.decode(collectable.compression.data_hash.trim()))),
111
+ creatorHash: bufferToArray(Buffer.from(bs58.decode(collectable.compression.creator_hash.trim()))),
112
+ nonce: collectable.compression.leaf_id,
113
+ index: collectable.compression.leaf_id,
114
+ });
115
+ ix.keys[1].isSigner = true;
116
+ instructions.push(ix);
117
+ return {
118
+ instructions: await withPriorityFees({
119
+ connection: conn,
120
+ instructions,
121
+ feePayer: payer,
122
+ }),
123
+ feePayer: payer,
124
+ };
125
+ };
126
+ //# sourceMappingURL=unrug-hotspots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unrug-hotspots.js","sourceRoot":"","sources":["../../../src/unrug-hotspots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { initializeCompressionRecipient, init as initLazy, } from "@helium/lazy-distributor-sdk";
3
+ import { batchParallelInstructionsWithPriorityFee } from "@helium/spl-utils";
4
+ import { PublicKey } from "@solana/web3.js";
5
+ import os from "os";
6
+ import yargs from "yargs/yargs";
7
+ export async function run(args = process.argv) {
8
+ const yarg = yargs(args).options({
9
+ wallet: {
10
+ alias: "k",
11
+ describe: "Anchor wallet keypair",
12
+ default: `${os.homedir()}/.config/solana/id.json`,
13
+ },
14
+ url: {
15
+ alias: "u",
16
+ default: "http://127.0.0.1:8899",
17
+ describe: "The solana url",
18
+ },
19
+ name: {
20
+ default: "nJWGUMOK",
21
+ describe: "The lazy transactions instance name",
22
+ },
23
+ });
24
+ const argv = await yarg.argv;
25
+ process.env.ANCHOR_WALLET = argv.wallet;
26
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
27
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
28
+ const provider = anchor.getProvider();
29
+ const lazyProgram = await initLazy(provider);
30
+ const recipients = await lazyProgram.account.recipientV0.all();
31
+ const LD_IOT = new PublicKey("37eiz5KzYwpAdLgrSh8GT1isKiJ6hcE5ET86dqaoCugL");
32
+ const LD_MOBILE = new PublicKey("GZtTp3AUo2AHdQe9BCJ6gXR9KqfruRvHnZ4QiJUALMcz");
33
+ const LD_HNT = new PublicKey("6gcZXjHgKUBMedc2V1aZLFPwh8M1rPVRw7kpo2KqNrFq");
34
+ const needUpdate = recipients.filter((r) => !r.account.destination.equals(PublicKey.default) &&
35
+ (r.account.lazyDistributor.equals(LD_IOT) ||
36
+ r.account.lazyDistributor.equals(LD_MOBILE)));
37
+ const hntRecipientsByKey = recipients
38
+ .filter((r) => r.account.lazyDistributor.equals(LD_HNT))
39
+ .reduce((acc, r) => {
40
+ acc[r.account.destination.toString()] = r;
41
+ return acc;
42
+ }, {});
43
+ const instructions = [];
44
+ for (const r of needUpdate) {
45
+ const asset = r.account.asset;
46
+ const assetOnChain = await provider.connection.getAccountInfo(asset);
47
+ // Only doing this to cNFTs
48
+ if (!assetOnChain) {
49
+ const hntRecipient = hntRecipientsByKey[r.account.destination.toString()];
50
+ if (!hntRecipient || hntRecipient?.account.destination.equals(PublicKey.default)) {
51
+ let hntRecipientKey = hntRecipient?.publicKey;
52
+ if (!hntRecipient) {
53
+ const { instruction, pubkeys } = await (await initializeCompressionRecipient({
54
+ program: lazyProgram,
55
+ assetId: asset,
56
+ lazyDistributor: LD_HNT,
57
+ payer: provider.wallet.publicKey,
58
+ })).prepare();
59
+ hntRecipientKey = pubkeys.recipient;
60
+ instructions.push(instruction);
61
+ }
62
+ instructions.push(await lazyProgram.methods
63
+ .tempUpdateMatchingDestination()
64
+ .accountsStrict({
65
+ recipient: hntRecipientKey,
66
+ authority: provider.wallet.publicKey,
67
+ originalRecipient: r.publicKey,
68
+ })
69
+ .instruction());
70
+ }
71
+ }
72
+ }
73
+ await batchParallelInstructionsWithPriorityFee(provider, instructions);
74
+ }
75
+ //# sourceMappingURL=update-matching-destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-matching-destinations.js","sourceRoot":"","sources":["../../../src/update-matching-destinations.ts"],"names":[],"mappings":"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"}