l1-lottery-contracts
Version:
This repo contains smart contracts and related scripts for ZkNoid L1 Lottery proposed [here](https://forums.minaprotocol.com/t/zknoid-l1-lottery/6269)
91 lines • 3.37 kB
JavaScript
import mongoose, { Schema } from 'mongoose';
import dotenv from 'dotenv';
import fs from 'fs';
// Load environment variables from .env file
dotenv.config();
/**
* 3. Define the schema corresponding to the IGiftCode interface.
*/
const GiftCodeSchema = new Schema({
userAddress: { type: String, required: true },
transactionHash: { type: String, required: true },
code: { type: String, required: true },
used: { type: Boolean, required: true, default: false },
deleted: { type: Boolean, required: true, default: false },
buyTxHash: { type: String, required: true },
});
/**
* 4. Create a Mongoose model from the schema.
*/
const GiftCode = mongoose.model('gift-codes', GiftCodeSchema);
/**
* Utility function to generate a random hexadecimal string of a given length.
* @param length Length of the hexadecimal string
*/
function generateRandomHex(length) {
let result = '';
const characters = 'abcdef0123456789';
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * characters.length));
}
return result;
}
async function main() {
// Parse command-line arguments
const countArg = process.argv[2];
const fileArg = process.argv[3];
if (!countArg || !fileArg) {
console.error('Usage: node script.js <number_of_codes> <output_filename>');
process.exit(1);
}
const count = parseInt(countArg, 10);
if (isNaN(count) || count <= 0) {
console.error('Invalid number of codes specified.');
process.exit(1);
}
const filename = fileArg;
if (fs.existsSync(filename)) {
throw new Error(`File "${filename}" already exists.`);
}
const mongoUri = process.env.MONGODB_URI;
if (!mongoUri) {
console.error('MongoDB URI not specified in environment variables.');
process.exit(1);
}
try {
console.log(mongoUri);
// Connect to the MongoDB database
await mongoose.connect(mongoUri);
console.log('Connected to MongoDB');
// Define an array of IGiftCode objects (plain data)
const giftCodes = [];
// Generate an array of random gift codes
for (let i = 0; i < count; i++) {
giftCodes.push({
userAddress: 'SCRIPT_GENERATED_CODE', // Random Ethereum-like address
transactionHash: 'SCRIPT_GENERATED_CODE', // Random transaction hash
code: generateRandomHex(16), // Random gift code
used: false,
deleted: false,
buyTxHash: 'SCRIPT_GENERATED_CODE', // Random purchase transaction hash
});
}
// Write generated codes to the specified file
fs.writeFileSync(filename, JSON.stringify(giftCodes.map((info) => info.code), null, 2));
console.log(`Generated codes written to file: ${filename}`);
// Insert generated gift codes into the database
await GiftCode.insertMany(giftCodes);
console.log(`${count} gift codes inserted into the database.`);
}
catch (error) {
console.error('Error:', error);
}
finally {
// Close the connection after operation
await mongoose.disconnect();
console.log('Disconnected from MongoDB');
}
}
// Run the main function
main();
//# sourceMappingURL=generate_gift_codes.js.map