import mysql from 'mysql2'; import {Keypair, Connection, PublicKey} from '@solana/web3.js'; import {createAssociatedTokenAccount} from '@solana/spl-token'; import bs58 from 'bs58'; import {GenerateATAs} from './sol.js'; import dotenv from 'dotenv'; dotenv.config(); const pool = mysql.createPool({ host: process.env.MYSQL_HOST, user: process.env.MYSQL_USER, password: process.env.MYSQL_PASSWORD, database: process.env.MYSQL_DATABASE }).promise(); export async function RegisterNewUser(email,password){ const existingUser = await GetUserFromEmail(email); if(existingUser){ return undefined; } const newWallet = Keypair.generate(); const pubKey=newWallet.publicKey.toBase58(); //GenerateATAs(newWallet); await pool.query(`INSERT INTO Users (pub_key, email,password) VALUES(?, ?, ?)`, [pubKey, email, password]); await pool.query(`INSERT INTO PrivateKeys (pub_key, private_key) VALUES(?, ?)`, [pubKey, bs58.encode(newWallet.secretKey)]); return { email: email, publicKey: pubKey } } export async function GetUserFromEmail(email){ const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE email=?", [email]); return rows[0]; } export async function GetUserFromPubkey(pubkey){ const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE pub_key=?", [pubkey]); return rows[0]; } export async function Authneticate(email, password){ const [rows] = await pool.query("SELECT pub_key,email FROM Users WHERE email=? AND password=?", [email, password]); return rows.length >0; } export async function GetPrivateKey(pubkey){ const [rows] = await pool.query("SELECT private_key FROM PrivateKeys WHERE pub_key=?", [pubkey]); return rows[0]; } export async function GetKeypairFromEmail(email){ const [rows] = await pool.query("SELECT Users.pub_key,Users.email, PrivateKeys.private_key FROM Users JOIN PrivateKeys ON Users.pub_key = PrivateKeys.pub_key WHERE email=?", [email]); return rows[0]; }