@helium/helium-admin-cli 0.10.4 → 0.10.6

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,114 @@
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 mobile_entity_manager_sdk_1 = require("@helium/mobile-entity-manager-sdk");
42
+ const spl_account_compression_1 = require("@solana/spl-account-compression");
43
+ const yargs_1 = __importDefault(require("yargs"));
44
+ const os_1 = __importDefault(require("os"));
45
+ function run(args = process.argv) {
46
+ return __awaiter(this, void 0, void 0, function* () {
47
+ const yarg = (0, yargs_1.default)(args).options({
48
+ wallet: {
49
+ alias: "k",
50
+ describe: "Anchor wallet keypair",
51
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
52
+ },
53
+ url: {
54
+ alias: "u",
55
+ default: "http://127.0.0.1:8899",
56
+ describe: "The solana url",
57
+ },
58
+ });
59
+ const argv = yield yarg.argv;
60
+ process.env.ANCHOR_WALLET = argv.wallet;
61
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
62
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
63
+ const provider = anchor.getProvider();
64
+ const hemProgram = yield (0, helium_entity_manager_sdk_1.init)(provider);
65
+ const memProgram = yield (0, mobile_entity_manager_sdk_1.init)(provider);
66
+ // Get all MakerV0 accounts
67
+ const makers = yield hemProgram.account.makerV0.all();
68
+ // Get all carriers
69
+ const carriers = yield memProgram.account.carrierV0.all();
70
+ // Get data only config accounts
71
+ const dataOnlyConfigs = yield hemProgram.account.dataOnlyConfigV0.all();
72
+ const merkleDepths = {};
73
+ // Function to calculate merkle tree depth
74
+ const getMerkleTreeDepth = (account) => {
75
+ let offset = 0;
76
+ const buffer = account.data;
77
+ const [versionedHeader, offsetIncr] = spl_account_compression_1.concurrentMerkleTreeHeaderBeet.deserialize(buffer);
78
+ offset = offsetIncr;
79
+ // Only 1 version available
80
+ if (versionedHeader.header.__kind !== "V1") {
81
+ throw Error(`Header has unsupported version: ${versionedHeader.header.__kind}`);
82
+ }
83
+ const header = versionedHeader.header.fields[0];
84
+ const [_, offsetIncr2] = (0, spl_account_compression_1.concurrentMerkleTreeBeetFactory)(header.maxDepth, header.maxBufferSize).deserialize(buffer, offset);
85
+ offset = offsetIncr2;
86
+ return (0, spl_account_compression_1.getCanopyDepth)(buffer.byteLength - offset);
87
+ };
88
+ // Get depths for all maker merkle trees
89
+ for (const maker of makers) {
90
+ const merkleAccount = yield provider.connection.getAccountInfo(maker.account.merkleTree);
91
+ if (merkleAccount) {
92
+ merkleDepths[maker.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
93
+ }
94
+ }
95
+ // Get depths for all carrier merkle trees
96
+ for (const carrier of carriers) {
97
+ const merkleAccount = yield provider.connection.getAccountInfo(carrier.account.merkleTree);
98
+ if (merkleAccount) {
99
+ merkleDepths[carrier.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
100
+ }
101
+ }
102
+ // Get depths for all data only config merkle trees
103
+ for (const config of dataOnlyConfigs) {
104
+ const merkleAccount = yield provider.connection.getAccountInfo(config.account.merkleTree);
105
+ if (merkleAccount) {
106
+ merkleDepths[config.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
107
+ }
108
+ }
109
+ // Output results as JSON
110
+ console.log(JSON.stringify(merkleDepths, null, 2));
111
+ });
112
+ }
113
+ exports.run = run;
114
+ //# sourceMappingURL=get-merkle-depths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-merkle-depths.js","sourceRoot":"","sources":["../../src/get-merkle-depths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,209 @@
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 __rest = (this && this.__rest) || function (s, e) {
35
+ var t = {};
36
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
37
+ t[p] = s[p];
38
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
39
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
40
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
41
+ t[p[i]] = s[p[i]];
42
+ }
43
+ return t;
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.run = exports.exists = void 0;
50
+ const anchor = __importStar(require("@coral-xyz/anchor"));
51
+ const lazy_distributor_sdk_1 = require("@helium/lazy-distributor-sdk");
52
+ const spl_utils_1 = require("@helium/spl-utils");
53
+ const web3_js_1 = require("@solana/web3.js");
54
+ const os_1 = __importDefault(require("os"));
55
+ const yargs_1 = __importDefault(require("yargs/yargs"));
56
+ function exists(provider, account) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ return Boolean(yield provider.connection.getAccountInfo(account));
59
+ });
60
+ }
61
+ exports.exists = exists;
62
+ function getCompressedCollectablesByOwner(provider, pubKey, page, limit) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const endpoint = provider.connection.rpcEndpoint;
65
+ const _a = yield (0, spl_utils_1.searchAssetsWithPageInfo)(endpoint, {
66
+ ownerAddress: pubKey.toBase58(),
67
+ page,
68
+ limit,
69
+ burnt: false,
70
+ options: {
71
+ showGrandTotal: true,
72
+ },
73
+ }), { items } = _a, rest = __rest(_a, ["items"]);
74
+ return Object.assign(Object.assign({}, rest), { items });
75
+ });
76
+ }
77
+ function run(args = process.argv) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const yarg = (0, yargs_1.default)(args).options({
80
+ wallet: {
81
+ alias: "k",
82
+ describe: "Anchor wallet keypair",
83
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
84
+ },
85
+ url: {
86
+ alias: "u",
87
+ default: "http://127.0.0.1:8899",
88
+ describe: "The solana url",
89
+ },
90
+ mint: {
91
+ type: "string",
92
+ describe: "Token mint type to update recipients for",
93
+ default: "all",
94
+ choices: ["iot", "mobile", "hnt", "all"],
95
+ },
96
+ destination: {
97
+ type: "string",
98
+ describe: "Destination address to update recipients to",
99
+ required: false,
100
+ },
101
+ commit: {
102
+ type: "boolean",
103
+ describe: "Commit transactions to the chain",
104
+ default: false,
105
+ },
106
+ });
107
+ const PAGE_LIMIT = 1000;
108
+ const argv = yield yarg.argv;
109
+ process.env.ANCHOR_WALLET = argv.wallet;
110
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
111
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
112
+ const provider = anchor.getProvider();
113
+ const lazyProgram = yield (0, lazy_distributor_sdk_1.init)(provider);
114
+ const ownerWallet = provider.publicKey;
115
+ const destination = argv.destination
116
+ ? new web3_js_1.PublicKey(argv.destination)
117
+ : web3_js_1.PublicKey.default;
118
+ const destinationExists = yield exists(provider, destination);
119
+ if (!destinationExists) {
120
+ console.log("Destination doesn't exist");
121
+ process.exit(1);
122
+ }
123
+ console.log(`Searching for hotspots owned by: ${ownerWallet.toBase58()}`);
124
+ console.log(`Destination address: ${destination.toBase58()}`);
125
+ let firstPageResult = yield getCompressedCollectablesByOwner(provider, ownerWallet, 1, PAGE_LIMIT);
126
+ let totalPages = Math.ceil(firstPageResult.total / PAGE_LIMIT);
127
+ let assets = [...firstPageResult.items];
128
+ if (assets.length === 0) {
129
+ console.log("No hotspots found for this wallet");
130
+ return;
131
+ }
132
+ if (totalPages > 1) {
133
+ const remainingPages = Array.from({ length: totalPages - 1 }, (_, i) => i + 2);
134
+ const pageResults = yield Promise.all(remainingPages.map((page) => getCompressedCollectablesByOwner(provider, ownerWallet, page, PAGE_LIMIT)));
135
+ pageResults.forEach((result) => {
136
+ assets = assets.concat(result.items);
137
+ });
138
+ }
139
+ const mintMap = {
140
+ iot: spl_utils_1.IOT_MINT,
141
+ mobile: spl_utils_1.MOBILE_MINT,
142
+ hnt: spl_utils_1.HNT_MINT,
143
+ };
144
+ const mintsToUpdate = argv.mint === "all"
145
+ ? Object.values(mintMap)
146
+ : [mintMap[argv.mint]];
147
+ const recipientsToUpdate = {};
148
+ mintsToUpdate.forEach((mint) => {
149
+ const mintName = mint.equals(spl_utils_1.IOT_MINT)
150
+ ? "iot"
151
+ : mint.equals(spl_utils_1.MOBILE_MINT)
152
+ ? "mobile"
153
+ : "hnt";
154
+ recipientsToUpdate[mintName] = [];
155
+ });
156
+ const recipientChecks = assets
157
+ .flatMap((asset) => mintsToUpdate.map((mint) => ({
158
+ mint,
159
+ assetId: asset.id,
160
+ lazyKey: (0, lazy_distributor_sdk_1.lazyDistributorKey)(mint)[0],
161
+ mintName: mint.equals(spl_utils_1.IOT_MINT)
162
+ ? "iot"
163
+ : mint.equals(spl_utils_1.MOBILE_MINT)
164
+ ? "mobile"
165
+ : "hnt",
166
+ })))
167
+ .map(({ assetId, lazyKey, mintName }) => __awaiter(this, void 0, void 0, function* () {
168
+ const recipient = (0, lazy_distributor_sdk_1.recipientKey)(lazyKey, assetId)[0];
169
+ const acc = yield lazyProgram.account.recipientV0.fetchNullable(recipient);
170
+ if (acc && acc.destination.toBase58() !== destination.toBase58()) {
171
+ recipientsToUpdate[mintName].push({ recipient, asset: assetId });
172
+ }
173
+ }));
174
+ yield Promise.all(recipientChecks);
175
+ console.log("\nSummary:");
176
+ for (const [mintName, recipients] of Object.entries(recipientsToUpdate)) {
177
+ console.log(`- ${mintName.toUpperCase()}: ${recipients.length} recipients to destination ${destination.toBase58()}`);
178
+ }
179
+ if (argv.commit) {
180
+ try {
181
+ const instructions = yield Promise.all(Object.values(recipientsToUpdate)
182
+ .flat()
183
+ .map(({ recipient, asset }) => __awaiter(this, void 0, void 0, function* () {
184
+ const { asset: { ownership: { owner }, }, args, accounts, remainingAccounts, } = yield (0, spl_utils_1.proofArgsAndAccounts)({
185
+ connection: provider.connection,
186
+ assetId: asset,
187
+ });
188
+ return lazyProgram.methods
189
+ .updateCompressionDestinationV0(Object.assign({}, args))
190
+ .accountsPartial(Object.assign(Object.assign({}, accounts), { owner,
191
+ recipient, destination: destination == null ? web3_js_1.PublicKey.default : destination }))
192
+ .remainingAccounts(remainingAccounts)
193
+ .instruction();
194
+ })));
195
+ const transactions = yield (0, spl_utils_1.batchInstructionsToTxsWithPriorityFee)(provider, instructions, { useFirstEstimateForAll: true });
196
+ yield (0, spl_utils_1.bulkSendTransactions)(provider, transactions, console.log, 10, [], 100);
197
+ }
198
+ catch (e) {
199
+ console.log("Failed to update recipients", e);
200
+ process.exit(1);
201
+ }
202
+ }
203
+ else {
204
+ console.log("\nDry run completed. Use --commit flag to execute the updates.");
205
+ }
206
+ });
207
+ }
208
+ exports.run = run;
209
+ //# sourceMappingURL=update-destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-destinations.js","sourceRoot":"","sources":["../../src/update-destinations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHem } from "@helium/helium-entity-manager-sdk";
3
+ import { init as initMem } from "@helium/mobile-entity-manager-sdk";
4
+ import { concurrentMerkleTreeBeetFactory, concurrentMerkleTreeHeaderBeet, getCanopyDepth } from "@solana/spl-account-compression";
5
+ import yargs from "yargs";
6
+ import os from "os";
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
+ });
20
+ const argv = await yarg.argv;
21
+ process.env.ANCHOR_WALLET = argv.wallet;
22
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
23
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
24
+ const provider = anchor.getProvider();
25
+ const hemProgram = await initHem(provider);
26
+ const memProgram = await initMem(provider);
27
+ // Get all MakerV0 accounts
28
+ const makers = await hemProgram.account.makerV0.all();
29
+ // Get all carriers
30
+ const carriers = await memProgram.account.carrierV0.all();
31
+ // Get data only config accounts
32
+ const dataOnlyConfigs = await hemProgram.account.dataOnlyConfigV0.all();
33
+ const merkleDepths = {};
34
+ // Function to calculate merkle tree depth
35
+ const getMerkleTreeDepth = (account) => {
36
+ let offset = 0;
37
+ const buffer = account.data;
38
+ const [versionedHeader, offsetIncr] = concurrentMerkleTreeHeaderBeet.deserialize(buffer);
39
+ offset = offsetIncr;
40
+ // Only 1 version available
41
+ if (versionedHeader.header.__kind !== "V1") {
42
+ throw Error(`Header has unsupported version: ${versionedHeader.header.__kind}`);
43
+ }
44
+ const header = versionedHeader.header.fields[0];
45
+ const [_, offsetIncr2] = concurrentMerkleTreeBeetFactory(header.maxDepth, header.maxBufferSize).deserialize(buffer, offset);
46
+ offset = offsetIncr2;
47
+ return getCanopyDepth(buffer.byteLength - offset);
48
+ };
49
+ // Get depths for all maker merkle trees
50
+ for (const maker of makers) {
51
+ const merkleAccount = await provider.connection.getAccountInfo(maker.account.merkleTree);
52
+ if (merkleAccount) {
53
+ merkleDepths[maker.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
54
+ }
55
+ }
56
+ // Get depths for all carrier merkle trees
57
+ for (const carrier of carriers) {
58
+ const merkleAccount = await provider.connection.getAccountInfo(carrier.account.merkleTree);
59
+ if (merkleAccount) {
60
+ merkleDepths[carrier.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
61
+ }
62
+ }
63
+ // Get depths for all data only config merkle trees
64
+ for (const config of dataOnlyConfigs) {
65
+ const merkleAccount = await provider.connection.getAccountInfo(config.account.merkleTree);
66
+ if (merkleAccount) {
67
+ merkleDepths[config.account.merkleTree.toBase58()] = getMerkleTreeDepth(merkleAccount);
68
+ }
69
+ }
70
+ // Output results as JSON
71
+ console.log(JSON.stringify(merkleDepths, null, 2));
72
+ }
73
+ //# sourceMappingURL=get-merkle-depths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-merkle-depths.js","sourceRoot":"","sources":["../../../src/get-merkle-depths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { lazyDistributorKey, recipientKey, init as initLazy, } from "@helium/lazy-distributor-sdk";
3
+ import { IOT_MINT, MOBILE_MINT, HNT_MINT, searchAssetsWithPageInfo, batchInstructionsToTxsWithPriorityFee, bulkSendTransactions, proofArgsAndAccounts, } 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 exists(provider, account) {
8
+ return Boolean(await provider.connection.getAccountInfo(account));
9
+ }
10
+ async function getCompressedCollectablesByOwner(provider, pubKey, page, limit) {
11
+ const endpoint = provider.connection.rpcEndpoint;
12
+ const { items, ...rest } = await searchAssetsWithPageInfo(endpoint, {
13
+ ownerAddress: pubKey.toBase58(),
14
+ page,
15
+ limit,
16
+ burnt: false,
17
+ options: {
18
+ showGrandTotal: true,
19
+ },
20
+ });
21
+ return {
22
+ ...rest,
23
+ items,
24
+ };
25
+ }
26
+ export async function run(args = process.argv) {
27
+ const yarg = yargs(args).options({
28
+ wallet: {
29
+ alias: "k",
30
+ describe: "Anchor wallet keypair",
31
+ default: `${os.homedir()}/.config/solana/id.json`,
32
+ },
33
+ url: {
34
+ alias: "u",
35
+ default: "http://127.0.0.1:8899",
36
+ describe: "The solana url",
37
+ },
38
+ mint: {
39
+ type: "string",
40
+ describe: "Token mint type to update recipients for",
41
+ default: "all",
42
+ choices: ["iot", "mobile", "hnt", "all"],
43
+ },
44
+ destination: {
45
+ type: "string",
46
+ describe: "Destination address to update recipients to",
47
+ required: false,
48
+ },
49
+ commit: {
50
+ type: "boolean",
51
+ describe: "Commit transactions to the chain",
52
+ default: false,
53
+ },
54
+ });
55
+ const PAGE_LIMIT = 1000;
56
+ const argv = await yarg.argv;
57
+ process.env.ANCHOR_WALLET = argv.wallet;
58
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
59
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
60
+ const provider = anchor.getProvider();
61
+ const lazyProgram = await initLazy(provider);
62
+ const ownerWallet = provider.publicKey;
63
+ const destination = argv.destination
64
+ ? new PublicKey(argv.destination)
65
+ : PublicKey.default;
66
+ const destinationExists = await exists(provider, destination);
67
+ if (!destinationExists) {
68
+ console.log("Destination doesn't exist");
69
+ process.exit(1);
70
+ }
71
+ console.log(`Searching for hotspots owned by: ${ownerWallet.toBase58()}`);
72
+ console.log(`Destination address: ${destination.toBase58()}`);
73
+ let firstPageResult = await getCompressedCollectablesByOwner(provider, ownerWallet, 1, PAGE_LIMIT);
74
+ let totalPages = Math.ceil(firstPageResult.total / PAGE_LIMIT);
75
+ let assets = [...firstPageResult.items];
76
+ if (assets.length === 0) {
77
+ console.log("No hotspots found for this wallet");
78
+ return;
79
+ }
80
+ if (totalPages > 1) {
81
+ const remainingPages = Array.from({ length: totalPages - 1 }, (_, i) => i + 2);
82
+ const pageResults = await Promise.all(remainingPages.map((page) => getCompressedCollectablesByOwner(provider, ownerWallet, page, PAGE_LIMIT)));
83
+ pageResults.forEach((result) => {
84
+ assets = assets.concat(result.items);
85
+ });
86
+ }
87
+ const mintMap = {
88
+ iot: IOT_MINT,
89
+ mobile: MOBILE_MINT,
90
+ hnt: HNT_MINT,
91
+ };
92
+ const mintsToUpdate = argv.mint === "all"
93
+ ? Object.values(mintMap)
94
+ : [mintMap[argv.mint]];
95
+ const recipientsToUpdate = {};
96
+ mintsToUpdate.forEach((mint) => {
97
+ const mintName = mint.equals(IOT_MINT)
98
+ ? "iot"
99
+ : mint.equals(MOBILE_MINT)
100
+ ? "mobile"
101
+ : "hnt";
102
+ recipientsToUpdate[mintName] = [];
103
+ });
104
+ const recipientChecks = assets
105
+ .flatMap((asset) => mintsToUpdate.map((mint) => ({
106
+ mint,
107
+ assetId: asset.id,
108
+ lazyKey: lazyDistributorKey(mint)[0],
109
+ mintName: mint.equals(IOT_MINT)
110
+ ? "iot"
111
+ : mint.equals(MOBILE_MINT)
112
+ ? "mobile"
113
+ : "hnt",
114
+ })))
115
+ .map(async ({ assetId, lazyKey, mintName }) => {
116
+ const recipient = recipientKey(lazyKey, assetId)[0];
117
+ const acc = await lazyProgram.account.recipientV0.fetchNullable(recipient);
118
+ if (acc && acc.destination.toBase58() !== destination.toBase58()) {
119
+ recipientsToUpdate[mintName].push({ recipient, asset: assetId });
120
+ }
121
+ });
122
+ await Promise.all(recipientChecks);
123
+ console.log("\nSummary:");
124
+ for (const [mintName, recipients] of Object.entries(recipientsToUpdate)) {
125
+ console.log(`- ${mintName.toUpperCase()}: ${recipients.length} recipients to destination ${destination.toBase58()}`);
126
+ }
127
+ if (argv.commit) {
128
+ try {
129
+ const instructions = await Promise.all(Object.values(recipientsToUpdate)
130
+ .flat()
131
+ .map(async ({ recipient, asset }) => {
132
+ const { asset: { ownership: { owner }, }, args, accounts, remainingAccounts, } = await proofArgsAndAccounts({
133
+ connection: provider.connection,
134
+ assetId: asset,
135
+ });
136
+ return lazyProgram.methods
137
+ .updateCompressionDestinationV0({
138
+ ...args,
139
+ })
140
+ .accountsPartial({
141
+ ...accounts,
142
+ owner,
143
+ recipient,
144
+ destination: destination == null ? PublicKey.default : destination,
145
+ })
146
+ .remainingAccounts(remainingAccounts)
147
+ .instruction();
148
+ }));
149
+ const transactions = await batchInstructionsToTxsWithPriorityFee(provider, instructions, { useFirstEstimateForAll: true });
150
+ await bulkSendTransactions(provider, transactions, console.log, 10, [], 100);
151
+ }
152
+ catch (e) {
153
+ console.log("Failed to update recipients", e);
154
+ process.exit(1);
155
+ }
156
+ }
157
+ else {
158
+ console.log("\nDry run completed. Use --commit flag to execute the updates.");
159
+ }
160
+ }
161
+ //# sourceMappingURL=update-destinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-destinations.js","sourceRoot":"","sources":["../../../src/update-destinations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,IAAI,IAAI,QAAQ,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,wBAAwB,EACxB,qCAAqC,EACrC,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAEhC,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAA+B,EAC/B,OAAkB;IAElB,OAAO,OAAO,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,QAA+B,EAC/B,MAAiB,EACjB,IAAa,EACb,KAAc;IAEd,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;IACjD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,wBAAwB,CAAC,QAAQ,EAAE;QAClE,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC/B,IAAI;QACJ,KAAK;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE;YACP,cAAc,EAAE,IAAI;SACrB;KACF,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,IAAI;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED,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,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0CAA0C;YACpD,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;SACzC;QACD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,6CAA6C;YACvD,QAAQ,EAAE,KAAK;SAChB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,kCAAkC;YAC5C,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC;IACxB,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;IAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;QAClC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;IACtB,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9D,IAAI,CAAC,iBAAiB,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;IACD,OAAO,CAAC,GAAG,CAAC,oCAAoC,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE9D,IAAI,eAAe,GAAG,MAAM,gCAAgC,CAC1D,QAAQ,EACR,WAAW,EACX,CAAC,EACD,UAAU,CACX,CAAC;IAEF,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC;IAC/D,IAAI,MAAM,GAAY,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO;KACR;IAED,IAAI,UAAU,GAAG,CAAC,EAAE;QAClB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,EAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAChB,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,gCAAgC,CAC9B,QAAQ,EACR,WAAW,EACX,IAAI,EACJ,UAAU,CACX,CACF,CACF,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE,QAAQ;KACd,CAAC;IAEF,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,KAAK,KAAK;QACjB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAA4B,CAAC,CAAC,CAAC;IAEnD,MAAM,kBAAkB,GAGpB,EAAE,CAAC;IAEP,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC1B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,KAAK,CAAC;QACV,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,MAAM;SAC3B,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC1B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,KAAK;KACV,CAAC,CAAC,CACJ;SACA,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAC7D,SAAS,CACV,CAAC;QAEF,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,EAAE;YAChE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;SAClE;IACH,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;QACvE,OAAO,CAAC,GAAG,CACT,KAAK,QAAQ,CAAC,WAAW,EAAE,KACzB,UAAU,CAAC,MACb,8BAA8B,WAAW,CAAC,QAAQ,EAAE,EAAE,CACvD,CAAC;KACH;IAED,IAAI,IAAI,CAAC,MAAM,EAAE;QACf,IAAI;YACF,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;iBAC9B,IAAI,EAAE;iBACN,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;gBAClC,MAAM,EACJ,KAAK,EAAE,EACL,SAAS,EAAE,EAAE,KAAK,EAAE,GACrB,EACD,IAAI,EACJ,QAAQ,EACR,iBAAiB,GAClB,GAAG,MAAM,oBAAoB,CAAC;oBAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;gBAEH,OAAO,WAAW,CAAC,OAAO;qBACvB,8BAA8B,CAAC;oBAC9B,GAAG,IAAI;iBACR,CAAC;qBACD,eAAe,CAAC;oBACf,GAAG,QAAQ;oBACX,KAAK;oBACL,SAAS;oBACT,WAAW,EACT,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;iBACxD,CAAC;qBACD,iBAAiB,CAAC,iBAAiB,CAAC;qBACpC,WAAW,EAAE,CAAC;YACnB,CAAC,CAAC,CACL,CAAC;YAEF,MAAM,YAAY,GAAG,MAAM,qCAAqC,CAC9D,QAAQ,EACR,YAAY,EACZ,EAAE,sBAAsB,EAAE,IAAI,EAAE,CACjC,CAAC;YAEF,MAAM,oBAAoB,CACxB,QAAQ,EACR,YAAY,EACZ,OAAO,CAAC,GAAG,EACX,EAAE,EACF,EAAE,EACF,GAAG,CACJ,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;KACF;SAAM;QACL,OAAO,CAAC,GAAG,CACT,gEAAgE,CACjE,CAAC;KACH;AACH,CAAC"}