我正在为我的网站创建一个付款API,此付款API是围绕Monero设置的,我从MongoDB数据库中获取付款所需的值以及将其发送到哪里。我正在用猫鼬做这个
我已经计划了所有内容,它从一个数组中获取当天需要支付的总净值,并从另一个数组中获取最新的钱包条目,以便它知道将金额发送至何处。
当我尝试使用此数据构造一个新数组并将此数据推入其中时,就会出现问题。
Monero本质上只允许一次发送一笔交易,锁定您的剩余余额和所发送的金额,直到完全确认一笔交易为止。一笔交易可以分为多笔交易,但都必须作为“一个”大块发送。
因此,当我向Monero发送请求时,它必须包括每个钱包的数组以及每个钱包收到的金额。
当我推送到数组时,我注意到它每次推送到数组时都会执行Transfer Monero函数。我该如何做,以便在发送该变量以进行传输之前,首先使用满足我的if语句的所有可能值(日期为今天,paymentStatus设置为false,到期金额不等于或小于0)将其完全推入数组。使用Monero函数吗?
我已经尝试使用返回函数等。不确定如何实现异步/等待或承诺
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var moment = require('moment');
var User = require('../models/user');
var moneroWallet = require('monero-nodejs');
var Wallet = new moneroWallet('127.0.0.1', 18083);
var destinations = []
var xmrnet = []
// connect to MongoDB
mongoose.connect('mongodb://)
// Fetch IDs
function getID(){
var cursor = User.find({}, function (err, users) {
}).cursor();
return cursor;
}
var cursor = getID();
cursor.on('data', function(name){
var id = name.id
// Map all users using IDs
function getUsers(){
var cursor = User.findById(id, function (err, users) {
}).cursor();
return cursor;
}
var cursor = getUsers();
cursor.on('data', function(user){
net = user.netHistory.map(element => element)
order = user.orderHistory.map(element => element)
userWallets = user.userWallets.map(element => element)
var today = moment();
// date is today? validation
for (var i = 0; i < net.length; i++){
netDate = net[i].net_date_time
netStatus = net[i].paymentStatus
netUSD = net[i].current_usd_net
xmrnet = net[i].xmr_net
for (var j = 0; j < userWallets.length; j++){
xmrwalletsU = userWallets[j].xmr_wallet
if(xmrwalletsU !== ''){
xmrwallet = xmrwalletsU
}
}
var Dateistoday = moment(netDate).isSame(today, 'day');;
if (Dateistoday === true && xmrnet !== 0 && netStatus === false){
console.log('its true')
netid = net[i].id
var destinationsU = [{amount: xmrnet, address: xmrwallet}]
destinations.push(destinationsU)
console.log(destinations)
// problem is right here with destinations^ it pushes one by one
// problem over here as well as wallet.transfer executes one by one by the time it gets to the second, the balance is already locked, unable to send
Wallet.transfer(destinations).then(function(transfer) {
console.log(transfer);
var payouts = {
payout_date_time: Date(),
payout_usd_amount: netUSD,
xmr_wallet: xmrwallet,
xmr_txid: transfer.tx_hash,
}
// add payout to payoutHistory array
User.findByIdAndUpdate(id, {"$addToSet": { 'payoutHistory': [payouts]}},
function(err, user) {
if(err) { console.log(err) }
else {
console.log()
};
})
// update paymentStatus of specific net entry to true
User.updateMany({
"_id": id,
"netHistory._id": netid
}, {
"$set": {
"netHistory.$.paymentStatus": true
}
}, function(error, success) {
})
})
}
}
})
})