forked from pancakeswap/pancake-lottery-scheduler
-
Notifications
You must be signed in to change notification settings - Fork 7
/
cron.js
78 lines (66 loc) · 2.24 KB
/
cron.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* eslint-disable @typescript-eslint/no-var-requires */
const express = require("express");
const cron = require("node-cron");
const { providers, Contract, BigNumber } = require("ethers");
const { execSync } = require("child_process");
const LotteryConfig = require("./config.json");
const LotteryAbi = require("./abi/WagyuSwapLottery.json");
const networks = {
testnet: {
url: "https://testnet.velas.com/rpc/",
chainId: 111,
},
mainnet: {
url: "https://evmexplorer.velas.com/rpc",
chainId: 106,
},
};
const app = express();
const handleLottery = async (network) => {
const networkInfo = networks[network];
const provider = new providers.StaticJsonRpcProvider(networkInfo.url, networkInfo.chainId);
const LotteryAddress = LotteryConfig.Lottery[network];
console.log("handleLottery", network, LotteryAddress, "==at==", Date.now());
if (LotteryAddress === "") {
return;
}
const lotteryContract = new Contract(LotteryAddress, LotteryAbi, provider);
try {
const currentRoundId = await lotteryContract.viewCurrentLotteryId();
if (currentRoundId.isZero()) {
// startLottery
execSync(`yarn execute:start:${network}`);
} else {
const currentTimeStamp = Math.floor(Date.now() / 1000);
const currentRoundInfo = await lotteryContract.viewLottery(currentRoundId);
if (currentRoundInfo.status === 1) {
// Open
if (currentTimeStamp >= currentRoundInfo.endTime.toNumber()) {
// closeLottery
execSync(`yarn execute:close:${network}`);
execSync(`yarn execute:draw:${network}`);
execSync(`yarn execute:start:${network}`);
}
} else if (currentRoundInfo.status === 2) {
execSync(`yarn execute:draw:${network}`);
execSync(`yarn execute:start:${network}`);
} else if (currentRoundInfo.status === 3) {
execSync(`yarn execute:start:${network}`);
}
}
} catch (error) {
console.error("===error===", error);
}
};
const startService = async () => {
cron.schedule("0 */15 * * * *", () => {
console.log("==cron==", Date.now());
// run every 15 mins
handleLottery("mainnet");
handleLottery("testnet");
});
app.listen(3000, () => {
console.log("====started===");
});
};
startService();