From c411c0b3b9e87268b4ea14d1984a75dc7b3ae643 Mon Sep 17 00:00:00 2001 From: umairkhannn <104337801+umairkhannn@users.noreply.github.com> Date: Mon, 29 Apr 2024 05:02:21 +0500 Subject: [PATCH] Fix in-game transfer polling (#2460) * Fix in-game transfer polling * Set limit --- lib/templates/cryptomodule.js | 9 +++++ mods/mixin/lib/mixinmodule.js | 63 +++++++++++++++++++---------------- mods/mixin/mixin.js | 33 ++++++++++++++++-- 3 files changed, 74 insertions(+), 31 deletions(-) diff --git a/lib/templates/cryptomodule.js b/lib/templates/cryptomodule.js index c7ee10c1e..d2e8576f1 100644 --- a/lib/templates/cryptomodule.js +++ b/lib/templates/cryptomodule.js @@ -485,4 +485,13 @@ CryptoModule.prototype.returnWithdrawalFeeForAddress = function ( */ CryptoModule.prototype.validateAddress = async function(address, ticker) { return true; } +/** + * return utxo + * @abstract + * @param {string} address to validate + * @param {string} ticker to for selected crypto + * @return {boolean} true/false + */ +CryptoModule.prototype.returnUtxo = async function(state = 'unspent', limit = 1000, order = 'DESC') { return true; } + module.exports = CryptoModule; diff --git a/mods/mixin/lib/mixinmodule.js b/mods/mixin/lib/mixinmodule.js index ab348cf96..2de1b850f 100644 --- a/mods/mixin/lib/mixinmodule.js +++ b/mods/mixin/lib/mixinmodule.js @@ -160,7 +160,7 @@ class MixinModule extends CryptoModule { this.balance_timestamp_last_fetched ); this.balance_timestamp_last_fetched = new Date().getTime(); - await this.mixin.fetchSafeUtxo(this.asset_id); + await this.mixin.fetchSafeUtxoBalance(this.asset_id); this.app.connection.emit('header-update-balance'); } @@ -343,58 +343,62 @@ class MixinModule extends CryptoModule { //snapshot_datetime: Mon Feb 12 2024 16:31:44 GMT+0500 (Pakistan Standard Time) //mixinmodule.js:454 received_datetime: Sun Sep 20 56111 06:01:14 GMT+0500 (Pakistan Standard Time) - let status = await this.mixin.fetchSafeSnapshots(this.asset_id, 1000, (d) => { + let status = await this.mixin.fetchUtxo('unspent', 100000, 'DESC', (d) => { + + console.log('utxo: ', d); if (d.length > 0) { for (let i = (d.length - 1); i >= 0; i--) { let row = d[i]; - let snapshot_asset_id = row.asset_id; - console.log('*************************************') - console.log("snapshot response ///"); + //compare timestamps + let snapshot_date = new Date(row.created_at); + let received_date = new Date(timestamp); - // filter out specific asset - if (snapshot_asset_id == this_self.asset_id) { + console.log('received_datetime - snapshot_datetime - diff : ', + received_date, snapshot_date, (snapshot_date - received_date)); - console.log("assets matched ///"); + if (snapshot_date - received_date > 0) { - let snapshot_opponent_id = row.opponent_id; + let snapshot_asset_id = row.asset_id; - console.log('snapshot_opponent_id: ', snapshot_opponent_id); - console.log('opponent_id: ', opponent_id); + console.log('*************************************'); + console.log("snapshot response ///"); + // filter out specific asset + if (snapshot_asset_id == this_self.asset_id) { - // filter out opponents - if ((opponent_id == snapshot_opponent_id)) { + console.log("assets matched ///"); - console.log('opponent_id matched ////'); + let senders = row.senders; - let snapshot_amount = Number(row.amount); + console.log('snapshot_opponent_id: ', senders); + console.log('opponent_id: ', opponent_id); + console.log('oponnent id exists:', senders.includes(opponent_id)); - console.log('row.amount: ', row.amount); - console.log('snapshot_amount: ', snapshot_amount); + // filter out opponents + if (senders.includes(opponent_id)) { - // filter out deposit only - if (snapshot_amount > 0) { + console.log('opponent_id matched ////'); - //compare timestamps - let snapshot_date = new Date(row.created_at); - let received_date = new Date(timestamp); - - console.log('received_datetime - snapshot_datetime - diff : ', received_date, snapshot_date, (snapshot_date - received_date)); + let snapshot_amount = Number(row.amount); + console.log('row.amount: ', row.amount); + console.log('snapshot_amount: ', snapshot_amount); - if ((snapshot_date - received_date > 0) && (snapshot_amount == amount) - && (opponent_id == snapshot_opponent_id)){ + if (snapshot_amount == amount){ console.log('match found ///'); return 1; } + } } + } + } return 0; @@ -470,6 +474,10 @@ class MixinModule extends CryptoModule { return this.mixin.fetchSafeSnapshots(asset_id, records, callback); } + async returnUtxo(state = 'unspent', limit = 500, order = 'DESC', callback = null) { + return await this.mixin.fetchUtxo(state, limit, order, callback); + } + async getMixinUser(address = '', callback = null) { return await this.mixin.sendFetchUserTransaction({address: address}, function(res){ return callback(res); @@ -551,13 +559,10 @@ class MixinModule extends CryptoModule { asset_id: asset_id }, function(res){ - console.log('returning address 1////', res); if (res.length > 0) { address = res[0]; } }); - - console.log('returning address 2////'); return address; } diff --git a/mods/mixin/mixin.js b/mods/mixin/mixin.js index 4efed73c0..eada108ed 100644 --- a/mods/mixin/mixin.js +++ b/mods/mixin/mixin.js @@ -136,7 +136,7 @@ class Mixin extends ModTemplate { let pc = await this.app.wallet.returnPreferredCryptoTicker(); if (mixin_self.account_created !== 0 || (pc !== "SAITO" && pc !== "")) { if (crypto_module.returnIsActivated()) { - await this.fetchSafeUtxo(); + await this.fetchSafeUtxoBalance(); } } } @@ -384,7 +384,7 @@ class Mixin extends ModTemplate { } } - async fetchSafeUtxo(asset_id){ + async fetchSafeUtxoBalance(asset_id){ try { let user = MixinApi({ keystore: { @@ -441,6 +441,35 @@ class Mixin extends ModTemplate { } } + async fetchUtxo(state = 'unspent', limit = 100000, order = 'DESC', callback = null){ + try { + let user = MixinApi({ + keystore: { + app_id: this.mixin.user_id, + session_id: this.mixin.session_id, + pin_token_base64: this.mixin.tip_key_base64, + session_private_key: this.mixin.session_seed + }, + }); + + let params = { + limit: limit, + state: state, + order: order, + }; + + let utxo_list = await user.utxo.safeOutputs(params); + console.log(`utxo_list ${state}:///`, utxo_list); + + if (callback){ + return callback(utxo_list); + } + } catch(err) { + console.error("ERROR: Mixin error return utxo: " + err); + return false; + } + } + async checkNetworkFee(asset_id){ try {