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

133 lines
4.3 KiB
TypeScript
Executable File

const Client = require('bitcoin-core')
import myError from '../myError'
import * as _ from 'lodash'
export const bitcoinTransferFromExchange = async(value, receiver) => {
const client = new Client({
network: 'testnet',
username: 'polychain',
password: '3QtnxrB7P5y4EpBdad1MkCeB2RHmArvcarw7udgXsAce',
host:"127.0.0.1",
port:8332
})
const query_options = {
"minimumAmount":value,
//"maximumAmount":value,
"maximumCount":1 ,
}
return client.listUnspent(0, 9999999, [], true, query_options)
.then((unspentTx) => {
if(unspentTx[0]) {
const txid = unspentTx[0].txid
const vout = unspentTx[0].vout
const txValue = unspentTx[0].amount
let txFee = value*(0.001)
const StxFee = txFee.toFixed(8)
const totalValue = Number(value) + Number(StxFee)
let change = txValue - totalValue
const Schange = change.toFixed(8)
const nodeAddress = unspentTx[0].address
const input = [{
"txid": txid,
"vout": vout,
}]
let output = []
let obj = {}
let obj_2 ={}
obj[receiver] = value
obj_2[nodeAddress] = Schange
output.push(obj,obj_2)
return client.createRawTransaction(input,output)
.then((txHex) => {
return client.signRawTransactionWithWallet(txHex)
.then((sinedHex) => {
return client.sendRawTransaction(sinedHex.hex)
.then((txHashOrId) => {
return txHashOrId
})
.catch((err) => {
console.log("error in sendsigned",err)
throw err
})
})
.catch((err)=>{
console.log("error in sign ",err)
throw err
})
})
.catch((err )=> {
console.log("error in create raw tx",err)
throw err
})
} else {
const error = new myError(
'you do not have unspent trancaction',
400,
5,
'تراکنش خرج نشده پیدا نشد',
'خطا رخ داد'
)
throw error
}
})
.catch((err) => {
console.log("error in lisutxo",err)
throw err
})
}
export const bitcoinTransferToExchangeById = async(txId) => {
const btcAddress = ["tb1qfpf6lss60wmle9wanetjxjjt6lc6z65mapk50s"]
const client = new Client({
network: 'testnet',
username: 'polychain',
password: '3QtnxrB7P5y4EpBdad1MkCeB2RHmArvcarw7udgXsAce',
host: "127.0.0.1",
port: 8332
})
return client.getTransaction(txId)
.then((txInfo) => {
if(txInfo){
const tx = _.find(txInfo.details, (i) => { return i.category.toString() === "receive" && btcAddress.includes(i.address.toString())})
if(tx) {
let status
if(txInfo.confirmations>=6)
{
status = "Confirmed"
}else{
status = "pending"
}
const info = {
"txAddress":tx.address,
"txAmount":tx.amount,
"status":status
}
return info
} else {
const error = new myError(
'tx not found',
400,
5,
'تراکنش یافت نشد',
'خطا رخ داد'
)
throw error
}
} else {
const error = new myError(
'transaction not found',
400,
5,
'تراکنش مربوطه پیدا نشد.',
'خطا رخ داد'
)
throw error
}
})
.catch((err) => {
throw err
})
}