@helium/helium-admin-cli 0.2.22-next.33 → 0.2.22-next.35

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 (290) hide show
  1. package/lib/cjs/approve-carrier.js +120 -0
  2. package/lib/cjs/approve-carrier.js.map +1 -0
  3. package/lib/cjs/approve-program.js +122 -0
  4. package/lib/cjs/approve-program.js.map +1 -0
  5. package/lib/cjs/claim-rewards.js +109 -0
  6. package/lib/cjs/claim-rewards.js.map +1 -0
  7. package/lib/cjs/close-buffers.js +132 -0
  8. package/lib/cjs/close-buffers.js.map +1 -0
  9. package/lib/cjs/close-canopy.js +108 -0
  10. package/lib/cjs/close-canopy.js.map +1 -0
  11. package/lib/cjs/close-lazy-transaction-markers.js +108 -0
  12. package/lib/cjs/close-lazy-transaction-markers.js.map +1 -0
  13. package/lib/cjs/correct-router-dc.js +149 -0
  14. package/lib/cjs/correct-router-dc.js.map +1 -0
  15. package/lib/cjs/create-active-device-aggregator.js +112 -0
  16. package/lib/cjs/create-active-device-aggregator.js.map +1 -0
  17. package/lib/cjs/create-carrier.js +202 -0
  18. package/lib/cjs/create-carrier.js.map +1 -0
  19. package/lib/cjs/create-dao.js +458 -0
  20. package/lib/cjs/create-dao.js.map +1 -0
  21. package/lib/cjs/create-data-only-config.js +175 -0
  22. package/lib/cjs/create-data-only-config.js.map +1 -0
  23. package/lib/cjs/create-maker.js +323 -0
  24. package/lib/cjs/create-maker.js.map +1 -0
  25. package/lib/cjs/create-price-oracle.js +133 -0
  26. package/lib/cjs/create-price-oracle.js.map +1 -0
  27. package/lib/cjs/create-subdao.js +531 -0
  28. package/lib/cjs/create-subdao.js.map +1 -0
  29. package/lib/cjs/distribute-hst.js +94 -0
  30. package/lib/cjs/distribute-hst.js.map +1 -0
  31. package/lib/cjs/distribute-iot-operations-fund.js +120 -0
  32. package/lib/cjs/distribute-iot-operations-fund.js.map +1 -0
  33. package/lib/cjs/ecc-gen.js +17 -0
  34. package/lib/cjs/ecc-gen.js.map +1 -0
  35. package/lib/cjs/end-epoch.js +144 -0
  36. package/lib/cjs/end-epoch.js.map +1 -0
  37. package/lib/cjs/issue-iot-operations-fund.js +123 -0
  38. package/lib/cjs/issue-iot-operations-fund.js.map +1 -0
  39. package/lib/cjs/issue-test-hotspot.js +111 -0
  40. package/lib/cjs/issue-test-hotspot.js.map +1 -0
  41. package/lib/cjs/log-coingecko-price.js +32 -0
  42. package/lib/cjs/log-coingecko-price.js.map +1 -0
  43. package/lib/cjs/log-hotspot.js +103 -0
  44. package/lib/cjs/log-hotspot.js.map +1 -0
  45. package/lib/cjs/log-router-balance.js +89 -0
  46. package/lib/cjs/log-router-balance.js.map +1 -0
  47. package/lib/cjs/log-treasury-price.js +105 -0
  48. package/lib/cjs/log-treasury-price.js.map +1 -0
  49. package/lib/cjs/mint-dc.js +111 -0
  50. package/lib/cjs/mint-dc.js.map +1 -0
  51. package/lib/cjs/repair-iot-operations-fund.js +114 -0
  52. package/lib/cjs/repair-iot-operations-fund.js.map +1 -0
  53. package/lib/cjs/reset-clockwork.js +144 -0
  54. package/lib/cjs/reset-clockwork.js.map +1 -0
  55. package/lib/cjs/reset-vsr-max-voter-record.js +145 -0
  56. package/lib/cjs/reset-vsr-max-voter-record.js.map +1 -0
  57. package/lib/cjs/reset-vsr-voting-mint.js +182 -0
  58. package/lib/cjs/reset-vsr-voting-mint.js.map +1 -0
  59. package/lib/cjs/setup-hst.js +261 -0
  60. package/lib/cjs/setup-hst.js.map +1 -0
  61. package/lib/cjs/submit-price.js +159 -0
  62. package/lib/cjs/submit-price.js.map +1 -0
  63. package/lib/cjs/sum-tokens.js +84 -0
  64. package/lib/cjs/sum-tokens.js.map +1 -0
  65. package/lib/cjs/take-snapshot.js +70 -0
  66. package/lib/cjs/take-snapshot.js.map +1 -0
  67. package/lib/cjs/update-account-circuit-breaker.js +132 -0
  68. package/lib/cjs/update-account-circuit-breaker.js.map +1 -0
  69. package/lib/cjs/update-aggregator.js +116 -0
  70. package/lib/cjs/update-aggregator.js.map +1 -0
  71. package/lib/cjs/update-dao.js +169 -0
  72. package/lib/cjs/update-dao.js.map +1 -0
  73. package/lib/cjs/update-data-credits.js +128 -0
  74. package/lib/cjs/update-data-credits.js.map +1 -0
  75. package/lib/cjs/update-delegated-dc-subdao.js +136 -0
  76. package/lib/cjs/update-delegated-dc-subdao.js.map +1 -0
  77. package/lib/cjs/update-iot-operations-fund-metadata.js +124 -0
  78. package/lib/cjs/update-iot-operations-fund-metadata.js.map +1 -0
  79. package/lib/cjs/update-lazy-distributor.js +138 -0
  80. package/lib/cjs/update-lazy-distributor.js.map +1 -0
  81. package/lib/cjs/update-lazy-transactions.js +117 -0
  82. package/lib/cjs/update-lazy-transactions.js.map +1 -0
  83. package/lib/cjs/update-mint-circuit-breaker.js +132 -0
  84. package/lib/cjs/update-mint-circuit-breaker.js.map +1 -0
  85. package/lib/cjs/update-registrar-authorities.js +96 -0
  86. package/lib/cjs/update-registrar-authorities.js.map +1 -0
  87. package/lib/cjs/update-rewardable-entity-config.js +155 -0
  88. package/lib/cjs/update-rewardable-entity-config.js.map +1 -0
  89. package/lib/cjs/update-subdao-vehnt.js +295 -0
  90. package/lib/cjs/update-subdao-vehnt.js.map +1 -0
  91. package/lib/cjs/update-subdao.js +261 -0
  92. package/lib/cjs/update-subdao.js.map +1 -0
  93. package/lib/cjs/upgrade-idl.js +109 -0
  94. package/lib/cjs/upgrade-idl.js.map +1 -0
  95. package/lib/cjs/utils.js +457 -0
  96. package/lib/cjs/utils.js.map +1 -0
  97. package/lib/esm/src/approve-carrier.js +79 -0
  98. package/lib/esm/src/approve-carrier.js.map +1 -0
  99. package/lib/esm/src/approve-program.js +81 -0
  100. package/lib/esm/src/approve-program.js.map +1 -0
  101. package/lib/esm/src/claim-rewards.js +68 -0
  102. package/lib/esm/src/claim-rewards.js.map +1 -0
  103. package/lib/esm/src/close-buffers.js +91 -0
  104. package/lib/esm/src/close-buffers.js.map +1 -0
  105. package/lib/esm/src/close-canopy.js +67 -0
  106. package/lib/esm/src/close-canopy.js.map +1 -0
  107. package/lib/esm/src/close-lazy-transaction-markers.js +67 -0
  108. package/lib/esm/src/close-lazy-transaction-markers.js.map +1 -0
  109. package/lib/esm/src/correct-router-dc.js +108 -0
  110. package/lib/esm/src/correct-router-dc.js.map +1 -0
  111. package/lib/esm/src/create-active-device-aggregator.js +71 -0
  112. package/lib/esm/src/create-active-device-aggregator.js.map +1 -0
  113. package/lib/esm/src/create-carrier.js +161 -0
  114. package/lib/esm/src/create-carrier.js.map +1 -0
  115. package/lib/esm/src/create-dao.js +415 -0
  116. package/lib/esm/src/create-dao.js.map +1 -0
  117. package/lib/esm/src/create-data-only-config.js +132 -0
  118. package/lib/esm/src/create-data-only-config.js.map +1 -0
  119. package/lib/esm/src/create-maker.js +282 -0
  120. package/lib/esm/src/create-maker.js.map +1 -0
  121. package/lib/esm/src/create-price-oracle.js +92 -0
  122. package/lib/esm/src/create-price-oracle.js.map +1 -0
  123. package/lib/esm/src/create-subdao.js +490 -0
  124. package/lib/esm/src/create-subdao.js.map +1 -0
  125. package/lib/esm/src/distribute-hst.js +53 -0
  126. package/lib/esm/src/distribute-hst.js.map +1 -0
  127. package/lib/esm/src/distribute-iot-operations-fund.js +79 -0
  128. package/lib/esm/src/distribute-iot-operations-fund.js.map +1 -0
  129. package/lib/esm/src/ecc-gen.js +6 -0
  130. package/lib/esm/src/ecc-gen.js.map +1 -0
  131. package/lib/esm/src/end-epoch.js +103 -0
  132. package/lib/esm/src/end-epoch.js.map +1 -0
  133. package/lib/esm/src/issue-iot-operations-fund.js +82 -0
  134. package/lib/esm/src/issue-iot-operations-fund.js.map +1 -0
  135. package/lib/esm/src/issue-test-hotspot.js +70 -0
  136. package/lib/esm/src/issue-test-hotspot.js.map +1 -0
  137. package/lib/esm/src/log-coingecko-price.js +14 -0
  138. package/lib/esm/src/log-coingecko-price.js.map +1 -0
  139. package/lib/esm/src/log-hotspot.js +62 -0
  140. package/lib/esm/src/log-hotspot.js.map +1 -0
  141. package/lib/esm/src/log-router-balance.js +48 -0
  142. package/lib/esm/src/log-router-balance.js.map +1 -0
  143. package/lib/esm/src/log-treasury-price.js +64 -0
  144. package/lib/esm/src/log-treasury-price.js.map +1 -0
  145. package/lib/esm/src/mint-dc.js +70 -0
  146. package/lib/esm/src/mint-dc.js.map +1 -0
  147. package/lib/esm/src/repair-iot-operations-fund.js +73 -0
  148. package/lib/esm/src/repair-iot-operations-fund.js.map +1 -0
  149. package/lib/esm/src/reset-clockwork.js +103 -0
  150. package/lib/esm/src/reset-clockwork.js.map +1 -0
  151. package/lib/esm/src/reset-vsr-max-voter-record.js +104 -0
  152. package/lib/esm/src/reset-vsr-max-voter-record.js.map +1 -0
  153. package/lib/esm/src/reset-vsr-voting-mint.js +141 -0
  154. package/lib/esm/src/reset-vsr-voting-mint.js.map +1 -0
  155. package/lib/esm/src/setup-hst.js +218 -0
  156. package/lib/esm/src/setup-hst.js.map +1 -0
  157. package/lib/esm/src/submit-price.js +113 -0
  158. package/lib/esm/src/submit-price.js.map +1 -0
  159. package/lib/esm/src/sum-tokens.js +43 -0
  160. package/lib/esm/src/sum-tokens.js.map +1 -0
  161. package/lib/esm/src/take-snapshot.js +29 -0
  162. package/lib/esm/src/take-snapshot.js.map +1 -0
  163. package/lib/esm/src/update-account-circuit-breaker.js +91 -0
  164. package/lib/esm/src/update-account-circuit-breaker.js.map +1 -0
  165. package/lib/esm/src/update-aggregator.js +75 -0
  166. package/lib/esm/src/update-aggregator.js.map +1 -0
  167. package/lib/esm/src/update-dao.js +128 -0
  168. package/lib/esm/src/update-dao.js.map +1 -0
  169. package/lib/esm/src/update-data-credits.js +87 -0
  170. package/lib/esm/src/update-data-credits.js.map +1 -0
  171. package/lib/esm/src/update-delegated-dc-subdao.js +95 -0
  172. package/lib/esm/src/update-delegated-dc-subdao.js.map +1 -0
  173. package/lib/esm/src/update-iot-operations-fund-metadata.js +83 -0
  174. package/lib/esm/src/update-iot-operations-fund-metadata.js.map +1 -0
  175. package/lib/esm/src/update-lazy-distributor.js +97 -0
  176. package/lib/esm/src/update-lazy-distributor.js.map +1 -0
  177. package/lib/esm/src/update-lazy-transactions.js +76 -0
  178. package/lib/esm/src/update-lazy-transactions.js.map +1 -0
  179. package/lib/esm/src/update-mint-circuit-breaker.js +91 -0
  180. package/lib/esm/src/update-mint-circuit-breaker.js.map +1 -0
  181. package/lib/esm/src/update-registrar-authorities.js +55 -0
  182. package/lib/esm/src/update-registrar-authorities.js.map +1 -0
  183. package/lib/esm/src/update-rewardable-entity-config.js +114 -0
  184. package/lib/esm/src/update-rewardable-entity-config.js.map +1 -0
  185. package/lib/esm/src/update-subdao-vehnt.js +254 -0
  186. package/lib/esm/src/update-subdao-vehnt.js.map +1 -0
  187. package/lib/esm/src/update-subdao.js +220 -0
  188. package/lib/esm/src/update-subdao.js.map +1 -0
  189. package/lib/esm/src/upgrade-idl.js +68 -0
  190. package/lib/esm/src/upgrade-idl.js.map +1 -0
  191. package/lib/esm/src/utils.js +392 -0
  192. package/lib/esm/src/utils.js.map +1 -0
  193. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -0
  194. package/lib/types/src/approve-carrier.d.ts +2 -0
  195. package/lib/types/src/approve-carrier.d.ts.map +1 -0
  196. package/lib/types/src/approve-program.d.ts +2 -0
  197. package/lib/types/src/approve-program.d.ts.map +1 -0
  198. package/lib/types/src/claim-rewards.d.ts +2 -0
  199. package/lib/types/src/claim-rewards.d.ts.map +1 -0
  200. package/lib/types/src/close-buffers.d.ts +2 -0
  201. package/lib/types/src/close-buffers.d.ts.map +1 -0
  202. package/lib/types/src/close-canopy.d.ts +2 -0
  203. package/lib/types/src/close-canopy.d.ts.map +1 -0
  204. package/lib/types/src/close-lazy-transaction-markers.d.ts +2 -0
  205. package/lib/types/src/close-lazy-transaction-markers.d.ts.map +1 -0
  206. package/lib/types/src/correct-router-dc.d.ts +2 -0
  207. package/lib/types/src/correct-router-dc.d.ts.map +1 -0
  208. package/lib/types/src/create-active-device-aggregator.d.ts +2 -0
  209. package/lib/types/src/create-active-device-aggregator.d.ts.map +1 -0
  210. package/lib/types/src/create-carrier.d.ts +2 -0
  211. package/lib/types/src/create-carrier.d.ts.map +1 -0
  212. package/lib/types/src/create-dao.d.ts +2 -0
  213. package/lib/types/src/create-dao.d.ts.map +1 -0
  214. package/lib/types/src/create-data-only-config.d.ts +2 -0
  215. package/lib/types/src/create-data-only-config.d.ts.map +1 -0
  216. package/lib/types/src/create-maker.d.ts +2 -0
  217. package/lib/types/src/create-maker.d.ts.map +1 -0
  218. package/lib/types/src/create-price-oracle.d.ts +2 -0
  219. package/lib/types/src/create-price-oracle.d.ts.map +1 -0
  220. package/lib/types/src/create-subdao.d.ts +2 -0
  221. package/lib/types/src/create-subdao.d.ts.map +1 -0
  222. package/lib/types/src/distribute-hst.d.ts +2 -0
  223. package/lib/types/src/distribute-hst.d.ts.map +1 -0
  224. package/lib/types/src/distribute-iot-operations-fund.d.ts +2 -0
  225. package/lib/types/src/distribute-iot-operations-fund.d.ts.map +1 -0
  226. package/lib/types/src/ecc-gen.d.ts +2 -0
  227. package/lib/types/src/ecc-gen.d.ts.map +1 -0
  228. package/lib/types/src/end-epoch.d.ts +2 -0
  229. package/lib/types/src/end-epoch.d.ts.map +1 -0
  230. package/lib/types/src/issue-iot-operations-fund.d.ts +2 -0
  231. package/lib/types/src/issue-iot-operations-fund.d.ts.map +1 -0
  232. package/lib/types/src/issue-test-hotspot.d.ts +2 -0
  233. package/lib/types/src/issue-test-hotspot.d.ts.map +1 -0
  234. package/lib/types/src/log-coingecko-price.d.ts +2 -0
  235. package/lib/types/src/log-coingecko-price.d.ts.map +1 -0
  236. package/lib/types/src/log-hotspot.d.ts +2 -0
  237. package/lib/types/src/log-hotspot.d.ts.map +1 -0
  238. package/lib/types/src/log-router-balance.d.ts +2 -0
  239. package/lib/types/src/log-router-balance.d.ts.map +1 -0
  240. package/lib/types/src/log-treasury-price.d.ts +2 -0
  241. package/lib/types/src/log-treasury-price.d.ts.map +1 -0
  242. package/lib/types/src/mint-dc.d.ts +2 -0
  243. package/lib/types/src/mint-dc.d.ts.map +1 -0
  244. package/lib/types/src/repair-iot-operations-fund.d.ts +2 -0
  245. package/lib/types/src/repair-iot-operations-fund.d.ts.map +1 -0
  246. package/lib/types/src/reset-clockwork.d.ts +2 -0
  247. package/lib/types/src/reset-clockwork.d.ts.map +1 -0
  248. package/lib/types/src/reset-vsr-max-voter-record.d.ts +2 -0
  249. package/lib/types/src/reset-vsr-max-voter-record.d.ts.map +1 -0
  250. package/lib/types/src/reset-vsr-voting-mint.d.ts +2 -0
  251. package/lib/types/src/reset-vsr-voting-mint.d.ts.map +1 -0
  252. package/lib/types/src/setup-hst.d.ts +4 -0
  253. package/lib/types/src/setup-hst.d.ts.map +1 -0
  254. package/lib/types/src/submit-price.d.ts +3 -0
  255. package/lib/types/src/submit-price.d.ts.map +1 -0
  256. package/lib/types/src/sum-tokens.d.ts +2 -0
  257. package/lib/types/src/sum-tokens.d.ts.map +1 -0
  258. package/lib/types/src/take-snapshot.d.ts +2 -0
  259. package/lib/types/src/take-snapshot.d.ts.map +1 -0
  260. package/lib/types/src/update-account-circuit-breaker.d.ts +2 -0
  261. package/lib/types/src/update-account-circuit-breaker.d.ts.map +1 -0
  262. package/lib/types/src/update-aggregator.d.ts +2 -0
  263. package/lib/types/src/update-aggregator.d.ts.map +1 -0
  264. package/lib/types/src/update-dao.d.ts +2 -0
  265. package/lib/types/src/update-dao.d.ts.map +1 -0
  266. package/lib/types/src/update-data-credits.d.ts +2 -0
  267. package/lib/types/src/update-data-credits.d.ts.map +1 -0
  268. package/lib/types/src/update-delegated-dc-subdao.d.ts +2 -0
  269. package/lib/types/src/update-delegated-dc-subdao.d.ts.map +1 -0
  270. package/lib/types/src/update-iot-operations-fund-metadata.d.ts +2 -0
  271. package/lib/types/src/update-iot-operations-fund-metadata.d.ts.map +1 -0
  272. package/lib/types/src/update-lazy-distributor.d.ts +2 -0
  273. package/lib/types/src/update-lazy-distributor.d.ts.map +1 -0
  274. package/lib/types/src/update-lazy-transactions.d.ts +2 -0
  275. package/lib/types/src/update-lazy-transactions.d.ts.map +1 -0
  276. package/lib/types/src/update-mint-circuit-breaker.d.ts +2 -0
  277. package/lib/types/src/update-mint-circuit-breaker.d.ts.map +1 -0
  278. package/lib/types/src/update-registrar-authorities.d.ts +2 -0
  279. package/lib/types/src/update-registrar-authorities.d.ts.map +1 -0
  280. package/lib/types/src/update-rewardable-entity-config.d.ts +2 -0
  281. package/lib/types/src/update-rewardable-entity-config.d.ts.map +1 -0
  282. package/lib/types/src/update-subdao-vehnt.d.ts +2 -0
  283. package/lib/types/src/update-subdao-vehnt.d.ts.map +1 -0
  284. package/lib/types/src/update-subdao.d.ts +2 -0
  285. package/lib/types/src/update-subdao.d.ts.map +1 -0
  286. package/lib/types/src/upgrade-idl.d.ts +2 -0
  287. package/lib/types/src/upgrade-idl.d.ts.map +1 -0
  288. package/lib/types/src/utils.d.ts +59 -0
  289. package/lib/types/src/utils.d.ts.map +1 -0
  290. package/package.json +13 -13
@@ -0,0 +1,71 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { PublicKey } from "@solana/web3.js";
3
+ import os from "os";
4
+ import yargs from "yargs/yargs";
5
+ import { createSwitchboardAggregator } from "./utils";
6
+ import { loadKeypair } from "./utils";
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
+ executeTransaction: {
20
+ type: "boolean",
21
+ },
22
+ aggregatorKeypair: {
23
+ type: "string",
24
+ describe: "Keypair of the aggregtor",
25
+ },
26
+ activeDeviceOracleUrl: {
27
+ alias: "ao",
28
+ type: "string",
29
+ describe: "The active device oracle URL",
30
+ default: "http://localhost:8081",
31
+ },
32
+ queue: {
33
+ type: "string",
34
+ describe: "Switchbaord oracle queue",
35
+ default: "uPeRMdfPmrPqgRWSrjAnAkH78RqAhe5kXoW6vBYRqFX",
36
+ },
37
+ crank: {
38
+ type: "string",
39
+ describe: "Switchboard crank",
40
+ default: "UcrnK4w2HXCEjY8z6TcQ9tysYr3c9VcFLdYAU9YQP5e",
41
+ },
42
+ switchboardNetwork: {
43
+ type: "string",
44
+ describe: "The switchboard network",
45
+ default: "devnet",
46
+ },
47
+ authority: {
48
+ type: "string",
49
+ },
50
+ });
51
+ const argv = await yarg.argv;
52
+ console.log(argv.url);
53
+ process.env.ANCHOR_WALLET = argv.wallet;
54
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
55
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
56
+ const provider = anchor.getProvider();
57
+ const wallet = loadKeypair(argv.wallet);
58
+ const aggKeypair = await loadKeypair(argv.aggregatorKeypair);
59
+ console.log("Initializing switchboard oracle");
60
+ await createSwitchboardAggregator({
61
+ crank: new PublicKey(argv.crank),
62
+ queue: new PublicKey(argv.queue),
63
+ wallet,
64
+ provider,
65
+ aggKeypair,
66
+ url: argv.activeDeviceOracleUrl,
67
+ switchboardNetwork: argv.switchboardNetwork,
68
+ authority: argv.authority ? new PublicKey(argv.authority) : wallet.publicKey,
69
+ });
70
+ }
71
+ //# sourceMappingURL=create-active-device-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-active-device-aggregator.js","sourceRoot":"","sources":["../../../src/create-active-device-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,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,kBAAkB,EAAE;YAClB,IAAI,EAAE,SAAS;SAChB;QACD,iBAAiB,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;SACrC;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,8BAA8B;YACxC,OAAO,EAAE,uBAAuB;SACjC;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,6CAA6C;SACvD;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,6CAA6C;SACvD;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,QAAQ;SAClB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;SACf;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,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;IAE/D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,2BAA2B,CAAC;QAChC,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM;QACN,QAAQ;QACR,UAAU;QACV,GAAG,EAAE,IAAI,CAAC,qBAAqB;QAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;KAC7E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,161 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { init as initHem, keyToAssetKey, } from "@helium/helium-entity-manager-sdk";
3
+ import { daoKey, subDaoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { carrierKey, init as initMem } from "@helium/mobile-entity-manager-sdk";
5
+ import { HNT_MINT, MOBILE_MINT, humanReadable, sendInstructions, } from "@helium/spl-utils";
6
+ import { SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, getConcurrentMerkleTreeAccountSize, } from "@solana/spl-account-compression";
7
+ import { ComputeBudgetProgram, Keypair, PublicKey, SystemProgram, } from "@solana/web3.js";
8
+ import fs from "fs";
9
+ import os from "os";
10
+ import yargs from "yargs/yargs";
11
+ import { exists, loadKeypair, merkleSizes } from "./utils";
12
+ const path = require("path");
13
+ export async function run(args = process.argv) {
14
+ const yarg = yargs(args).options({
15
+ wallet: {
16
+ alias: "k",
17
+ describe: "Anchor wallet keypair",
18
+ default: `${os.homedir()}/.config/solana/id.json`,
19
+ },
20
+ url: {
21
+ alias: "u",
22
+ default: "http://127.0.0.1:8899",
23
+ describe: "The solana url",
24
+ },
25
+ hntMint: {
26
+ default: HNT_MINT.toBase58(),
27
+ },
28
+ dntMint: {
29
+ default: MOBILE_MINT.toBase58(),
30
+ describe: "Public Key of the subdao mint",
31
+ type: "string",
32
+ },
33
+ name: {
34
+ alias: "n",
35
+ type: "string",
36
+ required: true,
37
+ describe: "The name of the carrier",
38
+ },
39
+ metadataUrl: {
40
+ required: true,
41
+ type: "string",
42
+ describe: "Json metadata for the collection",
43
+ },
44
+ issuingAuthority: {
45
+ alias: "m",
46
+ type: "string",
47
+ describe: "The pubkey that will approve issuance",
48
+ required: true,
49
+ },
50
+ recipient: {
51
+ describe: "Recipient of the rewardable carrier nft, default to this wallet",
52
+ type: "string",
53
+ required: false,
54
+ },
55
+ count: {
56
+ alias: "c",
57
+ type: "number",
58
+ describe: "Estimated number of entities this carrier will have",
59
+ required: true,
60
+ },
61
+ merkleBasePath: {
62
+ type: "string",
63
+ describe: "Base path for merkle keypair",
64
+ default: path.join(__dirname, "..", "..", "keypairs"),
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 name = argv.name;
73
+ const hemProgram = await initHem(provider);
74
+ const memProgram = await initMem(provider);
75
+ const conn = provider.connection;
76
+ const dntMint = new PublicKey(argv.dntMint);
77
+ const subDao = (await subDaoKey(dntMint))[0];
78
+ const count = argv.count || 300000;
79
+ const issuingAuthority = new PublicKey(argv.issuingAuthority);
80
+ const [size, buffer, canopy] = merkleSizes.find(([height]) => Math.pow(2, height) > count * 2);
81
+ const space = getConcurrentMerkleTreeAccountSize(size, buffer, canopy);
82
+ const carrier = await carrierKey(subDao, name)[0];
83
+ const rent = await provider.connection.getMinimumBalanceForRentExemption(space);
84
+ let merkle;
85
+ const merklePath = `${argv.merkleBasePath}/merkle-${issuingAuthority.toBase58()}.json`;
86
+ if (fs.existsSync(merklePath)) {
87
+ merkle = loadKeypair(merklePath);
88
+ }
89
+ else {
90
+ merkle = Keypair.generate();
91
+ fs.writeFileSync(merklePath, JSON.stringify(Array.from(merkle.secretKey)));
92
+ }
93
+ console.log(`
94
+ Creating carrier with issuing authority: ${issuingAuthority.toBase58()}.
95
+ Carrier: ${carrier.toBase58()}.
96
+ Size: ${size}, buffer: ${buffer}, canopy: ${canopy}.
97
+ Space: ${space} bytes
98
+ Cost: ~${humanReadable(new anchor.BN(rent), 9)} Sol
99
+ `);
100
+ if (space > 10000000) {
101
+ throw new Error(`Space ${space} more than 10mb for tree ${size}, ${buffer}, ${canopy}}`);
102
+ }
103
+ if (!(await exists(conn, carrier))) {
104
+ console.log("Creating carrier");
105
+ console.log(await memProgram.methods
106
+ .initializeCarrierV0({
107
+ name,
108
+ issuingAuthority: issuingAuthority,
109
+ updateAuthority: issuingAuthority,
110
+ metadataUrl: argv.metadataUrl,
111
+ })
112
+ .preInstructions([
113
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
114
+ ])
115
+ .accounts({
116
+ subDao,
117
+ })
118
+ .rpc({ skipPreflight: true }));
119
+ }
120
+ if (!(await exists(conn, merkle.publicKey))) {
121
+ console.log("Creating tree");
122
+ await sendInstructions(provider, [
123
+ SystemProgram.createAccount({
124
+ fromPubkey: provider.wallet.publicKey,
125
+ newAccountPubkey: merkle.publicKey,
126
+ lamports: await provider.connection.getMinimumBalanceForRentExemption(space),
127
+ space: space,
128
+ programId: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
129
+ }),
130
+ await memProgram.methods
131
+ .updateCarrierTreeV0({
132
+ maxDepth: size,
133
+ maxBufferSize: buffer,
134
+ })
135
+ .accounts({
136
+ carrier,
137
+ newMerkleTree: merkle.publicKey,
138
+ })
139
+ .instruction(),
140
+ ], [merkle]);
141
+ }
142
+ const hntMint = new PublicKey(argv.hntMint);
143
+ const recipient = argv.recipient
144
+ ? new PublicKey(argv.recipient)
145
+ : provider.wallet.publicKey;
146
+ const [keyToAssetK] = keyToAssetKey(daoKey(hntMint)[0], Buffer.from(name, "utf-8"));
147
+ const keyToAsset = await hemProgram.account.keyToAssetV0.fetchNullable(keyToAssetK);
148
+ if (!keyToAsset && issuingAuthority.equals(provider.wallet.publicKey)) {
149
+ console.log("Minting carrier NFT");
150
+ console.log(await memProgram.methods
151
+ .issueCarrierNftV0({
152
+ metadataUrl: `https://entities.nft.helium.io/${name}`,
153
+ })
154
+ .preInstructions([
155
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
156
+ ])
157
+ .accounts({ carrier, recipient })
158
+ .rpc({ skipPreflight: true }));
159
+ }
160
+ }
161
+ //# sourceMappingURL=create-carrier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-carrier.js","sourceRoot":"","sources":["../../../src/create-carrier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,415 @@
1
+ import * as anchor from '@coral-xyz/anchor';
2
+ import { ThresholdType } from '@helium/circuit-breaker-sdk';
3
+ import { dataCreditsKey, init as initDc, PROGRAM_ID, accountPayerKey, } from '@helium/data-credits-sdk';
4
+ import { init as initHem, dataOnlyConfigKey, } from '@helium/helium-entity-manager-sdk';
5
+ import { fanoutKey } from '@helium/fanout-sdk';
6
+ import { daoKey, init as initDao, threadKey, } from '@helium/helium-sub-daos-sdk';
7
+ import { sendInstructions, toBN } from '@helium/spl-utils';
8
+ import { init as initVsr, registrarKey, } from '@helium/voter-stake-registry-sdk';
9
+ import { getGovernanceProgramVersion, GoverningTokenConfigAccountArgs, GoverningTokenType, MintMaxVoteWeightSource, SetRealmAuthorityAction, withCreateRealm, withSetRealmAuthority, } from '@solana/spl-governance';
10
+ import { createAssociatedTokenAccountIdempotentInstruction, getAssociatedTokenAddressSync, } from '@solana/spl-token';
11
+ import { ComputeBudgetProgram, Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, } from '@solana/web3.js';
12
+ import Squads from '@sqds/sdk';
13
+ import os from 'os';
14
+ import yargs from 'yargs/yargs';
15
+ import { createAndMint, isLocalhost, loadKeypair, parseEmissionsSchedule, sendInstructionsOrSquads, } from './utils';
16
+ import fs from 'fs';
17
+ import { BN } from 'bn.js';
18
+ import { getConcurrentMerkleTreeAccountSize, SPL_ACCOUNT_COMPRESSION_PROGRAM_ID, } from '@solana/spl-account-compression';
19
+ const { hideBin } = require('yargs/helpers');
20
+ const HNT_EPOCH_REWARDS = 10000000000;
21
+ const SECS_PER_DAY = 86400;
22
+ const SECS_PER_YEAR = 365 * SECS_PER_DAY;
23
+ const MAX_LOCKUP = 4 * SECS_PER_YEAR;
24
+ const BASELINE = 0;
25
+ const SCALE = 100;
26
+ const GENESIS_MULTIPLIER = 3;
27
+ async function exists(connection, account) {
28
+ return Boolean(await connection.getAccountInfo(account));
29
+ }
30
+ export async function run(args = process.argv) {
31
+ const yarg = yargs(args).options({
32
+ wallet: {
33
+ alias: 'k',
34
+ describe: 'Anchor wallet keypair',
35
+ default: `${os.homedir()}/.config/solana/id.json`,
36
+ },
37
+ url: {
38
+ alias: 'u',
39
+ default: 'http://127.0.0.1:8899',
40
+ describe: 'The solana url',
41
+ },
42
+ hntKeypair: {
43
+ type: 'string',
44
+ describe: 'Keypair of the HNT token',
45
+ default: `${__dirname}/../../keypairs/hnt.json`,
46
+ },
47
+ dcKeypair: {
48
+ type: 'string',
49
+ describe: 'Keypair of the Data Credit token',
50
+ default: `${__dirname}/../../keypairs/dc.json`,
51
+ },
52
+ numHnt: {
53
+ type: 'number',
54
+ describe: 'Number of HNT tokens to pre mint before assigning authority to lazy distributor',
55
+ default: 0,
56
+ },
57
+ numDc: {
58
+ type: 'number',
59
+ describe: 'Number of DC tokens to pre mint before assigning authority to lazy distributor',
60
+ default: 1000,
61
+ },
62
+ bucket: {
63
+ type: 'string',
64
+ describe: 'Bucket URL prefix holding all of the metadata jsons',
65
+ default: 'https://shdw-drive.genesysgo.net/6tcnBSybPG7piEDShBcrVtYJDPSvGrDbVvXmXKpzBvWP',
66
+ },
67
+ emissionSchedulePath: {
68
+ required: true,
69
+ describe: 'Path to file that contains the hnt emissions schedule',
70
+ type: 'string',
71
+ default: `${__dirname}/../../emissions/hnt.json`,
72
+ },
73
+ hstEmissionSchedulePath: {
74
+ required: true,
75
+ describe: 'Path to file that contains the hst emissions schedule',
76
+ type: 'string',
77
+ default: `${__dirname}/../../emissions/hst.json`,
78
+ },
79
+ govProgramId: {
80
+ type: 'string',
81
+ describe: 'Pubkey of the GOV program',
82
+ default: 'hgovkRU6Ghe1Qoyb54HdSLdqN7VtxaifBzRmh9jtd3S',
83
+ },
84
+ realmName: {
85
+ type: 'string',
86
+ describe: 'Name of the realm to be generated',
87
+ default: 'Helium',
88
+ },
89
+ councilKeypair: {
90
+ type: 'string',
91
+ describe: 'Keypair of gov council token',
92
+ default: `${__dirname}/../../keypairs/council.json`,
93
+ },
94
+ councilWallet: {
95
+ type: 'string',
96
+ describe: 'Pubkey for holding/distributing council tokens',
97
+ default: await loadKeypair(`${os.homedir()}/.config/solana/id.json`).publicKey.toBase58(),
98
+ },
99
+ numCouncil: {
100
+ type: 'number',
101
+ describe: 'Number of Gov Council tokens to pre mint before assigning authority to dao',
102
+ default: 10,
103
+ },
104
+ multisig: {
105
+ type: 'string',
106
+ describe: 'Address of the squads multisig to control the dao. If not provided, your wallet will be the authority',
107
+ },
108
+ authorityIndex: {
109
+ type: 'number',
110
+ describe: 'Authority index for squads. Defaults to 1',
111
+ default: 1,
112
+ },
113
+ hntPriceOracle: {
114
+ type: 'string',
115
+ required: true,
116
+ },
117
+ numHst: {
118
+ type: 'number',
119
+ describe: 'Number of HST tokens to pre mint before assigning authority to lazy distributor',
120
+ default: 0,
121
+ },
122
+ merklePath: {
123
+ type: 'string',
124
+ describe: 'Path to the merkle keypair',
125
+ default: `${__dirname}/../../keypairs/data-only-merkle.json`,
126
+ },
127
+ });
128
+ const argv = await yarg.argv;
129
+ process.env.ANCHOR_WALLET = argv.wallet;
130
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
131
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
132
+ const provider = anchor.getProvider();
133
+ const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
134
+ const dataCreditsProgram = await initDc(provider);
135
+ const heliumSubDaosProgram = await initDao(provider);
136
+ const heliumVsrProgram = await initVsr(provider);
137
+ const hemProgram = await initHem(provider);
138
+ const govProgramId = new PublicKey(argv.govProgramId);
139
+ const councilKeypair = await loadKeypair(argv.councilKeypair);
140
+ const councilWallet = new PublicKey(argv.councilWallet);
141
+ const hntKeypair = loadKeypair(argv.hntKeypair);
142
+ const dcKeypair = loadKeypair(argv.dcKeypair);
143
+ const me = provider.wallet.publicKey;
144
+ const dao = daoKey(hntKeypair.publicKey)[0];
145
+ console.log('HNT', hntKeypair.publicKey.toBase58());
146
+ console.log('DC', dcKeypair.publicKey.toBase58());
147
+ console.log('GOV PID', govProgramId.toBase58());
148
+ console.log('COUNCIL', councilKeypair.publicKey.toBase58());
149
+ console.log('COUNCIL WALLET', councilWallet.toBase58());
150
+ const thread = threadKey(dao, 'issue_hst')[0];
151
+ console.log('DAO', dao.toString());
152
+ console.log('THREAD', thread.toString());
153
+ const conn = provider.connection;
154
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
155
+ commitmentOrConfig: 'finalized',
156
+ });
157
+ let authority = provider.wallet.publicKey;
158
+ let multisig = argv.multisig ? new PublicKey(argv.multisig) : null;
159
+ if (multisig) {
160
+ authority = squads.getAuthorityPDA(multisig, argv.authorityIndex);
161
+ // Fund authority
162
+ const authAcc = await provider.connection.getAccountInfo(authority);
163
+ if (!authAcc || authAcc.lamports < LAMPORTS_PER_SOL) {
164
+ console.log('Funding multisig...');
165
+ await sendInstructions(provider, [
166
+ await SystemProgram.transfer({
167
+ fromPubkey: me,
168
+ toPubkey: authority,
169
+ lamports: LAMPORTS_PER_SOL,
170
+ }),
171
+ ]);
172
+ }
173
+ }
174
+ await createAndMint({
175
+ provider,
176
+ mintKeypair: hntKeypair,
177
+ amount: argv.numHnt,
178
+ metadataUrl: `${argv.bucket}/hnt.json`,
179
+ updateAuthority: authority,
180
+ });
181
+ await createAndMint({
182
+ provider,
183
+ mintKeypair: dcKeypair,
184
+ amount: argv.numDc,
185
+ decimals: 0,
186
+ metadataUrl: `${argv.bucket}/dc.json`,
187
+ updateAuthority: authority,
188
+ });
189
+ await createAndMint({
190
+ provider,
191
+ mintKeypair: councilKeypair,
192
+ amount: argv.numCouncil,
193
+ decimals: 0,
194
+ metadataUrl: `${argv.bucket}/council.json`,
195
+ to: councilWallet,
196
+ updateAuthority: authority,
197
+ });
198
+ let instructions = [];
199
+ const govProgramVersion = await getGovernanceProgramVersion(conn, govProgramId, isLocalhost(provider) ? 'localnet' : undefined);
200
+ const realmName = argv.realmName;
201
+ const realm = await PublicKey.findProgramAddressSync([Buffer.from('governance', 'utf-8'), Buffer.from(realmName, 'utf-8')], govProgramId)[0];
202
+ console.log('Realm, ', realm.toBase58());
203
+ const needRealmCreate = !(await exists(conn, realm));
204
+ if (needRealmCreate) {
205
+ console.log('Initializing Realm');
206
+ await withCreateRealm(instructions, govProgramId, govProgramVersion, realmName, provider.wallet.publicKey, // realmAuthorityPk
207
+ hntKeypair.publicKey, // communityMintPk
208
+ provider.wallet.publicKey, // payer
209
+ councilKeypair.publicKey, // councilMintPk
210
+ MintMaxVoteWeightSource.FULL_SUPPLY_FRACTION, new anchor.BN(1000000000000000), // 10mm vehnt to create governance. Council should be the only one doing this
211
+ new GoverningTokenConfigAccountArgs({
212
+ // community token config
213
+ voterWeightAddin: heliumVsrProgram.programId,
214
+ maxVoterWeightAddin: heliumVsrProgram.programId,
215
+ tokenType: GoverningTokenType.Liquid,
216
+ }), new GoverningTokenConfigAccountArgs({
217
+ // council token config
218
+ voterWeightAddin: undefined,
219
+ maxVoterWeightAddin: undefined,
220
+ tokenType: GoverningTokenType.Liquid,
221
+ }));
222
+ await sendInstructions(provider, instructions, []);
223
+ instructions = [];
224
+ }
225
+ const registrar = (await registrarKey(realm, hntKeypair.publicKey))[0];
226
+ if (!(await exists(conn, registrar))) {
227
+ console.log('Initializing VSR Registrar');
228
+ instructions.push(ComputeBudgetProgram.setComputeUnitLimit({ units: 800000 }));
229
+ instructions.push(await heliumVsrProgram.methods
230
+ .initializeRegistrarV0({
231
+ positionUpdateAuthority: (await daoKey(hntKeypair.publicKey))[0],
232
+ })
233
+ .accounts({
234
+ realm,
235
+ realmGoverningTokenMint: hntKeypair.publicKey,
236
+ })
237
+ .instruction());
238
+ await sendInstructions(provider, instructions, []);
239
+ instructions = [];
240
+ }
241
+ console.log('Configuring VSR voting mint at [0]');
242
+ instructions.push(await heliumVsrProgram.methods
243
+ .configureVotingMintV0({
244
+ idx: 0,
245
+ digitShift: 0,
246
+ baselineVoteWeightScaledFactor: new anchor.BN(BASELINE * 1e9),
247
+ maxExtraLockupVoteWeightScaledFactor: new anchor.BN(SCALE * 1e9),
248
+ genesisVotePowerMultiplier: GENESIS_MULTIPLIER,
249
+ // April 28th, 23:59:59 UTC
250
+ genesisVotePowerMultiplierExpirationTs: new anchor.BN('1682726399'),
251
+ lockupSaturationSecs: new anchor.BN(MAX_LOCKUP),
252
+ })
253
+ .accounts({
254
+ registrar,
255
+ mint: hntKeypair.publicKey,
256
+ })
257
+ .remainingAccounts([
258
+ {
259
+ pubkey: hntKeypair.publicKey,
260
+ isSigner: false,
261
+ isWritable: false,
262
+ },
263
+ ])
264
+ .instruction());
265
+ await sendInstructions(provider, instructions, []);
266
+ instructions = [];
267
+ console.log('Creating max voter record');
268
+ instructions.push(await heliumVsrProgram.methods
269
+ .updateMaxVoterWeightV0()
270
+ .accounts({
271
+ registrar,
272
+ realmGoverningTokenMint: hntKeypair.publicKey,
273
+ })
274
+ .instruction());
275
+ console.log(registrar.toString());
276
+ await sendInstructions(provider, instructions, []);
277
+ instructions = [];
278
+ if (needRealmCreate && !authority.equals(me)) {
279
+ withSetRealmAuthority(instructions, govProgramId, govProgramVersion, realm, provider.wallet.publicKey, authority, SetRealmAuthorityAction.SetUnchecked);
280
+ }
281
+ await sendInstructions(provider, instructions, []);
282
+ instructions = [];
283
+ const dcKey = (await dataCreditsKey(dcKeypair.publicKey))[0];
284
+ console.log('dcpid', PROGRAM_ID.toBase58());
285
+ if (!(await exists(conn, dcKey))) {
286
+ await dataCreditsProgram.methods
287
+ .initializeDataCreditsV0({
288
+ authority,
289
+ config: {
290
+ windowSizeSeconds: new anchor.BN(60 * 60),
291
+ thresholdType: ThresholdType.Absolute,
292
+ threshold: new anchor.BN('1000000000000'),
293
+ },
294
+ })
295
+ .accounts({
296
+ hntMint: hntKeypair.publicKey,
297
+ dcMint: dcKeypair.publicKey,
298
+ hntPriceOracle: new PublicKey(argv.hntPriceOracle),
299
+ })
300
+ .rpc({ skipPreflight: true });
301
+ let tx = new Transaction();
302
+ tx.add(SystemProgram.transfer({
303
+ fromPubkey: provider.wallet.publicKey,
304
+ toPubkey: accountPayerKey()[0],
305
+ lamports: 5 * LAMPORTS_PER_SOL,
306
+ }));
307
+ tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
308
+ tx.feePayer = provider.wallet.publicKey;
309
+ await provider.sendAndConfirm(tx);
310
+ }
311
+ if (!(await exists(conn, dao))) {
312
+ console.log('Initializing DAO');
313
+ const hstEmission = await parseEmissionsSchedule(argv.hstEmissionSchedulePath);
314
+ const hntEmission = await parseEmissionsSchedule(argv.emissionSchedulePath);
315
+ const currentHstEmission = hstEmission[0];
316
+ const currentHntEmission = hntEmission[0];
317
+ const fanout = fanoutKey('HST')[0];
318
+ const hstPool = getAssociatedTokenAddressSync(hntKeypair.publicKey, fanout, true);
319
+ await heliumSubDaosProgram.methods
320
+ .initializeDaoV0({
321
+ registrar: registrar,
322
+ authority,
323
+ netEmissionsCap: toBN(34.24, 8),
324
+ // Tx too large to do in initialize dao, so do it with update
325
+ hstEmissionSchedule: [currentHstEmission],
326
+ emissionSchedule: [currentHntEmission],
327
+ })
328
+ .preInstructions([
329
+ createAssociatedTokenAccountIdempotentInstruction(provider.wallet.publicKey, hstPool, fanout, hntKeypair.publicKey),
330
+ ])
331
+ .accounts({
332
+ dcMint: dcKeypair.publicKey,
333
+ hntMint: hntKeypair.publicKey,
334
+ thread,
335
+ hstPool,
336
+ })
337
+ .rpc({ skipPreflight: true });
338
+ await sendInstructionsOrSquads({
339
+ provider,
340
+ instructions: [
341
+ await heliumSubDaosProgram.methods
342
+ .updateDaoV0({
343
+ authority,
344
+ emissionSchedule: hntEmission,
345
+ hstEmissionSchedule: hstEmission,
346
+ hstPool: null,
347
+ netEmissionsCap: null,
348
+ })
349
+ .accounts({
350
+ dao,
351
+ authority: authority,
352
+ })
353
+ .instruction(),
354
+ ],
355
+ executeTransaction: true,
356
+ squads,
357
+ multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
358
+ authorityIndex: argv.authorityIndex,
359
+ signers: [],
360
+ });
361
+ }
362
+ if (!(await exists(conn, dataOnlyConfigKey(dao)[0]))) {
363
+ console.log(`Initializing DataOnly Config`);
364
+ let merkle;
365
+ if (fs.existsSync(argv.merklePath)) {
366
+ merkle = loadKeypair(argv.merklePath);
367
+ }
368
+ else {
369
+ merkle = Keypair.generate();
370
+ fs.writeFileSync(argv.merklePath, JSON.stringify(Array.from(merkle.secretKey)));
371
+ }
372
+ const [size, buffer, canopy] = [14, 64, 11];
373
+ const space = getConcurrentMerkleTreeAccountSize(size, buffer, canopy);
374
+ const cost = await provider.connection.getMinimumBalanceForRentExemption(space);
375
+ if (!(await exists(conn, merkle.publicKey))) {
376
+ await sendInstructions(provider, [
377
+ SystemProgram.createAccount({
378
+ fromPubkey: provider.wallet.publicKey,
379
+ newAccountPubkey: merkle.publicKey,
380
+ lamports: cost,
381
+ space: space,
382
+ programId: SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
383
+ }),
384
+ ], [merkle]);
385
+ }
386
+ await sendInstructionsOrSquads({
387
+ provider,
388
+ instructions: [
389
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 400000 }),
390
+ await hemProgram.methods
391
+ .initializeDataOnlyV0({
392
+ authority,
393
+ newTreeDepth: size,
394
+ newTreeBufferSize: buffer,
395
+ newTreeSpace: new BN(getConcurrentMerkleTreeAccountSize(size, buffer, canopy)),
396
+ newTreeFeeLamports: new BN(cost / 2 ** size),
397
+ name: 'DATAONLY',
398
+ metadataUrl: 'https://shdw-drive.genesysgo.net/H8b1gZmA2aBqDYxicxawGpznCaNbFSEJ3YnJuawGQ2EQ/data-only.json',
399
+ })
400
+ .accounts({
401
+ dao,
402
+ authority,
403
+ merkleTree: merkle.publicKey,
404
+ })
405
+ .instruction(),
406
+ ],
407
+ executeTransaction: false,
408
+ squads,
409
+ multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
410
+ authorityIndex: argv.authorityIndex,
411
+ signers: [],
412
+ });
413
+ }
414
+ }
415
+ //# sourceMappingURL=create-dao.js.map