fix: распаковать источник из обёртки smart-updown в корень ветки

This commit is contained in:
2026-09-02 15:36:21 +03:00
parent a9d54feab6
commit 5cf3a7a8d1
35 changed files with 0 additions and 0 deletions
+65
View File
@@ -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)));
}