@helium/helium-admin-cli 0.0.49-price.1

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 (136) hide show
  1. package/README.md +91 -0
  2. package/bin/helium-admin.js +13 -0
  3. package/lib/cjs/cli-distribute-rewards.js +96 -0
  4. package/lib/cjs/cli-distribute-rewards.js.map +1 -0
  5. package/lib/cjs/create-active-device-aggregator.js +112 -0
  6. package/lib/cjs/create-active-device-aggregator.js.map +1 -0
  7. package/lib/cjs/create-dao.js +384 -0
  8. package/lib/cjs/create-dao.js.map +1 -0
  9. package/lib/cjs/create-maker.js +323 -0
  10. package/lib/cjs/create-maker.js.map +1 -0
  11. package/lib/cjs/create-price-oracle.js +121 -0
  12. package/lib/cjs/create-price-oracle.js.map +1 -0
  13. package/lib/cjs/create-subdao.js +496 -0
  14. package/lib/cjs/create-subdao.js.map +1 -0
  15. package/lib/cjs/distribute-hst.js +94 -0
  16. package/lib/cjs/distribute-hst.js.map +1 -0
  17. package/lib/cjs/ecc-gen.js +17 -0
  18. package/lib/cjs/ecc-gen.js.map +1 -0
  19. package/lib/cjs/end-epoch.js +144 -0
  20. package/lib/cjs/end-epoch.js.map +1 -0
  21. package/lib/cjs/log-hotspot.js +80 -0
  22. package/lib/cjs/log-hotspot.js.map +1 -0
  23. package/lib/cjs/mint-dc.js +112 -0
  24. package/lib/cjs/mint-dc.js.map +1 -0
  25. package/lib/cjs/reset-clockwork.js +141 -0
  26. package/lib/cjs/reset-clockwork.js.map +1 -0
  27. package/lib/cjs/reset-vsr-max-voter-record.js +142 -0
  28. package/lib/cjs/reset-vsr-max-voter-record.js.map +1 -0
  29. package/lib/cjs/reset-vsr-voting-mint.js +179 -0
  30. package/lib/cjs/reset-vsr-voting-mint.js.map +1 -0
  31. package/lib/cjs/setup-hst.js +243 -0
  32. package/lib/cjs/setup-hst.js.map +1 -0
  33. package/lib/cjs/submit-price.js +158 -0
  34. package/lib/cjs/submit-price.js.map +1 -0
  35. package/lib/cjs/update-account-circuit-breaker.js +127 -0
  36. package/lib/cjs/update-account-circuit-breaker.js.map +1 -0
  37. package/lib/cjs/update-dao.js +146 -0
  38. package/lib/cjs/update-dao.js.map +1 -0
  39. package/lib/cjs/update-mint-circuit-breaker.js +129 -0
  40. package/lib/cjs/update-mint-circuit-breaker.js.map +1 -0
  41. package/lib/cjs/update-rewardable-entity-config.js +143 -0
  42. package/lib/cjs/update-rewardable-entity-config.js.map +1 -0
  43. package/lib/cjs/update-subdao.js +228 -0
  44. package/lib/cjs/update-subdao.js.map +1 -0
  45. package/lib/cjs/utils.js +366 -0
  46. package/lib/cjs/utils.js.map +1 -0
  47. package/lib/esm/src/cli-distribute-rewards.js +55 -0
  48. package/lib/esm/src/cli-distribute-rewards.js.map +1 -0
  49. package/lib/esm/src/create-active-device-aggregator.js +71 -0
  50. package/lib/esm/src/create-active-device-aggregator.js.map +1 -0
  51. package/lib/esm/src/create-dao.js +341 -0
  52. package/lib/esm/src/create-dao.js.map +1 -0
  53. package/lib/esm/src/create-maker.js +282 -0
  54. package/lib/esm/src/create-maker.js.map +1 -0
  55. package/lib/esm/src/create-price-oracle.js +80 -0
  56. package/lib/esm/src/create-price-oracle.js.map +1 -0
  57. package/lib/esm/src/create-subdao.js +455 -0
  58. package/lib/esm/src/create-subdao.js.map +1 -0
  59. package/lib/esm/src/distribute-hst.js +53 -0
  60. package/lib/esm/src/distribute-hst.js.map +1 -0
  61. package/lib/esm/src/ecc-gen.js +6 -0
  62. package/lib/esm/src/ecc-gen.js.map +1 -0
  63. package/lib/esm/src/end-epoch.js +103 -0
  64. package/lib/esm/src/end-epoch.js.map +1 -0
  65. package/lib/esm/src/log-hotspot.js +39 -0
  66. package/lib/esm/src/log-hotspot.js.map +1 -0
  67. package/lib/esm/src/mint-dc.js +71 -0
  68. package/lib/esm/src/mint-dc.js.map +1 -0
  69. package/lib/esm/src/reset-clockwork.js +100 -0
  70. package/lib/esm/src/reset-clockwork.js.map +1 -0
  71. package/lib/esm/src/reset-vsr-max-voter-record.js +101 -0
  72. package/lib/esm/src/reset-vsr-max-voter-record.js.map +1 -0
  73. package/lib/esm/src/reset-vsr-voting-mint.js +138 -0
  74. package/lib/esm/src/reset-vsr-voting-mint.js.map +1 -0
  75. package/lib/esm/src/setup-hst.js +201 -0
  76. package/lib/esm/src/setup-hst.js.map +1 -0
  77. package/lib/esm/src/submit-price.js +113 -0
  78. package/lib/esm/src/submit-price.js.map +1 -0
  79. package/lib/esm/src/update-account-circuit-breaker.js +86 -0
  80. package/lib/esm/src/update-account-circuit-breaker.js.map +1 -0
  81. package/lib/esm/src/update-dao.js +105 -0
  82. package/lib/esm/src/update-dao.js.map +1 -0
  83. package/lib/esm/src/update-mint-circuit-breaker.js +88 -0
  84. package/lib/esm/src/update-mint-circuit-breaker.js.map +1 -0
  85. package/lib/esm/src/update-rewardable-entity-config.js +102 -0
  86. package/lib/esm/src/update-rewardable-entity-config.js.map +1 -0
  87. package/lib/esm/src/update-subdao.js +187 -0
  88. package/lib/esm/src/update-subdao.js.map +1 -0
  89. package/lib/esm/src/utils.js +309 -0
  90. package/lib/esm/src/utils.js.map +1 -0
  91. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -0
  92. package/lib/types/src/cli-distribute-rewards.d.ts +2 -0
  93. package/lib/types/src/cli-distribute-rewards.d.ts.map +1 -0
  94. package/lib/types/src/create-active-device-aggregator.d.ts +2 -0
  95. package/lib/types/src/create-active-device-aggregator.d.ts.map +1 -0
  96. package/lib/types/src/create-dao.d.ts +2 -0
  97. package/lib/types/src/create-dao.d.ts.map +1 -0
  98. package/lib/types/src/create-maker.d.ts +2 -0
  99. package/lib/types/src/create-maker.d.ts.map +1 -0
  100. package/lib/types/src/create-price-oracle.d.ts +2 -0
  101. package/lib/types/src/create-price-oracle.d.ts.map +1 -0
  102. package/lib/types/src/create-subdao.d.ts +2 -0
  103. package/lib/types/src/create-subdao.d.ts.map +1 -0
  104. package/lib/types/src/distribute-hst.d.ts +2 -0
  105. package/lib/types/src/distribute-hst.d.ts.map +1 -0
  106. package/lib/types/src/ecc-gen.d.ts +2 -0
  107. package/lib/types/src/ecc-gen.d.ts.map +1 -0
  108. package/lib/types/src/end-epoch.d.ts +2 -0
  109. package/lib/types/src/end-epoch.d.ts.map +1 -0
  110. package/lib/types/src/log-hotspot.d.ts +2 -0
  111. package/lib/types/src/log-hotspot.d.ts.map +1 -0
  112. package/lib/types/src/mint-dc.d.ts +2 -0
  113. package/lib/types/src/mint-dc.d.ts.map +1 -0
  114. package/lib/types/src/reset-clockwork.d.ts +2 -0
  115. package/lib/types/src/reset-clockwork.d.ts.map +1 -0
  116. package/lib/types/src/reset-vsr-max-voter-record.d.ts +2 -0
  117. package/lib/types/src/reset-vsr-max-voter-record.d.ts.map +1 -0
  118. package/lib/types/src/reset-vsr-voting-mint.d.ts +2 -0
  119. package/lib/types/src/reset-vsr-voting-mint.d.ts.map +1 -0
  120. package/lib/types/src/setup-hst.d.ts +4 -0
  121. package/lib/types/src/setup-hst.d.ts.map +1 -0
  122. package/lib/types/src/submit-price.d.ts +2 -0
  123. package/lib/types/src/submit-price.d.ts.map +1 -0
  124. package/lib/types/src/update-account-circuit-breaker.d.ts +2 -0
  125. package/lib/types/src/update-account-circuit-breaker.d.ts.map +1 -0
  126. package/lib/types/src/update-dao.d.ts +2 -0
  127. package/lib/types/src/update-dao.d.ts.map +1 -0
  128. package/lib/types/src/update-mint-circuit-breaker.d.ts +2 -0
  129. package/lib/types/src/update-mint-circuit-breaker.d.ts.map +1 -0
  130. package/lib/types/src/update-rewardable-entity-config.d.ts +2 -0
  131. package/lib/types/src/update-rewardable-entity-config.d.ts.map +1 -0
  132. package/lib/types/src/update-subdao.d.ts +2 -0
  133. package/lib/types/src/update-subdao.d.ts.map +1 -0
  134. package/lib/types/src/utils.d.ts +55 -0
  135. package/lib/types/src/utils.d.ts.map +1 -0
  136. package/package.json +77 -0
@@ -0,0 +1,102 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHem, rewardableEntityConfigKey } from "@helium/helium-entity-manager-sdk";
3
+ import { subDaoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { toBN } from "@helium/spl-utils";
5
+ import { PublicKey } from "@solana/web3.js";
6
+ import Squads from "@sqds/sdk";
7
+ import os from "os";
8
+ import yargs from "yargs/yargs";
9
+ import { loadKeypair, sendInstructionsOrSquads } from "./utils";
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
+ subdaoMint: {
23
+ required: true,
24
+ describe: "Public Key of the subdao mint",
25
+ type: "string",
26
+ },
27
+ name: {
28
+ alias: "n",
29
+ type: "string",
30
+ required: true,
31
+ describe: "The name of the entity config",
32
+ },
33
+ executeTransaction: {
34
+ type: "boolean",
35
+ },
36
+ multisig: {
37
+ type: "string",
38
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
39
+ },
40
+ authorityIndex: {
41
+ type: "number",
42
+ describe: "Authority index for squads. Defaults to 1",
43
+ default: 1,
44
+ },
45
+ });
46
+ const argv = await yarg.argv;
47
+ process.env.ANCHOR_WALLET = argv.wallet;
48
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
49
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
50
+ const wallet = loadKeypair(argv.wallet);
51
+ const provider = anchor.getProvider();
52
+ const name = argv.name;
53
+ const hemProgram = await initHem(provider);
54
+ const conn = provider.connection;
55
+ const subdaoMint = new PublicKey(argv.subdaoMint);
56
+ const subdao = (await subDaoKey(subdaoMint))[0];
57
+ const rewardableConfigKey = (await rewardableEntityConfigKey(subdao, name.toUpperCase()))[0];
58
+ const rewardableConfigAcc = await hemProgram.account.rewardableEntityConfigV0.fetch(rewardableConfigKey);
59
+ let payer = provider.wallet.publicKey;
60
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, provider.wallet);
61
+ let settings;
62
+ if (name.toUpperCase() == "IOT") {
63
+ settings = {
64
+ iotConfig: {
65
+ minGain: 10,
66
+ maxGain: 150,
67
+ fullLocationStakingFee: toBN(1000000, 0),
68
+ dataonlyLocationStakingFee: toBN(500000, 0),
69
+ },
70
+ };
71
+ }
72
+ else {
73
+ settings = {
74
+ mobileConfig: {
75
+ fullLocationStakingFee: toBN(1000000, 0),
76
+ dataonlyLocationStakingFee: toBN(500000, 0),
77
+ },
78
+ };
79
+ }
80
+ console.log(settings);
81
+ const instructions = [
82
+ await hemProgram.methods
83
+ .updateRewardableEntityConfigV0({
84
+ settings,
85
+ newAuthority: rewardableConfigAcc.authority,
86
+ })
87
+ .accounts({
88
+ rewardableEntityConfig: rewardableConfigKey,
89
+ })
90
+ .instruction(),
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-rewardable-entity-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-rewardable-entity-config.js","sourceRoot":"","sources":["../../../src/update-rewardable-entity-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { accountWindowedBreakerKey, init as initCb, mintWindowedBreakerKey, } from "@helium/circuit-breaker-sdk";
3
+ import { init as initHem, rewardableEntityConfigKey, } from "@helium/helium-entity-manager-sdk";
4
+ import { init as initHsd, subDaoKey, delegatorRewardsPercent } from "@helium/helium-sub-daos-sdk";
5
+ import { PublicKey } from "@solana/web3.js";
6
+ import Squads from "@sqds/sdk";
7
+ import { AggregatorAccount, SwitchboardProgram, } from "@switchboard-xyz/solana.js";
8
+ import os from "os";
9
+ import yargs from "yargs/yargs";
10
+ import { isLocalhost, loadKeypair, parseEmissionsSchedule, sendInstructionsOrSquads, } from "./utils";
11
+ export async function run(args = process.argv) {
12
+ const yarg = yargs(args).options({
13
+ wallet: {
14
+ alias: "k",
15
+ describe: "Anchor wallet keypair",
16
+ default: `${os.homedir()}/.config/solana/id.json`,
17
+ },
18
+ url: {
19
+ alias: "u",
20
+ default: "http://127.0.0.1:8899",
21
+ describe: "The solana url",
22
+ },
23
+ dntMint: {
24
+ required: true,
25
+ type: "string",
26
+ describe: "DNT mint of the subdao to be updated",
27
+ },
28
+ name: {
29
+ alias: "n",
30
+ type: "string",
31
+ required: false,
32
+ describe: "The name of the entity config",
33
+ },
34
+ newAuthority: {
35
+ required: false,
36
+ describe: "New subdao authority",
37
+ type: "string",
38
+ default: null,
39
+ },
40
+ newEmissionsSchedulePath: {
41
+ required: false,
42
+ describe: "Path to file that contains the new emissions schedule",
43
+ type: "string",
44
+ default: null,
45
+ },
46
+ newActiveDeviceAggregator: {
47
+ required: false,
48
+ default: null,
49
+ type: "string",
50
+ },
51
+ newDcBurnAuthority: {
52
+ required: false,
53
+ default: null,
54
+ type: "string",
55
+ },
56
+ executeTransaction: {
57
+ type: "boolean",
58
+ },
59
+ multisig: {
60
+ type: "string",
61
+ describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
62
+ },
63
+ authorityIndex: {
64
+ type: "number",
65
+ describe: "Authority index for squads. Defaults to 1",
66
+ default: 1,
67
+ },
68
+ switchboardNetwork: {
69
+ type: "string",
70
+ describe: "The switchboard network",
71
+ default: "devnet",
72
+ },
73
+ registrar: {
74
+ type: "string",
75
+ required: false,
76
+ describe: "VSR Registrar of subdao",
77
+ default: null,
78
+ },
79
+ delegatorRewardsPercent: {
80
+ type: "number",
81
+ required: false,
82
+ describe: "Percentage of rewards allocated to delegators. Must be between 0-100 and can have 8 decimal places.",
83
+ default: null,
84
+ },
85
+ });
86
+ const argv = await yarg.argv;
87
+ process.env.ANCHOR_WALLET = argv.wallet;
88
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
89
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
90
+ const wallet = loadKeypair(argv.wallet);
91
+ const provider = anchor.getProvider();
92
+ const program = await initHsd(provider);
93
+ const hemProgram = await initHem(provider);
94
+ const cbProgram = await initCb(provider);
95
+ const instructions = [];
96
+ const subDao = subDaoKey(new PublicKey(argv.dntMint))[0];
97
+ const subDaoAcc = await program.account.subDaoV0.fetch(subDao);
98
+ if (argv.newAuthority) {
99
+ if (!argv.name) {
100
+ throw new Error("--name is required");
101
+ }
102
+ // update entity config auth
103
+ const config = rewardableEntityConfigKey(subDao, argv.name.toUpperCase())[0];
104
+ const configAcc = await hemProgram.account.rewardableEntityConfigV0.fetch(config);
105
+ instructions.push(await hemProgram.methods
106
+ .updateRewardableEntityConfigV0({
107
+ newAuthority: new PublicKey(argv.newAuthority),
108
+ settings: null,
109
+ })
110
+ .accounts({
111
+ rewardableEntityConfig: config,
112
+ authority: configAcc.authority,
113
+ })
114
+ .instruction());
115
+ // update dnt cb auth
116
+ const dntCircuitBreaker = mintWindowedBreakerKey(subDaoAcc.dntMint)[0];
117
+ const dntCbAcc = await cbProgram.account.mintWindowedCircuitBreakerV0.fetch(dntCircuitBreaker);
118
+ instructions.push(await cbProgram.methods
119
+ .updateMintWindowedBreakerV0({
120
+ newAuthority: new PublicKey(argv.newAuthority),
121
+ config: null,
122
+ })
123
+ .accounts({
124
+ circuitBreaker: dntCircuitBreaker,
125
+ authority: dntCbAcc.authority,
126
+ })
127
+ .instruction());
128
+ // update treasury cb auth
129
+ const treasuryCircuitBreaker = accountWindowedBreakerKey(subDaoAcc.treasury)[0];
130
+ const treasuryCbAcc = await cbProgram.account.accountWindowedCircuitBreakerV0.fetch(treasuryCircuitBreaker);
131
+ instructions.push(await cbProgram.methods
132
+ .updateAccountWindowedBreakerV0({
133
+ newAuthority: new PublicKey(argv.newAuthority),
134
+ config: null,
135
+ })
136
+ .accounts({
137
+ circuitBreaker: treasuryCircuitBreaker,
138
+ authority: treasuryCbAcc.authority,
139
+ })
140
+ .instruction());
141
+ // update agg auth
142
+ if (!isLocalhost(provider)) {
143
+ const switchboard = await SwitchboardProgram.load(argv.switchboardNetwork, provider.connection, wallet);
144
+ const [agg, aggData] = await AggregatorAccount.load(switchboard, subDaoAcc.activeDeviceAggregator);
145
+ if (!aggData.authority.equals(subDaoAcc.activeDeviceAggregator)) {
146
+ instructions.push(...agg.setAuthorityInstruction(aggData.authority, // payer needs to be the same as the old authority
147
+ { newAuthority: new PublicKey(argv.newAuthority) }).ixns);
148
+ }
149
+ }
150
+ }
151
+ if (argv.delegatorRewardsPercent && (argv.delegatorRewardsPercent > 100 || argv.delegatorRewardsPercent < 0)) {
152
+ throw new Error("Delegator rewards percent must be between 0 and 100");
153
+ }
154
+ instructions.push(await program.methods
155
+ .updateSubDaoV0({
156
+ authority: argv.newAuthority ? new PublicKey(argv.newAuthority) : null,
157
+ emissionSchedule: argv.newEmissionsSchedulePath
158
+ ? await parseEmissionsSchedule(argv.newEmissionsSchedulePath)
159
+ : null,
160
+ dcBurnAuthority: argv.newDcBurnAuthority
161
+ ? new PublicKey(argv.newDcBurnAuthority)
162
+ : null,
163
+ onboardingDcFee: null,
164
+ activeDeviceAggregator: argv.newActiveDeviceAggregator
165
+ ? new PublicKey(argv.newActiveDeviceAggregator)
166
+ : null,
167
+ registrar: argv.registrar ? new PublicKey(argv.registrar) : null,
168
+ delegatorRewardsPercent: argv.delegatorRewardsPercent ? delegatorRewardsPercent(argv.delegatorRewardsPercent) : null,
169
+ })
170
+ .accounts({
171
+ subDao,
172
+ authority: subDaoAcc.authority,
173
+ payer: subDaoAcc.authority,
174
+ })
175
+ .instruction());
176
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, provider.wallet);
177
+ await sendInstructionsOrSquads({
178
+ provider,
179
+ instructions,
180
+ executeTransaction: argv.executeTransaction,
181
+ squads,
182
+ multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
183
+ authorityIndex: argv.authorityIndex,
184
+ signers: [],
185
+ });
186
+ }
187
+ //# sourceMappingURL=update-subdao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-subdao.js","sourceRoot":"","sources":["../../../src/update-subdao.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,309 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { createAtaAndMintInstructions, createMintInstructions, sendInstructions, toBN } from "@helium/spl-utils";
3
+ import { createCreateMetadataAccountV3Instruction, PROGRAM_ID as METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
4
+ import { AccountMetaData, getGovernanceProgramVersion, getProposalTransactionAddress, getTokenOwnerRecordAddress, Governance, GovernanceAccountParser, InstructionData, ProposalTransaction, Realm, Vote, VoteType, withAddSignatory, withCastVote, withCreateProposal, withCreateTokenOwnerRecord, withDepositGoverningTokens, withExecuteTransaction, withInsertTransaction, withRelinquishVote, withSignOffProposal, withWithdrawGoverningTokens, YesNoVote } from "@solana/spl-governance";
5
+ import { AuthorityType, createSetAuthorityInstruction, getAssociatedTokenAddress } from "@solana/spl-token";
6
+ import { AddressLookupTableProgram, ComputeBudgetProgram, Keypair, PublicKey, SYSVAR_CLOCK_PUBKEY, TransactionMessage, VersionedTransaction } from "@solana/web3.js";
7
+ import { OracleJob, sleep } from "@switchboard-xyz/common";
8
+ import { AggregatorHistoryBuffer, QueueAccount, SwitchboardProgram } from "@switchboard-xyz/solana.js";
9
+ import { BN } from "bn.js";
10
+ import fs from "fs";
11
+ import fetch from "node-fetch";
12
+ const SECONDS_PER_DAY = 86400;
13
+ export const getTimestampFromDays = (days) => days * SECONDS_PER_DAY;
14
+ export const getUnixTimestamp = async (provider) => {
15
+ const clock = await provider.connection.getAccountInfo(SYSVAR_CLOCK_PUBKEY);
16
+ const unixTime = clock.data.readBigInt64LE(8 * 4);
17
+ return unixTime;
18
+ };
19
+ export async function exists(connection, account) {
20
+ return Boolean(await connection.getAccountInfo(account));
21
+ }
22
+ export async function createAndMint({ provider, mintKeypair = Keypair.generate(), amount, metadataUrl, decimals = 8, to, mintAuthority = provider.wallet.publicKey, freezeAuthority = provider.wallet.publicKey, }) {
23
+ const mintTo = to || provider.wallet.publicKey;
24
+ const metadata = await fetch(metadataUrl).then((r) => r.json());
25
+ if (!(await exists(provider.connection, mintKeypair.publicKey))) {
26
+ console.log(`${metadata.name} Mint not found, creating...`);
27
+ await sendInstructions(provider, [
28
+ ...(await createMintInstructions(provider, decimals, provider.wallet.publicKey, freezeAuthority, mintKeypair)),
29
+ ...(await createAtaAndMintInstructions(provider, mintKeypair.publicKey, toBN(amount, decimals), mintTo)).instructions,
30
+ ], [mintKeypair]);
31
+ }
32
+ const metadataAddress = (await PublicKey.findProgramAddress([
33
+ Buffer.from("metadata", "utf-8"),
34
+ METADATA_PROGRAM_ID.toBuffer(),
35
+ mintKeypair.publicKey.toBuffer(),
36
+ ], METADATA_PROGRAM_ID))[0];
37
+ if (!(await exists(provider.connection, metadataAddress))) {
38
+ console.log(`${metadata.name} Metadata not found, creating...`);
39
+ await sendInstructions(provider, [
40
+ await createCreateMetadataAccountV3Instruction({
41
+ metadata: metadataAddress,
42
+ mint: mintKeypair.publicKey,
43
+ mintAuthority: provider.wallet.publicKey,
44
+ payer: provider.wallet.publicKey,
45
+ updateAuthority: provider.wallet.publicKey,
46
+ }, {
47
+ createMetadataAccountArgsV3: {
48
+ data: {
49
+ name: metadata.name,
50
+ symbol: metadata.symbol,
51
+ uri: metadataUrl,
52
+ sellerFeeBasisPoints: 0,
53
+ creators: [
54
+ {
55
+ address: provider.wallet.publicKey,
56
+ verified: true,
57
+ share: 100,
58
+ },
59
+ ],
60
+ collection: null,
61
+ uses: null,
62
+ },
63
+ isMutable: true,
64
+ collectionDetails: null,
65
+ },
66
+ }),
67
+ ]);
68
+ // Set mint authority to the proper authority
69
+ if (!provider.wallet.publicKey.equals(mintAuthority)) {
70
+ await sendInstructions(provider, [
71
+ await createSetAuthorityInstruction(mintKeypair.publicKey, provider.wallet.publicKey, AuthorityType.MintTokens, mintAuthority),
72
+ ]);
73
+ }
74
+ }
75
+ }
76
+ export function loadKeypair(keypair) {
77
+ return Keypair.fromSecretKey(new Uint8Array(JSON.parse(fs.readFileSync(keypair).toString())));
78
+ }
79
+ export function isLocalhost(provider) {
80
+ const ep = provider.connection.rpcEndpoint;
81
+ return ep.includes("127.0.0.1") || ep.includes("localhost");
82
+ }
83
+ export async function sendInstructionsOrCreateProposal({ provider, instructions, signers = [], govProgramId, proposalName, payer = provider.wallet.publicKey, commitment = "confirmed", idlErrors = new Map(), votingMint, executeProposal = false, walletSigner, }) {
84
+ PublicKey.prototype.toString = PublicKey.prototype.toBase58;
85
+ const signerSet = new Set(instructions
86
+ .map((ix) => ix.keys.filter((k) => k.isSigner).map((k) => k.pubkey.toBase58()))
87
+ .flat());
88
+ const signerKeys = Array.from(signerSet).map((k) => new PublicKey(k));
89
+ const nonMissingSignerIxs = instructions.filter((ix) => !ix.keys.some((k) => k.isSigner && !k.pubkey.equals(provider.wallet.publicKey)));
90
+ const wallet = provider.wallet;
91
+ // Missing signer, must be gov
92
+ const missingSigs = (await Promise.all(signerKeys
93
+ .filter((k) => !k.equals(provider.wallet.publicKey) &&
94
+ !signers.some((s) => s.publicKey.equals(k)))
95
+ .map(async (governanceKey) => {
96
+ const info = await provider.connection.getAccountInfo(governanceKey);
97
+ return {
98
+ info,
99
+ governanceKey,
100
+ nativeKey: PublicKey.findProgramAddressSync([
101
+ Buffer.from("native-treasury", "utf-8"),
102
+ governanceKey.toBuffer(),
103
+ ], govProgramId)[0],
104
+ };
105
+ }))).filter((r) => r.info && r.info.owner.equals(govProgramId));
106
+ for (const { governanceKey, info, nativeKey } of missingSigs) {
107
+ const proposalIxns = [];
108
+ const gov = GovernanceAccountParser(Governance)(governanceKey, info).account;
109
+ const realmKey = gov.realm;
110
+ const realmInfo = await provider.connection.getAccountInfo(realmKey);
111
+ const realm = GovernanceAccountParser(Realm)(governanceKey, realmInfo).account;
112
+ if (!votingMint) {
113
+ votingMint = realm.communityMint;
114
+ }
115
+ const tokenOwner = await getTokenOwnerRecordAddress(govProgramId, realmKey, votingMint, wallet.publicKey);
116
+ const version = await getGovernanceProgramVersion(provider.connection, govProgramId);
117
+ const tokenOwnerExists = !!(await provider.connection.getAccountInfo(tokenOwner));
118
+ if (!tokenOwnerExists) {
119
+ await withCreateTokenOwnerRecord(proposalIxns, govProgramId, version, realmKey, wallet.publicKey, votingMint, wallet.publicKey);
120
+ }
121
+ const acct = await getAssociatedTokenAddress(votingMint, wallet.publicKey);
122
+ const balance = new BN((await provider.connection.getTokenAccountBalance(acct)).value.amount);
123
+ if (balance.gt(new BN(0))) {
124
+ withDepositGoverningTokens(proposalIxns, govProgramId, version, realmKey, acct, votingMint, wallet.publicKey, wallet.publicKey, wallet.publicKey, balance);
125
+ }
126
+ const proposal = await withCreateProposal(proposalIxns, govProgramId, version, realmKey, governanceKey, tokenOwner, proposalName, "Created via helium cli with args", votingMint, wallet.publicKey, gov.proposalCount, VoteType.SINGLE_CHOICE, ["Approve"], true, wallet.publicKey);
127
+ const signatoryRecord = await withAddSignatory(proposalIxns, govProgramId, 1, proposal, tokenOwner, wallet.publicKey, wallet.publicKey, wallet.publicKey);
128
+ console.log(`Creating proposal ${proposalName}, ${proposal.toBase58()}`);
129
+ await sendInstructions(provider, proposalIxns);
130
+ let idx = 0;
131
+ const relevantInstructions = instructions.filter((ix) => ix.keys.some((k) => (k.pubkey.equals(nativeKey) || k.pubkey.equals(governanceKey)) &&
132
+ k.isSigner));
133
+ for (const instruction of relevantInstructions) {
134
+ const addTxIxns = [];
135
+ await withInsertTransaction(addTxIxns, govProgramId, version, governanceKey, proposal, tokenOwner, wallet.publicKey, idx, 0, 0, [
136
+ new InstructionData({
137
+ programId: instruction.programId,
138
+ accounts: instruction.keys.map((key) => new AccountMetaData(key)),
139
+ data: instruction.data,
140
+ }),
141
+ ], wallet.publicKey);
142
+ console.log(`Adding txn ${idx} to proposal ${proposalName}, ${proposal.toBase58()}`);
143
+ try {
144
+ await sendInstructions(provider, addTxIxns);
145
+ }
146
+ catch (e) {
147
+ if (e.message.includes("Transaction too large")) {
148
+ const [sig, lut] = await AddressLookupTableProgram.createLookupTable({
149
+ authority: provider.wallet.publicKey,
150
+ payer: provider.wallet.publicKey,
151
+ recentSlot: await provider.connection.getSlot(),
152
+ });
153
+ const addAddressesInstruction = await AddressLookupTableProgram.extendLookupTable({
154
+ payer: provider.wallet.publicKey,
155
+ authority: provider.wallet.publicKey,
156
+ lookupTable: lut,
157
+ addresses: addTxIxns[0].keys
158
+ .map((k) => k.pubkey)
159
+ .filter((p) => !walletSigner.publicKey.equals(p)),
160
+ });
161
+ await sendInstructions(provider, [sig, addAddressesInstruction], []);
162
+ await sleep(4000); // Wait for the lut to activate
163
+ const lookupTableAcc = (await provider.connection.getAddressLookupTable(lut)).value;
164
+ const tx = new VersionedTransaction(new TransactionMessage({
165
+ payerKey: payer,
166
+ recentBlockhash: (await provider.connection.getLatestBlockhash())
167
+ .blockhash,
168
+ instructions: [addTxIxns[0]],
169
+ }).compileToV0Message([lookupTableAcc]));
170
+ console.log("Created lookup table since ix too big", lut.toBase58());
171
+ await tx.sign([walletSigner]);
172
+ const sent = await provider.connection.sendTransaction(tx);
173
+ await provider.connection.confirmTransaction(sent, "confirmed");
174
+ console.log(`Added tx ${idx}`, sent);
175
+ await AddressLookupTableProgram.closeLookupTable({
176
+ lookupTable: lut,
177
+ authority: provider.wallet.publicKey,
178
+ recipient: provider.wallet.publicKey,
179
+ });
180
+ console.log("Closed lookup table");
181
+ }
182
+ }
183
+ idx++;
184
+ }
185
+ const signOffIxns = [];
186
+ await withSignOffProposal(signOffIxns, govProgramId, version, realmKey, governanceKey, proposal, wallet.publicKey, signatoryRecord, undefined);
187
+ console.log(`Signing off on proposal ${proposalName}, ${proposal.toBase58()}`);
188
+ await sendInstructions(provider, signOffIxns, signers, payer, commitment, idlErrors);
189
+ if (executeProposal) {
190
+ const voteYes = [];
191
+ const votingRecord = await withCastVote(voteYes, govProgramId, version, realmKey, governanceKey, proposal, tokenOwner, tokenOwner, wallet.publicKey, votingMint, Vote.fromYesNoVote(YesNoVote.Yes), wallet.publicKey);
192
+ await sendInstructions(provider, voteYes, signers, payer, commitment, idlErrors);
193
+ await sleep(5000); // wait past any hold up time
194
+ for (let idx = 0; idx < relevantInstructions.length; idx++) {
195
+ const executeIxns = [
196
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 1000000 }),
197
+ ];
198
+ const transactionAddress = await getProposalTransactionAddress(govProgramId, version, proposal, 0, idx);
199
+ const transactionInfo = await provider.connection.getAccountInfo(transactionAddress);
200
+ const transaction = GovernanceAccountParser(ProposalTransaction)(governanceKey, transactionInfo).account;
201
+ await withExecuteTransaction(executeIxns, govProgramId, version, governanceKey, proposal, transactionAddress, transaction.instructions);
202
+ console.log(`Executing txn ${idx} on proposal ${proposalName}, ${proposal.toBase58()}`);
203
+ await sendInstructions(provider, executeIxns);
204
+ }
205
+ const relinquish = [];
206
+ withRelinquishVote(relinquish, govProgramId, version, realmKey, governanceKey, proposal, tokenOwner, votingMint, votingRecord, wallet.publicKey, wallet.publicKey);
207
+ await sendInstructions(provider, relinquish);
208
+ }
209
+ if (balance.gt(new BN(0)) && executeProposal) {
210
+ const withdrawIxns = [];
211
+ await withWithdrawGoverningTokens(withdrawIxns, govProgramId, version, realmKey, await getAssociatedTokenAddress(votingMint, wallet.publicKey), votingMint, wallet.publicKey);
212
+ await sendInstructions(provider, withdrawIxns);
213
+ }
214
+ }
215
+ return await sendInstructions(provider, nonMissingSignerIxs, signers, payer, commitment, idlErrors);
216
+ }
217
+ export async function createSwitchboardAggregator({ provider, aggKeypair, url, switchboardNetwork, wallet, crank, queue, authority }) {
218
+ const switchboard = await SwitchboardProgram.load(switchboardNetwork, provider.connection, wallet);
219
+ const queueAccount = new QueueAccount(switchboard, queue);
220
+ const agg = aggKeypair.publicKey;
221
+ if (!(await exists(provider.connection, agg))) {
222
+ const [agg, _] = await queueAccount.createFeed({
223
+ keypair: aggKeypair,
224
+ batchSize: 3,
225
+ minRequiredOracleResults: 2,
226
+ minRequiredJobResults: 1,
227
+ minUpdateDelaySeconds: 60 * 60,
228
+ fundAmount: 0.2,
229
+ enable: true,
230
+ crankPubkey: crank,
231
+ jobs: [
232
+ {
233
+ data: OracleJob.encodeDelimited(OracleJob.fromObject({
234
+ tasks: [
235
+ {
236
+ httpTask: {
237
+ url,
238
+ },
239
+ },
240
+ {
241
+ jsonParseTask: {
242
+ path: "$.count",
243
+ },
244
+ },
245
+ ],
246
+ })).finish(),
247
+ },
248
+ ],
249
+ });
250
+ await agg.setAuthority({
251
+ newAuthority: authority,
252
+ authority: aggKeypair,
253
+ });
254
+ console.log("Created active device aggregator", agg.publicKey.toBase58());
255
+ await AggregatorHistoryBuffer.create(switchboard, {
256
+ aggregatorAccount: agg,
257
+ maxSamples: 24 * 31, // Give us a month of active device data. If we fail to run end epoch, RIP.
258
+ });
259
+ }
260
+ return aggKeypair.publicKey;
261
+ }
262
+ export async function sendInstructionsOrSquads({ provider, instructions, signers = [], payer = provider.wallet.publicKey, commitment = "confirmed", idlErrors = new Map(), executeTransaction = false, squads, multisig, authorityIndex, }) {
263
+ if (!multisig) {
264
+ return await sendInstructions(provider, instructions, signers, payer, commitment, idlErrors);
265
+ }
266
+ const signerSet = new Set(instructions
267
+ .map((ix) => ix.keys.filter((k) => k.isSigner).map((k) => k.pubkey.toBase58()))
268
+ .flat());
269
+ const signerKeys = Array.from(signerSet).map((k) => new PublicKey(k));
270
+ const nonMissingSignerIxs = instructions.filter(ix => !ix.keys.some(k => k.isSigner && !k.pubkey.equals(provider.wallet.publicKey)));
271
+ const squadsSignatures = signerKeys.filter((k) => !k.equals(provider.wallet.publicKey) &&
272
+ !signers.some((s) => s.publicKey.equals(k)));
273
+ if (squadsSignatures.length == 0) {
274
+ return await sendInstructions(provider, nonMissingSignerIxs, signers, payer, commitment, idlErrors);
275
+ }
276
+ if (squadsSignatures.length >= 2) {
277
+ throw new Error("Too many missing signatures");
278
+ }
279
+ const tx = await squads.createTransaction(multisig, authorityIndex);
280
+ for (const ix of instructions) {
281
+ await squads.addInstruction(tx.publicKey, ix);
282
+ }
283
+ await squads.activateTransaction(tx.publicKey);
284
+ if (executeTransaction) {
285
+ await squads.approveTransaction(tx.publicKey);
286
+ const ix = await squads.buildExecuteTransaction(tx.publicKey, provider.wallet.publicKey);
287
+ await sendInstructions(provider, [ix], signers);
288
+ }
289
+ }
290
+ export async function parseEmissionsSchedule(filepath) {
291
+ const json = JSON.parse(fs.readFileSync(filepath).toString());
292
+ const schedule = json.map((x) => {
293
+ const extra = "percent" in x
294
+ ? { percent: x.percent }
295
+ : "emissionsPerEpoch" in x
296
+ ? {
297
+ emissionsPerEpoch: new anchor.BN(x.emissionsPerEpoch.replaceAll(".", "").replaceAll(",", "")),
298
+ }
299
+ : null;
300
+ if (!extra || !("startTime" in x))
301
+ throw new Error("json format incorrect");
302
+ return {
303
+ startUnixTime: new anchor.BN(Math.floor(Date.parse(x.startTime) / 1000)),
304
+ ...extra
305
+ };
306
+ });
307
+ return schedule;
308
+ }
309
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"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"}