fix: распаковать источник из обёртки smart-updown в корень ветки
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { Connection, clusterApiUrl, Keypair, PublicKey } from "@solana/web3.js";
|
||||
import * as fs from "fs";
|
||||
import * as os from "os";
|
||||
import * as path from "path";
|
||||
|
||||
export const SIDE_UP = 0;
|
||||
export const SIDE_DOWN = 1;
|
||||
|
||||
/**
|
||||
* Runtime configuration. Everything can be overridden via environment
|
||||
* variables; defaults target the local validator.
|
||||
*/
|
||||
export interface Config {
|
||||
/** RPC endpoint of the cluster (localnet by default). */
|
||||
rpcUrl: string;
|
||||
/** Localnet allows naive airdrops (to bettors and the house vault). */
|
||||
allowAirdrop: boolean;
|
||||
/** Program id. Defaults to the value embedded in the IDL. */
|
||||
programId: PublicKey;
|
||||
/** House admin/relayer keypair file path. */
|
||||
adminKeypairPath: string;
|
||||
/** Initial parameters used by `init` (must match on-chain constants). */
|
||||
minAmountLamports: number;
|
||||
maxAmountLamports: number;
|
||||
multiplierBps: number;
|
||||
expirySeconds: number;
|
||||
}
|
||||
|
||||
function env(name: string, fallback: string): string {
|
||||
return process.env[name] ?? fallback;
|
||||
}
|
||||
|
||||
function envNum(name: string, fallback: number): number {
|
||||
const raw = process.env[name];
|
||||
if (!raw) return fallback;
|
||||
const n = Number(raw);
|
||||
if (!Number.isFinite(n)) throw new Error(`Invalid number for env ${name}: ${raw}`);
|
||||
return n;
|
||||
}
|
||||
|
||||
export function loadConfig(): Config {
|
||||
const rpcUrl = env("SMART_RPC_URL", "http://127.0.0.1:8899");
|
||||
const allowAirdrop = env("SMART_ALLOW_AIRDROP", "1") === "1";
|
||||
const adminKeypairPath =
|
||||
env("SMART_ADMIN_KEYPAIR", path.join(os.homedir(), ".config/solana/id.json"));
|
||||
|
||||
return {
|
||||
rpcUrl,
|
||||
allowAirdrop,
|
||||
programId: PublicKey.default, // placeholder; real value read from the IDL below
|
||||
adminKeypairPath,
|
||||
minAmountLamports: envNum("SMART_MIN_AMOUNT", 100_000_000), // 0.1 SOL
|
||||
maxAmountLamports: envNum("SMART_MAX_AMOUNT", 10_000_000_000), // 10 SOL
|
||||
multiplierBps: envNum("SMART_MULTIPLIER_BPS", 13_000), // 1.3x
|
||||
expirySeconds: envNum("SMART_EXPIRY_SECONDS", 15),
|
||||
};
|
||||
}
|
||||
|
||||
export function loadKeypair(pathOrJson: string): Keypair {
|
||||
const resolved = pathOrJson.startsWith("~")
|
||||
? path.join(os.homedir(), pathOrJson.slice(1))
|
||||
: path.resolve(pathOrJson);
|
||||
const raw = fs.readFileSync(resolved, "utf8");
|
||||
return Keypair.fromSecretKey(Uint8Array.from(JSON.parse(raw)));
|
||||
}
|
||||
Reference in New Issue
Block a user