133 lines
4.3 KiB
TypeScript
Executable File
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
|
|
})
|
|
}
|
|
|