@helium/helium-admin-cli 0.6.14 → 0.6.16

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,150 @@
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_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
41
+ const hexboosting_sdk_1 = require("@helium/hexboosting-sdk");
42
+ const spl_utils_1 = require("@helium/spl-utils");
43
+ const web3_js_1 = require("@solana/web3.js");
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_2 = require("@helium/helium-sub-daos-sdk");
48
+ const spl_token_1 = require("@solana/spl-token");
49
+ const sdk_1 = __importDefault(require("@sqds/sdk"));
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
+ hntMint: {
64
+ default: spl_utils_1.HNT_MINT.toBase58(),
65
+ },
66
+ dntMint: {
67
+ default: spl_utils_1.MOBILE_MINT.toBase58(),
68
+ describe: "Public Key of the subdao mint",
69
+ type: "string",
70
+ },
71
+ rentReclaimAuthority: {
72
+ type: "string",
73
+ required: true,
74
+ describe: "The authority to reclaim rent",
75
+ },
76
+ boostPrice: {
77
+ required: true,
78
+ type: "number",
79
+ describe: "The price to boost in usd",
80
+ },
81
+ periodLength: {
82
+ type: "number",
83
+ describe: "The period length in seconds for one boost",
84
+ required: true,
85
+ },
86
+ minimumPeriods: {
87
+ type: "number",
88
+ describe: "The min number of periods to initially boost",
89
+ required: true,
90
+ },
91
+ priceOracle: {
92
+ type: "string",
93
+ describe: "The price oracle to use",
94
+ required: true,
95
+ },
96
+ multisig: {
97
+ type: "string",
98
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
99
+ },
100
+ authorityIndex: {
101
+ type: "number",
102
+ describe: "Authority index for squads. Defaults to 1",
103
+ default: 1,
104
+ },
105
+ });
106
+ const argv = yield yarg.argv;
107
+ process.env.ANCHOR_WALLET = argv.wallet;
108
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
109
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
110
+ const provider = anchor.getProvider();
111
+ const wallet = new anchor.Wallet((0, utils_1.loadKeypair)(argv.wallet));
112
+ const squads = sdk_1.default.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
113
+ commitmentOrConfig: "finalized",
114
+ });
115
+ let multisig = argv.multisig ? new web3_js_1.PublicKey(argv.multisig) : undefined;
116
+ const program = yield (0, hexboosting_sdk_1.init)(provider);
117
+ const hsdProgram = yield (0, helium_sub_daos_sdk_2.init)(provider);
118
+ const dntMint = new web3_js_1.PublicKey(argv.dntMint);
119
+ const mint = yield (0, spl_token_1.getMint)(program.provider.connection, dntMint);
120
+ const subDao = (yield (0, helium_sub_daos_sdk_1.subDaoKey)(dntMint))[0];
121
+ const subDaoAuth = (yield hsdProgram.account.subDaoV0.fetch(subDao)).authority;
122
+ const instructions = [
123
+ yield program.methods
124
+ .initializeBoostConfigV0({
125
+ boostPrice: (0, spl_utils_1.toBN)(argv.boostPrice, mint.decimals),
126
+ periodLength: argv.periodLength,
127
+ minimumPeriods: argv.minimumPeriods,
128
+ })
129
+ .accounts({
130
+ dntMint,
131
+ priceOracle: new web3_js_1.PublicKey(argv.priceOracle),
132
+ rentReclaimAuthority: new web3_js_1.PublicKey(argv.rentReclaimAuthority),
133
+ authority: subDaoAuth,
134
+ subDao
135
+ })
136
+ .instruction(),
137
+ ];
138
+ yield (0, utils_1.sendInstructionsOrSquads)({
139
+ provider,
140
+ instructions,
141
+ signers: [],
142
+ executeTransaction: false,
143
+ squads,
144
+ multisig,
145
+ authorityIndex: argv.authorityIndex,
146
+ });
147
+ });
148
+ }
149
+ exports.run = run;
150
+ //# sourceMappingURL=create-boost-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-boost-config.js","sourceRoot":"","sources":["../../src/create-boost-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { subDaoKey } from "@helium/helium-sub-daos-sdk";
3
+ import { init } from "@helium/hexboosting-sdk";
4
+ import { HNT_MINT, MOBILE_MINT, toBN } from "@helium/spl-utils";
5
+ import { PublicKey } from "@solana/web3.js";
6
+ import os from "os";
7
+ import yargs from "yargs/yargs";
8
+ import { loadKeypair, sendInstructionsOrSquads } from "./utils";
9
+ import { init as initHsd } from "@helium/helium-sub-daos-sdk";
10
+ import { getMint } from "@solana/spl-token";
11
+ import Squads from "@sqds/sdk";
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
+ hntMint: {
25
+ default: HNT_MINT.toBase58(),
26
+ },
27
+ dntMint: {
28
+ default: MOBILE_MINT.toBase58(),
29
+ describe: "Public Key of the subdao mint",
30
+ type: "string",
31
+ },
32
+ rentReclaimAuthority: {
33
+ type: "string",
34
+ required: true,
35
+ describe: "The authority to reclaim rent",
36
+ },
37
+ boostPrice: {
38
+ required: true,
39
+ type: "number",
40
+ describe: "The price to boost in usd",
41
+ },
42
+ periodLength: {
43
+ type: "number",
44
+ describe: "The period length in seconds for one boost",
45
+ required: true,
46
+ },
47
+ minimumPeriods: {
48
+ type: "number",
49
+ describe: "The min number of periods to initially boost",
50
+ required: true,
51
+ },
52
+ priceOracle: {
53
+ type: "string",
54
+ describe: "The price oracle to use",
55
+ required: true,
56
+ },
57
+ multisig: {
58
+ type: "string",
59
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
60
+ },
61
+ authorityIndex: {
62
+ type: "number",
63
+ describe: "Authority index for squads. Defaults to 1",
64
+ default: 1,
65
+ },
66
+ });
67
+ const argv = await yarg.argv;
68
+ process.env.ANCHOR_WALLET = argv.wallet;
69
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
70
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
71
+ const provider = anchor.getProvider();
72
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
73
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
74
+ commitmentOrConfig: "finalized",
75
+ });
76
+ let multisig = argv.multisig ? new PublicKey(argv.multisig) : undefined;
77
+ const program = await init(provider);
78
+ const hsdProgram = await initHsd(provider);
79
+ const dntMint = new PublicKey(argv.dntMint);
80
+ const mint = await getMint(program.provider.connection, dntMint);
81
+ const subDao = (await subDaoKey(dntMint))[0];
82
+ const subDaoAuth = (await hsdProgram.account.subDaoV0.fetch(subDao)).authority;
83
+ const instructions = [
84
+ await program.methods
85
+ .initializeBoostConfigV0({
86
+ boostPrice: toBN(argv.boostPrice, mint.decimals),
87
+ periodLength: argv.periodLength,
88
+ minimumPeriods: argv.minimumPeriods,
89
+ })
90
+ .accounts({
91
+ dntMint,
92
+ priceOracle: new PublicKey(argv.priceOracle),
93
+ rentReclaimAuthority: new PublicKey(argv.rentReclaimAuthority),
94
+ authority: subDaoAuth,
95
+ subDao
96
+ })
97
+ .instruction(),
98
+ ];
99
+ await sendInstructionsOrSquads({
100
+ provider,
101
+ instructions,
102
+ signers: [],
103
+ executeTransaction: false,
104
+ squads,
105
+ multisig,
106
+ authorityIndex: argv.authorityIndex,
107
+ });
108
+ }
109
+ //# sourceMappingURL=create-boost-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-boost-config.js","sourceRoot":"","sources":["../../../src/create-boost-config.ts"],"names":[],"mappings":"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"}