UNPKG

@mihalex/farms-sdk-tests

Version:
240 lines 13.8 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const setup = __importStar(require("./utils/setup")); const anchor = __importStar(require("@coral-xyz/anchor")); const commander_1 = require("commander"); const utils = __importStar(require("./utils/utils")); const market_1 = require("@project-serum/serum/lib/market"); const decimal_js_1 = __importDefault(require("decimal.js")); const utils_1 = require("./utils/utils"); const web3_js_1 = require("@solana/web3.js"); const setup_1 = require("./utils/setup"); const types_1 = require("./rpc_client/types"); const GlobalConfig_1 = require("./rpc_client/accounts/GlobalConfig"); const accounts_1 = require("./rpc_client/accounts"); const Farms_1 = require("./Farms"); const bs58 = require("bs58"); const fs = require("fs"); const BaseMintOptions = ["base-mint", "base-mint-file", "init-base-mint"]; async function main() { const commands = new commander_1.Command(); commands .name("farms-cli") .description("CLI to interact with the farms program"); // DEBUG=true yarn ts-node farms-sdk/src/client.ts init-global-config --admin keys/localnet/owner.json --cluster localnet commands .command("init-global-config") .description("Create a new global_config") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .action(async ({ admin, cluster }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const globalConfig = web3_js_1.Keypair.generate(); const farmsClient = new Farms_1.Farms(env.provider.connection); await farmsClient.createGlobalConfig(env.initialOwner, globalConfig); let globalConfigState = await GlobalConfig_1.GlobalConfig.fetch(env.provider.connection, globalConfig.publicKey); console.log("Global Config", globalConfig.publicKey.toString(), globalConfigState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts update-global-config --admin keys/localnet/owner.json --cluster localnet --global-config <key> --mode-name <mode> --flag-value-type number|bool|publicKey --flag-value <value> commands .command("update-global-config") .description("Update an existing global_config") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option("--global-config, <string>", "Global config for given cluster") .option("--mode-name <string>", "The mode", "") .option("--flag-value-type <string>", "The type of value: number|bool|publicKey") .option("--flag-value <string>", "The value of the field to be set in GlobalConfig") .action(async ({ admin, cluster, globalConfig, modeName, flagValueType, flagValue, }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); let globalConfigPk = new web3_js_1.PublicKey(globalConfig); await updateGlobalConfig(env, globalConfigPk, modeName, flagValueType, flagValue); let globalConfigState = await GlobalConfig_1.GlobalConfig.fetch(env.provider.connection, new web3_js_1.PublicKey(globalConfig)); console.log("Global Config", globalConfigState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts init-farm --admin keys/localnet/owner.json --cluster localnet --global-config <key> --token-mint <key> commands .command("init-farm") .description("Create a new farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option("--global-config, <string>", "Global config for given cluster") .option("--token-mint, <string>", "Token mint for farm token") .action(async ({ admin, cluster, globalConfig, tokenMint }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); let farmAccounts = await setup.setUpFarm(env, new web3_js_1.PublicKey(globalConfig), new web3_js_1.PublicKey(tokenMint), env.initialOwner); let farmState = await accounts_1.FarmState.fetch(env.provider.connection, farmAccounts.farmState.publicKey); console.log("Farm State", farmState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts init-reward --admin keys/localnet/owner.json --cluster localnet --farm <key> --global-config <key> --reward-mint <key> commands .command("init-reward") .description("Add a new reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option("--farm, <string>", "The Farm account") .option("--global-config, <string>", "Global config for given cluster") .option("--reward-mint, <string>", "Token mint for farm token") .action(async ({ admin, cluster, farm, globalConfig, rewardMint, }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const farmsClient = new Farms_1.Farms(env.provider.connection); await farmsClient.addRewardToFarm(env.initialOwner, new web3_js_1.PublicKey(globalConfig), new web3_js_1.PublicKey(farm), new web3_js_1.PublicKey(rewardMint)); let farmState = await accounts_1.FarmState.fetch(env.provider.connection, new web3_js_1.PublicKey(farm)); console.log("Farm State", farmState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts update-reward-config --admin keys/localnet/owner.json --cluster localnet --farm <key> --reward-mint <key> --mode-name <modeName> --flag-value <number> commands .command("update-reward-config") .description("Update config of an existing reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option("--farm, <string>", "The Farm account") .option("--reward-mint, <string>", "Mint for desired reward token") .option("--mode-name <string>", "The mode name", "0") .option("--flag-value <number>", "The value of the field to be set in rewardInfos, must be a number") .action(async ({ admin, cluster, farm, rewardMint, modeName, flagValue, }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const farmsClient = new Farms_1.Farms(env.provider.connection); await farmsClient.updateRewardToFarm(env.initialOwner, new web3_js_1.PublicKey(farm), new web3_js_1.PublicKey(rewardMint), types_1.FarmConfigOption.fromDecoded({ [modeName]: "" }), flagValue); let farmState = await accounts_1.FarmState.fetch(env.provider.connection, new web3_js_1.PublicKey(farm)); console.log("Farm State", farmState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts add-reward --admin keys/localnet/owner.json --cluster localnet --farm <key> --reward-mint <key> --amount <number> commands .command("add-reward") .description("Add reward tokens to vault of existing reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option("--farm, <string>", "The Farm account") .option("--reward-mint, <string>", "Mint for desired reward token") .option("--amount, <number>", "Amount of reward tokens to add to vault") .action(async ({ admin, cluster, farm, rewardMint, amount }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const farmsClient = new Farms_1.Farms(env.provider.connection); await farmsClient.addRewardAmountToFarm(env.initialOwner, new web3_js_1.PublicKey(farm), new web3_js_1.PublicKey(rewardMint), new decimal_js_1.default(amount)); let farmState = await accounts_1.FarmState.fetch(env.provider.connection, new web3_js_1.PublicKey(farm)); console.log("Farm State", farmState?.toJSON()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts create-mint --admin keys/localnet/owner.json --cluster localnet commands .command("create-mint") .description("Add reward tokens to vault of existing reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .action(async ({ admin, cluster }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const tokenMint = new anchor.web3.Keypair(); await (0, utils_1.createMintFromKeypair)(env.provider, env.initialOwner.publicKey, tokenMint); console.log("new mint: ", tokenMint.publicKey.toString()); }); // DEBUG=true yarn ts-node farms-sdk/src/client.ts setup-ata --admin keys/localnet/owner.json --cluster localnet --mint <key> commands .command("setup-ata") .description("Add reward tokens to vault of existing reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option(`--mint <string>`, "The Mint to use") .action(async ({ admin, cluster, mint }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const tokenMint = new web3_js_1.PublicKey(mint); const ata = await utils.setupAta(env.provider, tokenMint, env.initialOwner); console.log("new ata: ", ata.toString()); }); // npx ts-node farms-sdk/src/client.ts mint-token --admin keys/localnet/owner.json --cluster localnet --mint <key> --amount 100 commands .command("mint-token") .description("Add reward tokens to vault of existing reward for an existing farm") .option(`--admin <string>`, "The admin keypair file") .option(`--cluster <string>`, "The Solana cluster to use") .option(`--mint <string>`, "The Mint to use") .option(`--amount <string>`, "The amount to reward") .action(async ({ admin, cluster, mint, amount }) => { const env = initializeClient(cluster, admin, utils.getFarmsProgramId(cluster)); const tokenMint = new web3_js_1.PublicKey(mint); const adminAta = await (0, utils_1.getAssociatedTokenAddress)(env.initialOwner.publicKey, tokenMint); const mintDecimals = await (0, market_1.getMintDecimals)(env.provider.connection, tokenMint); const amountLamports = (0, utils_1.collToLamportsDecimal)(new decimal_js_1.default(amount), mintDecimals); await utils.mintTo(env.provider, tokenMint, adminAta, amountLamports.toNumber()); console.log("success"); }); await commands.parseAsync(); } main() .then(() => { console.log("\n\nSuccess"); process.exit(); }) .catch((e) => { console.error("\n\nFarms CLI exited with error:\n\n", e); process.exit(1); }); function initializeClient(cluster, admin, programId) { let resolvedCluster; let resolvedAdmin; if (cluster) { resolvedCluster = cluster; console.log("Cluster", cluster); } else { throw "Must specify cluster"; } if (admin) { resolvedAdmin = admin; } else { throw "Must specify admin"; } // Get connection first const env = (0, setup_1.setUpProgram)({ adminFilePath: admin, clusterOverride: cluster, programOverride: programId, }); console.log("Program ID:", env.program.programId.toString()); console.log("Admin:", resolvedAdmin); console.log("Cluster:", resolvedCluster); return env; } async function updateGlobalConfig(env, globalConfig, modeName, flagValueType, flagValue) { if (flagValueType != "number" && flagValueType != "bool" && flagValueType != "boolean" && flagValueType != "publicKey") { throw new Error("The type is invalid, it should be 'number', 'bool' or 'publicKey"); } const farmsClient = new Farms_1.Farms(env.provider.connection); await farmsClient.updateGlobalConfig(env.initialOwner, globalConfig, types_1.GlobalConfigOption.fromDecoded({ [modeName]: "" }), flagValue, flagValueType); console.log("Update Global Config: " + globalConfig.toString() + " mode: " + modeName + " value: " + flagValue); } //# sourceMappingURL=client.js.map