This commit is contained in:
2024-10-29 17:58:39 +05:30
commit 0cc048bff2
7 changed files with 3197 additions and 0 deletions

41
.gitignore vendored Normal file
View File

@@ -0,0 +1,41 @@
lib-cov
*.seed
*.log
*.csv
*.dat
*.out
*.pid
*.gz
*.swp
pids
logs
results
tmp
# Build
public/css/main.css
# Coverage reports
coverage
# API keys and secrets
.env
# Dependency directory
node_modules
bower_components
# Editors
.idea
*.iml
# OS metadata
.DS_Store
Thumbs.db
# Ignore built ts files
dist/**/*
# ignore yarn.lock
yarn.lock

11
eslint.config.mjs Normal file
View File

@@ -0,0 +1,11 @@
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
export default [
{files: ["**/*.{ts}"]},
{languageOptions: { globals: globals.browser }},
pluginJs.configs.recommended,
...tseslint.configs.recommended,
];

2947
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

27
package.json Normal file
View File

@@ -0,0 +1,27 @@
{
"name": "sobridge",
"version": "1.0.0",
"main": "dist/app.js",
"scripts": {
"start": "tsc && node dist/app.js",
"lint": "eslint .",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"devDependencies": {
"@eslint/js": "^9.13.0",
"@types/express": "^4.17.1",
"eslint": "^9.13.0",
"globals": "^15.11.0",
"typescript": "^5.6.3",
"typescript-eslint": "^8.12.1"
},
"dependencies": {
"@solana/web3.js": "^1.95.4",
"dotenv": "^16.4.5",
"express": "^4.17.1"
}
}

72
src/app.ts Normal file
View File

@@ -0,0 +1,72 @@
import express from 'express';
import dotenv from 'dotenv';
import { GetSolBalance, GetTicketsAccount, GetTicketsBalanceByTA, GetTokenAccount, GetTokenBalanceByTA } from "./sol";
dotenv.config();
const app = express();
const port = process.env.EXPRESS_PORT;
app.get("/status", (req,res)=>{
res.status(200).json({status:"Working"})
})
app.get("/getSolBalance", async(req,res)=>{
const {wallet} = req.query;
if(!wallet){res.status(403).json({error:"Wallet should be present"}); return;}
const balance = await GetSolBalance(wallet);
const response = {
address: wallet,
balance: balance
};
res.status(200).json(response);
})
app.get("/getTokenBalance", async(req,res)=>{
const{ wallet } = req.query;
if(!wallet){res.status(403).json({error:"Wallet should be present"}); return;}
const tokenAddress = await GetTokenAccount(wallet);
const result = await GetTokenBalanceByTA(tokenAddress);
const balance = result <0 ? 0 : result;
const response = {
tokenAccount:tokenAddress,
balance:balance
}
res.status(200).json(response);
})
app.get("/getTicketsBalance", async(req,res)=>{
const{ wallet } = req.query;
if(!wallet){res.status(403).json({error:"Wallet should be present"}); return;}
const tokenAddress = await GetTicketsAccount(wallet);
const result = await GetTicketsBalanceByTA(tokenAddress);
const balance = result <0 ? 0 : result;
const response = {
tokenAccount:tokenAddress,
balance:balance
}
res.status(200).json(response);
})
app.get("/purchaseTickets", async(req,res)=>{
const {amount} = req.query;
if(!amount){
res.status(403).json({error:"Enter an amount"}); return;
}
})
app.listen(port, ()=>{
console.log(`Mhunt Solana Brdige listening to port ${port}`)
})

88
src/sol.ts Normal file
View File

@@ -0,0 +1,88 @@
import { PublicKey, Connection } from '@solana/web3.js';
const TOKENS_MINT = new PublicKey('vcHyeKhk67CVumjzYV3m8cf6V8xcE85N9ay48pcyUpB');
const TICKETS_MINT = new PublicKey('tktUDLZhFGb9VW9zDxZ7HYDFuBooEf8daZEvPbBY7at');
const solana = new Connection("https://api.devnet.solana.com")
export async function GetSolBalance(wallet){
const balance = await solana.getBalance(new PublicKey(wallet));
return balance;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
export async function GetTokenAccount(ownerAddress){
const accountPublicKey = new PublicKey(ownerAddress);
const account = await solana.getTokenAccountsByOwner(accountPublicKey, {mint: TOKENS_MINT});
try{
const tokenAddress = account.value[0].pubkey.toString();
return tokenAddress;
}catch{
return null;
}
}
export async function GetTokenBalanceByOwner(owner){
const tokenAccount = await GetTokenAccount(owner);
if(tokenAccount==null){
return 0;
}
console.log(tokenAccount);
return await GetTokenBalanceByTA(tokenAccount);
}
export async function GetTokenBalanceByTA(tokenAccountAddress){
if(tokenAccountAddress==null){
return 0;
}
const tokenAccount = new PublicKey(tokenAccountAddress);
const info = await solana.getTokenAccountBalance(tokenAccount);
if (info.value.uiAmount == null){
return -1;
}
console.log('Token Balance (using Solana-Web3.js): ', info.value.uiAmount);
return info.value.uiAmount;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
export async function GetTicketsAccount(ownerAddress){
const accountPublicKey = new PublicKey(ownerAddress);
const account = await solana.getTokenAccountsByOwner(accountPublicKey, {mint: TICKETS_MINT});
try{
const tokenAddress = account.value[0].pubkey.toString();
return tokenAddress;
}catch{
return null;
}
}
export async function GetTicketsBalanceByOwner(owner){
const tokenAccount = await GetTicketsAccount(owner);
if(tokenAccount==null){
return 0;
}
console.log(tokenAccount);
return await GetTicketsBalanceByTA(tokenAccount);
}
export async function GetTicketsBalanceByTA(tokenAccountAddress){
if(tokenAccountAddress==null){
return 0;
}
const tokenAccount = new PublicKey(tokenAccountAddress);
const info = await solana.getTokenAccountBalance(tokenAccount);
if (info.value.uiAmount == null){
return -1;
}
console.log('Ticket Balance (using Solana-Web3.js): ', info.value.uiAmount);
return info.value.uiAmount;
}

11
tsconfig.json Normal file
View File

@@ -0,0 +1,11 @@
{
"compilerOptions": {
"module": "commonjs",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist"
},
"lib": ["es2015"]
}