@helium/helium-admin-cli 0.11.5 → 0.11.7
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/add-squads-proposer.js +107 -0
- package/lib/cjs/add-squads-proposer.js.map +1 -0
- package/lib/cjs/approve-carrier.js +1 -16
- package/lib/cjs/approve-carrier.js.map +1 -1
- package/lib/cjs/approve-maker.js +1 -16
- package/lib/cjs/approve-maker.js.map +1 -1
- package/lib/cjs/approve-program.js +1 -16
- package/lib/cjs/approve-program.js.map +1 -1
- package/lib/cjs/claim-and-close-subscriber-key-to-assets.js +664 -0
- package/lib/cjs/claim-and-close-subscriber-key-to-assets.js.map +1 -0
- package/lib/cjs/close-all-subscriber-recipients.js +329 -0
- package/lib/cjs/close-all-subscriber-recipients.js.map +1 -0
- package/lib/cjs/close-buffers.js +10 -20
- package/lib/cjs/close-buffers.js.map +1 -1
- package/lib/cjs/close-canopy.js +1 -16
- package/lib/cjs/close-canopy.js.map +1 -1
- package/lib/cjs/close-legacy-auto-topoff.js +129 -0
- package/lib/cjs/close-legacy-auto-topoff.js.map +1 -0
- package/lib/cjs/create-and-approve-makers.js +11 -21
- package/lib/cjs/create-and-approve-makers.js.map +1 -1
- package/lib/cjs/create-boost-config.js +1 -13
- package/lib/cjs/create-boost-config.js.map +1 -1
- package/lib/cjs/create-common-lut.js +10 -17
- package/lib/cjs/create-common-lut.js.map +1 -1
- package/lib/cjs/create-dao.js +12 -22
- package/lib/cjs/create-dao.js.map +1 -1
- package/lib/cjs/create-data-only-config.js +10 -17
- package/lib/cjs/create-data-only-config.js.map +1 -1
- package/lib/cjs/create-price-oracle.js +8 -7
- package/lib/cjs/create-price-oracle.js.map +1 -1
- package/lib/cjs/create-subdao.js +14 -22
- package/lib/cjs/create-subdao.js.map +1 -1
- package/lib/cjs/create-tuktuk-dca-lut.js +128 -0
- package/lib/cjs/create-tuktuk-dca-lut.js.map +1 -0
- package/lib/cjs/execute-vault-transaction.js +91 -0
- package/lib/cjs/execute-vault-transaction.js.map +1 -0
- package/lib/cjs/extend-common-lut.js +21 -24
- package/lib/cjs/extend-common-lut.js.map +1 -1
- package/lib/cjs/initialize-tuktuk-dca.js +237 -0
- package/lib/cjs/initialize-tuktuk-dca.js.map +1 -0
- package/lib/cjs/issue-iot-operations-fund.js +1 -16
- package/lib/cjs/issue-iot-operations-fund.js.map +1 -1
- package/lib/cjs/issue-service-rewards-nft.js +112 -0
- package/lib/cjs/issue-service-rewards-nft.js.map +1 -0
- package/lib/cjs/reschedule-all-mini-fanouts.js +3 -5
- package/lib/cjs/reschedule-all-mini-fanouts.js.map +1 -1
- package/lib/cjs/reset-vsr-voting-mint.js +1 -16
- package/lib/cjs/reset-vsr-voting-mint.js.map +1 -1
- package/lib/cjs/revoke-maker.js +1 -16
- package/lib/cjs/revoke-maker.js.map +1 -1
- package/lib/cjs/set-dc-onboarding-fees-paid-epoch-info.js +1 -16
- package/lib/cjs/set-dc-onboarding-fees-paid-epoch-info.js.map +1 -1
- package/lib/cjs/set-dc-onboarding-fees-paid.js +1 -16
- package/lib/cjs/set-dc-onboarding-fees-paid.js.map +1 -1
- package/lib/cjs/set-proxy-config.js +10 -17
- package/lib/cjs/set-proxy-config.js.map +1 -1
- package/lib/cjs/setup-dc-auto-topoff.js +255 -47
- package/lib/cjs/setup-dc-auto-topoff.js.map +1 -1
- package/lib/cjs/setup-hst.js +8 -7
- package/lib/cjs/setup-hst.js.map +1 -1
- package/lib/cjs/squads-batch-optimizer.js +156 -0
- package/lib/cjs/squads-batch-optimizer.js.map +1 -0
- package/lib/cjs/swap-carrier-stake.js +1 -16
- package/lib/cjs/swap-carrier-stake.js.map +1 -1
- package/lib/cjs/swap-maker-stake.js +1 -16
- package/lib/cjs/swap-maker-stake.js.map +1 -1
- package/lib/cjs/switch-mobile-ops-fund.js +1 -13
- package/lib/cjs/switch-mobile-ops-fund.js.map +1 -1
- package/lib/cjs/transfer-program-authorities.js +98 -0
- package/lib/cjs/transfer-program-authorities.js.map +1 -0
- package/lib/cjs/update-account-circuit-breaker.js +1 -16
- package/lib/cjs/update-account-circuit-breaker.js.map +1 -1
- package/lib/cjs/update-boost-config.js +1 -16
- package/lib/cjs/update-boost-config.js.map +1 -1
- package/lib/cjs/update-carrier.js +1 -16
- package/lib/cjs/update-carrier.js.map +1 -1
- package/lib/cjs/update-dao.js +1 -16
- package/lib/cjs/update-dao.js.map +1 -1
- package/lib/cjs/update-data-credits.js +1 -16
- package/lib/cjs/update-data-credits.js.map +1 -1
- package/lib/cjs/update-delegated-dc-subdao.js +1 -16
- package/lib/cjs/update-delegated-dc-subdao.js.map +1 -1
- package/lib/cjs/update-lazy-distributor.js +1 -16
- package/lib/cjs/update-lazy-distributor.js.map +1 -1
- package/lib/cjs/update-lazy-transactions.js +1 -16
- package/lib/cjs/update-lazy-transactions.js.map +1 -1
- package/lib/cjs/update-maker.js +1 -16
- package/lib/cjs/update-maker.js.map +1 -1
- package/lib/cjs/update-mint-circuit-breaker.js +1 -16
- package/lib/cjs/update-mint-circuit-breaker.js.map +1 -1
- package/lib/cjs/update-organization.js +101 -0
- package/lib/cjs/update-organization.js.map +1 -0
- package/lib/cjs/update-price-oracle.js +1 -16
- package/lib/cjs/update-price-oracle.js.map +1 -1
- package/lib/cjs/update-proxy-config.js +1 -16
- package/lib/cjs/update-proxy-config.js.map +1 -1
- package/lib/cjs/update-registrar-authorities.js +6 -8
- package/lib/cjs/update-registrar-authorities.js.map +1 -1
- package/lib/cjs/update-rewardable-entity-config.js +5 -17
- package/lib/cjs/update-rewardable-entity-config.js.map +1 -1
- package/lib/cjs/update-subdao-vehnt.js +1 -16
- package/lib/cjs/update-subdao-vehnt.js.map +1 -1
- package/lib/cjs/update-subdao.js +2 -42
- package/lib/cjs/update-subdao.js.map +1 -1
- package/lib/cjs/update-token-metadata.js +17 -24
- package/lib/cjs/update-token-metadata.js.map +1 -1
- package/lib/cjs/upgrade-idl.js +10 -20
- package/lib/cjs/upgrade-idl.js.map +1 -1
- package/lib/cjs/upsert-incentive-program.js +1 -8
- package/lib/cjs/upsert-incentive-program.js.map +1 -1
- package/lib/cjs/utils.js +157 -3
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/src/add-squads-proposer.js +66 -0
- package/lib/esm/src/add-squads-proposer.js.map +1 -0
- package/lib/esm/src/approve-carrier.js +2 -17
- package/lib/esm/src/approve-carrier.js.map +1 -1
- package/lib/esm/src/approve-maker.js +2 -17
- package/lib/esm/src/approve-maker.js.map +1 -1
- package/lib/esm/src/approve-program.js +2 -17
- package/lib/esm/src/approve-program.js.map +1 -1
- package/lib/esm/src/claim-and-close-subscriber-key-to-assets.js +616 -0
- package/lib/esm/src/claim-and-close-subscriber-key-to-assets.js.map +1 -0
- package/lib/esm/src/close-all-subscriber-recipients.js +287 -0
- package/lib/esm/src/close-all-subscriber-recipients.js.map +1 -0
- package/lib/esm/src/close-buffers.js +11 -21
- package/lib/esm/src/close-buffers.js.map +1 -1
- package/lib/esm/src/close-canopy.js +2 -17
- package/lib/esm/src/close-canopy.js.map +1 -1
- package/lib/esm/src/close-legacy-auto-topoff.js +88 -0
- package/lib/esm/src/close-legacy-auto-topoff.js.map +1 -0
- package/lib/esm/src/create-and-approve-makers.js +12 -22
- package/lib/esm/src/create-and-approve-makers.js.map +1 -1
- package/lib/esm/src/create-boost-config.js +2 -14
- package/lib/esm/src/create-boost-config.js.map +1 -1
- package/lib/esm/src/create-common-lut.js +11 -18
- package/lib/esm/src/create-common-lut.js.map +1 -1
- package/lib/esm/src/create-dao.js +13 -23
- package/lib/esm/src/create-dao.js.map +1 -1
- package/lib/esm/src/create-data-only-config.js +11 -18
- package/lib/esm/src/create-data-only-config.js.map +1 -1
- package/lib/esm/src/create-price-oracle.js +8 -7
- package/lib/esm/src/create-price-oracle.js.map +1 -1
- package/lib/esm/src/create-subdao.js +15 -23
- package/lib/esm/src/create-subdao.js.map +1 -1
- package/lib/esm/src/create-tuktuk-dca-lut.js +87 -0
- package/lib/esm/src/create-tuktuk-dca-lut.js.map +1 -0
- package/lib/esm/src/execute-vault-transaction.js +50 -0
- package/lib/esm/src/execute-vault-transaction.js.map +1 -0
- package/lib/esm/src/extend-common-lut.js +22 -25
- package/lib/esm/src/extend-common-lut.js.map +1 -1
- package/lib/esm/src/initialize-tuktuk-dca.js +196 -0
- package/lib/esm/src/initialize-tuktuk-dca.js.map +1 -0
- package/lib/esm/src/issue-iot-operations-fund.js +2 -17
- package/lib/esm/src/issue-iot-operations-fund.js.map +1 -1
- package/lib/esm/src/issue-service-rewards-nft.js +71 -0
- package/lib/esm/src/issue-service-rewards-nft.js.map +1 -0
- package/lib/esm/src/reschedule-all-mini-fanouts.js +3 -5
- package/lib/esm/src/reschedule-all-mini-fanouts.js.map +1 -1
- package/lib/esm/src/reset-vsr-voting-mint.js +2 -17
- package/lib/esm/src/reset-vsr-voting-mint.js.map +1 -1
- package/lib/esm/src/revoke-maker.js +2 -17
- package/lib/esm/src/revoke-maker.js.map +1 -1
- package/lib/esm/src/set-dc-onboarding-fees-paid-epoch-info.js +2 -17
- package/lib/esm/src/set-dc-onboarding-fees-paid-epoch-info.js.map +1 -1
- package/lib/esm/src/set-dc-onboarding-fees-paid.js +2 -17
- package/lib/esm/src/set-dc-onboarding-fees-paid.js.map +1 -1
- package/lib/esm/src/set-proxy-config.js +11 -18
- package/lib/esm/src/set-proxy-config.js.map +1 -1
- package/lib/esm/src/setup-dc-auto-topoff.js +262 -54
- package/lib/esm/src/setup-dc-auto-topoff.js.map +1 -1
- package/lib/esm/src/setup-hst.js +8 -7
- package/lib/esm/src/setup-hst.js.map +1 -1
- package/lib/esm/src/squads-batch-optimizer.js +128 -0
- package/lib/esm/src/squads-batch-optimizer.js.map +1 -0
- package/lib/esm/src/swap-carrier-stake.js +2 -17
- package/lib/esm/src/swap-carrier-stake.js.map +1 -1
- package/lib/esm/src/swap-maker-stake.js +2 -17
- package/lib/esm/src/swap-maker-stake.js.map +1 -1
- package/lib/esm/src/switch-mobile-ops-fund.js +2 -14
- package/lib/esm/src/switch-mobile-ops-fund.js.map +1 -1
- package/lib/esm/src/transfer-program-authorities.js +57 -0
- package/lib/esm/src/transfer-program-authorities.js.map +1 -0
- package/lib/esm/src/update-account-circuit-breaker.js +2 -17
- package/lib/esm/src/update-account-circuit-breaker.js.map +1 -1
- package/lib/esm/src/update-boost-config.js +2 -17
- package/lib/esm/src/update-boost-config.js.map +1 -1
- package/lib/esm/src/update-carrier.js +2 -17
- package/lib/esm/src/update-carrier.js.map +1 -1
- package/lib/esm/src/update-dao.js +2 -17
- package/lib/esm/src/update-dao.js.map +1 -1
- package/lib/esm/src/update-data-credits.js +2 -17
- package/lib/esm/src/update-data-credits.js.map +1 -1
- package/lib/esm/src/update-delegated-dc-subdao.js +2 -17
- package/lib/esm/src/update-delegated-dc-subdao.js.map +1 -1
- package/lib/esm/src/update-lazy-distributor.js +2 -17
- package/lib/esm/src/update-lazy-distributor.js.map +1 -1
- package/lib/esm/src/update-lazy-transactions.js +2 -17
- package/lib/esm/src/update-lazy-transactions.js.map +1 -1
- package/lib/esm/src/update-maker.js +2 -17
- package/lib/esm/src/update-maker.js.map +1 -1
- package/lib/esm/src/update-mint-circuit-breaker.js +2 -17
- package/lib/esm/src/update-mint-circuit-breaker.js.map +1 -1
- package/lib/esm/src/update-organization.js +60 -0
- package/lib/esm/src/update-organization.js.map +1 -0
- package/lib/esm/src/update-price-oracle.js +2 -17
- package/lib/esm/src/update-price-oracle.js.map +1 -1
- package/lib/esm/src/update-proxy-config.js +2 -17
- package/lib/esm/src/update-proxy-config.js.map +1 -1
- package/lib/esm/src/update-registrar-authorities.js +7 -9
- package/lib/esm/src/update-registrar-authorities.js.map +1 -1
- package/lib/esm/src/update-rewardable-entity-config.js +6 -18
- package/lib/esm/src/update-rewardable-entity-config.js.map +1 -1
- package/lib/esm/src/update-subdao-vehnt.js +2 -17
- package/lib/esm/src/update-subdao-vehnt.js.map +1 -1
- package/lib/esm/src/update-subdao.js +4 -44
- package/lib/esm/src/update-subdao.js.map +1 -1
- package/lib/esm/src/update-token-metadata.js +18 -25
- package/lib/esm/src/update-token-metadata.js.map +1 -1
- package/lib/esm/src/upgrade-idl.js +11 -21
- package/lib/esm/src/upgrade-idl.js.map +1 -1
- package/lib/esm/src/upsert-incentive-program.js +2 -9
- package/lib/esm/src/upsert-incentive-program.js.map +1 -1
- package/lib/esm/src/utils.js +148 -3
- package/lib/esm/src/utils.js.map +1 -1
- package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/src/add-squads-proposer.d.ts +2 -0
- package/lib/types/src/add-squads-proposer.d.ts.map +1 -0
- package/lib/types/src/approve-carrier.d.ts.map +1 -1
- package/lib/types/src/approve-maker.d.ts.map +1 -1
- package/lib/types/src/approve-program.d.ts.map +1 -1
- package/lib/types/src/claim-and-close-subscriber-key-to-assets.d.ts +2 -0
- package/lib/types/src/claim-and-close-subscriber-key-to-assets.d.ts.map +1 -0
- package/lib/types/src/close-all-subscriber-recipients.d.ts +2 -0
- package/lib/types/src/close-all-subscriber-recipients.d.ts.map +1 -0
- package/lib/types/src/close-buffers.d.ts.map +1 -1
- package/lib/types/src/close-canopy.d.ts.map +1 -1
- package/lib/types/src/close-legacy-auto-topoff.d.ts +2 -0
- package/lib/types/src/close-legacy-auto-topoff.d.ts.map +1 -0
- package/lib/types/src/create-and-approve-makers.d.ts.map +1 -1
- package/lib/types/src/create-boost-config.d.ts.map +1 -1
- package/lib/types/src/create-common-lut.d.ts.map +1 -1
- package/lib/types/src/create-dao.d.ts.map +1 -1
- package/lib/types/src/create-data-only-config.d.ts.map +1 -1
- package/lib/types/src/create-price-oracle.d.ts.map +1 -1
- package/lib/types/src/create-subdao.d.ts.map +1 -1
- package/lib/types/src/create-tuktuk-dca-lut.d.ts +2 -0
- package/lib/types/src/create-tuktuk-dca-lut.d.ts.map +1 -0
- package/lib/types/src/execute-vault-transaction.d.ts +2 -0
- package/lib/types/src/execute-vault-transaction.d.ts.map +1 -0
- package/lib/types/src/extend-common-lut.d.ts.map +1 -1
- package/lib/types/src/initialize-tuktuk-dca.d.ts +2 -0
- package/lib/types/src/initialize-tuktuk-dca.d.ts.map +1 -0
- package/lib/types/src/issue-iot-operations-fund.d.ts.map +1 -1
- package/lib/types/src/issue-service-rewards-nft.d.ts +2 -0
- package/lib/types/src/issue-service-rewards-nft.d.ts.map +1 -0
- package/lib/types/src/reschedule-all-mini-fanouts.d.ts.map +1 -1
- package/lib/types/src/reset-vsr-voting-mint.d.ts.map +1 -1
- package/lib/types/src/revoke-maker.d.ts.map +1 -1
- package/lib/types/src/set-dc-onboarding-fees-paid-epoch-info.d.ts.map +1 -1
- package/lib/types/src/set-dc-onboarding-fees-paid.d.ts.map +1 -1
- package/lib/types/src/set-proxy-config.d.ts.map +1 -1
- package/lib/types/src/setup-dc-auto-topoff.d.ts.map +1 -1
- package/lib/types/src/setup-hst.d.ts.map +1 -1
- package/lib/types/src/squads-batch-optimizer.d.ts +23 -0
- package/lib/types/src/squads-batch-optimizer.d.ts.map +1 -0
- package/lib/types/src/swap-carrier-stake.d.ts.map +1 -1
- package/lib/types/src/swap-maker-stake.d.ts.map +1 -1
- package/lib/types/src/switch-mobile-ops-fund.d.ts.map +1 -1
- package/lib/types/src/transfer-program-authorities.d.ts +2 -0
- package/lib/types/src/transfer-program-authorities.d.ts.map +1 -0
- package/lib/types/src/update-account-circuit-breaker.d.ts.map +1 -1
- package/lib/types/src/update-boost-config.d.ts.map +1 -1
- package/lib/types/src/update-carrier.d.ts.map +1 -1
- package/lib/types/src/update-dao.d.ts.map +1 -1
- package/lib/types/src/update-data-credits.d.ts.map +1 -1
- package/lib/types/src/update-delegated-dc-subdao.d.ts.map +1 -1
- package/lib/types/src/update-lazy-distributor.d.ts.map +1 -1
- package/lib/types/src/update-lazy-transactions.d.ts.map +1 -1
- package/lib/types/src/update-maker.d.ts.map +1 -1
- package/lib/types/src/update-mint-circuit-breaker.d.ts.map +1 -1
- package/lib/types/src/update-organization.d.ts +2 -0
- package/lib/types/src/update-organization.d.ts.map +1 -0
- package/lib/types/src/update-price-oracle.d.ts.map +1 -1
- package/lib/types/src/update-proxy-config.d.ts.map +1 -1
- package/lib/types/src/update-registrar-authorities.d.ts.map +1 -1
- package/lib/types/src/update-rewardable-entity-config.d.ts.map +1 -1
- package/lib/types/src/update-subdao-vehnt.d.ts.map +1 -1
- package/lib/types/src/update-subdao.d.ts.map +1 -1
- package/lib/types/src/update-token-metadata.d.ts.map +1 -1
- package/lib/types/src/upgrade-idl.d.ts.map +1 -1
- package/lib/types/src/upsert-incentive-program.d.ts.map +1 -1
- package/lib/types/src/utils.d.ts +12 -0
- package/lib/types/src/utils.d.ts.map +1 -1
- package/package.json +16 -15
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import * as anchor from "@coral-xyz/anchor";
|
|
2
|
+
import { keyToAssetForAsset } from "@helium/helium-entity-manager-sdk";
|
|
3
|
+
import { daoKey } from "@helium/helium-sub-daos-sdk";
|
|
4
|
+
import { init as initLazy, lazyDistributorKey, } from "@helium/lazy-distributor-sdk";
|
|
5
|
+
import { init as initRewards } from "@helium/rewards-oracle-sdk";
|
|
6
|
+
import { init as initMem } from "@helium/mobile-entity-manager-sdk";
|
|
7
|
+
import { HNT_MINT, MOBILE_MINT, getAssetBatch, batchInstructionsToTxsWithPriorityFee, bulkSendTransactions, chunks, } from "@helium/spl-utils";
|
|
8
|
+
import { PublicKey } from "@solana/web3.js";
|
|
9
|
+
import bs58 from "bs58";
|
|
10
|
+
import os from "os";
|
|
11
|
+
import pLimit from "p-limit";
|
|
12
|
+
import yargs from "yargs/yargs";
|
|
13
|
+
import { loadKeypair } from "./utils";
|
|
14
|
+
export async function run(args = process.argv) {
|
|
15
|
+
const yarg = yargs(args).options({
|
|
16
|
+
wallet: {
|
|
17
|
+
alias: "k",
|
|
18
|
+
describe: "Anchor wallet keypair",
|
|
19
|
+
default: `${os.homedir()}/.config/solana/id.json`,
|
|
20
|
+
},
|
|
21
|
+
url: {
|
|
22
|
+
alias: "u",
|
|
23
|
+
default: "http://127.0.0.1:8899",
|
|
24
|
+
describe: "The solana url",
|
|
25
|
+
},
|
|
26
|
+
authority: {
|
|
27
|
+
type: "string",
|
|
28
|
+
describe: "Path to the authority keypair. Defaults to wallet.",
|
|
29
|
+
},
|
|
30
|
+
approver: {
|
|
31
|
+
type: "string",
|
|
32
|
+
describe: "Path to the approver keypair (if lazy distributor has approver set)",
|
|
33
|
+
},
|
|
34
|
+
commit: {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
describe: "Actually close accounts. Otherwise dry-run",
|
|
37
|
+
default: false,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const argv = await yarg.argv;
|
|
41
|
+
process.env.ANCHOR_WALLET = argv.wallet;
|
|
42
|
+
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
43
|
+
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
44
|
+
const provider = anchor.getProvider();
|
|
45
|
+
const lazyProgram = await initLazy(provider);
|
|
46
|
+
const rewardsOracleProgram = await initRewards(provider);
|
|
47
|
+
const memProgram = await initMem(provider);
|
|
48
|
+
const authority = argv.authority
|
|
49
|
+
? loadKeypair(argv.authority)
|
|
50
|
+
: loadKeypair(argv.wallet);
|
|
51
|
+
const approver = argv.approver ? loadKeypair(argv.approver) : null;
|
|
52
|
+
const dao = daoKey(HNT_MINT)[0];
|
|
53
|
+
const lazyDistributor = lazyDistributorKey(MOBILE_MINT)[0];
|
|
54
|
+
// Fetch all subscriber collections
|
|
55
|
+
console.log("Fetching CarrierV0 accounts to identify subscriber collections...");
|
|
56
|
+
const carriers = await memProgram.account.carrierV0.all();
|
|
57
|
+
const subscriberCollections = new Set();
|
|
58
|
+
for (const carrier of carriers) {
|
|
59
|
+
subscriberCollections.add(carrier.account.collection.toBase58());
|
|
60
|
+
}
|
|
61
|
+
console.log(` Found ${subscriberCollections.size} subscriber collection(s) from ${carriers.length} carriers\n`);
|
|
62
|
+
console.log("Fetching RecipientV0 accounts for MOBILE lazy distributor using pagination...");
|
|
63
|
+
const PAGE_SIZE = 5000; // Helius supports up to 5k per page for getProgramAccountsV2
|
|
64
|
+
const BATCH_SIZE = 50000; // Process in 50k chunks to avoid memory issues
|
|
65
|
+
let paginationKey = null;
|
|
66
|
+
let page = 0;
|
|
67
|
+
let totalRecipientsFetched = 0;
|
|
68
|
+
let totalSkippedNonSubscriber = 0;
|
|
69
|
+
let currentBatch = [];
|
|
70
|
+
const subscriberRecipients = [];
|
|
71
|
+
async function fetchAssetBatchWithRetry(chunk, maxRetries = 5) {
|
|
72
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
73
|
+
try {
|
|
74
|
+
const result = await getAssetBatch(provider.connection.rpcEndpoint, chunk);
|
|
75
|
+
return result || [];
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
const is429 = err.message?.includes("429") || err.status === 429;
|
|
79
|
+
if (attempt === maxRetries - 1 || !is429) {
|
|
80
|
+
console.error(`Failed to fetch asset batch after ${maxRetries} attempts: ${err.message}`);
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
// Exponential backoff for rate limits
|
|
84
|
+
const delay = Math.min(2000 * Math.pow(2, attempt), 30000);
|
|
85
|
+
console.log(` Rate limited, retrying in ${delay / 1000}s...`);
|
|
86
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
async function processBatch(batch, batchLabel) {
|
|
92
|
+
console.log(`\n--- Processing ${batchLabel} ---`);
|
|
93
|
+
const assetIds = batch.map((r) => r.account.asset);
|
|
94
|
+
console.log(`Fetching ${assetIds.length.toLocaleString()} assets...`);
|
|
95
|
+
// Fetch assets with concurrency control
|
|
96
|
+
const assetChunks = chunks(assetIds, 1000);
|
|
97
|
+
const assetLimiter = pLimit(10);
|
|
98
|
+
let fetchedCount = 0;
|
|
99
|
+
let assetBatchIndex = 0;
|
|
100
|
+
const assetResults = await Promise.all(assetChunks.map((chunk) => assetLimiter(async () => {
|
|
101
|
+
const result = await fetchAssetBatchWithRetry(chunk);
|
|
102
|
+
fetchedCount += chunk.length;
|
|
103
|
+
assetBatchIndex++;
|
|
104
|
+
if (assetBatchIndex % 10 === 0 || fetchedCount >= assetIds.length) {
|
|
105
|
+
console.log(` ${assetBatchIndex} batches: ${fetchedCount.toLocaleString()} assets`);
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
})));
|
|
109
|
+
const assets = assetResults.flat();
|
|
110
|
+
// Filter for subscriber assets
|
|
111
|
+
console.log("Filtering for subscriber assets...");
|
|
112
|
+
let batchNonSubscribers = 0;
|
|
113
|
+
let batchSubscribers = 0;
|
|
114
|
+
batch.forEach((recipient, index) => {
|
|
115
|
+
const asset = assets[index];
|
|
116
|
+
if (!asset) {
|
|
117
|
+
batchNonSubscribers++;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const assetCollection = asset.grouping?.find((g) => g.group_key === "collection")?.group_value;
|
|
121
|
+
if (assetCollection &&
|
|
122
|
+
subscriberCollections.has(assetCollection.toBase58())) {
|
|
123
|
+
subscriberRecipients.push({
|
|
124
|
+
address: recipient.publicKey,
|
|
125
|
+
asset,
|
|
126
|
+
recipientData: recipient.account,
|
|
127
|
+
});
|
|
128
|
+
batchSubscribers++;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
batchNonSubscribers++;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return {
|
|
135
|
+
subscribers: batchSubscribers,
|
|
136
|
+
nonSubscribers: batchNonSubscribers,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Pagination and batch processing loop
|
|
140
|
+
console.log("Fetching recipients with pagination and processing in batches...\n");
|
|
141
|
+
do {
|
|
142
|
+
page++;
|
|
143
|
+
// Fetch next page
|
|
144
|
+
const response = await fetch(provider.connection.rpcEndpoint, {
|
|
145
|
+
method: "POST",
|
|
146
|
+
headers: { "Content-Type": "application/json" },
|
|
147
|
+
body: JSON.stringify({
|
|
148
|
+
jsonrpc: "2.0",
|
|
149
|
+
id: `page-${page}`,
|
|
150
|
+
method: "getProgramAccountsV2",
|
|
151
|
+
params: [
|
|
152
|
+
lazyProgram.programId.toBase58(),
|
|
153
|
+
{
|
|
154
|
+
encoding: "base64",
|
|
155
|
+
filters: [
|
|
156
|
+
{
|
|
157
|
+
memcmp: {
|
|
158
|
+
offset: 8,
|
|
159
|
+
bytes: lazyDistributor.toBase58(),
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
limit: PAGE_SIZE,
|
|
164
|
+
...(paginationKey && { paginationKey }),
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
}),
|
|
168
|
+
});
|
|
169
|
+
const data = await response.json();
|
|
170
|
+
if (data.error) {
|
|
171
|
+
throw new Error(`RPC error: ${data.error.message}`);
|
|
172
|
+
}
|
|
173
|
+
const { result } = data;
|
|
174
|
+
// If no more results, set paginationKey to null to end pagination
|
|
175
|
+
if (!result || !result.accounts || result.accounts.length === 0) {
|
|
176
|
+
paginationKey = null;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// Decode and add to current batch
|
|
180
|
+
const pageRecipients = result.accounts.map((item) => ({
|
|
181
|
+
publicKey: new PublicKey(item.pubkey),
|
|
182
|
+
account: lazyProgram.coder.accounts.decode("recipientV0", Buffer.from(item.account.data[0], "base64")),
|
|
183
|
+
}));
|
|
184
|
+
currentBatch.push(...pageRecipients);
|
|
185
|
+
totalRecipientsFetched += pageRecipients.length;
|
|
186
|
+
if (page % 10 === 0) {
|
|
187
|
+
console.log(` Fetched ${totalRecipientsFetched.toLocaleString()} recipients (batch size: ${currentBatch.length.toLocaleString()})...`);
|
|
188
|
+
}
|
|
189
|
+
paginationKey = result.paginationKey || null;
|
|
190
|
+
}
|
|
191
|
+
// Process batch when we hit BATCH_SIZE or finished pagination
|
|
192
|
+
const shouldProcessBatch = currentBatch.length >= BATCH_SIZE || !paginationKey;
|
|
193
|
+
if (shouldProcessBatch && currentBatch.length > 0) {
|
|
194
|
+
const { subscribers, nonSubscribers } = await processBatch(currentBatch, `batch of ${currentBatch.length.toLocaleString()} recipients`);
|
|
195
|
+
totalSkippedNonSubscriber += nonSubscribers;
|
|
196
|
+
console.log(`Found ${subscriberRecipients.length.toLocaleString()} subscriber recipients so far (${subscribers} subscribers, ${nonSubscribers} non-subscribers in this batch)\n`);
|
|
197
|
+
// Clear current batch to free memory
|
|
198
|
+
currentBatch = [];
|
|
199
|
+
}
|
|
200
|
+
} while (paginationKey);
|
|
201
|
+
console.log(`\n=== Summary ===`);
|
|
202
|
+
console.log(`Processed ${totalRecipientsFetched.toLocaleString()} total RecipientV0 accounts`);
|
|
203
|
+
console.log(`${subscriberRecipients.length.toLocaleString()} are for subscriber assets`);
|
|
204
|
+
console.log(`${totalSkippedNonSubscriber.toLocaleString()} skipped (non-subscriber assets)`);
|
|
205
|
+
if (!argv.commit) {
|
|
206
|
+
console.log(`\nDry run: would close ${subscriberRecipients.length} subscriber recipient accounts. Re-run with --commit to close recipients.`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
if (subscriberRecipients.length === 0) {
|
|
210
|
+
console.log("\nNo subscriber recipient accounts to close.");
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
console.log(`\nClosing ${subscriberRecipients.length.toLocaleString()} recipient accounts...`);
|
|
214
|
+
// Build close instructions
|
|
215
|
+
let failedCount = 0;
|
|
216
|
+
let processed = 0;
|
|
217
|
+
const recipientChunks = chunks(subscriberRecipients, 100);
|
|
218
|
+
const instructionLimiter = pLimit(50);
|
|
219
|
+
const allBatchResults = await Promise.all(recipientChunks.map((chunk) => instructionLimiter(async () => {
|
|
220
|
+
const batchResults = await Promise.all(chunk.map(async (recipient) => {
|
|
221
|
+
try {
|
|
222
|
+
const { address: recipientAddr, asset } = recipient;
|
|
223
|
+
// Compute the KeyToAssetV0 address
|
|
224
|
+
const keyToAsset = keyToAssetForAsset(asset, dao);
|
|
225
|
+
// Extract entity key from asset URI
|
|
226
|
+
const entityKeyStr = asset.content.json_uri.split("/").pop() || "";
|
|
227
|
+
const cleanEntityKeyStr = entityKeyStr.split(/[.?#]/)[0];
|
|
228
|
+
const entityKeyBytes = Buffer.from(bs58.decode(cleanEntityKeyStr));
|
|
229
|
+
// Get oracle_signer PDA
|
|
230
|
+
const [oracleSigner] = PublicKey.findProgramAddressSync([Buffer.from("oracle_signer", "utf-8")], rewardsOracleProgram.programId);
|
|
231
|
+
return await rewardsOracleProgram.methods
|
|
232
|
+
.tempCloseRecipientWrapperV0({
|
|
233
|
+
entityKey: entityKeyBytes,
|
|
234
|
+
asset: new PublicKey(asset.id),
|
|
235
|
+
})
|
|
236
|
+
.accountsPartial({
|
|
237
|
+
lazyDistributor,
|
|
238
|
+
recipient: recipientAddr,
|
|
239
|
+
keyToAsset,
|
|
240
|
+
dao,
|
|
241
|
+
authority: authority.publicKey,
|
|
242
|
+
approver: approver?.publicKey || null,
|
|
243
|
+
oracleSigner,
|
|
244
|
+
lazyDistributorProgram: lazyProgram.programId,
|
|
245
|
+
})
|
|
246
|
+
.instruction();
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
console.error(`Error building instruction for recipient ${recipient.address.toBase58()}: ${err.message}`);
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}));
|
|
253
|
+
processed += chunk.length;
|
|
254
|
+
const validResults = batchResults.filter((i) => i !== null);
|
|
255
|
+
failedCount += chunk.length - validResults.length;
|
|
256
|
+
// Show progress every 1000 recipients or at end
|
|
257
|
+
if (processed % 1000 === 0 ||
|
|
258
|
+
processed === subscriberRecipients.length) {
|
|
259
|
+
console.log(` Prepared ${processed - failedCount} / ${subscriberRecipients.length.toLocaleString()} instructions (${failedCount} failed)...`);
|
|
260
|
+
}
|
|
261
|
+
return batchResults;
|
|
262
|
+
})));
|
|
263
|
+
const instructions = allBatchResults
|
|
264
|
+
.flat()
|
|
265
|
+
.filter((i) => i !== null);
|
|
266
|
+
const instructionCount = instructions.length;
|
|
267
|
+
// Free memory
|
|
268
|
+
subscriberRecipients.length = 0;
|
|
269
|
+
console.log(`\nBatching ${instructionCount.toLocaleString()} instructions into transactions...`);
|
|
270
|
+
const txns = await batchInstructionsToTxsWithPriorityFee(provider, instructions, {
|
|
271
|
+
useFirstEstimateForAll: true,
|
|
272
|
+
computeUnitLimit: 600000,
|
|
273
|
+
});
|
|
274
|
+
// Free memory - instructions now in transactions
|
|
275
|
+
instructions.length = 0;
|
|
276
|
+
console.log(`\nSending ${txns.length} transactions...`);
|
|
277
|
+
// Sign with authority and approver (if present)
|
|
278
|
+
const extraSigners = [authority];
|
|
279
|
+
if (approver) {
|
|
280
|
+
extraSigners.push(approver);
|
|
281
|
+
}
|
|
282
|
+
await bulkSendTransactions(provider, txns, (status) => {
|
|
283
|
+
console.log(`Sending ${status.currentBatchProgress} / ${status.currentBatchSize} in batch. ${status.totalProgress} / ${txns.length}`);
|
|
284
|
+
}, 10, extraSigners);
|
|
285
|
+
console.log(`\n✓ Complete: Closed ${instructionCount} recipient accounts${failedCount > 0 ? ` (${failedCount} failed to build instructions)` : ""}`);
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=close-all-subscriber-recipients.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-all-subscriber-recipients.js","sourceRoot":"","sources":["../../../src/close-all-subscriber-recipients.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EACL,IAAI,IAAI,QAAQ,EAChB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,qCAAqC,EACrC,oBAAoB,EACpB,MAAM,GACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,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,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,oDAAoD;SAC/D;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,qEAAqE;SACxE;QACD,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,4CAA4C;YACtD,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAE7B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAgB,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAa,CAAC;IACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAE/D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;QAC9B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAmB,CAAC;QACvC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,eAAe,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,mCAAmC;IACnC,OAAO,CAAC,GAAG,CACT,mEAAmE,CACpE,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;IAC1D,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;IAChD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;KAClE;IACD,OAAO,CAAC,GAAG,CACT,WAAW,qBAAqB,CAAC,IAAI,kCAAkC,QAAQ,CAAC,MAAM,aAAa,CACpG,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,+EAA+E,CAChF,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,6DAA6D;IACrF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,+CAA+C;IAEzE,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,sBAAsB,GAAG,CAAC,CAAC;IAC/B,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,IAAI,YAAY,GAAU,EAAE,CAAC;IAC7B,MAAM,oBAAoB,GAIpB,EAAE,CAAC;IAET,KAAK,UAAU,wBAAwB,CAAC,KAAkB,EAAE,UAAU,GAAG,CAAC;QACxE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE;YACrD,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAC/B,KAAK,CACN,CAAC;gBACF,OAAO,MAAM,IAAI,EAAE,CAAC;aACrB;YAAC,OAAO,GAAQ,EAAE;gBACjB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;gBACjE,IAAI,OAAO,KAAK,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;oBACxC,OAAO,CAAC,KAAK,CACX,qCAAqC,UAAU,cAAc,GAAG,CAAC,OAAO,EAAE,CAC3E,CAAC;oBACF,OAAO,EAAE,CAAC;iBACX;gBACD,sCAAsC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC;gBAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;aAC5D;SACF;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,UAAU,YAAY,CACzB,KAAY,EACZ,UAAkB;QAElB,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,MAAM,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAEtE,wCAAwC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,KAAK,IAAI,EAAE;YACtB,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,CAAC;YACrD,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;YAC7B,eAAe,EAAE,CAAC;YAElB,IAAI,eAAe,GAAG,EAAE,KAAK,CAAC,IAAI,YAAY,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACjE,OAAO,CAAC,GAAG,CACT,KAAK,eAAe,aAAa,YAAY,CAAC,cAAc,EAAE,SAAS,CACxE,CAAC;aACH;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CACH,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEnC,+BAA+B;QAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,EAAE;gBACV,mBAAmB,EAAE,CAAC;gBACtB,OAAO;aACR;YAED,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAC1C,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CACzC,EAAE,WAAW,CAAC;YAEf,IACE,eAAe;gBACf,qBAAqB,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EACrD;gBACA,oBAAoB,CAAC,IAAI,CAAC;oBACxB,OAAO,EAAE,SAAS,CAAC,SAAS;oBAC5B,KAAK;oBACL,aAAa,EAAE,SAAS,CAAC,OAAO;iBACjC,CAAC,CAAC;gBACH,gBAAgB,EAAE,CAAC;aACpB;iBAAM;gBACL,mBAAmB,EAAE,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,WAAW,EAAE,gBAAgB;YAC7B,cAAc,EAAE,mBAAmB;SACpC,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,OAAO,CAAC,GAAG,CACT,oEAAoE,CACrE,CAAC;IAEF,GAAG;QACD,IAAI,EAAE,CAAC;QAEP,kBAAkB;QAClB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,QAAQ,IAAI,EAAE;gBAClB,MAAM,EAAE,sBAAsB;gBAC9B,MAAM,EAAE;oBACN,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE;oBAChC;wBACE,QAAQ,EAAE,QAAQ;wBAClB,OAAO,EAAE;4BACP;gCACE,MAAM,EAAE;oCACN,MAAM,EAAE,CAAC;oCACT,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE;iCAClC;6BACF;yBACF;wBACD,KAAK,EAAE,SAAS;wBAChB,GAAG,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,CAAC;qBACxC;iBACF;aACF,CAAC;SACH,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;SACrD;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,kEAAkE;QAClE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/D,aAAa,GAAG,IAAI,CAAC;SACtB;aAAM;YACL,kCAAkC;YAClC,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;gBACzD,SAAS,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CACxC,aAAa,EACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAC5C;aACF,CAAC,CAAC,CAAC;YAEJ,YAAY,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YACrC,sBAAsB,IAAI,cAAc,CAAC,MAAM,CAAC;YAEhD,IAAI,IAAI,GAAG,EAAE,KAAK,CAAC,EAAE;gBACnB,OAAO,CAAC,GAAG,CACT,aAAa,sBAAsB,CAAC,cAAc,EAAE,4BAA4B,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAC3H,CAAC;aACH;YAED,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC;SAC9C;QAED,8DAA8D;QAC9D,MAAM,kBAAkB,GACtB,YAAY,CAAC,MAAM,IAAI,UAAU,IAAI,CAAC,aAAa,CAAC;QAEtD,IAAI,kBAAkB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,YAAY,CACxD,YAAY,EACZ,YAAY,YAAY,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAC9D,CAAC;YAEF,yBAAyB,IAAI,cAAc,CAAC;YAE5C,OAAO,CAAC,GAAG,CACT,SAAS,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE,kCAAkC,WAAW,iBAAiB,cAAc,mCAAmC,CACrK,CAAC;YAEF,qCAAqC;YACrC,YAAY,GAAG,EAAE,CAAC;SACnB;KACF,QAAQ,aAAa,EAAE;IAExB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CACT,aAAa,sBAAsB,CAAC,cAAc,EAAE,6BAA6B,CAClF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,GAAG,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE,4BAA4B,CAC5E,CAAC;IACF,OAAO,CAAC,GAAG,CACT,GAAG,yBAAyB,CAAC,cAAc,EAAE,kCAAkC,CAChF,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChB,OAAO,CAAC,GAAG,CACT,0BAA0B,oBAAoB,CAAC,MAAM,2EAA2E,CACjI,CAAC;QACF,OAAO;KACR;IAED,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;KACR;IAED,OAAO,CAAC,GAAG,CACT,aAAa,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAClF,CAAC;IAEF,2BAA2B;IAC3B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,eAAe,GAAG,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,kBAAkB,CAAC,KAAK,IAAI,EAAE;QAC5B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC5B,IAAI;gBACF,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;gBAEpD,mCAAmC;gBACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAElD,oCAAoC;gBACpC,MAAM,YAAY,GAChB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAChD,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAChC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAC/B,CAAC;gBAEF,wBAAwB;gBACxB,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,sBAAsB,CACrD,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,EACvC,oBAAoB,CAAC,SAAS,CAC/B,CAAC;gBAEF,OAAO,MAAM,oBAAoB,CAAC,OAAO;qBACtC,2BAA2B,CAAC;oBAC3B,SAAS,EAAE,cAAc;oBACzB,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;iBAC/B,CAAC;qBACD,eAAe,CAAC;oBACf,eAAe;oBACf,SAAS,EAAE,aAAa;oBACxB,UAAU;oBACV,GAAG;oBACH,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,QAAQ,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI;oBACrC,YAAY;oBACZ,sBAAsB,EAAE,WAAW,CAAC,SAAS;iBAC9C,CAAC;qBACD,WAAW,EAAE,CAAC;aAClB;YAAC,OAAO,GAAQ,EAAE;gBACjB,OAAO,CAAC,KAAK,CACX,4CAA4C,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,KACtE,GAAG,CAAC,OACN,EAAE,CACH,CAAC;gBACF,OAAO,IAAI,CAAC;aACb;QACH,CAAC,CAAC,CACH,CAAC;QAEF,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC5D,WAAW,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAElD,gDAAgD;QAChD,IACE,SAAS,GAAG,IAAI,KAAK,CAAC;YACtB,SAAS,KAAK,oBAAoB,CAAC,MAAM,EACzC;YACA,OAAO,CAAC,GAAG,CACT,cACE,SAAS,GAAG,WACd,MAAM,oBAAoB,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,WAAW,aAAa,CAC7F,CAAC;SACH;QAED,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC,CACH,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,eAAe;SACjC,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,CAAC,EAA+B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAE1D,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC;IAE7C,cAAc;IACd,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CACT,cAAc,gBAAgB,CAAC,cAAc,EAAE,oCAAoC,CACpF,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,qCAAqC,CACtD,QAAQ,EACR,YAAY,EACZ;QACE,sBAAsB,EAAE,IAAI;QAC5B,gBAAgB,EAAE,MAAM;KACzB,CACF,CAAC;IAEF,iDAAiD;IACjD,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAExB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAExD,gDAAgD;IAChD,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,QAAQ,EAAE;QACZ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC7B;IAED,MAAM,oBAAoB,CACxB,QAAQ,EACR,IAAI,EACJ,CAAC,MAAM,EAAE,EAAE;QACT,OAAO,CAAC,GAAG,CACT,WAAW,MAAM,CAAC,oBAAoB,MAAM,MAAM,CAAC,gBAAgB,cAAc,MAAM,CAAC,aAAa,MAAM,IAAI,CAAC,MAAM,EAAE,CACzH,CAAC;IACJ,CAAC,EACD,EAAE,EACF,YAAY,CACb,CAAC;IAEF,OAAO,CAAC,GAAG,CACT,wBAAwB,gBAAgB,sBACtC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,gCAAgC,CAAC,CAAC,CAAC,EACvE,EAAE,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as anchor from '@coral-xyz/anchor';
|
|
2
2
|
import { PublicKey } from '@solana/web3.js';
|
|
3
|
-
import
|
|
3
|
+
import * as multisig from '@sqds/multisig';
|
|
4
4
|
import os from 'os';
|
|
5
5
|
import yargs from 'yargs/yargs';
|
|
6
|
-
import { createCloseBufferInstruction, loadKeypair,
|
|
6
|
+
import { createCloseBufferInstruction, loadKeypair, sendInstructionsOrSquadsV4, } from './utils';
|
|
7
7
|
import { BPF_UPGRADE_LOADER_ID } from '@solana/spl-governance';
|
|
8
8
|
import bs58 from 'bs58';
|
|
9
9
|
export async function run(args = process.argv) {
|
|
@@ -18,18 +18,10 @@ export async function run(args = process.argv) {
|
|
|
18
18
|
default: 'http://127.0.0.1:8899',
|
|
19
19
|
describe: 'The solana url',
|
|
20
20
|
},
|
|
21
|
-
executeTransaction: {
|
|
22
|
-
type: 'boolean',
|
|
23
|
-
},
|
|
24
21
|
multisig: {
|
|
25
22
|
type: 'string',
|
|
26
23
|
describe: 'Address of the squads multisig to be authority. If not provided, your wallet will be the authority',
|
|
27
24
|
},
|
|
28
|
-
authorityIndex: {
|
|
29
|
-
type: 'number',
|
|
30
|
-
describe: 'Authority index for squads. Defaults to 1',
|
|
31
|
-
default: 1,
|
|
32
|
-
},
|
|
33
25
|
programId: {
|
|
34
26
|
type: 'string',
|
|
35
27
|
required: true,
|
|
@@ -42,13 +34,14 @@ export async function run(args = process.argv) {
|
|
|
42
34
|
const provider = anchor.getProvider();
|
|
43
35
|
const wallet = new anchor.Wallet(loadKeypair(argv.wallet));
|
|
44
36
|
const connection = provider.connection;
|
|
45
|
-
const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
|
|
46
|
-
commitmentOrConfig: 'finalized',
|
|
47
|
-
});
|
|
48
37
|
let authority = provider.wallet.publicKey;
|
|
49
|
-
let
|
|
50
|
-
if (
|
|
51
|
-
|
|
38
|
+
let multisigPda = argv.multisig ? new PublicKey(argv.multisig) : null;
|
|
39
|
+
if (multisigPda) {
|
|
40
|
+
const [vaultPda] = multisig.getVaultPda({
|
|
41
|
+
multisigPda,
|
|
42
|
+
index: 0,
|
|
43
|
+
});
|
|
44
|
+
authority = vaultPda;
|
|
52
45
|
}
|
|
53
46
|
console.log(authority.toBase58());
|
|
54
47
|
const buffers = (await connection.getProgramAccounts(BPF_UPGRADE_LOADER_ID, {
|
|
@@ -78,13 +71,10 @@ export async function run(args = process.argv) {
|
|
|
78
71
|
],
|
|
79
72
|
})).map((b) => b.pubkey);
|
|
80
73
|
const instructions = await Promise.all(buffers.map((b) => createCloseBufferInstruction(new PublicKey(argv.programId), b, authority, provider.wallet.publicKey)));
|
|
81
|
-
await
|
|
74
|
+
await sendInstructionsOrSquadsV4({
|
|
82
75
|
provider,
|
|
83
76
|
instructions,
|
|
84
|
-
|
|
85
|
-
squads,
|
|
86
|
-
multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
|
|
87
|
-
authorityIndex: argv.authorityIndex,
|
|
77
|
+
multisig: multisigPda,
|
|
88
78
|
signers: [],
|
|
89
79
|
});
|
|
90
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-buffers.js","sourceRoot":"","sources":["../../../src/close-buffers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"close-buffers.js","sourceRoot":"","sources":["../../../src/close-buffers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as anchor from '@coral-xyz/anchor';
|
|
2
2
|
import { PublicKey } from '@solana/web3.js';
|
|
3
|
-
import Squads from '@sqds/sdk';
|
|
4
3
|
import os from 'os';
|
|
5
4
|
import yargs from 'yargs/yargs';
|
|
6
|
-
import { loadKeypair,
|
|
5
|
+
import { loadKeypair, sendInstructionsOrSquadsV4, } from './utils';
|
|
7
6
|
import { init, lazyTransactionsKey } from '@helium/lazy-transactions-sdk';
|
|
8
7
|
export async function run(args = process.argv) {
|
|
9
8
|
const yarg = yargs(args).options({
|
|
@@ -22,18 +21,10 @@ export async function run(args = process.argv) {
|
|
|
22
21
|
type: 'string',
|
|
23
22
|
describe: 'Lazy dist name',
|
|
24
23
|
},
|
|
25
|
-
executeTransaction: {
|
|
26
|
-
type: 'boolean',
|
|
27
|
-
},
|
|
28
24
|
multisig: {
|
|
29
25
|
type: 'string',
|
|
30
26
|
describe: 'Address of the squads multisig to be authority. If not provided, your wallet will be the authority',
|
|
31
27
|
},
|
|
32
|
-
authorityIndex: {
|
|
33
|
-
type: 'number',
|
|
34
|
-
describe: 'Authority index for squads. Defaults to 1',
|
|
35
|
-
default: 1,
|
|
36
|
-
},
|
|
37
28
|
});
|
|
38
29
|
const argv = await yarg.argv;
|
|
39
30
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
@@ -51,16 +42,10 @@ export async function run(args = process.argv) {
|
|
|
51
42
|
refund: provider.wallet.publicKey,
|
|
52
43
|
})
|
|
53
44
|
.instruction());
|
|
54
|
-
|
|
55
|
-
commitmentOrConfig: 'finalized',
|
|
56
|
-
});
|
|
57
|
-
await sendInstructionsOrSquads({
|
|
45
|
+
await sendInstructionsOrSquadsV4({
|
|
58
46
|
provider,
|
|
59
47
|
instructions,
|
|
60
|
-
executeTransaction: argv.executeTransaction,
|
|
61
|
-
squads,
|
|
62
48
|
multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
|
|
63
|
-
authorityIndex: argv.authorityIndex,
|
|
64
49
|
signers: [],
|
|
65
50
|
});
|
|
66
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"close-canopy.js","sourceRoot":"","sources":["../../../src/close-canopy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"close-canopy.js","sourceRoot":"","sources":["../../../src/close-canopy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,WAAW,EAEX,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAY,OAAO,CAAC,IAAI;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE;YACN,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,yBAAyB;SAClD;QACD,GAAG,EAAE;YACH,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,gBAAgB;SAC3B;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,gBAAgB;SAC3B;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,oGAAoG;SACvG;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,YAAY,GAA6B,EAAE,CAAC;IAElD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,YAAY,CAAC,IAAI,CACf,MAAM,OAAO,CAAC,OAAO;SAClB,aAAa,EAAE;SACf,eAAe,CAAC;QACf,gBAAgB;QAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;KAClC,CAAC;SACD,WAAW,EAAE,CACjB,CAAC;IAEF,MAAM,0BAA0B,CAAC;QAC/B,QAAQ;QACR,YAAY;QACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAClE,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as anchor from "@coral-xyz/anchor";
|
|
2
|
+
import { delegatedDataCreditsKey } from "@helium/data-credits-sdk";
|
|
3
|
+
import { autoTopOffKey, init as initDcAutoTopoff, } from "@helium/dc-auto-top-sdk";
|
|
4
|
+
import { subDaoKey } from "@helium/helium-sub-daos-sdk";
|
|
5
|
+
import { DC_MINT, HNT_MINT, MOBILE_MINT } from "@helium/spl-utils";
|
|
6
|
+
import { createAssociatedTokenAccountIdempotentInstruction, getAssociatedTokenAddressSync, } from "@solana/spl-token";
|
|
7
|
+
import { PublicKey } from "@solana/web3.js";
|
|
8
|
+
import os from "os";
|
|
9
|
+
import yargs from "yargs/yargs";
|
|
10
|
+
import { sendInstructionsOrSquads, } from "./utils";
|
|
11
|
+
import Squads from "@sqds/sdk";
|
|
12
|
+
export async function run(args = process.argv) {
|
|
13
|
+
const yarg = yargs(args).options({
|
|
14
|
+
wallet: {
|
|
15
|
+
alias: "k",
|
|
16
|
+
describe: "Anchor wallet keypair",
|
|
17
|
+
default: `${os.homedir()}/.config/solana/id.json`,
|
|
18
|
+
},
|
|
19
|
+
url: {
|
|
20
|
+
alias: "u",
|
|
21
|
+
default: "http://127.0.0.1:8899",
|
|
22
|
+
describe: "The solana url",
|
|
23
|
+
},
|
|
24
|
+
hntMint: {
|
|
25
|
+
type: "string",
|
|
26
|
+
describe: "Pubkey of the HNT token",
|
|
27
|
+
default: HNT_MINT.toBase58(),
|
|
28
|
+
},
|
|
29
|
+
dcMint: {
|
|
30
|
+
type: "string",
|
|
31
|
+
describe: "Pubkey of the Data Credit token",
|
|
32
|
+
default: DC_MINT.toBase58(),
|
|
33
|
+
},
|
|
34
|
+
routerKey: {
|
|
35
|
+
type: "string",
|
|
36
|
+
describe: "The router key for the delegated data credits",
|
|
37
|
+
required: true,
|
|
38
|
+
},
|
|
39
|
+
subDaoMint: {
|
|
40
|
+
type: "string",
|
|
41
|
+
describe: "The sub dao mint for the delegated data credits",
|
|
42
|
+
default: MOBILE_MINT.toBase58(),
|
|
43
|
+
},
|
|
44
|
+
multisig: {
|
|
45
|
+
type: "string",
|
|
46
|
+
describe: "Address of the squads multisig to be authority. If not provided, your wallet will be the authority",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
const argv = await yarg.argv;
|
|
50
|
+
process.env.ANCHOR_WALLET = argv.wallet;
|
|
51
|
+
process.env.ANCHOR_PROVIDER_URL = argv.url;
|
|
52
|
+
anchor.setProvider(anchor.AnchorProvider.local(argv.url));
|
|
53
|
+
const subDaoMint = new PublicKey(argv.subDaoMint);
|
|
54
|
+
const subDao = subDaoKey(subDaoMint)[0];
|
|
55
|
+
const dcMint = new PublicKey(argv.dcMint);
|
|
56
|
+
const provider = anchor.getProvider();
|
|
57
|
+
const dcAutoTopoffProgram = await initDcAutoTopoff(provider);
|
|
58
|
+
let authority = provider.wallet.publicKey;
|
|
59
|
+
const squads = new Squads({
|
|
60
|
+
connection: provider.connection,
|
|
61
|
+
wallet: provider.wallet,
|
|
62
|
+
});
|
|
63
|
+
let multisigPda = argv.multisig ? new PublicKey(argv.multisig) : null;
|
|
64
|
+
if (multisigPda) {
|
|
65
|
+
authority = squads.getAuthorityPDA(multisigPda, 1);
|
|
66
|
+
}
|
|
67
|
+
const routerKey = argv.routerKey;
|
|
68
|
+
const delegatedDc = delegatedDataCreditsKey(subDao, routerKey)[0];
|
|
69
|
+
const autoTopOff = autoTopOffKey(delegatedDc, authority)[0];
|
|
70
|
+
const createDcAtaIx = createAssociatedTokenAccountIdempotentInstruction(authority, getAssociatedTokenAddressSync(dcMint, authority, true), authority, dcMint);
|
|
71
|
+
const closeLegacyIx = await dcAutoTopoffProgram.methods
|
|
72
|
+
.closeLegacyAutoTopOff()
|
|
73
|
+
.accounts({
|
|
74
|
+
delegatedDataCredits: delegatedDc,
|
|
75
|
+
dcAccount: getAssociatedTokenAddressSync(dcMint, autoTopOff, true),
|
|
76
|
+
})
|
|
77
|
+
.instruction();
|
|
78
|
+
await sendInstructionsOrSquads({
|
|
79
|
+
provider,
|
|
80
|
+
instructions: [createDcAtaIx, closeLegacyIx],
|
|
81
|
+
multisig: multisigPda,
|
|
82
|
+
signers: [],
|
|
83
|
+
authorityIndex: 1,
|
|
84
|
+
executeTransaction: false,
|
|
85
|
+
squads,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=close-legacy-auto-topoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-legacy-auto-topoff.js","sourceRoot":"","sources":["../../../src/close-legacy-auto-topoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ import { Keypair, PublicKey, SystemProgram, } from '@solana/web3.js';
|
|
|
10
10
|
import fs from 'fs';
|
|
11
11
|
import os from 'os';
|
|
12
12
|
import yargs from 'yargs/yargs';
|
|
13
|
-
import { exists, loadKeypair,
|
|
14
|
-
import
|
|
13
|
+
import { exists, loadKeypair, sendInstructionsOrSquadsV4, merkleSizes, } from './utils';
|
|
14
|
+
import * as multisig from '@sqds/multisig';
|
|
15
15
|
export async function run(args = process.argv) {
|
|
16
16
|
const yarg = yargs(args).options({
|
|
17
17
|
wallet: {
|
|
@@ -19,9 +19,6 @@ export async function run(args = process.argv) {
|
|
|
19
19
|
describe: 'Anchor wallet keypair',
|
|
20
20
|
default: `${os.homedir()}/.config/solana/id.json`,
|
|
21
21
|
},
|
|
22
|
-
executeTransaction: {
|
|
23
|
-
type: 'boolean',
|
|
24
|
-
},
|
|
25
22
|
url: {
|
|
26
23
|
alias: 'u',
|
|
27
24
|
default: 'http://127.0.0.1:8899',
|
|
@@ -75,11 +72,6 @@ export async function run(args = process.argv) {
|
|
|
75
72
|
type: 'string',
|
|
76
73
|
describe: 'Address of the squads multisig to be authority. If not provided, your wallet will be the authority',
|
|
77
74
|
},
|
|
78
|
-
authorityIndex: {
|
|
79
|
-
type: 'number',
|
|
80
|
-
describe: 'Authority index for squads. Defaults to 1',
|
|
81
|
-
default: 1,
|
|
82
|
-
},
|
|
83
75
|
});
|
|
84
76
|
const argv = await yarg.argv;
|
|
85
77
|
process.env.ANCHOR_WALLET = argv.wallet;
|
|
@@ -120,13 +112,14 @@ export async function run(args = process.argv) {
|
|
|
120
112
|
const dao = await hsdProgram.account.daoV0.fetch(subdaoAcc.dao);
|
|
121
113
|
let subdaoPayer = provider.wallet.publicKey;
|
|
122
114
|
let daoPayer = provider.wallet.publicKey;
|
|
123
|
-
const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
|
|
124
|
-
commitmentOrConfig: 'finalized',
|
|
125
|
-
});
|
|
126
115
|
let authority = provider.wallet.publicKey;
|
|
127
|
-
let
|
|
128
|
-
if (
|
|
129
|
-
|
|
116
|
+
let multisigPda = argv.multisig ? new PublicKey(argv.multisig) : null;
|
|
117
|
+
if (multisigPda) {
|
|
118
|
+
const [vaultPda] = multisig.getVaultPda({
|
|
119
|
+
multisigPda,
|
|
120
|
+
index: 0,
|
|
121
|
+
});
|
|
122
|
+
authority = vaultPda;
|
|
130
123
|
subdaoPayer = authority;
|
|
131
124
|
daoPayer = authority;
|
|
132
125
|
console.log('SQUAD AUTH', authority.toBase58());
|
|
@@ -257,19 +250,16 @@ export async function run(args = process.argv) {
|
|
|
257
250
|
approveInstructions.push(innerApproveInstrs);
|
|
258
251
|
}
|
|
259
252
|
console.log('Total sol needed: ', humanReadable(new anchor.BN(totalSol), 9));
|
|
260
|
-
if (
|
|
253
|
+
if (multisigPda) {
|
|
261
254
|
// Approve instructions must execute after ALL create instructions
|
|
262
255
|
const instrs = createInstructions.flat().filter(truthy);
|
|
263
256
|
const approveInstrs = approveInstructions.flat().filter(truthy);
|
|
264
257
|
for (const chunk of chunks([...instrs, ...approveInstrs], 3)) {
|
|
265
|
-
await
|
|
258
|
+
await sendInstructionsOrSquadsV4({
|
|
266
259
|
provider,
|
|
267
260
|
instructions: chunk,
|
|
268
261
|
signers: [],
|
|
269
|
-
|
|
270
|
-
squads,
|
|
271
|
-
multisig,
|
|
272
|
-
authorityIndex: argv.authorityIndex,
|
|
262
|
+
multisig: multisigPda,
|
|
273
263
|
});
|
|
274
264
|
}
|
|
275
265
|
}
|