From e421d401da38bf35d9bb3cfca9eeb130f45fa018 Mon Sep 17 00:00:00 2001 From: sairajzero Date: Tue, 2 May 2023 22:17:52 +0530 Subject: [PATCH] Moved bunkTransferTokens code to floTokenAPI - floWebWallet.bunkTransferTokens is still available, but it invokes floTokenAPI.bunkTransferTokens where the code is moved to --- scripts/flo-webwallet.js | 48 +++------------------------------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/scripts/flo-webwallet.js b/scripts/flo-webwallet.js index fbb5fa0..bfb1e0b 100644 --- a/scripts/flo-webwallet.js +++ b/scripts/flo-webwallet.js @@ -130,51 +130,9 @@ //bulk transfer tokens floWebWallet.bunkTransferTokens = function (sender, privKey, token, receivers) { return new Promise((resolve, reject) => { - if (typeof receivers !== 'object') - return reject("receivers must be object in format {receiver1: amount1, receiver2:amount2...}") - - let receiver_list = Object.keys(receivers), amount_list = Object.values(receivers); - let invalidReceivers = receiver_list.filter(id => !floCrypto.validateFloID(id)); - let invalidAmount = amount_list.filter(val => typeof val !== 'number' || val <= 0); - if (invalidReceivers.length) - return reject(`Invalid receivers: ${invalidReceivers}`); - else if (invalidAmount.length) - return reject(`Invalid amounts: ${invalidAmount}`); - - if (receiver_list.length == 0) - return reject("Receivers cannot be empty"); - - if (receiver_list.length == 1) { - let receiver = receiver_list[0], amount = amount_list[0]; - floTokenAPI.sendToken(privKey, amount, receiver, "", token) - .then(txid => resolve({ success: { [receiver]: txid } })) - .catch(error => reject(error)) - } else { - //check for token balance - floTokenAPI.getBalance(sender, token).then(token_balance => { - let total_token_amout = amount_list.reduce((a, e) => a + e, 0); - if (total_token_amout > token_balance) - return reject(`Insufficient ${token}# balance`); - - //split utxos - floBlockchainAPI.splitUTXOs(sender, privKey, receiver_list.length).then(split_txid => { - //wait for the split utxo to get confirmation - floBlockchainAPI.waitForConfirmation(split_txid).then(split_tx => { - //send tokens using the split-utxo - var scriptPubKey = split_tx.vout[0].scriptPubKey.hex; - let promises = []; - for (let i in receiver_list) - promises.push(sendTokens_raw(privKey, receiver_list[i], token, amount_list[i], split_txid, i, scriptPubKey)); - Promise.allSettled(promises).then(results => { - let success = Object.fromEntries(results.filter(r => r.status == 'fulfilled').map(r => r.value)); - let failed = Object.fromEntries(results.filter(r => r.status == 'rejected').map(r => r.reason)); - resolve({ success, failed }); - }) - }).catch(error => reject(error)) - }).catch(error => reject(error)) - }).catch(error => reject(error)) - } - + floTokenAPI.bunkTransferTokens(sender, privKey, token, receivers) + .then(result => resolve(result)) + .catch(error => reject(error)) }) }