Files
Exchange/server/api/walletApi/etheriuem.ts
2025-11-07 22:24:40 +01:00

158 lines
4.5 KiB
TypeScript
Executable File

import Common from 'ethereumjs-common'
const Web3 = require('web3');
const Tx = require('ethereumjs-tx').Transaction;
export const createAccount = () => {
const web3 = new Web3( "http://localhost:8545");
const data = web3.eth.accounts.create()
return data
}
export const createPersonalAccount = () => {
const web3 = new Web3( "http://localhost:8545");
return web3.eth.personal.newAccount("exchange")
.then((result) => {
return result
})
.catch((err) => {
console.log(err)
})
}
export const getBalance = async (account) => {
const web3 = await new Web3( "http://localhost:8545");
return web3.eth.getBalance(account.toString())
.then((balance) => {
return balance
})
.catch((err) => {
throw err
})
}
export const checkTransaction = async (transactionId) => {
const web3 = await new Web3( "http://localhost:8545");
return web3.eth.getTransactionReceipt(transactionId)
.then((txR) => {
if (txR.blockNumber == undefined) {
throw "transaction receipt not found";
} else {
return web3.eth.getTransaction(transactionId)
.then((tx) => {
if (tx.blockNumber == undefined|| tx.value == undefined) {
throw "transaction receipt not found";
} else {
return tx
}
})
.catch((err) => {
throw err
})
}
}).catch((err)=>{
throw(err)
})
}
export const getEtheriumNonce=((address) => {
const web3 = new Web3( "http://localhost:8545");
return web3.eth.getTransactionCount(address,'pending')
.then((nonce) => {
//got nonce proceed with creating and signing transaction
return nonce;
})
.catch((err) => {
throw err
})
})
export const sendEther = async (account,value) => {
const web3 = await new Web3( "http://localhost:8545");
//unlock it for a period of 15 secs
return web3.eth.personal.unlockAccount("0x868453967f6806ef86de7cf5e57a32ab28b875b4","exchange", 15000)
.then((unlocked) => {
return web3.eth.sendTransaction({
//from: process.env.ADMIN_ETHERIUM_ACCOUNT_ADDRESS,
from: '0x868453967f6806ef86de7cf5e57a32ab28b875b4',
to: account.toString(),
value: web3.utils.toWei (value.toString())
})
.then((receipt) => {
// then lock it
return web3.eth.personal.lockAccount("0x868453967f6806ef86de7cf5e57a32ab28b875b4")
.then(() => {
return receipt
})
.catch((err) => {
return receipt
})
})
.catch((err) =>{
throw err
})
}).catch((err)=>{
throw(err)
})
}
export const receiveEtherFromClient = (transactionHash) => {
//receive transaction from the ui and send it
const web3 = new Web3( "http://localhost:8545");
let rawTx = undefined
let transaction = undefined
//custom network
const customCommon = Common.forCustomChain(
'mainnet',
{
name: 'my-network',
networkId: 1981,
chainId: 1981,
},
'petersburg',
)
const preData = () => {
const privateKey = Buffer.from(
'64061456066baa81c5097c895b5176fb3e1452eaf6f6776e2d7bf07ddb9accfe',
'hex'
)
//parameters should be hex string starting with 0x
const txParams = {
nonce: '0x01',
gas: 50002,
gasPrice: Number(web3.utils.toWei('601', 'gwei')),
to: '0x868453967f6806ef86de7cf5e57a32ab28b875b4',
value: 10000003
}
// The second parameter is not necessary if these values are used
const tx = new Tx(txParams,{common : customCommon})
tx.sign(privateKey)
const serializedTx = tx.serialize()
return rawTx = '0x' + serializedTx.toString('hex');
}
return Promise.all([preData()])
.then(()=>{
return web3.eth.sendSignedTransaction(rawTx)
.then((result) => {
return result;
})
.catch((err) => {
throw err;
})
})
.catch((err) => {
throw err
})
}
export const getAccounts = async () => {
const web3 = await new Web3( "http://localhost:8545");
return web3.eth.getAccounts()
.then((result)=>{
console.log("all acounts is ", result)
})
.catch((err)=>{
throw err
})
}