init commit
This commit is contained in:
132
server/api/walletApi/bitcoin.ts
Executable file
132
server/api/walletApi/bitcoin.ts
Executable file
@@ -0,0 +1,132 @@
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user