import { Publisher } from "./modules/momiji"; import * as types from "../momiji-helpers/utils/types"; import { ethers } from "ethers"; import 'dotenv/config'; import { WebSocketServer } from "ws"; const main = async () => { let _globalConfig: types.GlobalConfig = { anonRPC: process.env.ANON_RPC, signer: new ethers.Wallet(process.env.PRIVATE_KEY as string, new ethers.JsonRpcProvider(process.env.RPC_URL)), provider: new ethers.JsonRpcProvider(process.env.RPC_URL), nargo: process.env.NARGO_PATH, threads: parseInt(process.env.THREADS as string), gossip: { seeds: process.env.SEEDS ? process.env.SEEDS.split(",") : [], relays: process.env.RELAYS ? process.env.RELAYS.split(",") : [], maxRelays: process.env.MAX_RELAYS ? parseInt(process.env.MAX_RELAYS) : 8, }, verbose: (process.env.VERBOSE) ? (process.env.VERBOSE.toLowerCase() === "true") : false, profit: (process.env.PROFIT) ? parseInt(process.env.PROFIT) : 0, ip: (process.env.PUBLIC_IP) }; let publisher = new Publisher(_globalConfig); await publisher.initializePublisher(); const wss = new WebSocketServer({ host: '0.0.0.0', port: 5150 }); wss.on('connection', function connection(ws) { ws.on('error', console.error); ws.on('message', async function message(data) { if (publisher.queue.length >= 14){ ws.send('{status:"error", msg:"Prover queue is full"}') return } const valid = await publisher.newTransactionReceivedMultiple(JSON.parse(data.toString())); if (valid){ ws.send('{status:"ok", msg:"Proof added to queue"}'); } else { ws.send('{status:"error", msg:"Invalid proof"}'); } }); }); let queuing = false const wenQueue = async() => { if (!queuing && publisher.queue.length > 0) { queuing = true; await publisher.proveMultiple() queuing = false; } } let publishing = false const wenPublish = async () => { if (!publishing && !queuing && publisher.batch.length > 0) { publishing = true await publisher.publishSingle() publishing = false } } setInterval(wenQueue, 1e4) setInterval(wenPublish, 1e5) } console.log(`💫 Starting publisher...`) main();