UNPKG

society-abstract-mcp

Version:

FastMCP server for Abstract token, wallet and NFT operations

73 lines (63 loc) 2.84 kB
import { ContractFactory, Provider, Wallet } from "zksync-ethers"; import dotenv from "dotenv/config"; import fs from "fs"; import path from "path"; // Load artifact for BasicToken (ABI + bytecode) // Try both local (src/constants) and build (dist/constants) paths let artifactJson; const scriptDir = path.dirname(new URL(import.meta.url).pathname); // Path options: local development vs built distribution const artifactPaths = [ // For src/constants/ location path.resolve(scriptDir, "../contracts/artifacts-zk/contracts/BasicToken.sol/BasicToken.json"), // For dist/constants/ location path.resolve(scriptDir, "../../src/contracts/artifacts-zk/contracts/BasicToken.sol/BasicToken.json") ]; for (const artifactPath of artifactPaths) { try { if (fs.existsSync(artifactPath)) { artifactJson = JSON.parse(fs.readFileSync(artifactPath, "utf-8")); console.log(`✅ Loaded artifact from: ${artifactPath}`); break; } } catch (err) { console.log(`⚠️ Failed to load artifact from: ${artifactPath}`); continue; } } if (!artifactJson) { console.error("❌ Could not find BasicToken artifact in any of the expected paths:"); artifactPaths.forEach(p => console.error(` - ${p}`)); process.exit(1); } const BASIC_TOKEN_ABI = artifactJson.abi; const BASIC_TOKEN_BYTECODE = artifactJson.bytecode; // Environment variables const RPC_URL = process.env.ABSTRACT_RPC_URL || process.env.RPC_URL; const PRIVATE_KEY = process.env.ABSTRACT_PRIVATE_KEY || process.env.PRIVATE_KEY; const TOKEN_NAME = process.env.TOKEN_NAME || "DemoToken"; const TOKEN_SYMBOL = process.env.TOKEN_SYMBOL || "DMT"; const INITIAL_SUPPLY = process.env.TOKEN_SUPPLY || "1000000000000000000000"; // 1000 tokens (18 decimals) if (!RPC_URL) { console.error("❌ RPC_URL (or ABSTRACT_RPC_URL) not set in environment variables"); process.exit(1); } if (!PRIVATE_KEY) { console.error("❌ PRIVATE_KEY (or ABSTRACT_PRIVATE_KEY) not set in environment variables"); process.exit(1); } const provider = new Provider(RPC_URL); const wallet = new Wallet(PRIVATE_KEY, provider); async function main() { console.log(`🚀 Deploying token ${TOKEN_NAME} (${TOKEN_SYMBOL}) with initial supply ${INITIAL_SUPPLY}`); const factory = new ContractFactory(BASIC_TOKEN_ABI, BASIC_TOKEN_BYTECODE, wallet); const token = await factory.deploy(TOKEN_NAME, TOKEN_SYMBOL, INITIAL_SUPPLY); console.log("⏳ Waiting for deployment to be mined..."); await token.deployed?.(); // zksync-ethers may not have deployed, fallback below const addr = token.getAddress ? await token.getAddress() : token.address; console.log("✅ BasicToken deployed at:", addr); } main().catch((err) => { console.error("Deployment failed:", err); process.exit(1); });