@helium/helium-admin-cli 0.6.24 → 0.6.26

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,143 @@
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 hexboosting_sdk_1 = require("@helium/hexboosting-sdk");
41
+ const spl_utils_1 = require("@helium/spl-utils");
42
+ const web3_js_1 = require("@solana/web3.js");
43
+ const sdk_1 = __importDefault(require("@sqds/sdk"));
44
+ const os_1 = __importDefault(require("os"));
45
+ const yargs_1 = __importDefault(require("yargs/yargs"));
46
+ const utils_1 = require("./utils");
47
+ const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
48
+ function run(args = process.argv) {
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ const yarg = (0, yargs_1.default)(args).options({
51
+ wallet: {
52
+ alias: "k",
53
+ describe: "Anchor wallet keypair",
54
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
55
+ },
56
+ url: {
57
+ alias: "u",
58
+ default: "http://127.0.0.1:8899",
59
+ describe: "The solana url",
60
+ },
61
+ executeTransaction: {
62
+ type: "boolean",
63
+ },
64
+ multisig: {
65
+ type: "string",
66
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
67
+ },
68
+ authorityIndex: {
69
+ type: "number",
70
+ describe: "Authority index for squads. Defaults to 1",
71
+ default: 1,
72
+ },
73
+ startAuthority: {
74
+ type: "string",
75
+ describe: "The new start authority to set",
76
+ },
77
+ rentReclaimAuthority: {
78
+ type: "string",
79
+ describe: "The rent reclaim authority to set",
80
+ },
81
+ priceOracle: {
82
+ type: "string",
83
+ describe: "The new price oracle to set",
84
+ },
85
+ minimumPeriods: {
86
+ type: "number",
87
+ describe: "The new minimum number of periods"
88
+ },
89
+ boostPrice: {
90
+ type: "string",
91
+ describe: "The boost price in bones"
92
+ },
93
+ dntMint: {
94
+ type: "string",
95
+ describe: "DNT mint of the boost config",
96
+ default: spl_utils_1.MOBILE_MINT.toBase58(),
97
+ },
98
+ });
99
+ const argv = yield yarg.argv;
100
+ process.env.ANCHOR_WALLET = argv.wallet;
101
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
102
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
103
+ const provider = anchor.getProvider();
104
+ const wallet = new anchor.Wallet((0, utils_1.loadKeypair)(argv.wallet));
105
+ const program = yield (0, hexboosting_sdk_1.init)(provider);
106
+ const hsdProgram = yield (0, helium_sub_daos_sdk_1.init)(provider);
107
+ const instructions = [];
108
+ const dntMint = new web3_js_1.PublicKey(argv.dntMint);
109
+ const subDaoK = (0, helium_sub_daos_sdk_1.subDaoKey)(dntMint)[0];
110
+ const subDao = yield hsdProgram.account.subDaoV0.fetch(subDaoK);
111
+ instructions.push(yield program.methods
112
+ .updateBoostConfigV0({
113
+ startAuthority: argv.startAuthority
114
+ ? new web3_js_1.PublicKey(argv.startAuthority)
115
+ : null,
116
+ rentReclaimAuthority: argv.rentReclaimAuthority
117
+ ? new web3_js_1.PublicKey(argv.rentReclaimAuthority)
118
+ : null,
119
+ priceOracle: argv.priceOracle ? new web3_js_1.PublicKey(argv.priceOracle) : null,
120
+ minimumPeriods: argv.minimumPeriods || null,
121
+ boostPrice: argv.boostPrice ? new anchor.BN(argv.boostPrice) : null,
122
+ })
123
+ .accounts({
124
+ boostConfig: (0, hexboosting_sdk_1.boostConfigKey)(dntMint)[0],
125
+ authority: subDao.authority,
126
+ })
127
+ .instruction());
128
+ const squads = sdk_1.default.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
129
+ commitmentOrConfig: "finalized",
130
+ });
131
+ yield (0, utils_1.sendInstructionsOrSquads)({
132
+ provider,
133
+ instructions,
134
+ executeTransaction: argv.executeTransaction,
135
+ squads,
136
+ multisig: argv.multisig ? new web3_js_1.PublicKey(argv.multisig) : undefined,
137
+ authorityIndex: argv.authorityIndex,
138
+ signers: [],
139
+ });
140
+ });
141
+ }
142
+ exports.run = run;
143
+ //# sourceMappingURL=update-boost-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-boost-config.js","sourceRoot":"","sources":["../../src/update-boost-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { boostConfigKey, init as initHex } from "@helium/hexboosting-sdk";
3
+ import { MOBILE_MINT } from "@helium/spl-utils";
4
+ import { PublicKey } from "@solana/web3.js";
5
+ import Squads from "@sqds/sdk";
6
+ import os from "os";
7
+ import yargs from "yargs/yargs";
8
+ import { loadKeypair, sendInstructionsOrSquads } from "./utils";
9
+ import { init as initHsd, subDaoKey, } from "@helium/helium-sub-daos-sdk";
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
+ executeTransaction: {
23
+ type: "boolean",
24
+ },
25
+ multisig: {
26
+ type: "string",
27
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
28
+ },
29
+ authorityIndex: {
30
+ type: "number",
31
+ describe: "Authority index for squads. Defaults to 1",
32
+ default: 1,
33
+ },
34
+ startAuthority: {
35
+ type: "string",
36
+ describe: "The new start authority to set",
37
+ },
38
+ rentReclaimAuthority: {
39
+ type: "string",
40
+ describe: "The rent reclaim authority to set",
41
+ },
42
+ priceOracle: {
43
+ type: "string",
44
+ describe: "The new price oracle to set",
45
+ },
46
+ minimumPeriods: {
47
+ type: "number",
48
+ describe: "The new minimum number of periods"
49
+ },
50
+ boostPrice: {
51
+ type: "string",
52
+ describe: "The boost price in bones"
53
+ },
54
+ dntMint: {
55
+ type: "string",
56
+ describe: "DNT mint of the boost config",
57
+ default: MOBILE_MINT.toBase58(),
58
+ },
59
+ });
60
+ const argv = await yarg.argv;
61
+ process.env.ANCHOR_WALLET = argv.wallet;
62
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
63
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
64
+ const provider = anchor.getProvider();
65
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
66
+ const program = await initHex(provider);
67
+ const hsdProgram = await initHsd(provider);
68
+ const instructions = [];
69
+ const dntMint = new PublicKey(argv.dntMint);
70
+ const subDaoK = subDaoKey(dntMint)[0];
71
+ const subDao = await hsdProgram.account.subDaoV0.fetch(subDaoK);
72
+ instructions.push(await program.methods
73
+ .updateBoostConfigV0({
74
+ startAuthority: argv.startAuthority
75
+ ? new PublicKey(argv.startAuthority)
76
+ : null,
77
+ rentReclaimAuthority: argv.rentReclaimAuthority
78
+ ? new PublicKey(argv.rentReclaimAuthority)
79
+ : null,
80
+ priceOracle: argv.priceOracle ? new PublicKey(argv.priceOracle) : null,
81
+ minimumPeriods: argv.minimumPeriods || null,
82
+ boostPrice: argv.boostPrice ? new anchor.BN(argv.boostPrice) : null,
83
+ })
84
+ .accounts({
85
+ boostConfig: boostConfigKey(dntMint)[0],
86
+ authority: subDao.authority,
87
+ })
88
+ .instruction());
89
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
90
+ commitmentOrConfig: "finalized",
91
+ });
92
+ await sendInstructionsOrSquads({
93
+ provider,
94
+ instructions,
95
+ executeTransaction: argv.executeTransaction,
96
+ squads,
97
+ multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
98
+ authorityIndex: argv.authorityIndex,
99
+ signers: [],
100
+ });
101
+ }
102
+ //# sourceMappingURL=update-boost-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-boost-config.js","sourceRoot":"","sources":["../../../src/update-boost-config.ts"],"names":[],"mappings":"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"}