forked from cerc-io/laconic-faucet
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39613f9ee3 | ||
|
|
3649cfb2fa | ||
|
|
fd27cd141c |
@@ -2,6 +2,8 @@ FROM node:20-bullseye
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apt-get update && apt-get install -y netcat
|
||||
|
||||
# Copy the application code
|
||||
COPY . .
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
[upstream]
|
||||
rpcEndpoint = "http://localhost:26657"
|
||||
chainId = "laconic_9000-1"
|
||||
denom = "photon"
|
||||
denom = "alnt"
|
||||
prefix = "laconic"
|
||||
gasPrice = "0.01"
|
||||
gasPrice = "1"
|
||||
faucetKey = ""
|
||||
|
||||
[server]
|
||||
port = 3000
|
||||
transferAmount = 1000000
|
||||
periodTransferLimit = 3000000
|
||||
enableRateLimit=false
|
||||
transferAmount = 10000000000 # 1 * 10^10 alnt
|
||||
periodTransferLimit = 30000000000 # 3 * 10^10 alnt
|
||||
dbDir = "db"
|
||||
|
||||
+9
-6
@@ -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<void> {
|
||||
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<void> {
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user