@helium/helium-admin-cli 0.9.24-alpha.0 → 0.9.25

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.
Files changed (60) hide show
  1. package/lib/cjs/backfill-mobile-deployment-infos.js +223 -0
  2. package/lib/cjs/backfill-mobile-deployment-infos.js.map +1 -0
  3. package/lib/cjs/create-boost-config.js +4 -2
  4. package/lib/cjs/create-boost-config.js.map +1 -1
  5. package/lib/cjs/end-epoch.js +237 -68
  6. package/lib/cjs/end-epoch.js.map +1 -1
  7. package/lib/cjs/log-hotspot.js +17 -3
  8. package/lib/cjs/log-hotspot.js.map +1 -1
  9. package/lib/cjs/remove-authorities.js +134 -0
  10. package/lib/cjs/remove-authorities.js.map +1 -0
  11. package/lib/cjs/swap-carrier-stake.js +143 -0
  12. package/lib/cjs/swap-carrier-stake.js.map +1 -0
  13. package/lib/cjs/{fix-claimed-epochs.js → swap-maker-stake.js} +59 -22
  14. package/lib/cjs/swap-maker-stake.js.map +1 -0
  15. package/lib/cjs/update-boost-config.js +1 -0
  16. package/lib/cjs/update-boost-config.js.map +1 -1
  17. package/lib/cjs/update-matching-destinations.js +116 -0
  18. package/lib/cjs/update-matching-destinations.js.map +1 -0
  19. package/lib/esm/src/backfill-mobile-deployment-infos.js +198 -0
  20. package/lib/esm/src/backfill-mobile-deployment-infos.js.map +1 -0
  21. package/lib/esm/src/create-boost-config.js +4 -2
  22. package/lib/esm/src/create-boost-config.js.map +1 -1
  23. package/lib/esm/src/end-epoch.js +234 -69
  24. package/lib/esm/src/end-epoch.js.map +1 -1
  25. package/lib/esm/src/log-hotspot.js +18 -4
  26. package/lib/esm/src/log-hotspot.js.map +1 -1
  27. package/lib/esm/src/remove-authorities.js +93 -0
  28. package/lib/esm/src/remove-authorities.js.map +1 -0
  29. package/lib/esm/src/swap-carrier-stake.js +102 -0
  30. package/lib/esm/src/swap-carrier-stake.js.map +1 -0
  31. package/lib/esm/src/swap-maker-stake.js +87 -0
  32. package/lib/esm/src/swap-maker-stake.js.map +1 -0
  33. package/lib/esm/src/update-boost-config.js +1 -0
  34. package/lib/esm/src/update-boost-config.js.map +1 -1
  35. package/lib/esm/src/update-matching-destinations.js +75 -0
  36. package/lib/esm/src/update-matching-destinations.js.map +1 -0
  37. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  38. package/lib/types/src/backfill-mobile-deployment-infos.d.ts +4 -0
  39. package/lib/types/src/backfill-mobile-deployment-infos.d.ts.map +1 -0
  40. package/lib/types/src/create-boost-config.d.ts.map +1 -1
  41. package/lib/types/src/end-epoch.d.ts.map +1 -1
  42. package/lib/types/src/log-hotspot.d.ts.map +1 -1
  43. package/lib/types/src/{fix-claimed-epochs.d.ts → remove-authorities.d.ts} +1 -1
  44. package/lib/types/src/remove-authorities.d.ts.map +1 -0
  45. package/lib/types/src/{migrate-to-hip-138.d.ts → swap-carrier-stake.d.ts} +1 -1
  46. package/lib/types/src/swap-carrier-stake.d.ts.map +1 -0
  47. package/lib/types/src/swap-maker-stake.d.ts +2 -0
  48. package/lib/types/src/swap-maker-stake.d.ts.map +1 -0
  49. package/lib/types/src/update-matching-destinations.d.ts +2 -0
  50. package/lib/types/src/update-matching-destinations.d.ts.map +1 -0
  51. package/package.json +15 -13
  52. package/lib/cjs/fix-claimed-epochs.js.map +0 -1
  53. package/lib/cjs/migrate-to-hip-138.js +0 -221
  54. package/lib/cjs/migrate-to-hip-138.js.map +0 -1
  55. package/lib/esm/src/fix-claimed-epochs.js +0 -50
  56. package/lib/esm/src/fix-claimed-epochs.js.map +0 -1
  57. package/lib/esm/src/migrate-to-hip-138.js +0 -180
  58. package/lib/esm/src/migrate-to-hip-138.js.map +0 -1
  59. package/lib/types/src/fix-claimed-epochs.d.ts.map +0 -1
  60. package/lib/types/src/migrate-to-hip-138.d.ts.map +0 -1
@@ -0,0 +1,198 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHEM, mobileInfoKey, rewardableEntityConfigKey, } from "@helium/helium-entity-manager-sdk";
3
+ import { subDaoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { MOBILE_MINT, batchInstructionsToTxsWithPriorityFee, bulkSendTransactions, chunks, truthy, } from "@helium/spl-utils";
5
+ import deepEqual from "fast-deep-equal";
6
+ import { latLngToCell } from "h3-js";
7
+ import os from "os";
8
+ import { Client } from "pg";
9
+ import yargs from "yargs/yargs";
10
+ import { loadKeypair } from "./utils";
11
+ const hasDeploymentInfo = (wi) => {
12
+ return !!(wi.deploymentInfo.antenna ||
13
+ wi.deploymentInfo.elevation ||
14
+ wi.deploymentInfo.azimuth ||
15
+ wi.deploymentInfo.mechanicalDownTilt ||
16
+ wi.deploymentInfo.electricalDownTilt);
17
+ };
18
+ export const getH3Location = (lat, lng) => {
19
+ try {
20
+ const h3Index = latLngToCell(lat, lng, 12);
21
+ return new anchor.BN(h3Index, 16);
22
+ }
23
+ catch (e) {
24
+ return undefined;
25
+ }
26
+ };
27
+ export async function run(args = process.argv) {
28
+ const yarg = yargs(args).options({
29
+ wallet: {
30
+ alias: "k",
31
+ describe: "Anchor wallet keypair",
32
+ default: `${os.homedir()}/.config/solana/id.json`,
33
+ },
34
+ url: {
35
+ alias: "u",
36
+ default: "http://127.0.0.1:8899",
37
+ describe: "The solana url",
38
+ },
39
+ pgUser: {
40
+ default: "postgres",
41
+ },
42
+ pgPassword: {
43
+ type: "string",
44
+ },
45
+ pgDatabase: {
46
+ type: "string",
47
+ },
48
+ pgHost: {
49
+ default: "localhost",
50
+ },
51
+ pgPort: {
52
+ default: "5432",
53
+ },
54
+ commit: {
55
+ type: "boolean",
56
+ default: false,
57
+ },
58
+ });
59
+ const argv = await yarg.argv;
60
+ const commit = argv.commit;
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 conn = provider.connection;
66
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
67
+ const hem = await initHEM(provider);
68
+ const isRds = argv.pgHost.includes("rds.amazon.com");
69
+ const client = new Client({
70
+ user: argv.pgUser,
71
+ password: argv.pgPassword,
72
+ host: argv.pgHost,
73
+ database: argv.pgDatabase,
74
+ port: Number(argv.pgPort),
75
+ ssl: argv.noSsl
76
+ ? {
77
+ rejectUnauthorized: false,
78
+ }
79
+ : false,
80
+ });
81
+ await client.connect();
82
+ const [subDao] = subDaoKey(MOBILE_MINT);
83
+ const [rewardableEntityconfig] = rewardableEntityConfigKey(subDao, "MOBILE");
84
+ const wifiInfos = (await client.query(`
85
+ SELECT c.hs_pubkey,
86
+ c.antenna,
87
+ c.height AS elevation,
88
+ c.azimuth AS azimuth,
89
+ c.mt AS mechanical_down_tilt,
90
+ c.et AS electrical_down_tilt
91
+ FROM radios AS r
92
+ JOIN calculations c ON r.last_success_calculation = c.id
93
+ WHERE r.is_active IS TRUE
94
+ AND radio_type = 'Wifi';
95
+ `)).rows.map((wifiInfo) => ({
96
+ ...wifiInfo,
97
+ location: getH3Location(Number(wifiInfo.lat), Number(wifiInfo.lng)),
98
+ deploymentInfo: {
99
+ antenna: Number(wifiInfo.antenna),
100
+ elevation: Number(wifiInfo.elevation),
101
+ azimuth: Number(wifiInfo.azimuth),
102
+ mechanicalDownTilt: Number(wifiInfo.mechanical_down_tilt),
103
+ electricalDownTilt: Number(wifiInfo.electrical_down_tilt),
104
+ },
105
+ }));
106
+ const mobileInfos = wifiInfos.map((wifiInfo) => mobileInfoKey(rewardableEntityconfig, wifiInfo.hs_pubkey)[0]);
107
+ const accountInfosWithPk = (await Promise.all(chunks(mobileInfos, 100).map((chunk) => conn.getMultipleAccountsInfo(chunk))))
108
+ .flat()
109
+ .map((accountInfo, idx) => ({
110
+ pubkey: mobileInfos[idx],
111
+ wifiInfo: wifiInfos[idx],
112
+ ...accountInfo,
113
+ }));
114
+ const ixs = (await Promise.all(accountInfosWithPk.map(async (acc) => {
115
+ if (acc.data) {
116
+ let correction = {};
117
+ const decodedAcc = hem.coder.accounts.decode("MobileHotspotInfoV0", acc.data);
118
+ const deploymentInfoMissing = !decodedAcc.deploymentInfo && hasDeploymentInfo(acc.wifiInfo);
119
+ const correctedDeploymentInfo = {
120
+ antenna: acc.wifiInfo.deploymentInfo.antenna ||
121
+ decodedAcc.deploymentInfo?.wifiInfoV0?.antenna ||
122
+ 0,
123
+ elevation: decodedAcc.deploymentInfo?.wifiInfoV0?.elevation || 0,
124
+ // elevation descrepency was found and backfilled so default to whats on chain
125
+ // decodedAcc.deploymentInfo?.wifiInfoV0?.elevation ||
126
+ // floored since stored on chain as i32 representation in whole meters
127
+ // Math.floor(acc.wifiInfo.deploymentInfo.elevation) ||
128
+ // 0,
129
+ azimuth: decodedAcc.deploymentInfo?.wifiInfoV0?.azimuth || 0,
130
+ // azimuth descrepency was found and backfilled so default to whats on chain
131
+ // decodedAcc.deploymentInfo?.wifiInfoV0?.azimuth ||
132
+ // acc.wifiInfo.deploymentInfo.azimuth ||
133
+ // 0,
134
+ mechanicalDownTilt: decodedAcc.deploymentInfo?.wifiInfoV0?.mechanicalDownTilt || 0,
135
+ // mechanicalDownTilt descrepency was found and backfilled so default to whats on chain
136
+ // decodedAcc.deploymentInfo?.wifiInfoV0?.mechanicalDownTilt ||
137
+ // acc.wifiInfo.deploymentInfo.mechanicalDownTilt ||
138
+ // 0,
139
+ electricalDownTilt: decodedAcc.deploymentInfo?.wifiInfoV0?.electricalDownTilt || 0,
140
+ // electricalDownTilt descrepency was found and backfilled so default to whats on chain
141
+ // decodedAcc.deploymentInfo?.wifiInfoV0?.electricalDownTilt ||
142
+ // acc.wifiInfo.deploymentInfo.electricalDownTilt ||
143
+ // 0,
144
+ };
145
+ const deploymentInfoChanged = !deepEqual(decodedAcc.deploymentInfo?.wifiInfoV0, correctedDeploymentInfo);
146
+ const locationMissing = !decodedAcc.location && acc.wifiInfo.location;
147
+ if (deploymentInfoMissing || deploymentInfoChanged) {
148
+ correction = {
149
+ ...correction,
150
+ deploymentInfo: {
151
+ wifiInfoV0: correctedDeploymentInfo,
152
+ },
153
+ };
154
+ }
155
+ if (locationMissing) {
156
+ correction = {
157
+ ...correction,
158
+ location: acc.wifiInfo.location,
159
+ };
160
+ }
161
+ if (Object.keys(correction).length > 0) {
162
+ if (!argv.commit) {
163
+ console.log({
164
+ pubkey: acc.pubkey,
165
+ current: {
166
+ ...decodedAcc.deploymentInfo?.wifiInfoV0,
167
+ },
168
+ new: {
169
+ ...correctedDeploymentInfo,
170
+ },
171
+ });
172
+ }
173
+ return await hem.methods
174
+ .tempBackfillMobileInfo({
175
+ location: correction.location || null,
176
+ deploymentInfo: correction.deploymentInfo || null,
177
+ })
178
+ .accounts({
179
+ payer: wallet.publicKey,
180
+ mobileInfo: acc.pubkey,
181
+ })
182
+ .instruction();
183
+ }
184
+ }
185
+ }))).filter(truthy);
186
+ console.log(`Total corrections needed: ${ixs.length}`);
187
+ if (commit) {
188
+ try {
189
+ const transactions = await batchInstructionsToTxsWithPriorityFee(provider, ixs, { useFirstEstimateForAll: true });
190
+ await bulkSendTransactions(provider, transactions, console.log, 10, [], 100);
191
+ }
192
+ catch (e) {
193
+ console.error("Failed to process mobile deployment info updates:", e);
194
+ process.exit(1);
195
+ }
196
+ }
197
+ }
198
+ //# sourceMappingURL=backfill-mobile-deployment-infos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfill-mobile-deployment-infos.js","sourceRoot":"","sources":["../../../src/backfill-mobile-deployment-infos.ts"],"names":[],"mappings":"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"}
@@ -84,7 +84,9 @@ export async function run(args = process.argv) {
84
84
  const dntMint = new PublicKey(argv.dntMint);
85
85
  const mint = await getMint(program.provider.connection, dntMint);
86
86
  const subDao = (await subDaoKey(dntMint))[0];
87
- const subDaoAuth = (await hsdProgram.account.subDaoV0.fetch(subDao)).authority;
87
+ const subDaoAccount = await hsdProgram.account.subDaoV0.fetch(subDao);
88
+ const dao = await hsdProgram.account.daoV0.fetch(subDaoAccount.dao);
89
+ const subDaoAuth = subDaoAccount.authority;
88
90
  const instructions = [
89
91
  await program.methods
90
92
  .initializeBoostConfigV0({
@@ -93,7 +95,7 @@ export async function run(args = process.argv) {
93
95
  minimumPeriods: argv.minimumPeriods,
94
96
  })
95
97
  .accounts({
96
- dntMint,
98
+ dcMint: dao.dcMint,
97
99
  priceOracle: new PublicKey(argv.priceOracle),
98
100
  rentReclaimAuthority: new PublicKey(argv.rentReclaimAuthority),
99
101
  authority: subDaoAuth,
@@ -1 +1 @@
1
- {"version":3,"file":"create-boost-config.js","sourceRoot":"","sources":["../../../src/create-boost-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-boost-config.js","sourceRoot":"","sources":["../../../src/create-boost-config.ts"],"names":[],"mappings":"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"}
@@ -1,88 +1,253 @@
1
- import { currentEpoch, daoEpochInfoKey, daoKey, EPOCH_LENGTH, init as initDao, } from "@helium/helium-sub-daos-sdk";
2
1
  import * as anchor from "@coral-xyz/anchor";
3
- import { PublicKey } from "@solana/web3.js";
2
+ import * as client from "@helium/distributor-oracle";
3
+ import { init as initHem, keyToAssetKey, } from "@helium/helium-entity-manager-sdk";
4
+ import { EPOCH_LENGTH, currentEpoch, daoEpochInfoKey, daoKey, init as initDao, subDaoEpochInfoKey, } from "@helium/helium-sub-daos-sdk";
5
+ import { init as initLazy, lazyDistributorKey, recipientKey, } from "@helium/lazy-distributor-sdk";
6
+ import { init as initBurn } from "@helium/no-emit-sdk";
7
+ import { init as initRewards } from "@helium/rewards-oracle-sdk";
8
+ import { HNT_MINT, IOT_MINT, MOBILE_MINT, createMintInstructions, sendAndConfirmWithRetry, sendInstructions, sendInstructionsWithPriorityFee, } from "@helium/spl-utils";
9
+ import { Keypair, PublicKey, SYSVAR_CLOCK_PUBKEY, } from "@solana/web3.js";
4
10
  import { BN } from "bn.js";
5
11
  import b58 from "bs58";
6
12
  import os from "os";
7
13
  import yargs from "yargs/yargs";
8
- import { sendInstructionsWithPriorityFee } from "@helium/spl-utils";
14
+ const IOT_OPERATIONS_FUND = "iot_operations_fund";
15
+ const NOT_EMITTED = "not_emitted";
16
+ const MAX_CLAIM_AMOUNT = new BN("207020547945205");
17
+ async function getSolanaUnixTimestamp(connection) {
18
+ const clock = await connection.getAccountInfo(SYSVAR_CLOCK_PUBKEY);
19
+ const unixTime = clock.data.readBigInt64LE(8 * 4);
20
+ return unixTime;
21
+ }
22
+ async function sleep(ms) {
23
+ return new Promise((resolve) => setTimeout(resolve, ms));
24
+ }
9
25
  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
- type: "string",
23
- describe: "Mint of the HNT token",
24
- },
25
- from: {
26
- type: "number",
27
- describe: "The timestamp to start ending epochs from",
28
- },
29
- });
30
- const argv = await yarg.argv;
31
- process.env.ANCHOR_WALLET = argv.wallet;
32
- process.env.ANCHOR_PROVIDER_URL = argv.url;
33
- anchor.setProvider(anchor.AnchorProvider.local(argv.url));
34
- const provider = anchor.getProvider();
35
- const heliumSubDaosProgram = await initDao(provider);
36
- const hntMint = new PublicKey(argv.hntMint);
37
- const dao = await daoKey(hntMint)[0];
38
- const subdaos = await heliumSubDaosProgram.account.subDaoV0.all([
39
- {
40
- memcmp: {
41
- offset: 8,
42
- bytes: b58.encode(dao.toBuffer()),
26
+ try {
27
+ const yarg = yargs(args).options({
28
+ wallet: {
29
+ alias: "k",
30
+ describe: "Anchor wallet keypair",
31
+ default: `${os.homedir()}/.config/solana/id.json`,
43
32
  },
44
- },
45
- ]);
46
- let targetTs = argv.from
47
- ? new BN(argv.from)
48
- : subdaos[0].account.vehntLastCalculatedTs;
49
- while (targetTs.toNumber() < new Date().valueOf() / 1000) {
50
- const epoch = currentEpoch(targetTs);
51
- console.log(epoch.toNumber(), targetTs.toNumber());
52
- const daoEpochInfo = await heliumSubDaosProgram.account.daoEpochInfoV0.fetchNullable(daoEpochInfoKey(dao, targetTs)[0]);
53
- if (!daoEpochInfo?.doneCalculatingScores) {
54
- for (const subDao of subdaos) {
55
- try {
56
- await sendInstructionsWithPriorityFee(provider, [
57
- await heliumSubDaosProgram.methods
58
- .calculateUtilityScoreV0({ epoch })
59
- .accounts({ subDao: subDao.publicKey })
60
- .instruction(),
61
- ], {
62
- computeUnitLimit: 1000000,
63
- });
33
+ url: {
34
+ alias: "u",
35
+ default: "http://127.0.0.1:8899",
36
+ describe: "The solana url",
37
+ },
38
+ basePriorityFee: {
39
+ type: "number",
40
+ describe: "Base priority fee to be used",
41
+ },
42
+ from: {
43
+ type: "number",
44
+ describe: "The timestamp to start ending epochs from",
45
+ },
46
+ });
47
+ const argv = await yarg.argv;
48
+ process.env.ANCHOR_WALLET = argv.wallet;
49
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
50
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
51
+ const errors = [];
52
+ const provider = anchor.getProvider();
53
+ const heliumSubDaosProgram = await initDao(provider);
54
+ const hntMint = new PublicKey(HNT_MINT);
55
+ const unixNow = new Date().valueOf() / 1000;
56
+ const [dao] = daoKey(hntMint);
57
+ const basePriorityFee = Number(argv.basePriorityFee || 1);
58
+ const subDaos = await heliumSubDaosProgram.account.subDaoV0.all([
59
+ {
60
+ memcmp: {
61
+ offset: 8,
62
+ bytes: b58.encode(dao.toBuffer()),
63
+ },
64
+ },
65
+ ]);
66
+ let targetTs = argv.from
67
+ ? new BN(argv.from)
68
+ : subDaos.reduce((acc, subDao) => BN.min(acc, subDao.account.vehntLastCalculatedTs),
69
+ // Start one day back to ensure we at least close the epoch that the job is running in.
70
+ new BN(unixNow - 24 * 60 * 60));
71
+ const solanaTime = await getSolanaUnixTimestamp(provider.connection);
72
+ mainLoop: while (targetTs.toNumber() < unixNow) {
73
+ const epoch = currentEpoch(targetTs);
74
+ console.log(epoch.toNumber(), targetTs.toNumber());
75
+ const driftFromSolana = targetTs.toNumber() - Number(solanaTime);
76
+ // If Solana is within 5 minutes of the epoch we're trying to end, wait.
77
+ // This can happen because of solana clock drift.
78
+ if (driftFromSolana > 0 && driftFromSolana < 60 * 5) {
79
+ await sleep(driftFromSolana * 1000);
80
+ }
81
+ const [daoEpoch] = daoEpochInfoKey(dao, targetTs);
82
+ const daoEpochInfo = await heliumSubDaosProgram.account.daoEpochInfoV0.fetchNullable(daoEpoch);
83
+ if (!daoEpochInfo?.doneCalculatingScores) {
84
+ for (const subDao of subDaos) {
85
+ const [subDaoEpoch] = subDaoEpochInfoKey(subDao.publicKey, targetTs);
86
+ const subDaoEpochInfo = await heliumSubDaosProgram.account.subDaoEpochInfoV0.fetchNullable(subDaoEpoch);
87
+ if (!subDaoEpochInfo?.utilityScore) {
88
+ try {
89
+ await sendInstructionsWithPriorityFee(provider, [
90
+ await heliumSubDaosProgram.methods
91
+ .calculateUtilityScoreV0({ epoch })
92
+ .accounts({ subDao: subDao.publicKey })
93
+ .instruction(),
94
+ ], {
95
+ computeUnitLimit: 1000000,
96
+ basePriorityFee: basePriorityFee,
97
+ });
98
+ }
99
+ catch (err) {
100
+ const strErr = JSON.stringify(err);
101
+ if (strErr.includes("Error Code: EpochNotOver") ||
102
+ strErr.includes(`{"Custom":6003}`)) {
103
+ // epoch not over
104
+ break mainLoop;
105
+ }
106
+ if (!strErr.includes("Error Code: UtilityScoreAlreadyCalculated") ||
107
+ !strErr.includes(`{"Custom":6002}`))
108
+ errors.push(`Failed to calculate utility score for ${subDao.account.dntMint.toBase58()}: ${err}`);
109
+ }
110
+ }
64
111
  }
65
- catch (e) {
66
- console.log(`Failed to calculate utility score for ${subDao.account.dntMint.toBase58()}: ${e.message}`);
112
+ }
113
+ for (const subDao of subDaos) {
114
+ if (!daoEpochInfo?.doneIssuingRewards) {
115
+ const [subDaoEpoch] = subDaoEpochInfoKey(subDao.publicKey, targetTs);
116
+ const subDaoEpochInfo = await heliumSubDaosProgram.account.subDaoEpochInfoV0.fetchNullable(subDaoEpoch);
117
+ if (!subDaoEpochInfo?.rewardsIssuedAt) {
118
+ try {
119
+ await sendInstructionsWithPriorityFee(provider, [
120
+ await heliumSubDaosProgram.methods
121
+ .issueRewardsV0({ epoch })
122
+ .accounts({ subDao: subDao.publicKey })
123
+ .instruction(),
124
+ ], {
125
+ basePriorityFee: basePriorityFee,
126
+ });
127
+ }
128
+ catch (err) {
129
+ errors.push(`Failed to issue rewards for ${subDao.account.dntMint.toBase58()}: ${err}`);
130
+ }
131
+ }
67
132
  }
68
133
  }
134
+ targetTs = targetTs.add(new BN(EPOCH_LENGTH));
69
135
  }
70
- if (!daoEpochInfo?.doneIssuingRewards) {
71
- for (const subDao of subdaos) {
72
- try {
73
- await sendInstructionsWithPriorityFee(provider, [
74
- await heliumSubDaosProgram.methods
75
- .issueRewardsV0({ epoch })
76
- .accounts({ subDao: subDao.publicKey })
136
+ // distribute iot operations fund
137
+ const hemProgram = await initHem(provider);
138
+ const lazyProgram = await initLazy(provider);
139
+ const rewardsOracleProgram = await initRewards(provider);
140
+ for (const token of [IOT_MINT, HNT_MINT]) {
141
+ const [lazyDistributor] = lazyDistributorKey(token);
142
+ const [keyToAsset] = keyToAssetKey(dao, IOT_OPERATIONS_FUND, "utf8");
143
+ const assetId = (await hemProgram.account.keyToAssetV0.fetch(keyToAsset))
144
+ .asset;
145
+ const [recipient] = recipientKey(lazyDistributor, assetId);
146
+ if (!(await provider.connection.getAccountInfo(recipient))) {
147
+ const method = lazyProgram.methods.initializeRecipientV0().accounts({
148
+ lazyDistributor,
149
+ mint: assetId,
150
+ });
151
+ await sendInstructionsWithPriorityFee(provider, [await method.instruction()], { basePriorityFee });
152
+ }
153
+ const rewards = await client.getCurrentRewards(lazyProgram, lazyDistributor, assetId);
154
+ const pending = await client.getPendingRewards(lazyProgram, lazyDistributor, daoKey(HNT_MINT)[0], [IOT_OPERATIONS_FUND], "utf8");
155
+ // Avoid claiming too much and tripping the breaker
156
+ if (new BN(pending[IOT_OPERATIONS_FUND]).gt(MAX_CLAIM_AMOUNT)) {
157
+ rewards[0].currentRewards = new BN(rewards[0].currentRewards)
158
+ .sub(new BN(pending[IOT_OPERATIONS_FUND]))
159
+ .add(MAX_CLAIM_AMOUNT)
160
+ .toString();
161
+ }
162
+ const tx = await client.formTransaction({
163
+ program: lazyProgram,
164
+ rewardsOracleProgram: rewardsOracleProgram,
165
+ provider,
166
+ rewards,
167
+ asset: assetId,
168
+ lazyDistributor,
169
+ });
170
+ const signed = await provider.wallet.signTransaction(tx);
171
+ try {
172
+ await sendAndConfirmWithRetry(provider.connection, Buffer.from(signed.serialize()), { skipPreflight: true }, "confirmed");
173
+ }
174
+ catch (err) {
175
+ errors.push(`Failed to distribute iot op funds: ${err}`);
176
+ }
177
+ }
178
+ // Only do this if that feature has been deployed
179
+ if (hemProgram.methods.issueNotEmittedEntityV0) {
180
+ console.log("Issuing no_emit");
181
+ const noEmitProgram = await initBurn(provider);
182
+ const tokens = [MOBILE_MINT, IOT_MINT, HNT_MINT];
183
+ for (const token of tokens) {
184
+ const [lazyDistributor] = lazyDistributorKey(token);
185
+ const notEmittedEntityKta = keyToAssetKey(dao, NOT_EMITTED, "utf-8")[0];
186
+ // Issue the burn entity if it doesn't exist yet.
187
+ if (!(await provider.connection.getAccountInfo(notEmittedEntityKta))) {
188
+ const mint = Keypair.generate();
189
+ await sendInstructions(provider, [
190
+ ...(await createMintInstructions(provider, 0, provider.wallet.publicKey, provider.wallet.publicKey, mint)),
191
+ await hemProgram.methods
192
+ .issueNotEmittedEntityV0()
193
+ .accounts({
194
+ dao,
195
+ mint: mint.publicKey,
196
+ })
77
197
  .instruction(),
78
- ]);
198
+ ], [mint]);
199
+ }
200
+ const assetId = (await hemProgram.account.keyToAssetV0.fetch(notEmittedEntityKta)).asset;
201
+ const [recipient] = recipientKey(lazyDistributor, assetId);
202
+ try {
203
+ if (!(await provider.connection.getAccountInfo(recipient))) {
204
+ const method = lazyProgram.methods
205
+ .initializeRecipientV0()
206
+ .accounts({
207
+ lazyDistributor,
208
+ mint: assetId,
209
+ });
210
+ await sendInstructionsWithPriorityFee(provider, [await method.instruction()], { basePriorityFee });
211
+ }
212
+ const rewards = await client.getCurrentRewards(lazyProgram, lazyDistributor, assetId);
213
+ const tx = await client.formTransaction({
214
+ program: lazyProgram,
215
+ rewardsOracleProgram: rewardsOracleProgram,
216
+ provider,
217
+ rewards,
218
+ asset: assetId,
219
+ lazyDistributor,
220
+ });
221
+ const signed = await provider.wallet.signTransaction(tx);
222
+ await sendAndConfirmWithRetry(provider.connection, Buffer.from(signed.serialize()), { skipPreflight: true }, "confirmed");
79
223
  }
80
- catch (e) {
81
- console.log(`Failed to issue rewards for ${subDao.account.dntMint.toBase58()}: ${e.message}`);
224
+ catch (err) {
225
+ errors.push(`Failed to distribute burn funds for mint ${token.toBase58()}: ${err}`);
82
226
  }
83
227
  }
84
- targetTs = targetTs.add(new BN(EPOCH_LENGTH));
228
+ try {
229
+ console.log("No emit");
230
+ await sendInstructions(provider, [
231
+ await noEmitProgram.methods
232
+ .noEmitV0()
233
+ .accounts({
234
+ mint: hntMint,
235
+ })
236
+ .instruction(),
237
+ ]);
238
+ }
239
+ catch (err) {
240
+ errors.push(`Failed to run noEmitV0`);
241
+ }
85
242
  }
243
+ if (!errors.length)
244
+ process.exit(0);
245
+ errors.map(console.log);
246
+ process.exit(1);
247
+ }
248
+ catch (err) {
249
+ console.log(err);
250
+ process.exit(1);
86
251
  }
87
252
  }
88
253
  //# sourceMappingURL=end-epoch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"end-epoch.js","sourceRoot":"","sources":["../../../src/end-epoch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"end-epoch.js","sourceRoot":"","sources":["../../../src/end-epoch.ts"],"names":[],"mappings":"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"}