@helium/helium-admin-cli 0.10.19 → 0.10.21

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.
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.run = void 0;
39
+ const anchor = __importStar(require("@coral-xyz/anchor"));
40
+ const helium_entity_manager_sdk_1 = require("@helium/helium-entity-manager-sdk");
41
+ const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
42
+ const mobile_entity_manager_sdk_1 = require("@helium/mobile-entity-manager-sdk");
43
+ const spl_utils_1 = require("@helium/spl-utils");
44
+ const web3_js_1 = require("@solana/web3.js");
45
+ const os_1 = __importDefault(require("os"));
46
+ const yargs_1 = __importDefault(require("yargs/yargs"));
47
+ function run(args = process.argv) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const yarg = (0, yargs_1.default)(args).options({
50
+ wallet: {
51
+ alias: "k",
52
+ describe: "Anchor wallet keypair",
53
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
54
+ },
55
+ url: {
56
+ alias: "u",
57
+ default: "http://127.0.0.1:8899",
58
+ describe: "The solana url",
59
+ },
60
+ hntMint: {
61
+ default: spl_utils_1.HNT_MINT.toBase58(),
62
+ },
63
+ dntMint: {
64
+ default: spl_utils_1.MOBILE_MINT.toBase58(),
65
+ describe: "Public Key of the subdao mint",
66
+ type: "string",
67
+ },
68
+ name: {
69
+ alias: "n",
70
+ type: "string",
71
+ required: true,
72
+ describe: "The name of the carrier",
73
+ },
74
+ recipient: {
75
+ describe: "Recipient of the rewardable mapping rewards nft, default to this wallet",
76
+ type: "string",
77
+ required: false,
78
+ },
79
+ });
80
+ const argv = yield yarg.argv;
81
+ process.env.ANCHOR_WALLET = argv.wallet;
82
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
83
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
84
+ const provider = anchor.getProvider();
85
+ const name = "Helium Mobile Mapping Rewards";
86
+ const hemProgram = yield (0, helium_entity_manager_sdk_1.init)(provider);
87
+ const memProgram = yield (0, mobile_entity_manager_sdk_1.init)(provider);
88
+ const dntMint = new web3_js_1.PublicKey(argv.dntMint);
89
+ const subDao = (yield (0, helium_sub_daos_sdk_1.subDaoKey)(dntMint))[0];
90
+ const carrier = yield (0, mobile_entity_manager_sdk_1.carrierKey)(subDao, argv.name)[0];
91
+ const hntMint = new web3_js_1.PublicKey(argv.hntMint);
92
+ const recipient = argv.recipient
93
+ ? new web3_js_1.PublicKey(argv.recipient)
94
+ : provider.wallet.publicKey;
95
+ const [keyToAssetK] = (0, helium_entity_manager_sdk_1.keyToAssetKey)((0, helium_sub_daos_sdk_1.daoKey)(hntMint)[0], Buffer.from(name, "utf-8"));
96
+ const keyToAsset = yield hemProgram.account.keyToAssetV0.fetchNullable(keyToAssetK);
97
+ if (!keyToAsset) {
98
+ console.log("Minting carrier NFT");
99
+ console.log(yield memProgram.methods
100
+ .issueMappingRewardsNftV0({
101
+ metadataUrl: `https://entities.nft.helium.io/Helium%20Mobile%20Mapping%20Rewards`,
102
+ })
103
+ .preInstructions([
104
+ web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
105
+ ])
106
+ .accountsPartial({ carrier, recipient, keyToAsset: keyToAssetK })
107
+ .rpc({ skipPreflight: true }));
108
+ }
109
+ });
110
+ }
111
+ exports.run = run;
112
+ //# sourceMappingURL=issue-mapping-rewards-nft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-mapping-rewards-nft.js","sourceRoot":"","sources":["../../src/issue-mapping-rewards-nft.ts"],"names":[],"mappings":"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"}
@@ -131,7 +131,7 @@ function run(args = process.argv) {
131
131
  const subDaoAcc = yield hsdProgram.account.subDaoV0.fetch(delegatedPositionAcc.subDao);
132
132
  const daoAcc = yield hsdProgram.account.daoV0.fetch(subDaoAcc.dao);
133
133
  const { instruction, pubkeys } = yield program.methods
134
- .startDelegationClaimBotV0({
134
+ .startDelegationClaimBotV1({
135
135
  taskId: nextAvailable,
136
136
  })
137
137
  .accountsPartial({
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.run = void 0;
39
+ const anchor = __importStar(require("@coral-xyz/anchor"));
40
+ const account_fetch_cache_1 = require("@helium/account-fetch-cache");
41
+ const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
42
+ const hpl_crons_sdk_1 = require("@helium/hpl-crons-sdk");
43
+ const spl_utils_1 = require("@helium/spl-utils");
44
+ const tuktuk_sdk_1 = require("@helium/tuktuk-sdk");
45
+ const voter_stake_registry_sdk_1 = require("@helium/voter-stake-registry-sdk");
46
+ const spl_token_1 = require("@solana/spl-token");
47
+ const web3_js_1 = require("@solana/web3.js");
48
+ const os_1 = __importDefault(require("os"));
49
+ const yargs_1 = __importDefault(require("yargs/yargs"));
50
+ function run(args = process.argv) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ const yarg = (0, yargs_1.default)(args).options({
53
+ wallet: {
54
+ alias: "k",
55
+ describe: "Anchor wallet keypair",
56
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
57
+ },
58
+ url: {
59
+ alias: "u",
60
+ default: "http://127.0.0.1:8899",
61
+ describe: "The solana url",
62
+ },
63
+ taskQueue: {
64
+ required: true,
65
+ type: "string",
66
+ alias: "t",
67
+ describe: "The task queue to queue",
68
+ default: "H39gEszvsi6AT4rYBiJTuZHJSF5hMHy6CKGTd7wzhsg7",
69
+ },
70
+ });
71
+ const argv = yield yarg.argv;
72
+ process.env.ANCHOR_WALLET = argv.wallet;
73
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
74
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
75
+ const provider = anchor.getProvider();
76
+ const taskQueue = new web3_js_1.PublicKey(argv.taskQueue);
77
+ const program = yield (0, hpl_crons_sdk_1.init)(provider);
78
+ const vsrProgram = yield (0, voter_stake_registry_sdk_1.init)(provider);
79
+ const hsdProgram = yield (0, helium_sub_daos_sdk_1.init)(provider);
80
+ const tuktukProgram = yield (0, tuktuk_sdk_1.init)(provider);
81
+ const cache = new account_fetch_cache_1.AccountFetchCache({
82
+ connection: provider.connection,
83
+ commitment: "confirmed",
84
+ extendConnection: true,
85
+ });
86
+ const taskQueueAcc = yield tuktukProgram.account.taskQueueV0.fetch(taskQueue);
87
+ const bots = (yield program.account.delegationClaimBotV0.all()).filter((bot) => bot.account.nextTask.toBase58() === web3_js_1.PublicKey.default.toBase58());
88
+ const delegatedPositions = yield hsdProgram.account.delegatedPositionV0.fetchMultiple(bots.map((bot) => bot.account.delegatedPosition));
89
+ const nextAvailable = (0, hpl_crons_sdk_1.nextAvailableTaskIds)(taskQueueAcc.taskBitmap, bots.length);
90
+ const botsWithDelegatedPositions = bots.map((bot, index) => (Object.assign(Object.assign({}, bot), { delegatedPosition: delegatedPositions[index] })));
91
+ console.log("Updating", bots.length, "bots");
92
+ for (const chunk of (0, spl_utils_1.chunks)(botsWithDelegatedPositions, 3)) {
93
+ const instructions = (yield Promise.all(chunk.map((bot) => __awaiter(this, void 0, void 0, function* () {
94
+ if (bot.delegatedPosition) {
95
+ const taskId = nextAvailable.pop();
96
+ const ataAddr = (yield provider.connection.getTokenLargestAccounts(bot.account.delegatedPosition)).value[0].address;
97
+ const ata = yield (0, spl_token_1.getAccount)(provider.connection, ataAddr);
98
+ return yield program.methods
99
+ .startDelegationClaimBotV1({ taskId })
100
+ .accountsPartial({
101
+ delegationClaimBot: bot.publicKey, task: (0, tuktuk_sdk_1.taskKey)(taskQueue, taskId)[0],
102
+ mint: bot.account.delegatedPosition,
103
+ subDao: bot.delegatedPosition.subDao,
104
+ positionTokenAccount: ataAddr,
105
+ taskQueue,
106
+ hntMint: spl_utils_1.HNT_MINT,
107
+ dao: (0, helium_sub_daos_sdk_1.daoKey)(spl_utils_1.HNT_MINT)[0],
108
+ delegatedPosition: bot.account.delegatedPosition,
109
+ delegatorAta: (0, spl_token_1.getAssociatedTokenAddressSync)(spl_utils_1.HNT_MINT, ata.owner),
110
+ })
111
+ .instruction();
112
+ }
113
+ })))).filter(spl_utils_1.truthy);
114
+ if (instructions.length > 0) {
115
+ yield (0, spl_utils_1.sendInstructionsWithPriorityFee)(provider, instructions, {
116
+ computeUnitLimit: 1000000,
117
+ });
118
+ }
119
+ }
120
+ });
121
+ }
122
+ exports.run = run;
123
+ //# sourceMappingURL=repair-all-position-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-all-position-claims.js","sourceRoot":"","sources":["../../src/repair-all-position-claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHem, keyToAssetKey, } from "@helium/helium-entity-manager-sdk";
3
+ import { daoKey, subDaoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { carrierKey, init as initMem } from "@helium/mobile-entity-manager-sdk";
5
+ import { HNT_MINT, MOBILE_MINT } from "@helium/spl-utils";
6
+ import { ComputeBudgetProgram, PublicKey } from "@solana/web3.js";
7
+ import os from "os";
8
+ import yargs from "yargs/yargs";
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
+ hntMint: {
22
+ default: HNT_MINT.toBase58(),
23
+ },
24
+ dntMint: {
25
+ default: MOBILE_MINT.toBase58(),
26
+ describe: "Public Key of the subdao mint",
27
+ type: "string",
28
+ },
29
+ name: {
30
+ alias: "n",
31
+ type: "string",
32
+ required: true,
33
+ describe: "The name of the carrier",
34
+ },
35
+ recipient: {
36
+ describe: "Recipient of the rewardable mapping rewards nft, default to this wallet",
37
+ type: "string",
38
+ required: false,
39
+ },
40
+ });
41
+ const argv = await yarg.argv;
42
+ process.env.ANCHOR_WALLET = argv.wallet;
43
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
44
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
45
+ const provider = anchor.getProvider();
46
+ const name = "Helium Mobile Mapping Rewards";
47
+ const hemProgram = await initHem(provider);
48
+ const memProgram = await initMem(provider);
49
+ const dntMint = new PublicKey(argv.dntMint);
50
+ const subDao = (await subDaoKey(dntMint))[0];
51
+ const carrier = await carrierKey(subDao, argv.name)[0];
52
+ const hntMint = new PublicKey(argv.hntMint);
53
+ const recipient = argv.recipient
54
+ ? new PublicKey(argv.recipient)
55
+ : provider.wallet.publicKey;
56
+ const [keyToAssetK] = keyToAssetKey(daoKey(hntMint)[0], Buffer.from(name, "utf-8"));
57
+ const keyToAsset = await hemProgram.account.keyToAssetV0.fetchNullable(keyToAssetK);
58
+ if (!keyToAsset) {
59
+ console.log("Minting carrier NFT");
60
+ console.log(await memProgram.methods
61
+ .issueMappingRewardsNftV0({
62
+ metadataUrl: `https://entities.nft.helium.io/Helium%20Mobile%20Mapping%20Rewards`,
63
+ })
64
+ .preInstructions([
65
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
66
+ ])
67
+ .accountsPartial({ carrier, recipient, keyToAsset: keyToAssetK })
68
+ .rpc({ skipPreflight: true }));
69
+ }
70
+ }
71
+ //# sourceMappingURL=issue-mapping-rewards-nft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-mapping-rewards-nft.js","sourceRoot":"","sources":["../../../src/issue-mapping-rewards-nft.ts"],"names":[],"mappings":"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"}
@@ -92,7 +92,7 @@ export async function run(args = process.argv) {
92
92
  const subDaoAcc = await hsdProgram.account.subDaoV0.fetch(delegatedPositionAcc.subDao);
93
93
  const daoAcc = await hsdProgram.account.daoV0.fetch(subDaoAcc.dao);
94
94
  const { instruction, pubkeys } = await program.methods
95
- .startDelegationClaimBotV0({
95
+ .startDelegationClaimBotV1({
96
96
  taskId: nextAvailable,
97
97
  })
98
98
  .accountsPartial({
@@ -0,0 +1,85 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { AccountFetchCache } from "@helium/account-fetch-cache";
3
+ import { daoKey, init as initHsd } from "@helium/helium-sub-daos-sdk";
4
+ import { init as initHplCrons, nextAvailableTaskIds } from "@helium/hpl-crons-sdk";
5
+ import { chunks, HNT_MINT, sendInstructionsWithPriorityFee, truthy } from "@helium/spl-utils";
6
+ import { init as initTuktuk, taskKey } from "@helium/tuktuk-sdk";
7
+ import { init as initVsr } from "@helium/voter-stake-registry-sdk";
8
+ import { getAccount, getAssociatedTokenAddressSync } from "@solana/spl-token";
9
+ import { PublicKey } from "@solana/web3.js";
10
+ import os from "os";
11
+ import yargs from "yargs/yargs";
12
+ export async function run(args = process.argv) {
13
+ const yarg = yargs(args).options({
14
+ wallet: {
15
+ alias: "k",
16
+ describe: "Anchor wallet keypair",
17
+ default: `${os.homedir()}/.config/solana/id.json`,
18
+ },
19
+ url: {
20
+ alias: "u",
21
+ default: "http://127.0.0.1:8899",
22
+ describe: "The solana url",
23
+ },
24
+ taskQueue: {
25
+ required: true,
26
+ type: "string",
27
+ alias: "t",
28
+ describe: "The task queue to queue",
29
+ default: "H39gEszvsi6AT4rYBiJTuZHJSF5hMHy6CKGTd7wzhsg7",
30
+ },
31
+ });
32
+ const argv = await yarg.argv;
33
+ process.env.ANCHOR_WALLET = argv.wallet;
34
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
35
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
36
+ const provider = anchor.getProvider();
37
+ const taskQueue = new PublicKey(argv.taskQueue);
38
+ const program = await initHplCrons(provider);
39
+ const vsrProgram = await initVsr(provider);
40
+ const hsdProgram = await initHsd(provider);
41
+ const tuktukProgram = await initTuktuk(provider);
42
+ const cache = new AccountFetchCache({
43
+ connection: provider.connection,
44
+ commitment: "confirmed",
45
+ extendConnection: true,
46
+ });
47
+ const taskQueueAcc = await tuktukProgram.account.taskQueueV0.fetch(taskQueue);
48
+ const bots = (await program.account.delegationClaimBotV0.all()).filter((bot) => bot.account.nextTask.toBase58() === PublicKey.default.toBase58());
49
+ const delegatedPositions = await hsdProgram.account.delegatedPositionV0.fetchMultiple(bots.map((bot) => bot.account.delegatedPosition));
50
+ const nextAvailable = nextAvailableTaskIds(taskQueueAcc.taskBitmap, bots.length);
51
+ const botsWithDelegatedPositions = bots.map((bot, index) => ({
52
+ ...bot,
53
+ delegatedPosition: delegatedPositions[index]
54
+ }));
55
+ console.log("Updating", bots.length, "bots");
56
+ for (const chunk of chunks(botsWithDelegatedPositions, 3)) {
57
+ const instructions = (await Promise.all(chunk.map(async (bot) => {
58
+ if (bot.delegatedPosition) {
59
+ const taskId = nextAvailable.pop();
60
+ const ataAddr = (await provider.connection.getTokenLargestAccounts(bot.account.delegatedPosition)).value[0].address;
61
+ const ata = await getAccount(provider.connection, ataAddr);
62
+ return await program.methods
63
+ .startDelegationClaimBotV1({ taskId })
64
+ .accountsPartial({
65
+ delegationClaimBot: bot.publicKey, task: taskKey(taskQueue, taskId)[0],
66
+ mint: bot.account.delegatedPosition,
67
+ subDao: bot.delegatedPosition.subDao,
68
+ positionTokenAccount: ataAddr,
69
+ taskQueue,
70
+ hntMint: HNT_MINT,
71
+ dao: daoKey(HNT_MINT)[0],
72
+ delegatedPosition: bot.account.delegatedPosition,
73
+ delegatorAta: getAssociatedTokenAddressSync(HNT_MINT, ata.owner),
74
+ })
75
+ .instruction();
76
+ }
77
+ }))).filter(truthy);
78
+ if (instructions.length > 0) {
79
+ await sendInstructionsWithPriorityFee(provider, instructions, {
80
+ computeUnitLimit: 1000000,
81
+ });
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=repair-all-position-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repair-all-position-claims.js","sourceRoot":"","sources":["../../../src/repair-all-position-claims.ts"],"names":[],"mappings":"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"}