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]; } export async function CreateNewRequest(){ const id = uuidv4(); await pool.query(`INSERT INTO Requests (id) VALUES(?)`, [id]); return id; } export async function SetRequestResult(id,result){ const [rows] = await pool.query("UPDATE Requests SET result=?, status=1 WHERE id=?", [result,id]); return rows.length; } function uuidv4() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' .replace(/[xy]/g, function (c) { const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }