@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.
- package/lib/cjs/approve-carrier.js +120 -0
- package/lib/cjs/approve-carrier.js.map +1 -0
- package/lib/cjs/approve-program.js +122 -0
- package/lib/cjs/approve-program.js.map +1 -0
- package/lib/cjs/claim-rewards.js +109 -0
- package/lib/cjs/claim-rewards.js.map +1 -0
- package/lib/cjs/close-buffers.js +132 -0
- package/lib/cjs/close-buffers.js.map +1 -0
- package/lib/cjs/close-canopy.js +108 -0
- package/lib/cjs/close-canopy.js.map +1 -0
- package/lib/cjs/close-lazy-transaction-markers.js +108 -0
- package/lib/cjs/close-lazy-transaction-markers.js.map +1 -0
- package/lib/cjs/correct-router-dc.js +149 -0
- package/lib/cjs/correct-router-dc.js.map +1 -0
- package/lib/cjs/create-active-device-aggregator.js +112 -0
- package/lib/cjs/create-active-device-aggregator.js.map +1 -0
- package/lib/cjs/create-carrier.js +202 -0
- package/lib/cjs/create-carrier.js.map +1 -0
- package/lib/cjs/create-dao.js +458 -0
- package/lib/cjs/create-dao.js.map +1 -0
- package/lib/cjs/create-data-only-config.js +175 -0
- package/lib/cjs/create-data-only-config.js.map +1 -0
- package/lib/cjs/create-maker.js +323 -0
- package/lib/cjs/create-maker.js.map +1 -0
- package/lib/cjs/create-price-oracle.js +133 -0
- package/lib/cjs/create-price-oracle.js.map +1 -0
- package/lib/cjs/create-subdao.js +531 -0
- package/lib/cjs/create-subdao.js.map +1 -0
- package/lib/cjs/distribute-hst.js +94 -0
- package/lib/cjs/distribute-hst.js.map +1 -0
- package/lib/cjs/distribute-iot-operations-fund.js +120 -0
- package/lib/cjs/distribute-iot-operations-fund.js.map +1 -0
- package/lib/cjs/ecc-gen.js +17 -0
- package/lib/cjs/ecc-gen.js.map +1 -0
- package/lib/cjs/end-epoch.js +144 -0
- package/lib/cjs/end-epoch.js.map +1 -0
- package/lib/cjs/issue-iot-operations-fund.js +123 -0
- package/lib/cjs/issue-iot-operations-fund.js.map +1 -0
- package/lib/cjs/issue-test-hotspot.js +111 -0
- package/lib/cjs/issue-test-hotspot.js.map +1 -0
- package/lib/cjs/log-coingecko-price.js +32 -0
- package/lib/cjs/log-coingecko-price.js.map +1 -0
- package/lib/cjs/log-hotspot.js +103 -0
- package/lib/cjs/log-hotspot.js.map +1 -0
- package/lib/cjs/log-router-balance.js +89 -0
- package/lib/cjs/log-router-balance.js.map +1 -0
- package/lib/cjs/log-treasury-price.js +105 -0
- package/lib/cjs/log-treasury-price.js.map +1 -0
- package/lib/cjs/mint-dc.js +111 -0
- package/lib/cjs/mint-dc.js.map +1 -0
- package/lib/cjs/repair-iot-operations-fund.js +114 -0
- package/lib/cjs/repair-iot-operations-fund.js.map +1 -0
- package/lib/cjs/reset-clockwork.js +144 -0
- package/lib/cjs/reset-clockwork.js.map +1 -0
- package/lib/cjs/reset-vsr-max-voter-record.js +145 -0
- package/lib/cjs/reset-vsr-max-voter-record.js.map +1 -0
- package/lib/cjs/reset-vsr-voting-mint.js +182 -0
- package/lib/cjs/reset-vsr-voting-mint.js.map +1 -0
- package/lib/cjs/setup-hst.js +261 -0
- package/lib/cjs/setup-hst.js.map +1 -0
- package/lib/cjs/submit-price.js +159 -0
- package/lib/cjs/submit-price.js.map +1 -0
- package/lib/cjs/sum-tokens.js +84 -0
- package/lib/cjs/sum-tokens.js.map +1 -0
- package/lib/cjs/take-snapshot.js +70 -0
- package/lib/cjs/take-snapshot.js.map +1 -0
- package/lib/cjs/update-account-circuit-breaker.js +132 -0
- package/lib/cjs/update-account-circuit-breaker.js.map +1 -0
- package/lib/cjs/update-aggregator.js +116 -0
- package/lib/cjs/update-aggregator.js.map +1 -0
- package/lib/cjs/update-dao.js +169 -0
- package/lib/cjs/update-dao.js.map +1 -0
- package/lib/cjs/update-data-credits.js +128 -0
- package/lib/cjs/update-data-credits.js.map +1 -0
- package/lib/cjs/update-delegated-dc-subdao.js +136 -0
- package/lib/cjs/update-delegated-dc-subdao.js.map +1 -0
- package/lib/cjs/update-iot-operations-fund-metadata.js +124 -0
- package/lib/cjs/update-iot-operations-fund-metadata.js.map +1 -0
- package/lib/cjs/update-lazy-distributor.js +138 -0
- package/lib/cjs/update-lazy-distributor.js.map +1 -0
- package/lib/cjs/update-lazy-transactions.js +117 -0
- package/lib/cjs/update-lazy-transactions.js.map +1 -0
- package/lib/cjs/update-mint-circuit-breaker.js +132 -0
- package/lib/cjs/update-mint-circuit-breaker.js.map +1 -0
- package/lib/cjs/update-registrar-authorities.js +96 -0
- package/lib/cjs/update-registrar-authorities.js.map +1 -0
- package/lib/cjs/update-rewardable-entity-config.js +155 -0
- package/lib/cjs/update-rewardable-entity-config.js.map +1 -0
- package/lib/cjs/update-subdao-vehnt.js +295 -0
- package/lib/cjs/update-subdao-vehnt.js.map +1 -0
- package/lib/cjs/update-subdao.js +261 -0
- package/lib/cjs/update-subdao.js.map +1 -0
- package/lib/cjs/upgrade-idl.js +109 -0
- package/lib/cjs/upgrade-idl.js.map +1 -0
- package/lib/cjs/utils.js +457 -0
- package/lib/cjs/utils.js.map +1 -0
- package/lib/esm/src/approve-carrier.js +79 -0
- package/lib/esm/src/approve-carrier.js.map +1 -0
- package/lib/esm/src/approve-program.js +81 -0
- package/lib/esm/src/approve-program.js.map +1 -0
- package/lib/esm/src/claim-rewards.js +68 -0
- package/lib/esm/src/claim-rewards.js.map +1 -0
- package/lib/esm/src/close-buffers.js +91 -0
- package/lib/esm/src/close-buffers.js.map +1 -0
- package/lib/esm/src/close-canopy.js +67 -0
- package/lib/esm/src/close-canopy.js.map +1 -0
- package/lib/esm/src/close-lazy-transaction-markers.js +67 -0
- package/lib/esm/src/close-lazy-transaction-markers.js.map +1 -0
- package/lib/esm/src/correct-router-dc.js +108 -0
- package/lib/esm/src/correct-router-dc.js.map +1 -0
- package/lib/esm/src/create-active-device-aggregator.js +71 -0
- package/lib/esm/src/create-active-device-aggregator.js.map +1 -0
- package/lib/esm/src/create-carrier.js +161 -0
- package/lib/esm/src/create-carrier.js.map +1 -0
- package/lib/esm/src/create-dao.js +415 -0
- package/lib/esm/src/create-dao.js.map +1 -0
- package/lib/esm/src/create-data-only-config.js +132 -0
- package/lib/esm/src/create-data-only-config.js.map +1 -0
- package/lib/esm/src/create-maker.js +282 -0
- package/lib/esm/src/create-maker.js.map +1 -0
- package/lib/esm/src/create-price-oracle.js +92 -0
- package/lib/esm/src/create-price-oracle.js.map +1 -0
- package/lib/esm/src/create-subdao.js +490 -0
- package/lib/esm/src/create-subdao.js.map +1 -0
- package/lib/esm/src/distribute-hst.js +53 -0
- package/lib/esm/src/distribute-hst.js.map +1 -0
- package/lib/esm/src/distribute-iot-operations-fund.js +79 -0
- package/lib/esm/src/distribute-iot-operations-fund.js.map +1 -0
- package/lib/esm/src/ecc-gen.js +6 -0
- package/lib/esm/src/ecc-gen.js.map +1 -0
- package/lib/esm/src/end-epoch.js +103 -0
- package/lib/esm/src/end-epoch.js.map +1 -0
- package/lib/esm/src/issue-iot-operations-fund.js +82 -0
- package/lib/esm/src/issue-iot-operations-fund.js.map +1 -0
- package/lib/esm/src/issue-test-hotspot.js +70 -0
- package/lib/esm/src/issue-test-hotspot.js.map +1 -0
- package/lib/esm/src/log-coingecko-price.js +14 -0
- package/lib/esm/src/log-coingecko-price.js.map +1 -0
- package/lib/esm/src/log-hotspot.js +62 -0
- package/lib/esm/src/log-hotspot.js.map +1 -0
- package/lib/esm/src/log-router-balance.js +48 -0
- package/lib/esm/src/log-router-balance.js.map +1 -0
- package/lib/esm/src/log-treasury-price.js +64 -0
- package/lib/esm/src/log-treasury-price.js.map +1 -0
- package/lib/esm/src/mint-dc.js +70 -0
- package/lib/esm/src/mint-dc.js.map +1 -0
- package/lib/esm/src/repair-iot-operations-fund.js +73 -0
- package/lib/esm/src/repair-iot-operations-fund.js.map +1 -0
- package/lib/esm/src/reset-clockwork.js +103 -0
- package/lib/esm/src/reset-clockwork.js.map +1 -0
- package/lib/esm/src/reset-vsr-max-voter-record.js +104 -0
- package/lib/esm/src/reset-vsr-max-voter-record.js.map +1 -0
- package/lib/esm/src/reset-vsr-voting-mint.js +141 -0
- package/lib/esm/src/reset-vsr-voting-mint.js.map +1 -0
- package/lib/esm/src/setup-hst.js +218 -0
- package/lib/esm/src/setup-hst.js.map +1 -0
- package/lib/esm/src/submit-price.js +113 -0
- package/lib/esm/src/submit-price.js.map +1 -0
- package/lib/esm/src/sum-tokens.js +43 -0
- package/lib/esm/src/sum-tokens.js.map +1 -0
- package/lib/esm/src/take-snapshot.js +29 -0
- package/lib/esm/src/take-snapshot.js.map +1 -0
- package/lib/esm/src/update-account-circuit-breaker.js +91 -0
- package/lib/esm/src/update-account-circuit-breaker.js.map +1 -0
- package/lib/esm/src/update-aggregator.js +75 -0
- package/lib/esm/src/update-aggregator.js.map +1 -0
- package/lib/esm/src/update-dao.js +128 -0
- package/lib/esm/src/update-dao.js.map +1 -0
- package/lib/esm/src/update-data-credits.js +87 -0
- package/lib/esm/src/update-data-credits.js.map +1 -0
- package/lib/esm/src/update-delegated-dc-subdao.js +95 -0
- package/lib/esm/src/update-delegated-dc-subdao.js.map +1 -0
- package/lib/esm/src/update-iot-operations-fund-metadata.js +83 -0
- package/lib/esm/src/update-iot-operations-fund-metadata.js.map +1 -0
- package/lib/esm/src/update-lazy-distributor.js +97 -0
- package/lib/esm/src/update-lazy-distributor.js.map +1 -0
- package/lib/esm/src/update-lazy-transactions.js +76 -0
- package/lib/esm/src/update-lazy-transactions.js.map +1 -0
- package/lib/esm/src/update-mint-circuit-breaker.js +91 -0
- package/lib/esm/src/update-mint-circuit-breaker.js.map +1 -0
- package/lib/esm/src/update-registrar-authorities.js +55 -0
- package/lib/esm/src/update-registrar-authorities.js.map +1 -0
- package/lib/esm/src/update-rewardable-entity-config.js +114 -0
- package/lib/esm/src/update-rewardable-entity-config.js.map +1 -0
- package/lib/esm/src/update-subdao-vehnt.js +254 -0
- package/lib/esm/src/update-subdao-vehnt.js.map +1 -0
- package/lib/esm/src/update-subdao.js +220 -0
- package/lib/esm/src/update-subdao.js.map +1 -0
- package/lib/esm/src/upgrade-idl.js +68 -0
- package/lib/esm/src/upgrade-idl.js.map +1 -0
- package/lib/esm/src/utils.js +392 -0
- package/lib/esm/src/utils.js.map +1 -0
- package/lib/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/lib/types/src/approve-carrier.d.ts +2 -0
- package/lib/types/src/approve-carrier.d.ts.map +1 -0
- package/lib/types/src/approve-program.d.ts +2 -0
- package/lib/types/src/approve-program.d.ts.map +1 -0
- package/lib/types/src/claim-rewards.d.ts +2 -0
- package/lib/types/src/claim-rewards.d.ts.map +1 -0
- package/lib/types/src/close-buffers.d.ts +2 -0
- package/lib/types/src/close-buffers.d.ts.map +1 -0
- package/lib/types/src/close-canopy.d.ts +2 -0
- package/lib/types/src/close-canopy.d.ts.map +1 -0
- package/lib/types/src/close-lazy-transaction-markers.d.ts +2 -0
- package/lib/types/src/close-lazy-transaction-markers.d.ts.map +1 -0
- package/lib/types/src/correct-router-dc.d.ts +2 -0
- package/lib/types/src/correct-router-dc.d.ts.map +1 -0
- package/lib/types/src/create-active-device-aggregator.d.ts +2 -0
- package/lib/types/src/create-active-device-aggregator.d.ts.map +1 -0
- package/lib/types/src/create-carrier.d.ts +2 -0
- package/lib/types/src/create-carrier.d.ts.map +1 -0
- package/lib/types/src/create-dao.d.ts +2 -0
- package/lib/types/src/create-dao.d.ts.map +1 -0
- package/lib/types/src/create-data-only-config.d.ts +2 -0
- package/lib/types/src/create-data-only-config.d.ts.map +1 -0
- package/lib/types/src/create-maker.d.ts +2 -0
- package/lib/types/src/create-maker.d.ts.map +1 -0
- package/lib/types/src/create-price-oracle.d.ts +2 -0
- package/lib/types/src/create-price-oracle.d.ts.map +1 -0
- package/lib/types/src/create-subdao.d.ts +2 -0
- package/lib/types/src/create-subdao.d.ts.map +1 -0
- package/lib/types/src/distribute-hst.d.ts +2 -0
- package/lib/types/src/distribute-hst.d.ts.map +1 -0
- package/lib/types/src/distribute-iot-operations-fund.d.ts +2 -0
- package/lib/types/src/distribute-iot-operations-fund.d.ts.map +1 -0
- package/lib/types/src/ecc-gen.d.ts +2 -0
- package/lib/types/src/ecc-gen.d.ts.map +1 -0
- package/lib/types/src/end-epoch.d.ts +2 -0
- package/lib/types/src/end-epoch.d.ts.map +1 -0
- package/lib/types/src/issue-iot-operations-fund.d.ts +2 -0
- package/lib/types/src/issue-iot-operations-fund.d.ts.map +1 -0
- package/lib/types/src/issue-test-hotspot.d.ts +2 -0
- package/lib/types/src/issue-test-hotspot.d.ts.map +1 -0
- package/lib/types/src/log-coingecko-price.d.ts +2 -0
- package/lib/types/src/log-coingecko-price.d.ts.map +1 -0
- package/lib/types/src/log-hotspot.d.ts +2 -0
- package/lib/types/src/log-hotspot.d.ts.map +1 -0
- package/lib/types/src/log-router-balance.d.ts +2 -0
- package/lib/types/src/log-router-balance.d.ts.map +1 -0
- package/lib/types/src/log-treasury-price.d.ts +2 -0
- package/lib/types/src/log-treasury-price.d.ts.map +1 -0
- package/lib/types/src/mint-dc.d.ts +2 -0
- package/lib/types/src/mint-dc.d.ts.map +1 -0
- package/lib/types/src/repair-iot-operations-fund.d.ts +2 -0
- package/lib/types/src/repair-iot-operations-fund.d.ts.map +1 -0
- package/lib/types/src/reset-clockwork.d.ts +2 -0
- package/lib/types/src/reset-clockwork.d.ts.map +1 -0
- package/lib/types/src/reset-vsr-max-voter-record.d.ts +2 -0
- package/lib/types/src/reset-vsr-max-voter-record.d.ts.map +1 -0
- package/lib/types/src/reset-vsr-voting-mint.d.ts +2 -0
- package/lib/types/src/reset-vsr-voting-mint.d.ts.map +1 -0
- package/lib/types/src/setup-hst.d.ts +4 -0
- package/lib/types/src/setup-hst.d.ts.map +1 -0
- package/lib/types/src/submit-price.d.ts +3 -0
- package/lib/types/src/submit-price.d.ts.map +1 -0
- package/lib/types/src/sum-tokens.d.ts +2 -0
- package/lib/types/src/sum-tokens.d.ts.map +1 -0
- package/lib/types/src/take-snapshot.d.ts +2 -0
- package/lib/types/src/take-snapshot.d.ts.map +1 -0
- package/lib/types/src/update-account-circuit-breaker.d.ts +2 -0
- package/lib/types/src/update-account-circuit-breaker.d.ts.map +1 -0
- package/lib/types/src/update-aggregator.d.ts +2 -0
- package/lib/types/src/update-aggregator.d.ts.map +1 -0
- package/lib/types/src/update-dao.d.ts +2 -0
- package/lib/types/src/update-dao.d.ts.map +1 -0
- package/lib/types/src/update-data-credits.d.ts +2 -0
- package/lib/types/src/update-data-credits.d.ts.map +1 -0
- package/lib/types/src/update-delegated-dc-subdao.d.ts +2 -0
- package/lib/types/src/update-delegated-dc-subdao.d.ts.map +1 -0
- package/lib/types/src/update-iot-operations-fund-metadata.d.ts +2 -0
- package/lib/types/src/update-iot-operations-fund-metadata.d.ts.map +1 -0
- package/lib/types/src/update-lazy-distributor.d.ts +2 -0
- package/lib/types/src/update-lazy-distributor.d.ts.map +1 -0
- package/lib/types/src/update-lazy-transactions.d.ts +2 -0
- package/lib/types/src/update-lazy-transactions.d.ts.map +1 -0
- package/lib/types/src/update-mint-circuit-breaker.d.ts +2 -0
- package/lib/types/src/update-mint-circuit-breaker.d.ts.map +1 -0
- package/lib/types/src/update-registrar-authorities.d.ts +2 -0
- package/lib/types/src/update-registrar-authorities.d.ts.map +1 -0
- package/lib/types/src/update-rewardable-entity-config.d.ts +2 -0
- package/lib/types/src/update-rewardable-entity-config.d.ts.map +1 -0
- package/lib/types/src/update-subdao-vehnt.d.ts +2 -0
- package/lib/types/src/update-subdao-vehnt.d.ts.map +1 -0
- package/lib/types/src/update-subdao.d.ts +2 -0
- package/lib/types/src/update-subdao.d.ts.map +1 -0
- package/lib/types/src/upgrade-idl.d.ts +2 -0
- package/lib/types/src/upgrade-idl.d.ts.map +1 -0
- package/lib/types/src/utils.d.ts +59 -0
- package/lib/types/src/utils.d.ts.map +1 -0
- 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
|