diff --git a/environments/local.toml b/environments/local.toml index 8f47dfd..bf84476 100644 --- a/environments/local.toml +++ b/environments/local.toml @@ -8,6 +8,7 @@ [server] port = 3000 + enableRateLimit=false transferAmount = 10000000000 # 1 * 10^10 alnt periodTransferLimit = 30000000000 # 3 * 10^10 alnt dbDir = "db" diff --git a/src/index.ts b/src/index.ts index 47c2daa..1a6049e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,6 +25,7 @@ interface Config { }, server: { port: number + enableRateLimit: boolean transferAmount: string periodTransferLimit: string dbDir: string @@ -44,7 +45,7 @@ async function main (): Promise { app.use(cors()); app.post('/faucet', async (req, res) => { - const { address: accountAddress } = req.body; + const { address: accountAddress, amount } = req.body; if (!accountAddress) { return res.status(400).json({ error: 'address is required' }); @@ -54,22 +55,24 @@ async function main (): Promise { return res.status(400).json({ error: 'invalid address' }); } - // Check rate limit const now = Date.now(); const today = new Date(now).toISOString().split('T')[0]; const faucetStoreKey = `${accountAddress}:${today}`; const amountSentToAddress = await faucetDataStore.get(faucetStoreKey) || '0'; - if (BigInt(amountSentToAddress) + BigInt(config.server.transferAmount) > BigInt(config.server.periodTransferLimit)) { - return res.status(429).json({ error: 'Limit exceeded' }); + if (config.server.enableRateLimit) { + // Check rate limit + if (BigInt(amountSentToAddress) + BigInt(amount) > BigInt(config.server.periodTransferLimit)) { + return res.status(429).json({ error: 'Limit exceeded' }); + } } try { - const txHash = await sendTokens(config, accountAddress, String(config.server.transferAmount)); + const txHash = await sendTokens(config, accountAddress, String(amount)); console.log(`Sent tokens to address: ${accountAddress}, txHash: ${txHash}`); // Update rate limit - await faucetDataStore.set(faucetStoreKey, (BigInt(amountSentToAddress) + BigInt(config.server.transferAmount)).toString(), FAUCET_DATA_TTL); + config.server.enableRateLimit && await faucetDataStore.set(faucetStoreKey, (BigInt(amountSentToAddress) + BigInt(amount)).toString(), FAUCET_DATA_TTL); res.json({ success: true, txHash }); } catch (error) {