diff --git a/app.js b/app.js index 0ca530eb..b8ec4437 100644 --- a/app.js +++ b/app.js @@ -24,6 +24,7 @@ app.use(session({ })); //for static files app.use(express.static(path.join(__dirname, 'public'))); +app.use('/icoDashboardSetup/project', express.static(__dirname + '/icoDashboardCreator/dist')); app.use(cookieParser()); app.use(passport.initialize()); app.use(passport.session()); // persistent login sessions diff --git a/coinPayments/impl.js b/coinPayments/impl.js index 381f0e55..fd7a9cf0 100644 --- a/coinPayments/impl.js +++ b/coinPayments/impl.js @@ -5,9 +5,9 @@ let Promise = require('bluebird'); module.exports = { - buyToken: (currency1, currency2, amount, buyer_email) => { + buyToken: (currency1, currency2, amount, buyer_email, address) => { return new Promise((resolve, reject) => { - client.createTransaction({'currency1' : currency1, 'currency2' : currency2, 'amount' : amount, 'buyer_email':buyer_email}).then(txInfo => { + client.createTransaction({'currency1' : currency1, 'currency2' : currency2, 'amount' : amount, 'buyer_email':buyer_email, 'address': address}).then(txInfo => { resolve(txInfo); }); }) diff --git a/config/passport.js b/config/passport.js index bb8f2446..9657568a 100644 --- a/config/passport.js +++ b/config/passport.js @@ -11,6 +11,7 @@ var Currency = db.currency; var Address = db.userCurrencyAddress; var Transactions = db.icotransactions; var Project = db.projectConfiguration; +var bitcoin = require("bitcoinjs-lib"); let Promise = require('bluebird'); var bcrypt = require('bcrypt-nodejs'); const Web3 = require('web3'); @@ -78,12 +79,18 @@ module.exports = function (passport) { } }); - var projectCurrency = await db.currency.findOrCreate({ + var btcCurrency = await db.currency.findOrCreate({ where: { - 'name': req.body.projectName + 'name': "Bitcoin" } }); + // var projectCurrency = await db.currency.findOrCreate({ + // where: { + // 'name': req.body.projectName + // } + // }); + console.log(req.body.projectName); //Find project details and map user var project = await Project.findOrCreate({ @@ -92,11 +99,11 @@ module.exports = function (passport) { } }); - Promise.all([generateEthAddress(), generateEthAddress(), createNewUser(req)]).then(([createdEthAddress, createdCoinAddress, createdUser]) => { + Promise.all([generateEthAddress(), generateBTCAddress(), createNewUser(req)]).then(([createdEthAddress, createdBTCAddress, createdUser]) => { ethCurrency[0].addUserCurrencyAddress(createdEthAddress); - projectCurrency[0].addUserCurrencyAddress(createdCoinAddress); - createdUser.addUserCurrencyAddresses([createdEthAddress, createdCoinAddress]); - project[0].addUserCurrencyAddress([createdEthAddress, createdCoinAddress]); + btcCurrency[0].addUserCurrencyAddress(createdBTCAddress); + createdUser.addUserCurrencyAddresses([createdEthAddress, createdBTCAddress]); + project[0].addUserCurrencyAddresses([createdEthAddress, createdBTCAddress]); project[0].addUser(createdUser); return done(null, createdUser.dataValues); }); @@ -317,7 +324,6 @@ function generateEthAddress() { return new Promise(async function (resolve, reject) { var newEthAddress = new Object(); var keyStore = generateNewAccount(); - console.log(keyStore); newEthAddress.privateKey = keyStore.privateKey; newEthAddress.address = keyStore.address; var createdEthAddress = await Address.create(newEthAddress); @@ -325,6 +331,20 @@ function generateEthAddress() { }); } +function generateBTCAddress() { + return new Promise(async function (resolve, reject) { + var newBTCAddress = new Object(); + const TestNet = bitcoin.networks.testnet; + var keyPair = bitcoin.ECPair.makeRandom(); + let { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey }); + console.log(address); + newBTCAddress.address = address; + newBTCAddress.privateKey = keyPair.toWIF(); + var createdBTCAddress = await Address.create(newBTCAddress); + resolve(createdBTCAddress); + }); +} + function createNewUser(req) { return new Promise(async function (resolve, reject) { var newUser = new Object(); @@ -335,7 +355,7 @@ function createNewUser(req) { newUser.lastName = req.body.last_name; newUser.country = req.body.country_id; var createdUser = await User.create(newUser); - sendVerificationMail(req, createdUser.email, createdUser.firstName, createdUser.uniqueId); + sendUserVerificationMail(req, createdUser.email, createdUser.firstName, createdUser.uniqueId); resolve(createdUser); }); } @@ -356,3 +376,8 @@ function sendVerificationMail(req, userEmail, userName, userHash) { var nodemailerservice = require('../emailer/impl'); nodemailerservice.sendVerificationMail(req, userEmail, userName, userHash); } + +function sendUserVerificationMail(req, userEmail, userName, userHash) { + var nodemailerservice = require('../emailer/impl'); + nodemailerservice.sendUserVerificationMail(req, userEmail, userName, userHash); +} diff --git a/database/config/config.json b/database/config/config.json index f87a92a9..64ae6a1c 100644 --- a/database/config/config.json +++ b/database/config/config.json @@ -3,7 +3,7 @@ "username": "postgres", "password": "123", "database": "autoCoin", - "host": "localhost", + "host": "78.129.212.204", "logging": false, "freezeTableName": true, "operatorsAliases": false, diff --git a/emailer/impl.js b/emailer/impl.js index 8a691e4b..f433877e 100644 --- a/emailer/impl.js +++ b/emailer/impl.js @@ -54,6 +54,23 @@ module.exports = { triggerEmail(mailOptions); }); }, + + sendUserVerificationMail: function (req, recipientmail, name, userhash) { + var link = "http://" + req.get('host') + "/verifyMail?verificationId=" + userhash; + ejs.renderFile(__dirname + '/emailerTemplates/emailVerification.ejs', { + name: name, + link: link + }, (err, data) => { + console.log(err); + var mailOptions = { + from: "emailverification@autocoin.com", + to: recipientmail, + subject: "Email Verification", + html: data + }; + triggerEmail(mailOptions); + }); + }, //OTP sendConfirmationOTP: function (recipientmail, otp) { ejs.renderFile(__dirname + '/emailerTemplates/packageOTPMailer.ejs', { diff --git a/icoDashboardCreator/dist/index.ejs b/icoDashboardCreator/dist/index.ejs index 866f6c36..431bb59a 100644 --- a/icoDashboardCreator/dist/index.ejs +++ b/icoDashboardCreator/dist/index.ejs @@ -3,12 +3,12 @@ -MyEtherWallet.com + +MyContract - @@ -26,21 +26,10 @@ - - - - - - - - - - - - - - - + + + + - @@ -330,13 +318,13 @@
- - - - + + + +
@@ -361,7 +349,7 @@
- +
@@ -875,12 +863,12 @@
- - + + - - + + @@ -888,8 +876,8 @@
- - + +
@@ -912,17 +900,17 @@
- - - - - - + + + + + +
@@ -939,5 +927,3 @@ - - diff --git a/icoDashboardCreator/impl.js b/icoDashboardCreator/impl.js index d59ac5c9..83deedce 100644 --- a/icoDashboardCreator/impl.js +++ b/icoDashboardCreator/impl.js @@ -16,22 +16,24 @@ var Project = db.projectConfiguration; module.exports = { //client setup - icoDashboardSetup: function (req, res) { + icoDashboardSetup: async function(req, res) { + var projectArray = await getProjectArray(req.user.email); var address = req.cookies['address']; res.render(path.join(__dirname, './', 'dist', 'index.ejs'), { user: req.user, address: address, + ProjectConfiguration: projectArray, }); }, - siteConfiguration: function (req, res) { + siteConfiguration: function(req, res) { console.log(req.params, "project") res.render('siteConfiguration', { user: req.user, projectName: req.params.projectName }); }, - getSiteConfiguration: function (req, res) { + getSiteConfiguration: function(req, res) { client.findAll({ where: { 'email': req.user.email, @@ -62,36 +64,38 @@ module.exports = { } }); }, - updateSiteConfiguration: async function (req, res) { - var projectdata = await client.find({ - where: { - 'email': req.user.email - }, - include: ['projectConfigurations'], - }) - var projectdatavalues = await ProjectConfiguration.find({ - where: { - "client_id": projectdata.projectConfigurations[0].dataValues.client_id + updateSiteConfiguration: async function(req, res) { + var projectdata = await client.find({ + where: { + 'email': req.user.email + }, + include: ['projectConfigurations'], + }) + var projectdatavalues = await ProjectConfiguration.find({ + where: { + "client_id": projectdata.projectConfigurations[0].dataValues.client_id + } + }) + if (req.files[0]) { + console.log("here") + projectdatavalues.siteLogo = fs.readFileSync(req.files[0].path) + projectdatavalues.save().then((result, error) => { + console.log("inside", error, result) + }) } - }) - if (req.files[0]) { - console.log("here") - projectdatavalues.siteLogo = fs.readFileSync(req.files[0].path) - projectdatavalues.save().then((result, error) => { console.log("inside", error, result) }) - } - - // projectdata.dataValues.siteLogo = fs.readFileSync(req.files[0].path) - ProjectConfiguration.update({ - "siteName": req.body.site_name, - "coinName": req.body.coin_name, - "softCap": req.body.soft_cap, - "hardCap": req.body.hard_cap, - "startDate": req.body.start_date, - "endDate": req.body.end_date, - "homeURL": req.body.website_url, - "usdConversionRate": req.body.usd_conversion_rate, - "minimumContribution": req.body.minimum_contribution, - }, { + + // projectdata.dataValues.siteLogo = fs.readFileSync(req.files[0].path) + ProjectConfiguration.update({ + "siteName": req.body.site_name, + "coinName": req.body.coin_name, + "softCap": req.body.soft_cap, + "hardCap": req.body.hard_cap, + "startDate": req.body.start_date, + "endDate": req.body.end_date, + "homeURL": req.body.website_url, + "usdConversionRate": req.body.usd_conversion_rate, + "minimumContribution": req.body.minimum_contribution, + }, { where: { "client_id": projectdata.projectConfigurations[0].dataValues.client_id } @@ -101,150 +105,183 @@ module.exports = { console.log("Project updated successfully!"); res.redirect("/icoDashboardSetup/project/" + req.body.coin_name) }); - }, + }, - getKYCPage: async function (req, res) { - res.render("kyctab.ejs") - }, - getICOdata: async function (req, res) { - var userdata = await User.find({ - where: { - "projectConfigurationCoinName": "don" + getKYCPage: async function(req, res) { + res.render("kyctab.ejs") }, - attributes: { exclude: ["mobile", "isd_code", "usertype_id", "updatedAt", "createdAt", "kycDoc3", "kycDocName3", "kycDoc2", "kycDocName2", "kycDoc1", "kycDocName1", "password", "uniqueId"] } - }) + getICOdata: async function(req, res) { + var userdata = await User.find({ + where: { + "projectConfigurationCoinName": "don" + }, + attributes: { + exclude: ["mobile", "isd_code", "usertype_id", "updatedAt", "createdAt", "kycDoc3", "kycDocName3", "kycDoc2", "kycDocName2", "kycDoc1", "kycDocName1", "password", "uniqueId"] + } + }) - res.send({ data: [userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues] }); - }, - getUserData: async function (req, res) { - var userdata = new Object(); - User.find({ - where: { - "projectConfigurationCoinName": "don", "id": req.params.userid - }, - }).then(result => { - console.log(result.dataValues) - userdata = result.dataValues; - console.log(userdata, "helloS") - - if (result.dataValues.kycDoc1) { - userdata.kycDoc1 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc1).toString('base64') - userdata.kycDoc2 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc2).toString('base64') - userdata.kycDoc3 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc3).toString('base64') - } - res.render("adminKYCpanel.ejs", { KYCdata: userdata }) - }) + res.send({ + data: [userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues, userdata.dataValues] + }); + }, + getUserData: async function(req, res) { + var userdata = new Object(); + User.find({ + where: { + "projectConfigurationCoinName": "don", + "id": req.params.userid + }, + }).then(result => { + console.log(result.dataValues) + userdata = result.dataValues; + console.log(userdata, "helloS") - }, - updateUserData: async function (req, res) { - var userdata = await User.find({ - where: { - "projectConfigurationCoinName": "don", "id": req.params.userid - }, - }) - userdata.kyc_verified = req.body.kyc_verified; - userdata.status = req.body.status; - userdata.save().then(function (result, error) { - if (!result) - console.log("not updated"); - console.log("updated"); - }) - res.redirect("/kycTab") - }, + if (result.dataValues.kycDoc1) { + userdata.kycDoc1 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc1).toString('base64') + userdata.kycDoc2 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc2).toString('base64') + userdata.kycDoc3 = 'data:image/bmp;base64,' + Buffer.from(result.dataValues.kycDoc3).toString('base64') + } + res.render("adminKYCpanel.ejs", { + KYCdata: userdata + }) + }) - contractData: async function (req, res) { - console.log(req.params); - ProjectConfiguration.find({ - where: { - 'coinSymbol': req.params.projectName - }, - attributes: { exclude: ["contractCode", "contractByteCode"] } - }).then(result => res.send({ "tokenAddress": result.dataValues.contractAddress, "crowdSaleAddress": result.dataValues.contractAddress }) - ) - }, + }, + updateUserData: async function(req, res) { + var userdata = await User.find({ + where: { + "projectConfigurationCoinName": "don", + "id": req.params.userid + }, + }) + userdata.kyc_verified = req.body.kyc_verified; + userdata.status = req.body.status; + userdata.save().then(function(result, error) { + if (!result) + console.log("not updated"); + console.log("updated"); + }) + res.redirect("/kycTab") + }, - //user login - userLogin: function (req, res) { - res.render("userLogin.ejs", { - message: req.flash('loginMessage') - }); - }, - getUserSignup: function (req, res) { - res.render("userSignup.ejs", { - projectName: req.params.projectName, - message: req.flash('signupMessage') - }); - }, + contractData: async function(req, res) { + console.log(req.params); + ProjectConfiguration.find({ + where: { + 'coinSymbol': req.params.projectName + }, + attributes: { + exclude: ["contractCode", "contractByteCode"] + } + }).then(result => res.send({ + "tokenAddress": result.dataValues.contractAddress, + "crowdSaleAddress": result.dataValues.contractAddress + })) + }, - getUserLogin: function (req, res) { - res.render("userLogin.ejs", { - 'projectName': req.params.projectName, - message: req.flash('signupMessage') - }); - }, + //user login + userLogin: function(req, res) { + res.render("userLogin.ejs", { + message: req.flash('loginMessage') + }); + }, + getUserSignup: function(req, res) { + res.render("userSignup.ejs", { + projectName: req.params.projectName, + message: req.flash('signupMessage') + }); + }, - postUserLogin: async function (req, res, next) { - passport.authenticate('user-login', { - session: false - }, async (err, user, info) => { - console.log("This is :" + user); - try { - if (err || !user) { - const error = new Error('An Error occured') - console.log(); - return res.json({ - 'token': "failure", - 'message': req.flash('loginMessage') - }); - } - const token = jwt.sign({ - userEmail: user.email, - projectName: user.projectConfigurationCoinName - }, configAuth.jwtAuthKey.secret, { - expiresIn: configAuth.jwtAuthKey.tokenLife - }); - //Send back the token to the user - res.cookie('token', token, { - expire: 360000 + Date.now() - }); - return res.json({ - 'token': "success" - }); - } catch (error) { - return next(error); - } - })(req, res, next); - }, + getUserLogin: function(req, res) { + res.render("userLogin.ejs", { + 'projectName': req.params.projectName, + message: req.flash('signupMessage') + }); + }, - postUserSignup: function (req, res, next) { - passport.authenticate('user-signup', { - session: false - }, async (err, user, info) => { - console.log(user); - try { - if (err || !user) { - return res.redirect('./userSignup'); - } - return res.redirect('./userLogin'); - } catch (error) { - return next(error); - } - })(req, res, next); - }, + postUserLogin: async function(req, res, next) { + passport.authenticate('user-login', { + session: false + }, async (err, user, info) => { + console.log("This is :" + user); + try { + if (err || !user) { + const error = new Error('An Error occured') + console.log(); + return res.json({ + 'token': "failure", + 'message': req.flash('loginMessage') + }); + } + const token = jwt.sign({ + userEmail: user.email, + projectName: user.projectConfigurationCoinName + }, configAuth.jwtAuthKey.secret, { + expiresIn: configAuth.jwtAuthKey.tokenLife + }); + //Send back the token to the user + res.cookie('token', token, { + expire: 360000 + Date.now() + }); + return res.json({ + 'token': "success" + }); + } catch (error) { + return next(error); + } + })(req, res, next); + }, + + postUserSignup: function(req, res, next) { + passport.authenticate('user-signup', { + session: false + }, async (err, user, info) => { + console.log(user); + try { + if (err || !user) { + return res.redirect('./userSignup'); + } + return res.redirect('./userLogin'); + } catch (error) { + return next(error); + } + })(req, res, next); + }, - verifyMail: (req, res) => { - console.log(req.query); - db.user.find({ + verifyMail: (req, res) => { + console.log(req.query); + db.user.find({ + where: { + uniqueId: req.query.verificationId + } + }).then((user) => { + user.emailVerified = true; + user.save().then((user) => { + res.redirect('./' + user.projectConfigurationCoinName + '/userLogin'); + }); + }); + } + +} + +function getProjectArray(email) { + var projectArray = []; + return new Promise(async function (resolve, reject) { + client.find({ where: { - uniqueId: req.query.verificationId - } - }).then((user) => { - user.emailVerified = true; - user.save().then((user) => { - res.redirect('./' + user.projectConfigurationCoinName + '/userLogin'); + 'email': email + }, + include: [{ + model: ProjectConfiguration, + attributes: ['coinName', 'contractAddress', 'contractHash'] + }], + }).then(client => { + client.projectConfigurations.forEach(element => { + projectArray.push(element.dataValues); }); + // res.send({'projectArray': projectArray}); + resolve(projectArray); }); - } - + }); } diff --git a/icoDashboardCreator/routes.js b/icoDashboardCreator/routes.js index 85aa26ee..59e5c5b0 100644 --- a/icoDashboardCreator/routes.js +++ b/icoDashboardCreator/routes.js @@ -1,10 +1,7 @@ const impl = require("./impl"); -const DataURI = require('datauri').promise; var db = require('../database/models/index'); var path = require('path'); var client = db.client; -console.log(path.join(__dirname, './dist'),"dir") - module.exports = function (app,express) { app.get('/icoDashboardSetup/project/:projectName', isLoggedIn,hasVerified, hasPackage3, impl.icoDashboardSetup); diff --git a/icoDashboardCreator/userAuthImpl.js b/icoDashboardCreator/userAuthImpl.js index c0df5e15..219de2fd 100644 --- a/icoDashboardCreator/userAuthImpl.js +++ b/icoDashboardCreator/userAuthImpl.js @@ -1,13 +1,14 @@ var db = require('../database/models/index'); var User = db.user; +var Address = db.userCurrencyAddress; var fs = require('fs'); var configAuth = require('../config/auth'); const Binance = require('node-binance-api'); var coinPaymentHandler = require('../coinPayments/impl'); +var icoListener = require('../icoHandler/listener'); module.exports = { getTransactions: (req, res, next) => { - console.log(req.user); var projectConfiguration = req.user.projectConfiguration; res.render('userTransactionHistory', { user: req.user, @@ -75,7 +76,6 @@ module.exports = { }, getPrices: async (req, res, next) => { - console.log("Getting price"); const binance = Binance().options({ APIKEY: configAuth.binanceKey.apiKey, APISECRET: configAuth.binanceKey.apiSecret, @@ -84,7 +84,6 @@ module.exports = { }); binance.prices((error, ticker) => { - console.log(); res.send({ BTC: 1/ticker.ETHBTC, BTCUSD: ticker.BTCUSDT, @@ -120,12 +119,49 @@ module.exports = { }); }, - buyToken: async (req, res) => { - txInfo = await coinPaymentHandler.buyToken(req.body.second_currency, req.body.second_currency, req.body.amount, req.user.email); - console.log(txInfo); + loadWallet: async (req, res) => { + txInfo = await coinPaymentHandler.buyToken(req.body.second_currency, req.body.second_currency, req.body.amount, req.user.email, req.user.userCurrencyAddresses[0].address); res.render('userTokenPayment', { user: req.user, qrCodeLink: txInfo.qrcode_url }); + }, + + checkBalances: (req, res) => { + var btc_address, eth_address; + for(var i=0; i { + res.send({ + 'tokenBalance': tokenBalance, + 'balance': ethBalance, + 'btcBalance': btcBalance + }); + }); + }, + + buyToken: async (req, res) => { + icoListener.buyToken(req.user.userCurrencyAddresses[0].address, req.user.projectConfiguration.contractAddress, req.user.userCurrencyAddresses[0].privateKey, req.body.amount) + .then((receipt)=> { + res.send({'receipt': receipt}); + }); + }, + + checkTokenStats: (req, res) => { + icoListener.checkTokenStats(req.user.projectConfiguration.contractAddress).then(onSaleTokens => { + res.send({'onSaleTokens': onSaleTokens}); + }); + }, + + getTransactions: (req, res) => { + icoListener.getTransactions(req.user.userCurrencyAddresses[0].address).then(tx => { + res.send(tx); + }) } } diff --git a/icoDashboardCreator/userAuthRoutes.js b/icoDashboardCreator/userAuthRoutes.js index 9d03174d..9a9f7807 100644 --- a/icoDashboardCreator/userAuthRoutes.js +++ b/icoDashboardCreator/userAuthRoutes.js @@ -21,7 +21,11 @@ router.get('/profile', isAuthenticated, kycVerified, impl.getProfileEditPage); router.post('/profile', isAuthenticated, impl.postProfileEditPage); router.get('/getPrices', isAuthenticated, impl.getPrices); router.post('/kycUpload', isAuthenticated, impl.uploadKYC); -router.post('/buyToken', isAuthenticated, impl.buyToken); +router.post('/loadWallet', isAuthenticated, impl.loadWallet); +router.get('/api/checkBalances', isAuthenticated, impl.checkBalances); +router.post('/api/buyToken', isAuthenticated, impl.buyToken); +router.get('/api/checkTokenStats', isAuthenticated, impl.checkTokenStats); +router.get('/api/getTransactions', isAuthenticated, impl.getTransactions); function isAuthenticated(req, res, next) { var token = req.cookies['token']; diff --git a/icoHandler/listener.js b/icoHandler/listener.js new file mode 100644 index 00000000..bd1b70c7 --- /dev/null +++ b/icoHandler/listener.js @@ -0,0 +1,102 @@ +var db = require('../database/models/index'); +var client = db.client; +var Address = db.userCurrencyAddress; +var config = require('../config/paymentListener'); +var balance = require('crypto-balances'); +let Promise = require('bluebird'); +const Web3 = require('web3'); +var ws_provider = "wss://ropsten.infura.io/ws"; +var web3 = new Web3(); +var provider = new Web3.providers.WebsocketProvider(ws_provider); +web3.setProvider(provider); +providerHandler(provider, ws_provider, web3); + +module.exports = { + checkBalance: (address) => { + return new Promise(function(resolve, reject) { + balance(address, function(err, result){ + if(err) + reject(err); + resolve(result[0].quantity); + }); + }); + }, + + checkTokenBalance: async (address, tokenAddress) => { + return new Promise(async function(resolve, reject) { + var tokenContractInstance = new web3.eth.Contract(config.erc20ABI, tokenAddress); + decimals = await tokenContractInstance.methods.decimals().call(); + tokenContractInstance.methods.balanceOf(address).call().then(balance => { + resolve(balance / 10 ** decimals); + }).catch(async error => { + provider = new Web3.providers.WebsocketProvider(ws_provider); + web3.setProvider(provider); + reject(error); + }); + }); + }, + + buyToken: async (address, tokenAddress, privateKey, value) => { + var amountToSend = web3.utils.toWei(value, 'ether'); + return new Promise(function(resolve, reject) { + var tokenContractInstance = new web3.eth.Contract(config.erc20ABI, tokenAddress); + var transaction = { + "from": address, + "to": tokenAddress, + "value": amountToSend, + "data": tokenContractInstance.methods.buyTokens().encodeABI() + }; + web3.eth.estimateGas(transaction).then(gasLimit => { + transaction["gasLimit"] = gasLimit; + web3.eth.accounts.signTransaction(transaction, privateKey).then(result => { + web3.eth.sendSignedTransaction(result.rawTransaction).then(receipt => { + resolve(receipt); + }); + }); + }); + }); + }, + + checkTokenStats: async (tokenAddress) => { + return new Promise(async function(resolve, reject) { + var tokenContractInstance = new web3.eth.Contract(config.erc20ABI, tokenAddress); + var decimals = await tokenContractInstance.methods.decimals().call(); + console.log(decimals); + var onSaleTokens = await tokenContractInstance.methods.onSaleTokens.call().call(); + resolve(onSaleTokens / 10 ** decimals); + }); + }, + + getTransactions: async (address) => { + return new Promise(async function(resolve, reject) { + web3.eth.getPastLogs({ + fromBlock: '0x0', + address: address + }) + .then(res => { + console.log(res); + res.forEach(rec => { + resolve(rec); + console.log(rec.blockNumber, rec.transactionHash, rec.topics); + }); + }).catch(err => console.log("getPastLogs failed", err)); + + }); + } +} + +function providerHandler(provider, ws_provider, web3) { + provider.on('connect', () => console.log('ICO WS Connected')) + provider.on('error', e => { + console.log('WS error occured'); + console.log('Attempting to reconnect...'); + provider = new Web3.providers.WebsocketProvider(ws_provider); + web3.setProvider(provider); + }); + provider.on('end', e => { + console.log('WS closed'); + console.log('Attempting to reconnect...'); + provider = new Web3.providers.WebsocketProvider(ws_provider); + web3.setProvider(provider); + }); +} diff --git a/package-lock.json b/package-lock.json index 0d6a920d..b17c8e37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -344,11 +344,21 @@ "tweetnacl": "0.14.5" } }, + "bech32": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz", + "integrity": "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" + }, "beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", @@ -359,6 +369,19 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" }, + "bip32": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.2.tgz", + "integrity": "sha512-kedLYj8yvYzND+EfzeoMSlGiN7ImiRBF/MClJSZPkMfcU+OQO7ZpL5L/Yg+TunebBZIHhunstiQF//KLKSF5rg==", + "requires": { + "bs58check": "2.1.2", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "tiny-secp256k1": "1.0.1", + "typeforce": "1.13.2", + "wif": "2.0.6" + } + }, "bip66": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", @@ -367,6 +390,33 @@ "safe-buffer": "5.1.1" } }, + "bitcoin-ops": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" + }, + "bitcoinjs-lib": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-4.0.2.tgz", + "integrity": "sha512-Y6AW91WPDoDQQLy4FejVoH4NvENqvMy+Q/8mnakEzckG1NXiLo0VgnEZyuvZb6lkhE2+YxzTCgpqzbnerOSpEg==", + "requires": { + "bech32": "1.1.3", + "bip32": "1.0.2", + "bip66": "1.1.5", + "bitcoin-ops": "1.4.1", + "bs58check": "2.1.2", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "merkle-lib": "2.0.10", + "pushdata-bitcoin": "1.0.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.1", + "tiny-secp256k1": "1.0.1", + "typeforce": "1.13.2", + "varuint-bitcoin": "1.1.0", + "wif": "2.0.6" + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -733,6 +783,7 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.2", + "fsevents": "1.2.4", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1162,6 +1213,53 @@ "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" }, + "crypto-balances": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/crypto-balances/-/crypto-balances-2.1.3.tgz", + "integrity": "sha1-F7J0GyB+owq4SSfgT+4oTl2bHJE=", + "requires": { + "big.js": "3.2.0", + "bluebird": "2.11.0", + "bs58check": "1.3.4", + "lodash": "3.10.1", + "numeral": "1.5.6", + "request": "2.82.0" + }, + "dependencies": { + "base-x": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", + "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" + }, + "bluebird": { + "version": "2.11.0", + "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + }, + "bs58": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", + "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", + "requires": { + "base-x": "1.1.0" + } + }, + "bs58check": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-1.3.4.tgz", + "integrity": "sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=", + "requires": { + "bs58": "3.1.0", + "create-hash": "1.2.0" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" + } + } + }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -2506,6 +2604,468 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, "fstream": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", @@ -3915,6 +4475,11 @@ } } }, + "localStorage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/localStorage/-/localStorage-1.0.3.tgz", + "integrity": "sha1-5riaV7t2ChVqOMyH4PJVD27UE9g=" + }, "localforage": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.2.tgz", @@ -3923,11 +4488,6 @@ "lie": "3.1.1" } }, - "localStorage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/localStorage/-/localStorage-1.0.3.tgz", - "integrity": "sha1-5riaV7t2ChVqOMyH4PJVD27UE9g=" - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -4245,6 +4805,11 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merkle-lib": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", + "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -4807,6 +5372,11 @@ } } }, + "numeral": { + "version": "1.5.6", + "resolved": "http://registry.npmjs.org/numeral/-/numeral-1.5.6.tgz", + "integrity": "sha1-ODHbloRRuc9q/5v5WSXx7443sz8=" + }, "oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -5512,6 +6082,14 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, + "pushdata-bitcoin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", + "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", + "requires": { + "bitcoin-ops": "1.4.1" + } + }, "qrcode": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.2.2.tgz", @@ -5906,15 +6484,6 @@ } } }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "2.0.0", - "semver": "5.5.0" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5930,6 +6499,15 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.5.0" + } + }, "resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", @@ -6728,14 +7306,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.1" - } - }, "string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", @@ -6750,6 +7320,14 @@ "strip-ansi": "4.0.0" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "stringify-parameters": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stringify-parameters/-/stringify-parameters-0.0.4.tgz", @@ -7045,6 +7623,18 @@ "next-tick": "1.0.0" } }, + "tiny-secp256k1": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.0.1.tgz", + "integrity": "sha512-Wz2kMPWtCI5XBftFeF3bUL8uz2+VlasniKwOkRPjvL7h1QVd9rbhrve/HWUu747kJKzVf1XHonzcdM4Ut8fvww==", + "requires": { + "bindings": "1.3.0", + "bn.js": "4.11.8", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "nan": "2.10.0" + } + }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", @@ -7150,6 +7740,11 @@ "is-typedarray": "1.0.0" } }, + "typeforce": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.13.2.tgz", + "integrity": "sha512-NBEHFw7hWhzFtr/D73xffwlk7l6QjExtSrS9nhg9VeU5U94tJIeNLgN74bm6V+pUaN8RF14QhL+wXItZJBMJBA==" + }, "typical": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", @@ -7446,6 +8041,14 @@ "resolved": "https://registry.npmjs.org/validator/-/validator-10.7.0.tgz", "integrity": "sha512-7Z4kif6HeMLroCQZvh8lwCtmPOqBTkTkt5ibXtJR8sOkzWdjW+YIJOZUpPFlfq59zYvnpSPVd4UX5QYnSCLWgA==" }, + "varuint-bitcoin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz", + "integrity": "sha512-jCEPG+COU/1Rp84neKTyDJQr478/hAfVp5xxYn09QEH0yBjbmPeMfuuQIrp+BUD83hybtYZKhr5elV3bvdV1bA==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -7977,6 +8580,14 @@ "string-width": "2.1.1" } }, + "wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", + "requires": { + "bs58check": "2.1.2" + } + }, "window-or-global": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/window-or-global/-/window-or-global-1.0.1.tgz", diff --git a/package.json b/package.json index 8cd9c09d..b7d4e741 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,13 @@ "dependencies": { "base64-stream": "^0.1.3", "bcrypt-nodejs": "0.0.3", + "bitcoinjs-lib": "^4.0.2", "bluebird": "^3.5.2", "coinpayments": "^2.0.0", "connect-flash": "^0.1.1", "cookie-parser": "~1.4.3", "crypto": "^1.0.1", + "crypto-balances": "^2.1.3", "datauri": "^1.1.0", "dataurl": "^0.1.0", "debug": "~2.6.9", diff --git a/packageCart/paymentListener.js b/packageCart/paymentListener.js index b1da4f23..97a83bd9 100644 --- a/packageCart/paymentListener.js +++ b/packageCart/paymentListener.js @@ -92,9 +92,6 @@ module.exports = { contractInstance.methods.balanceOf(address).call().then(balance => { resolve(balance / 10 ** 18); }).catch(error => { - console.log("Web3 error status", error); - provider = new Web3.providers.WebsocketProvider(ws_provider); - web3.setProvider(provider); reject(error); }); }); @@ -105,6 +102,9 @@ module.exports = { web3.eth.getBalance(address).then(balance => { resolve(web3.utils.fromWei(balance)); }).catch(error => { + console.log("Web3 error status", error); + provider = new Web3.providers.WebsocketProvider(ws_provider); + web3.setProvider(provider); reject(error); }); }); diff --git a/views/userDashboard.ejs b/views/userDashboard.ejs index 2dca5a6e..d99f16d4 100644 --- a/views/userDashboard.ejs +++ b/views/userDashboard.ejs @@ -53,7 +53,7 @@
-
+
@@ -95,7 +95,7 @@
- +
@@ -154,8 +154,8 @@
-
<%= projectConfiguration.coinSymbol %> SOLD
-

<%= projectConfiguration.tokenSold %>/ <%= projectConfiguration.hardCap %>

+
<%= projectConfiguration.coinSymbol %> ON SALE
+

/ <%= projectConfiguration.hardCap %>

@@ -242,11 +242,6 @@ - - - diff --git a/views/userTransactionHistory.ejs b/views/userTransactionHistory.ejs index 17ecf427..8ab91f3a 100644 --- a/views/userTransactionHistory.ejs +++ b/views/userTransactionHistory.ejs @@ -78,6 +78,15 @@ - - diff --git a/views/userWalletPage.ejs b/views/userWalletPage.ejs index 3d151bcd..cdbdad22 100644 --- a/views/userWalletPage.ejs +++ b/views/userWalletPage.ejs @@ -32,8 +32,8 @@ <% for(var i=0; i -
<%= addresses[i].currency_id %>
-
<%= addresses[i].balance %>
+
<%= addresses[i].currency_id %>
+
<%= addresses[i].balance %>
@@ -359,5 +359,22 @@ + +