@mihalex/farms-sdk-tests
Version:
240 lines • 13.8 kB
JavaScript
;
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