@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.
- package/lib/cjs/add-expiration-to-delegations.js +52 -26
- package/lib/cjs/add-expiration-to-delegations.js.map +1 -1
- package/lib/cjs/backfill-vote-markers.js +189 -0
- package/lib/cjs/backfill-vote-markers.js.map +1 -0
- package/lib/cjs/dump-vote-markers.js +304 -0
- package/lib/cjs/dump-vote-markers.js.map +1 -0
- package/lib/cjs/fix-claimed-epochs.js +91 -0
- package/lib/cjs/fix-claimed-epochs.js.map +1 -0
- package/lib/cjs/release-iot-mobile-positions.js +91 -0
- package/lib/cjs/release-iot-mobile-positions.js.map +1 -0
- package/lib/cjs/unrug-hotspots.js +167 -0
- package/lib/cjs/unrug-hotspots.js.map +1 -0
- package/lib/cjs/update-matching-destinations.js +116 -0
- package/lib/cjs/update-matching-destinations.js.map +1 -0
- package/lib/cjs/update-mathing-destinations.js +103 -0
- package/lib/cjs/update-mathing-destinations.js.map +1 -0
- package/lib/cjs/update-proxy-config.js +128 -0
- package/lib/cjs/update-proxy-config.js.map +1 -0
- package/lib/esm/src/add-expiration-to-delegations.js +53 -27
- package/lib/esm/src/add-expiration-to-delegations.js.map +1 -1
- package/lib/esm/src/backfill-vote-markers.js +148 -0
- package/lib/esm/src/backfill-vote-markers.js.map +1 -0
- package/lib/esm/src/dump-vote-markers.js +256 -0
- package/lib/esm/src/dump-vote-markers.js.map +1 -0
- package/lib/esm/src/fix-claimed-epochs.js +50 -0
- package/lib/esm/src/fix-claimed-epochs.js.map +1 -0
- package/lib/esm/src/release-iot-mobile-positions.js +50 -0
- package/lib/esm/src/release-iot-mobile-positions.js.map +1 -0
- package/lib/esm/src/unrug-hotspots.js +126 -0
- package/lib/esm/src/unrug-hotspots.js.map +1 -0
- package/lib/esm/src/update-matching-destinations.js +75 -0
- package/lib/esm/src/update-matching-destinations.js.map +1 -0
- package/lib/esm/src/update-mathing-destinations.js +62 -0
- package/lib/esm/src/update-mathing-destinations.js.map +1 -0
- package/lib/esm/src/update-proxy-config.js +87 -0
- package/lib/esm/src/update-proxy-config.js.map +1 -0
- package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/src/add-expiration-to-delegations.d.ts.map +1 -1
- package/lib/types/src/backfill-vote-markers.d.ts +2 -0
- package/lib/types/src/backfill-vote-markers.d.ts.map +1 -0
- package/lib/types/src/dump-vote-markers.d.ts +2 -0
- package/lib/types/src/dump-vote-markers.d.ts.map +1 -0
- package/lib/types/src/fix-claimed-epochs.d.ts +2 -0
- package/lib/types/src/fix-claimed-epochs.d.ts.map +1 -0
- package/lib/types/src/release-iot-mobile-positions.d.ts +2 -0
- package/lib/types/src/release-iot-mobile-positions.d.ts.map +1 -0
- package/lib/types/src/unrug-hotspots.d.ts +2 -0
- package/lib/types/src/unrug-hotspots.d.ts.map +1 -0
- package/lib/types/src/update-matching-destinations.d.ts +2 -0
- package/lib/types/src/update-matching-destinations.d.ts.map +1 -0
- package/lib/types/src/update-mathing-destinations.d.ts +2 -0
- package/lib/types/src/update-mathing-destinations.d.ts.map +1 -0
- package/lib/types/src/update-proxy-config.d.ts +2 -0
- package/lib/types/src/update-proxy-config.d.ts.map +1 -0
- package/package.json +14 -13
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as anchor from "@coral-xyz/anchor";
|
|
2
|
+
import { initializeCompressionRecipient, init as initLazy, } from "@helium/lazy-distributor-sdk";
|
|
3
|
+
import { PublicKey, } from "@solana/web3.js";
|
|
4
|
+
import os from "os";
|
|
5
|
+
import yargs from "yargs/yargs";
|
|
6
|
+
export async function run(args = process.argv) {
|
|
7
|
+
const yarg = yargs(args).options({
|
|
8
|
+
wallet: {
|
|
9
|
+
alias: "k",
|
|
10
|
+
describe: "Anchor wallet keypair",
|
|
11
|
+
default: `${os.homedir()}/.config/solana/id.json`,
|
|
12
|
+
},
|
|
13
|
+
url: {
|
|
14
|
+
alias: "u",
|
|
15
|
+
default: "http://127.0.0.1:8899",
|
|
16
|
+
describe: "The solana url",
|
|
17
|
+
},
|
|
18
|
+
name: {
|
|
19
|
+
default: "nJWGUMOK",
|
|
20
|
+
describe: "The lazy transactions instance name",
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
const argv = await yarg.argv;
|
|
24
|
+
process.env.ANCHOR_WALLET = argv.wallet;
|
|
25
|
+
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
26
|
+
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
27
|
+
const provider = anchor.getProvider();
|
|
28
|
+
const lazyProgram = await initLazy(provider);
|
|
29
|
+
const recipients = await lazyProgram.account.recipientV0.all();
|
|
30
|
+
const LD_IOT = new PublicKey("37eiz5KzYwpAdLgrSh8GT1isKiJ6hcE5ET86dqaoCugL");
|
|
31
|
+
const LD_MOBILE = new PublicKey("GZtTp3AUo2AHdQe9BCJ6gXR9KqfruRvHnZ4QiJUALMcz");
|
|
32
|
+
const LD_HNT = new PublicKey("6gcZXjHgKUBMedc2V1aZLFPwh8M1rPVRw7kpo2KqNrFq");
|
|
33
|
+
const needUpdate = recipients.filter((r) => !r.account.destination.equals(PublicKey.default) &&
|
|
34
|
+
(r.account.lazyDistributor.equals(LD_IOT) ||
|
|
35
|
+
r.account.lazyDistributor.equals(LD_MOBILE)));
|
|
36
|
+
const hntRecipientsByKey = recipients
|
|
37
|
+
.filter((r) => r.account.lazyDistributor.equals(LD_HNT))
|
|
38
|
+
.reduce((acc, r) => {
|
|
39
|
+
acc[r.account.destination.toString()] = r;
|
|
40
|
+
return acc;
|
|
41
|
+
}, {});
|
|
42
|
+
const instructions = [];
|
|
43
|
+
for (const r of needUpdate) {
|
|
44
|
+
const asset = r.account.asset;
|
|
45
|
+
const assetOnChain = await provider.connection.getAccountInfo(asset);
|
|
46
|
+
// Only doing this to cNFTs
|
|
47
|
+
if (!assetOnChain) {
|
|
48
|
+
const hntRecipient = hntRecipientsByKey[r.account.destination.toString()];
|
|
49
|
+
if (!hntRecipient) {
|
|
50
|
+
instructions.push(await (await initializeCompressionRecipient({
|
|
51
|
+
program: lazyProgram,
|
|
52
|
+
assetId: asset,
|
|
53
|
+
lazyDistributor: LD_HNT,
|
|
54
|
+
payer: provider.wallet.publicKey,
|
|
55
|
+
})).instruction());
|
|
56
|
+
}
|
|
57
|
+
instructions.push();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
console.log("Done");
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=update-mathing-destinations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-mathing-destinations.js","sourceRoot":"","sources":["../../../src/update-mathing-destinations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as anchor from "@coral-xyz/anchor";
|
|
2
|
+
import { init as initProxy, proxyConfigKey, } from "@helium/nft-proxy-sdk";
|
|
3
|
+
import { PublicKey } from "@solana/web3.js";
|
|
4
|
+
import Squads from "@sqds/sdk";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import os from "os";
|
|
7
|
+
import yargs from "yargs/yargs";
|
|
8
|
+
import { loadKeypair, sendInstructionsOrSquads } 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
|
+
name: {
|
|
22
|
+
required: true,
|
|
23
|
+
type: "string",
|
|
24
|
+
describe: "Name of the proxy config to be updated",
|
|
25
|
+
},
|
|
26
|
+
maxProxyTime: {
|
|
27
|
+
required: false,
|
|
28
|
+
describe: "New max proxy time",
|
|
29
|
+
type: "string",
|
|
30
|
+
default: null,
|
|
31
|
+
},
|
|
32
|
+
proxySeasonsFile: {
|
|
33
|
+
type: "string",
|
|
34
|
+
default: `${__dirname}/../../proxy-seasons.json`,
|
|
35
|
+
},
|
|
36
|
+
executeTransaction: {
|
|
37
|
+
type: "boolean",
|
|
38
|
+
},
|
|
39
|
+
multisig: {
|
|
40
|
+
type: "string",
|
|
41
|
+
describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
|
|
42
|
+
},
|
|
43
|
+
authorityIndex: {
|
|
44
|
+
type: "number",
|
|
45
|
+
describe: "Authority index for squads. Defaults to 1",
|
|
46
|
+
default: 1,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
const argv = await yarg.argv;
|
|
50
|
+
process.env.ANCHOR_WALLET = argv.wallet;
|
|
51
|
+
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
52
|
+
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
53
|
+
const provider = anchor.getProvider();
|
|
54
|
+
const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
|
|
55
|
+
const proxySeasonsFile = fs.readFileSync(argv.proxySeasonsFile, "utf8");
|
|
56
|
+
const seasons = JSON.parse(proxySeasonsFile).map((s) => ({
|
|
57
|
+
start: new anchor.BN(Math.floor(Date.parse(s.start) / 1000)),
|
|
58
|
+
end: new anchor.BN(Math.floor(Date.parse(s.end) / 1000)),
|
|
59
|
+
}));
|
|
60
|
+
const program = await initProxy(provider);
|
|
61
|
+
const instructions = [];
|
|
62
|
+
const proxyConfig = proxyConfigKey(argv.name)[0];
|
|
63
|
+
const proxyConfigAcc = await program.account.proxyConfigV0.fetch(proxyConfig);
|
|
64
|
+
instructions.push(await program.methods
|
|
65
|
+
.updateProxyConfigV0({
|
|
66
|
+
maxProxyTime: argv.maxProxyTime ? new anchor.BN(argv.maxProxyTime) : null,
|
|
67
|
+
seasons,
|
|
68
|
+
})
|
|
69
|
+
.accounts({
|
|
70
|
+
proxyConfig,
|
|
71
|
+
authority: proxyConfigAcc.authority,
|
|
72
|
+
})
|
|
73
|
+
.instruction());
|
|
74
|
+
const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
|
|
75
|
+
commitmentOrConfig: "finalized",
|
|
76
|
+
});
|
|
77
|
+
await sendInstructionsOrSquads({
|
|
78
|
+
provider,
|
|
79
|
+
instructions,
|
|
80
|
+
executeTransaction: argv.executeTransaction,
|
|
81
|
+
squads,
|
|
82
|
+
multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
|
|
83
|
+
authorityIndex: argv.authorityIndex,
|
|
84
|
+
signers: [],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=update-proxy-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-proxy-config.js","sourceRoot":"","sources":["../../../src/update-proxy-config.ts"],"names":[],"mappings":"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"}
|