diff --git a/CHANGELOG.md b/CHANGELOG.md index 562d7c4f4..71457d9d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. [__2.1.0__](https://www.npmjs.com/package/polymath-core?activeTab=readme) __13-09-18__ -# CappedSTO 2.0.1 +## CappedSTO 2.0.1 * `rate` is now accepted as multiplied by 10^18 to allow settting higher price than 1ETH/POLY per token. ## USDTieredSTO 2.0.1 diff --git a/CLI/commands/ST20Generator.js b/CLI/commands/ST20Generator.js index 1288fc17f..689b2b27f 100644 --- a/CLI/commands/ST20Generator.js +++ b/CLI/commands/ST20Generator.js @@ -29,7 +29,7 @@ async function executeApp(_ticker, _transferOwnership, _name, _details, _divisib try { await step_ticker_registration(_ticker); if (!tokenLaunched) { - await step_transfer_ticker_ownership(_transferOwnership); + await step_transfer_ticker_ownership(_transferOwnership); await step_token_deploy(_name, _details, _divisible); } await tokenManager.executeApp(tokenSymbol); @@ -39,7 +39,7 @@ async function executeApp(_ticker, _transferOwnership, _name, _details, _divisib } }; -async function setup(){ +async function setup() { try { securityTokenRegistryAddress = await contracts.securityTokenRegistry(); let securityTokenRegistryABI = abis.securityTokenRegistry(); @@ -79,7 +79,7 @@ async function step_ticker_registration(_ticker) { available = true; await approvePoly(securityTokenRegistryAddress, regFee); let registerTickerAction = securityTokenRegistry.methods.registerTicker(Issuer.address, tokenSymbol, ""); - await common.sendTransaction(registerTickerAction, {factor: 1.5}); + await common.sendTransaction(registerTickerAction, { factor: 1.5 }); } else if (details[0] == Issuer.address) { // If it has registration date and its owner is Issuer available = true; @@ -107,7 +107,7 @@ async function step_transfer_ticker_ownership(_transferOwnership) { if (newOwner) { let transferTickerOwnershipAction = securityTokenRegistry.methods.transferTickerOwnership(newOwner, tokenSymbol); - let receipt = await common.sendTransaction(transferTickerOwnershipAction, {factor: 1.5}); + let receipt = await common.sendTransaction(transferTickerOwnershipAction, { factor: 1.5 }); let event = common.getEventFromLogs(securityTokenRegistry._jsonInterface, receipt.logs, 'ChangeTickerOwnership'); console.log(chalk.green(`Ownership trasferred successfully. The new owner is ${event._newOwner}`)); process.exit(0); @@ -125,7 +125,7 @@ async function step_token_deploy(_name, _details, _divisible) { tokenName = _name; console.log(`Token Name: ${tokenName}`); } else { - tokenName = readlineSync.question('Enter the name for your new token: ', {defaultInput: 'default'}); + tokenName = readlineSync.question('Enter the name for your new token: ', { defaultInput: 'default' }); } let tokenDetails; @@ -195,16 +195,16 @@ async function approvePoly(spender, fee) { await common.sendTransaction(approveAction); } } else { - let requiredBalance = parseInt(requiredAmount) - parseInt(polyBalance); - console.log(chalk.red(`\n*****************************************************************************************************************************************`)); - console.log(chalk.red(`Not enough balance to Pay the Fee, Require ${(new BigNumber(requiredBalance).dividedBy(new BigNumber(10).pow(18))).toNumber()} POLY but have ${(new BigNumber(polyBalance).dividedBy(new BigNumber(10).pow(18))).toNumber()} POLY. Access POLY faucet to get the POLY to complete this txn`)); - console.log(chalk.red(`******************************************************************************************************************************************\n`)); - process.exit(0); + let requiredBalance = parseInt(requiredAmount) - parseInt(polyBalance); + console.log(chalk.red(`\n*****************************************************************************************************************************************`)); + console.log(chalk.red(`Not enough balance to Pay the Fee, Require ${(new BigNumber(requiredBalance).dividedBy(new BigNumber(10).pow(18))).toNumber()} POLY but have ${(new BigNumber(polyBalance).dividedBy(new BigNumber(10).pow(18))).toNumber()} POLY. Access POLY faucet to get the POLY to complete this txn`)); + console.log(chalk.red(`******************************************************************************************************************************************\n`)); + process.exit(0); } } module.exports = { - executeApp: async function(ticker, transferOwnership, name, details, divisible) { + executeApp: async function (ticker, transferOwnership, name, details, divisible) { return executeApp(ticker, transferOwnership, name, details, divisible); } } diff --git a/CLI/commands/common/common_functions.js b/CLI/commands/common/common_functions.js index c19834037..fb3db68b7 100644 --- a/CLI/commands/common/common_functions.js +++ b/CLI/commands/common/common_functions.js @@ -34,13 +34,14 @@ function getFinalOptions(options) { from: Issuer, gasPrice: defaultGasPrice, value: undefined, - factor: 1.2 + factor: 1.2, + minNonce: 0 } return Object.assign(defaultOptions, options) }; async function getGasLimit(options, action) { - let block = await web3.eth.getBlock("latest"); + let block = await web3.eth.getBlock('latest'); let networkGasLimit = block.gasLimit; let gas = Math.round(options.factor * (await action.estimateGas({ from: options.from.address, value: options.value }))); return (gas > networkGasLimit) ? networkGasLimit : gas; @@ -98,6 +99,9 @@ module.exports = { %%%. `); }, + getNonce: async function (from) { + return (await web3.eth.getTransactionCount(from.address, "pending")); + }, sendTransaction: async function (action, options) { await checkPermissions(action); @@ -107,6 +111,9 @@ module.exports = { console.log(chalk.black.bgYellowBright(`---- Transaction executed: ${action._method.name} - Gas limit provided: ${gasLimit} ----`)); let nonce = await web3.eth.getTransactionCount(options.from.address); + if (nonce < options.minNonce) { + nonce = minNonce; + } let abi = action.encodeABI(); let parameter = { from: options.from.address, diff --git a/CLI/commands/common/global.js b/CLI/commands/common/global.js index 525030aea..51972ea92 100644 --- a/CLI/commands/common/global.js +++ b/CLI/commands/common/global.js @@ -3,7 +3,7 @@ const constants = require('./constants'); global.web3, global.Issuer, global.defaultGasPrice, global.remoteNetwork; -function getGasPrice (networkId) { +function getGasPrice(networkId) { let gasPrice; switch (networkId) { case 1: //Mainnet @@ -36,7 +36,7 @@ async function httpProvider(url, file) { } module.exports = { - initialize: async function(network) { + initialize: async function (network) { remoteNetwork = network; if (typeof web3 === 'undefined' || typeof Issuer === 'undefined' || typeof defaultGasPrice === 'undefined') { if (typeof remoteNetwork !== 'undefined') { diff --git a/CLI/commands/helpers/contract_addresses.js b/CLI/commands/helpers/contract_addresses.js index 4d5971714..59a2f39c4 100644 --- a/CLI/commands/helpers/contract_addresses.js +++ b/CLI/commands/helpers/contract_addresses.js @@ -7,7 +7,7 @@ function getPolymathRegistryAddress(networkId) { let result; switch (networkId) { case 1: // MAINNET - result = "0x06595656b93ce14834f0d22b7bbda4382d5ab510"; + result = "0xdfabf3e4793cd30affb47ab6fa4cf4eef26bbc27"; break; case 3: // ROPSTEN result = ""; @@ -16,7 +16,7 @@ function getPolymathRegistryAddress(networkId) { result = JSON.parse(require('fs').readFileSync('./build/contracts/PolymathRegistry.json').toString()).networks[networkId].address; break; case 42: // KOVAN - result = "0xad09dc7939f09601674c69a07132bc642abeeb10"; + result = "0x5b215a7d39ee305ad28da29bf2f0425c6c2a00b3"; break; } diff --git a/CLI/commands/strMigrator.js b/CLI/commands/strMigrator.js index 1e42ec46d..4a8dabfe0 100644 --- a/CLI/commands/strMigrator.js +++ b/CLI/commands/strMigrator.js @@ -6,329 +6,369 @@ var contracts = require('./helpers/contract_addresses'); var common = require('./common/common_functions'); var gbl = require('./common/global'); -async function executeApp(toStrAddress, fromTrAddress, fromStrAddress) { - - common.logAsciiBull(); - console.log("****************************************"); - console.log("Welcome to the Command-Line STR Migrator"); - console.log("****************************************"); - console.log("The following script will migrate tokens from old STR to new one."); - console.log("Issuer Account: " + Issuer.address + "\n"); - - try { - let toSecurityTokenRegistry = await step_instance_toSTR(toStrAddress); - let fromTickerRegistry = await step_instance_fromTR(fromTrAddress); - let tickers = await step_get_registered_tickers(fromTickerRegistry); - await step_register_tickers(tickers, toSecurityTokenRegistry); - let fromSecurityTokenRegistry = await step_instance_fromSTR(fromStrAddress); - let tokens = await step_get_deployed_tokens(fromSecurityTokenRegistry); - await step_launch_STs(tokens, toSecurityTokenRegistry); - } catch (err) { - console.log(err); - return; +let network; +let minNonce; + +async function executeApp(toStrAddress, fromTrAddress, fromStrAddress, singleTicker, tokenAddress, onlyTickers, remoteNetwork) { + network = remoteNetwork; + await global.initialize(remoteNetwork); + + common.logAsciiBull(); + console.log("****************************************"); + console.log("Welcome to the Command-Line STR Migrator"); + console.log("****************************************"); + console.log("The following script will migrate tokens from old STR to new one."); + console.log("Issuer Account: " + Issuer.address + "\n"); + + try { + minNonce = await common.getNonce(Issuer); + let toSecurityTokenRegistry = await step_instance_toSTR(toStrAddress); + if (typeof tokenAddress === 'undefined') { + let fromTickerRegistry = await step_instance_fromTR(fromTrAddress); + let tickers = await step_get_registered_tickers(fromTickerRegistry, singleTicker, onlyTickers); + await step_register_tickers(tickers, toSecurityTokenRegistry); } + if (typeof onlyTickers === 'undefined') { + let fromSecurityTokenRegistry = await step_instance_fromSTR(fromStrAddress); + let tokens = await step_get_deployed_tokens(fromSecurityTokenRegistry, singleTicker); + await step_launch_STs(tokens, toSecurityTokenRegistry, tokenAddress); + } + } catch (err) { + console.log(err); + return; + } } -async function step_instance_toSTR(toStrAddress){ - let _toStrAddress; - if (typeof toStrAddress !== 'undefined') { - if (web3.utils.isAddress(toStrAddress)) { - _toStrAddress = toStrAddress; - } else { - console.log(chalk.red("Entered toStrAddress is not a valid address.")); - return; - } +async function step_instance_toSTR(toStrAddress) { + let _toStrAddress; + if (typeof toStrAddress !== 'undefined') { + if (web3.utils.isAddress(toStrAddress)) { + _toStrAddress = toStrAddress; } else { - _toStrAddress = readlineSync.question('Enter the new SecurityTokenRegistry address to migrate TO: ', { - limit: function(input) { - return web3.utils.isAddress(input); - }, - limitMessage: "Must be a valid address" - }); + console.log(chalk.red("Entered toStrAddress is not a valid address.")); + return; } - - console.log(`Creating SecurityTokenRegistry contract instance of address: ${_toStrAddress}...`); - let securityTokenRegistryABI = abis.securityTokenRegistry(); - let toSTR = new web3.eth.Contract(securityTokenRegistryABI, _toStrAddress); - toSTR.setProvider(web3.currentProvider); - - return toSTR; + } else { + // _toStrAddress = readlineSync.question('Enter the new SecurityTokenRegistry address to migrate TO: ', { + // limit: function(input) { + // return web3.utils.isAddress(input); + // }, + // limitMessage: "Must be a valid address" + // }); + _toStrAddress = "0x240f9f86b1465bf1b8eb29bc88cbf65573dfdd97"; + } + + console.log(`Creating SecurityTokenRegistry contract instance of address: ${_toStrAddress}...`); + let securityTokenRegistryABI = abis.securityTokenRegistry(); + let toSTR = new web3.eth.Contract(securityTokenRegistryABI, _toStrAddress); + toSTR.setProvider(web3.currentProvider); + + return toSTR; } -async function step_instance_fromTR(fromTrAddress){ - let _fromTrAddress; - if (typeof fromTrAddress !== 'undefined') { - if (web3.utils.isAddress(fromTrAddress)) { - _fromTrAddress = fromTrAddress; - } else { - console.log(chalk.red("Entered fromTrAddress is not a valid address.")); - return; - } +async function step_instance_fromTR(fromTrAddress) { + let _fromTrAddress; + if (typeof fromTrAddress !== 'undefined') { + if (web3.utils.isAddress(fromTrAddress)) { + _fromTrAddress = fromTrAddress; } else { - _fromTrAddress = readlineSync.question('Enter the old TikcerRegistry address to migrate FROM: ', { - limit: function(input) { - return web3.utils.isAddress(input); - }, - limitMessage: "Must be a valid address" - }); + console.log(chalk.red("Entered fromTrAddress is not a valid address.")); + return; } - - console.log(`Creating TickerRegistry contract instance of address: ${_fromTrAddress}...`); - let tickerRegistryABI = await getABIfromEtherscan(_fromTrAddress); - let fromTR = new web3.eth.Contract(tickerRegistryABI, _fromTrAddress); - fromTR.setProvider(web3.currentProvider); - - return fromTR; + } else { + // _fromTrAddress = readlineSync.question('Enter the old TikcerRegistry address to migrate FROM: ', { + // limit: function(input) { + // return web3.utils.isAddress(input); + // }, + // limitMessage: "Must be a valid address" + // }); + _fromTrAddress = "0xc31714e6759a1ee26db1d06af1ed276340cd4233"; + } + + console.log(`Creating TickerRegistry contract instance of address: ${_fromTrAddress}...`); + let tickerRegistryABI = await getABIfromEtherscan(_fromTrAddress); + let fromTR = new web3.eth.Contract(tickerRegistryABI, _fromTrAddress); + fromTR.setProvider(web3.currentProvider); + + return fromTR; } -async function step_get_registered_tickers(tickerRegistry) { - let tickers = []; - let expiryTime = await tickerRegistry.methods.expiryLimit().call(); - - let events = await tickerRegistry.getPastEvents('LogRegisterTicker', { fromBlock: 0}); - if (events.length == 0) { - console.log("No ticker registration events were emitted."); - } else { - for (let event of events) { - //for (let index = 0; index < 2; index++) { - //const event = events[index]; - let details = await tickerRegistry.methods.getDetails(event.returnValues._symbol).call(); - let _symbol = event.returnValues._symbol; - let _owner = details[0]; - let _name = details[2]; - let _registrationDate = details[1]; - let _status = details[4]; - - console.log(`------------ Ticker Registered ------------`); - console.log(`Ticker: ${_symbol}`); - console.log(`Owner: ${_owner}`); - console.log(`Token name: ${_name}`); - console.log(`Timestamp: ${_registrationDate}`); - console.log(`Transaction hash: ${event.transactionHash}`); - console.log(`-------------------------------------------`); - console.log(`\n`); - - tickers.push({ - ticker: _symbol, - owner: _owner, - name: _name, - registrationDate: new web3.utils.BN(_registrationDate), - expiryDate: new web3.utils.BN(_registrationDate).add(new web3.utils.BN(expiryTime)), - status: _status - }); +async function step_get_registered_tickers(tickerRegistry, singleTicker, onlyTickers) { + let tickers = []; + let expiryTime = await tickerRegistry.methods.expiryLimit().call(); + + let logs = await getLogsFromEtherscan(tickerRegistry.options.address, 0, 'latest', 'LogRegisterTicker(address,string,string,bytes32,uint256)'); + if (logs.length == 0) { + console.log("No ticker registration events were emitted."); + } else { + for (let log of logs) { + let event = common.getEventFromLogs(tickerRegistry._jsonInterface, [log], 'LogRegisterTicker'); + if (typeof singleTicker === 'undefined' || event._symbol == singleTicker) { + let details = await tickerRegistry.methods.getDetails(event._symbol).call(); + let _status = details[4]; + if (typeof onlyTickers === 'undefined' || (onlyTickers && !_status)) { + let expiredTicker = details[0] == '0x0000000000000000000000000000000000000000'; + let _symbol = event._symbol; + let _owner = expiredTicker ? event._owner : details[0]; + let _name = expiredTicker ? event._name : details[2]; + let _registrationDate = expiredTicker ? event._timestamp : details[1]; + + + console.log(`------------ Ticker Registered ------------`); + console.log(`Ticker: ${_symbol}`); + console.log(`Owner: ${_owner}`); + console.log(`Token name: ${_name}`); + console.log(`Timestamp: ${_registrationDate}`); + console.log(`Transaction hash: ${log.transactionHash}`); + console.log(`-------------------------------------------`); + console.log(`\n`); + + tickers.push({ + ticker: _symbol, + owner: _owner, + name: _name, + registrationDate: new web3.utils.BN(_registrationDate), + expiryDate: new web3.utils.BN(_registrationDate).add(new web3.utils.BN(expiryTime)), + status: _status + }); } + } } + } - console.log(chalk.yellow(`${tickers.length} tickers found!`)); - return tickers; + console.log(chalk.yellow(`${tickers.length} tickers found!`)); + return tickers; } async function step_register_tickers(tickers, securityTokenRegistry) { - if (readlineSync.keyInYNStrict(`Do you want to migrate a single Ticker?`)) { - let tickerToMigrate = readlineSync.question(`Enter the ticker to migrate: `); - tickers = tickers.filter(t => t.ticker == tickerToMigrate); - } - - if (tickers.length == 0) { - console.log(chalk.yellow(`There are no tickers to migrate!`)); - } else if (readlineSync.keyInYNStrict(`Do you want to migrate ${tickers.length} Tickers?`)) { - let i = 0; - let succeed = []; - let failed = []; - let totalGas = new web3.utils.BN(0); - for (const t of tickers) { - console.log(`\n`); - console.log(`-------- Migrating ticker No ${++i}--------`); - console.log(`Ticker: ${t.ticker}`); - console.log(``); - try { - let modifyTickerAction = securityTokenRegistry.methods.modifyTicker(t.owner, t.ticker, t.name, t.registrationDate, t.expiryDate, false); - let receipt = await common.sendTransaction(modifyTickerAction); - totalGas = totalGas.add(new web3.utils.BN(receipt.gasUsed)); - succeed.push(t); - } catch (error) { - failed.push(t); - console.log(chalk.red(`Transaction failed!!! `)) - console.log(error); - } + if (tickers.length == 0) { + console.log(chalk.yellow(`There are no tickers to migrate!`)); + } else /*if (readlineSync.keyInYNStrict(`Do you want to migrate ${tickers.length} Tickers?`)) */ { + let i = 0; + let succeed = []; + let failed = []; + let totalGas = new web3.utils.BN(0); + let migrateAll = false; + for (const t of tickers) { + if (migrateAll || readlineSync.keyInYNStrict(`Do you want to migrate ${t.ticker}?`)) { + if (!migrateAll) { + migrateAll = readlineSync.keyInYNStrict(`Do you want to migrate all tickers from here?`) } - - logTickerResults(succeed, failed, totalGas); + console.log(`\n`); + console.log(`-------- Migrating ticker No ${++i}--------`); + console.log(`Ticker: ${t.ticker}`); + console.log(``); + try { + let modifyTickerAction = securityTokenRegistry.methods.modifyTicker(t.owner, t.ticker, t.name, t.registrationDate, t.expiryDate, false); + let receipt = await common.sendTransaction(modifyTickerAction, { minNonce: minNonce }); + console.log(minNonce); + minNonce = minNonce + 1; + //totalGas = totalGas.add(new web3.utils.BN(receipt.gasUsed)); + succeed.push(t); + } catch (error) { + failed.push(t); + console.log(chalk.red(`Transaction failed!!! `)) + console.log(error); + } + } } + + logTickerResults(succeed, failed, totalGas); + } } -async function step_instance_fromSTR(fromStrAddress){ - let _fromStrAddress; - if (typeof fromStrAddress !== 'undefined') { - if (web3.utils.isAddress(fromStrAddress)) { - _fromStrAddress = fromStrAddress; - } else { - console.log(chalk.red("Entered fromStrAddress is not a valid address.")); - return; - } +async function step_instance_fromSTR(fromStrAddress) { + let _fromStrAddress; + if (typeof fromStrAddress !== 'undefined') { + if (web3.utils.isAddress(fromStrAddress)) { + _fromStrAddress = fromStrAddress; } else { - _fromStrAddress = readlineSync.question('Enter the old SecurityTokenRegistry address to migrate FROM: ', { - limit: function(input) { - return web3.utils.isAddress(input); - }, - limitMessage: "Must be a valid address" - }); + console.log(chalk.red("Entered fromStrAddress is not a valid address.")); + return; } - - console.log(`Creating SecurityTokenRegistry contract instance of address: ${_fromStrAddress}...`); - let securityTokenRegistryABI = await getABIfromEtherscan(_fromStrAddress); - let fromSTR = new web3.eth.Contract(securityTokenRegistryABI, _fromStrAddress); - fromSTR.setProvider(web3.currentProvider); - - return fromSTR; + } else { + // _fromStrAddress = readlineSync.question('Enter the old SecurityTokenRegistry address to migrate FROM: ', { + // limit: function(input) { + // return web3.utils.isAddress(input); + // }, + // limitMessage: "Must be a valid address" + // }); + _fromStrAddress = "0xef58491224958d978facf55d2120c55a24516b98"; + } + + console.log(`Creating SecurityTokenRegistry contract instance of address: ${_fromStrAddress}...`); + let securityTokenRegistryABI = await getABIfromEtherscan(_fromStrAddress); + let fromSTR = new web3.eth.Contract(securityTokenRegistryABI, _fromStrAddress); + fromSTR.setProvider(web3.currentProvider); + + return fromSTR; } -async function step_get_deployed_tokens(securityTokenRegistry) { - let tokens = []; - - let events = await securityTokenRegistry.getPastEvents('LogNewSecurityToken', { fromBlock: 0}); - if (events.length == 0) { - console.log("No security token events were emitted."); - } else { - for (let event of events) { - //for (let index = 0; index < 2; index++) { - //const event = events[index]; - let tokenAddress = event.returnValues._securityTokenAddress; - let securityTokenABI = JSON.parse(require('fs').readFileSync('./CLI/data/SecurityToken1-4-0.json').toString()).abi; - console.log(`Creating SecurityToken contract instance of address: ${tokenAddress}...`); - let token = new web3.eth.Contract(securityTokenABI, tokenAddress); - token.setProvider(web3.currentProvider); - - let tokenName = await token.methods.name().call(); - let tokenSymbol = await token.methods.symbol().call(); - let tokenOwner = await token.methods.owner().call(); - let tokenDetails = await token.methods.tokenDetails().call(); - let tokenDivisible = await token.methods.granularity().call() == 1; - let tokenDeployedAt = (await web3.eth.getBlock(event.blockNumber)).timestamp; - - let gmtAddress = (await token.methods.getModule(2, 0).call())[1]; - let gtmABI = JSON.parse(require('fs').readFileSync('./CLI/data/GeneralTransferManager1-4-0.json').toString()).abi; - let gmt = new web3.eth.Contract(gtmABI, gmtAddress); - let gtmEvents = await gmt.getPastEvents('LogModifyWhitelist', { fromBlock: event.blockNumber}); - - let mintedEvents = []; - if (gtmEvents.length > 0) { - mintedEvents = await token.getPastEvents('Minted', { fromBlock: event.blockNumber}); - } - - console.log(`--------- SecurityToken launched ---------`); - console.log(`Token address: ${event.returnValues._securityTokenAddress}`); - console.log(`Symbol: ${tokenSymbol}`); - console.log(`Name: ${tokenName}`); - console.log(`Owner: ${tokenOwner}`); - console.log(`Details: ${tokenDetails}`); - console.log(`Divisble: ${tokenDivisible}`); - console.log(`Deployed at: ${tokenDeployedAt}`); - console.log(`Transaction hash: ${event.transactionHash}`); - console.log(`------------------------------------------`); - console.log(``); - - - tokens.push({ - name: tokenName, - ticker: tokenSymbol, - owner: tokenOwner, - details: tokenDetails, - address: tokenAddress, - deployedAt: tokenDeployedAt, - divisble: tokenDivisible, - gmtEvents: gtmEvents, - mintedEvents: mintedEvents - }); +async function step_get_deployed_tokens(securityTokenRegistry, singleTicker) { + let tokens = []; + + //let events = await securityTokenRegistry.getPastEvents('LogNewSecurityToken', { fromBlock: 0}); + let logs = await getLogsFromEtherscan(securityTokenRegistry.options.address, 0, 'latest', 'LogNewSecurityToken(string,address,address)'); + if (logs.length == 0) { + console.log("No security token events were emitted."); + } else { + for (let log of logs) { + let event = common.getEventFromLogs(securityTokenRegistry._jsonInterface, [log], 'LogNewSecurityToken'); + if (typeof singleTicker === 'undefined' || event._ticker == singleTicker) { + let tokenAddress = event._securityTokenAddress; + let securityTokenABI = JSON.parse(require('fs').readFileSync('./CLI/data/SecurityToken1-4-0.json').toString()).abi; + console.log(`Creating SecurityToken contract instance of address: ${tokenAddress}...`); + let token = new web3.eth.Contract(securityTokenABI, tokenAddress); + token.setProvider(web3.currentProvider); + + let tokenName = await token.methods.name().call(); + let tokenSymbol = await token.methods.symbol().call(); + let tokenOwner = await token.methods.owner().call(); + let tokenDetails = await token.methods.tokenDetails().call(); + let tokenDivisible = await token.methods.granularity().call() == 1; + let tokenDeployedAt = (await getBlockfromEtherscan(web3.utils.hexToNumber(log.blockNumber))).timeStamp; + + + let gmtAddress = (await token.methods.getModule(2, 0).call())[1]; + let gtmABI = JSON.parse(require('fs').readFileSync('./CLI/data/GeneralTransferManager1-4-0.json').toString()).abi; + let gmt = new web3.eth.Contract(gtmABI, gmtAddress); + //let gtmEvents = await gmt.getPastEvents('LogModifyWhitelist', { fromBlock: event.blockNumber}); + let gtmLogs = await getLogsFromEtherscan(gmt.options.address, 0, 'latest', 'LogModifyWhitelist(address,uint256,address,uint256,uint256,uint256,bool)'); + let gtmEvents = common.getMultipleEventsFromLogs(gmt._jsonInterface, gtmLogs, 'LogModifyWhitelist'); + + let mintedEvents = []; + if (gtmEvents.length > 0) { + //mintedEvents = await token.getPastEvents('Minted', { fromBlock: event.blockNumber}); + let mintedLogs = await getLogsFromEtherscan(token.options.address, 0, 'latest', 'Minted(address,uint256)'); + mintedEvents = common.getMultipleEventsFromLogs(token._jsonInterface, mintedLogs, 'Minted'); } + + console.log(`--------- SecurityToken launched ---------`); + console.log(`Token address: ${event._securityTokenAddress}`); + console.log(`Symbol: ${tokenSymbol}`); + console.log(`Name: ${tokenName}`); + console.log(`Owner: ${tokenOwner}`); + console.log(`Details: ${tokenDetails}`); + console.log(`Divisble: ${tokenDivisible}`); + console.log(`Deployed at: ${tokenDeployedAt}`); + console.log(`Transaction hash: ${log.transactionHash}`); + console.log(`------------------------------------------`); + console.log(``); + + + tokens.push({ + name: tokenName, + ticker: tokenSymbol, + owner: tokenOwner, + details: tokenDetails, + address: tokenAddress, + deployedAt: tokenDeployedAt, + divisble: tokenDivisible, + gmtEvents: gtmEvents, + mintedEvents: mintedEvents + }); + } } + } - console.log(chalk.yellow(`${tokens.length} security tokens found!`)); - return tokens; + console.log(chalk.yellow(`${tokens.length} security tokens found!`)); + return tokens; } -async function step_launch_STs(tokens, securityTokenRegistry) { - if (readlineSync.keyInYNStrict(`Do you want to migrate a single Security Token?`)) { - let tokenToMigrate = readlineSync.question(`Enter the Security Token symbol to migrate: `); - tokens = tokens.filter(t => t.ticker == tokenToMigrate); - } - - if (tickers.length == 0) { - console.log(chalk.yellow(`There are no security tokens to migrate!`)); - } else if (readlineSync.keyInYNStrict(`Do you want to migrate ${tokens.length} Security Tokens?`)) { - let i = 0; - let succeed = []; - let failed = []; - let totalGas = new web3.utils.BN(0); - let polymathRegistryAddress = await contracts.polymathRegistry(); - let STFactoryABI = JSON.parse(require('fs').readFileSync('./build/contracts/STFactory.json').toString()).abi; - let STFactoryAddress = await securityTokenRegistry.methods.getSTFactoryAddress().call(); - let STFactory = new web3.eth.Contract(STFactoryABI, STFactoryAddress); - for (const t of tokens) { - console.log(`\n`); - console.log(`-------- Migrating token No ${++i}--------`); - console.log(`Token symbol: ${t.ticker}`); - console.log(`Token address: ${t.address}`); - console.log(``); - try { - // Deploying 2.0.0 Token - let deployTokenAction = STFactory.methods.deployToken(t.name, t.ticker, 18, t.details, Issuer.address, t.divisble, polymathRegistryAddress) - let deployTokenReceipt = await common.sendTransaction(deployTokenAction); - // Instancing Security Token - let newTokenAddress = deployTokenReceipt.logs[deployTokenReceipt.logs.length -1].address; //Last log is the ST creation - let newTokenABI = abis.securityToken(); - let newToken = new web3.eth.Contract(newTokenABI, newTokenAddress); - - // Checking if the old Security Token has activity - if (t.gmtEvents.length > 0) { - // Instancing GeneralTransferManager - let gmtABI = abis.generalTransferManager(); - let gmtAddress = (await newToken.methods.getModulesByName(web3.utils.toHex("GeneralTransferManager")).call())[0]; - let gmt = new web3.eth.Contract(gmtABI, gmtAddress); - // Whitelisting investors - for (const gmtEvent of t.gmtEvents) { - let modifyWhitelistAction = gmt.methods.modifyWhitelist( - gmtEvent.returnValues._investor, - new web3.utils.BN(gmtEvent.returnValues._fromTime), - new web3.utils.BN(gmtEvent.returnValues._toTime), - new web3.utils.BN(gmtEvent.returnValues._expiryTime), - gmtEvent.returnValues._canBuyFromSTO - ); - let modifyWhitelistReceipt = await common.sendTransaction(modifyWhitelistAction); - totalGas = totalGas.add(new web3.utils.BN(modifyWhitelistReceipt.gasUsed)); - } - // Minting tokens - for (const mintedEvent of t.mintedEvents) { - let mintAction = newToken.methods.mint(mintedEvent.returnValues.to, new web3.utils.BN(mintedEvent.returnValues.value)); - let mintReceipt = await common.sendTransaction(mintAction); - totalGas = totalGas.add(new web3.utils.BN(mintReceipt.gasUsed)); - } - } - - // Transferring onweship to the original owner - let transferOwnershipAction = newToken.methods.transferOwnership(t.owner); - let transferOwnershipReceipt = await common.sendTransaction(transferOwnershipAction); - totalGas = totalGas.add(new web3.utils.BN(transferOwnershipReceipt.gasUsed)); - - // Adding 2.0.0 Security Token to SecurityTokenRegistry - let modifySecurityTokenAction = securityTokenRegistry.methods.modifySecurityToken(t.name, t.ticker, t.owner, newTokenAddress, t.details, t.deployedAt); - let modifySecurityTokenReceipt = await common.sendTransaction(modifySecurityTokenAction); - totalGas = totalGas.add(new web3.utils.BN(modifySecurityTokenReceipt.gasUsed)); - - succeed.push(t); - } catch (error) { - failed.push(t); - console.log(chalk.red(`Transaction failed!!! `)) - console.log(error); - } +async function step_launch_STs(tokens, securityTokenRegistry, tokenAddress) { + if (tokens.length == 0) { + console.log(chalk.yellow(`There are no security tokens to migrate!`)); + } else /*if (readlineSync.keyInYNStrict(`Do you want to migrate ${tokens.length} Security Tokens?`))*/ { + let i = 0; + let succeed = []; + let failed = []; + let totalGas = new web3.utils.BN(0); + let polymathRegistryAddress = await contracts.polymathRegistry(); + let STFactoryABI = JSON.parse(require('fs').readFileSync('./build/contracts/STFactory.json').toString()).abi; + let STFactoryAddress = await securityTokenRegistry.methods.getSTFactoryAddress().call(); + let STFactory = new web3.eth.Contract(STFactoryABI, STFactoryAddress); + for (const t of tokens) { + console.log(`\n`); + console.log(`-------- Migrating token No ${++i}--------`); + console.log(`Token symbol: ${t.ticker}`); + console.log(`Token old address: ${t.address}`); + console.log(``); + try { + // Deploying 2.0.0 Token + let newTokenAddress; + if (tokens.length == 1 && typeof tokenAddress !== 'undefined') { + if (web3.utils.isAddress(tokenAddress)) { + newTokenAddress = tokenAddress; + } else { + console.log(chalk.red('Given tokenAddress is not an address!!')); + process.exit(0); + } + } else { + let deployTokenAction = STFactory.methods.deployToken(t.name, t.ticker, 18, t.details, Issuer.address, t.divisble, polymathRegistryAddress) + let deployTokenReceipt = await common.sendTransaction(deployTokenAction, { minNonce: minNonce }); + minNonce = minNonce + 1; + // Instancing Security Token + newTokenAddress = deployTokenReceipt.logs[deployTokenReceipt.logs.length - 1].address; //Last log is the ST creation + } + console.log(chalk.green(`The migrated to 2.0.0 Security Token address is ${newTokenAddress}`)); + let newTokenABI = abis.securityToken(); + let newToken = new web3.eth.Contract(newTokenABI, newTokenAddress); + + // Checking if the old Security Token has activity + if (t.gmtEvents.length > 0) { + // Instancing GeneralTransferManager + let gmtABI = abis.generalTransferManager(); + let gmtAddress = (await newToken.methods.getModulesByName(web3.utils.toHex("GeneralTransferManager")).call())[0]; + let gmt = new web3.eth.Contract(gmtABI, gmtAddress); + // Whitelisting investors + for (const gmtEvent of t.gmtEvents) { + let modifyWhitelistAction = gmt.methods.modifyWhitelist( + gmtEvent._investor, + new web3.utils.BN(gmtEvent._fromTime), + new web3.utils.BN(gmtEvent._toTime), + new web3.utils.BN(gmtEvent._expiryTime), + gmtEvent._canBuyFromSTO + ); + let modifyWhitelistReceipt = await common.sendTransaction(modifyWhitelistAction, { minNonce: minNonce }); + minNonce = minNonce + 1; + //totalGas = totalGas.add(new web3.utils.BN(modifyWhitelistReceipt.gasUsed)); + } + // Minting tokens + for (const mintedEvent of t.mintedEvents) { + let mintAction = newToken.methods.mint(mintedEvent.to, new web3.utils.BN(mintedEvent.amount)); + let mintReceipt = await common.sendTransaction(mintAction, { minNonce: minNonce }); + minNonce = minNonce + 1; + //totalGas = totalGas.add(new web3.utils.BN(mintReceipt.gasUsed)); + } } - logTokenResults(succeed, failed, totalGas); + // Transferring onweship to the original owner + let transferOwnershipAction = newToken.methods.transferOwnership(t.owner); + let transferOwnershipReceipt = await common.sendTransaction(transferOwnershipAction, { minNonce: minNonce }); + minNonce = minNonce + 1; + //totalGas = totalGas.add(new web3.utils.BN(transferOwnershipReceipt.gasUsed)); + + // Adding 2.0.0 Security Token to SecurityTokenRegistry + let modifySecurityTokenAction = securityTokenRegistry.methods.modifySecurityToken(t.name, t.ticker, t.owner, newTokenAddress, t.details, t.deployedAt); + let modifySecurityTokenReceipt = await common.sendTransaction(modifySecurityTokenAction, { minNonce: minNonce }); + minNonce = minNonce + 1; + //totalGas = totalGas.add(new web3.utils.BN(modifySecurityTokenReceipt.gasUsed)); + + succeed.push(t); + console.log('done'); + } catch (error) { + failed.push(t); + console.log(chalk.red(`Transaction failed!!! `)) + console.log(error); + } } + + logTokenResults(succeed, failed, totalGas); + } } function logTokenResults(succeed, failed, totalGas) { - console.log(` + console.log(` -------------------------------------------- --------- Token Migration Results ---------- -------------------------------------------- @@ -342,7 +382,7 @@ ${failed.map(token => chalk.red(`${token.symbol} at ${token.address}`)).join('\n } function logTickerResults(succeed, failed, totalGas) { - console.log(` + console.log(` -------------------------------------------- --------- Ticker Migration Results --------- -------------------------------------------- @@ -355,25 +395,62 @@ ${failed.map(ticker => chalk.red(`${ticker.ticker}`)).join('\n')} `); } +async function getLogsFromEtherscan(_address, _fromBlock, _toBlock, _eventSignature) { + let urlDomain = network == 'kovan' ? 'api-kovan' : 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'logs', + action: 'getLogs', + fromBlock: _fromBlock, + toBlock: _toBlock, + address: _address, + topic0: web3.utils.sha3(_eventSignature), + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return data.result; +} + async function getABIfromEtherscan(_address) { - let urlDomain = remoteNetwork == 'kovan' ? 'api-kovan' : 'api'; - const options = { - url: `https://${urlDomain}.etherscan.io/api`, - qs: { - module: 'contract', - action: 'getabi', - address: _address, - apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' - }, - method: 'GET', - json: true - }; - let data = await request(options); - return JSON.parse(data.result); + let urlDomain = remoteNetwork == 'kovan' ? 'api-kovan' : 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'contract', + action: 'getabi', + address: _address, + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return JSON.parse(data.result); +} + +async function getBlockfromEtherscan(_blockNumber) { + let urlDomain = network == 'kovan' ? 'api-kovan' : 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'block', + action: 'getblockreward', + blockno: _blockNumber, + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return data.result; } module.exports = { - executeApp: async function(toStrAddress, fromTrAddress, fromStrAddress) { - return executeApp(toStrAddress, fromTrAddress, fromStrAddress); - } + executeApp: async function (toStrAddress, fromTrAddress, fromStrAddress, singleTicker, tokenAddress, onlyTickers, remoteNetwork) { + return executeApp(toStrAddress, fromTrAddress, fromStrAddress, singleTicker, tokenAddress, onlyTickers, remoteNetwork); + } }; \ No newline at end of file diff --git a/CLI/polymath-cli.js b/CLI/polymath-cli.js index 1a423385b..d2b4c68fa 100644 --- a/CLI/polymath-cli.js +++ b/CLI/polymath-cli.js @@ -137,11 +137,13 @@ program program .command('strMigrator [toStrAddress] [fromTrAddress] [fromStrAddress]') + .option('-tick, --singleTicker ', 'It only reads and migrates the ticker and token for given token symbol') + .option('-tok, --tokenAddress ', 'Migrated security token address. It skips all steps until modifySecurityToken') + .option('-ot, --onlyTickers', 'Only migrate tickers without a launched token') .alias('str') .description('Runs STR Migrator') - .action(async function (toStrAddress, fromTrAddress, fromStrAddress) { - await gbl.initialize(program.remoteNode); - await strMigrator.executeApp(toStrAddress, fromTrAddress, fromStrAddress); + .action(async function (toStrAddress, fromTrAddress, fromStrAddress, cmd) { + await strMigrator.executeApp(toStrAddress, fromTrAddress, fromStrAddress, cmd.singleTicker, cmd.tokenAddress, cmd.onlyTickers, program.remoteNode); }); program diff --git a/CLI/yarn.lock b/CLI/yarn.lock index 91ef48a56..82d60b57f 100644 --- a/CLI/yarn.lock +++ b/CLI/yarn.lock @@ -15,11 +15,6 @@ accepts@~1.3.5: mime-types "~2.1.18" negotiator "0.6.1" -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= - ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -391,20 +386,15 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= -cookiejar@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" - integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cors@^2.8.1: - version "2.8.4" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" - integrity sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY= + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" vary "^1" @@ -596,16 +586,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@6.3.3: - version "6.3.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" - integrity sha1-VILZZG1UvLif19mU/J4ulWiHbj8= - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - inherits "^2.0.1" - elliptic@^6.0.0, elliptic@^6.4.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -936,9 +916,9 @@ got@7.1.0, got@^7.1.0: url-to-options "^1.0.1" graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -983,14 +963,6 @@ hash-base@^3.0.0: inherits "^2.0.1" safe-buffer "^5.0.1" -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.5" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" @@ -1745,11 +1717,6 @@ servify@^0.1.12: request "^2.79.0" xhr "^2.3.3" -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -1799,9 +1766,9 @@ slice-ansi@2.0.0: is-fullwidth-code-point "^2.0.0" sshpk@^1.7.0: - version "1.15.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.1.tgz#b79a089a732e346c6e0714830f36285cd38191a2" - integrity sha512-mSdgNUaidk+dRU5MhYtN9zebdzF2iG0cNPWy8HG+W8y+fT1JnSkh0fzzpjOa0L7P8i1Rscz38t0h4gPcKz43xA== + version "1.15.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" + integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -2351,12 +2318,10 @@ xhr-request@^1.0.1: url-set-query "^1.0.0" xhr "^2.0.4" -xhr2-cookies@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= - dependencies: - cookiejar "^2.1.1" +xhr2@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" + integrity sha1-f4dliEdxbbUCYyOBL4GMras4el8= xhr@^2.0.4, xhr@^2.3.3: version "2.5.0" @@ -2368,11 +2333,6 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" diff --git a/README.md b/README.md index 8c5ae0a4e..51610e9d4 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,27 @@ [![Build Status](https://travis-ci.org/PolymathNetwork/polymath-core.svg?branch=master)](https://travis-ci.org/PolymathNetwork/polymath-core) [![Coverage Status](https://coveralls.io/repos/github/PolymathNetwork/polymath-core/badge.svg?branch=master)](https://coveralls.io/github/PolymathNetwork/polymath-core?branch=master) [![Gitter](https://img.shields.io/badge/chat-gitter-green.svg)](https://gitter.im/PolymathNetwork/Lobby) -[![Telegram](https://img.shields.io/badge/50k+-telegram-blue.svg)](https://gitter.im/PolymathNetwork/Lobby) +[![Telegram](https://img.shields.io/badge/50k+-telegram-blue.svg)](https://gitter.im/PolymathNetwork/Lobby) [![Greenkeeper badge](https://badges.greenkeeper.io/PolymathNetwork/polymath-core.svg)](https://greenkeeper.io/) ![Polymath logo](Polymath.png) # Polymath Core - The Polymath Core smart contracts provide a system for launching regulatory-compliant securities tokens on a decentralized blockchain. This particular repository is the implementation of a system that allows for the creation of ST-20-compatible tokens. This system has a modular design that promotes a variety of pluggable components for various types of issuances, legal requirements, and offering processes. +## Introduction to Security Tokens + +### What is a Security token? +A Security Token shares many of the characteristics of both fungible (erc20) and non-fungible tokens (erc721). Security tokens are designed to represent complete or fractional ownership interests in assets and/or entities. While utility tokens have no limitations on who can send or receive the token, security tokens are subject to many restrictions based on identity, jurisdiction and asset category. +### Security Tokens Vs. Utility Tokens? +The concept of utility tokens is fairly well understood in the blockchain space today. Utility tokens represent access to a network, and your token purchase represents the ability to buy goods or services from that network- Think of when you purchase a arcade token to allow you to play an arcade game machine. Utility tokens give you that same type of access to a product or service. On the other hand, security tokens represent complete or fractional ownership in an asset (such as shares in a company, a real-estate asset, artwork, etc). Such as having a stake in a company, real estate, or intellectual property can all be represented by security tokens. Security tokens offer the benefit of bringing significant transparency over traditional paper shares through the use of the blockchain and its associated public ledger. Security token structure, distribution, or changes that could affect investors are now accessible to all via the blockchain. # ST-20 Interface Overview ## Description An ST-20 token is an Ethereum-based token implemented on top of the ERC-20 protocol that adds the ability for tokens to control transfers based on specific rules. ST-20 tokens rely on Transfer Managers to determine the ruleset the token should apply in order to allow or deny a transfer, be it between the issuer and investors, in a peer to peer exchange, or a transaction with an exchange. ## How it works -ST-20 tokens must implement a `verifyTransfer` method which will be called when attempting to execute a `transfer` or `transferFrom` method. The `verifyTransfer` method will determine whether that transaction can be completed or not. The implementation of `verifyTransfer` can take many forms, but the default approach is a whitelist controlled by the `GeneralTransferManager`. - -### The ST-20 Interface - +ST-20 tokens must implement a verifyTransfer method which will be called when attempting to execute a transfer or transferFrom method. The verifyTransfer method will determine whether that transaction can be completed or not. The implementation of verifyTransfer can take many forms, but the default approach is a whitelist controlled by the GeneralTransferManager. +## The ST-20 Interface ``` contract IST20 { @@ -32,175 +35,89 @@ contract IST20 { function mint(address _investor, uint256 _amount) public returns (bool success); } ``` - - # The Polymath Core Architecture -The diagram below depicts a high-level view of the various modules, registries, and contracts implemented in Polymath Core: +The diagram below depicts a high-level view of the various modules, registries, and contracts implemented within Polymath Core 2.0.0: -![Polymath Core architecture](https://github.com/PolymathNetwork/polymath-core/blob/master/docs/images/PolymathCore.png) +![Polymath Core architecture](https://github.com/PolymathNetwork/polymath-core/blob/master/docs/images/Core%20Architecture%202.0.0%20%20Diagram.png) ## Components -### SecurityToken -`SecurityToken` is an implementation of the ST-20 protocol that allows the addition of different modules to control its behavior. Different modules can be attached to `SecurityToken`: -- [TransferManager modules](contracts/modules/TransferManager): These control the logic behind transfers and how they are allowed or disallowed. -By default, the ST (Security Token) gets a `GeneralTransferManager` module attached in order to determine if transfers should be allowed based on a whitelist approach. The `GeneralTransferManager` behaves differently depending who is trying to transfer the tokens. -a) In an offering setting (investors buying tokens from the issuer) the investor's address should be present on an internal whitelist managed by the issuer within the `GeneralTransferManager`. -b) In a peer to peer transfer, restrictions apply based on real-life lockups that are enforced on-chain. For example, if a particular holder has a 1-year sale restriction for the token, the transaction will fail until that year passes. -- [Security Token Offering (STO) modules](contracts/modules/STO): A `SecurityToken` can be attached to one (and only one) STO module that will dictate the logic of how those tokens will be sold/distributed. An STO is the equivalent to the Crowdsale contracts often found present in traditional ICOs. -- [Permission Manager modules](contracts/modules/PermissionManager): These modules manage permissions on different aspects of the issuance process. The issuer can use this module to manage permissions and designate administrators on his token. For example, the issuer might give a KYC firm permissions to add investors to the whitelist. -- [Checkpoint Modules](contracts/modules/Checkpoint): These modules allow the issuer to define checkpoints at which token balances and the total supply of a token can be consistently queried. This functionality is useful for dividend payment mechanisms and on-chain governance, both of which need to be able to determine token balances consistently as of a specified point in time. +### Polymath Registries -### TickerRegistry -The ticker registry manages the sign up process to the Polymath platform. Issuers can use this contract to register a token symbol (which are unique within the Polymath network). Token Symbol registrations have an expiration period (7 days by default) in which the issuer has to complete the process of deploying their SecurityToken. If they do not complete the process in time, their ticker symbol will be made available for someone else to register. +**Security Token Registry (STR)** - This registry tells us which tokens and tickers have been registered to it. This allows us to prevent people from reserving the same ticker as another issuer as well checking for inputs such as making sure it is a maximum of 10 characters and what the expiry date is on the respective ticker. Right now, if you reserve a ticker it last for 60 days. After it expires someone else can go ahead and reserve it or they you can re-register it. -### SecurityTokenRegistry -The security token registry keeps track of deployed STs on the Polymath Platform and uses the TickerRegistry to allow only registered symbols to be deployed. +With the **2.0.0 Core Release**, when you deploy a token you do it through the ST registry and it keeps a record of which tokens have been registered within it. -### ModuleRegistry -Modules allow custom add-in functionality in the issuance process and beyond. The module registry keeps track of modules added by Polymath or any other users. Modules can only be attached to STs if Polymath has previously verified them. If not, the only user able to utilize a module is its owner, and they should be using it "at their own risk". +**The Module Registry** - This registry keeps a record of all the different module factories. +**The Features Registry** - A registry of features that we may enable in the future but right now only Polymath has control of the features. Later, Polymath can easily turn access on and off. -# Stepping through an issuance with the CLI Tool -First, assure that you have [setup Polymath Core properly](#setup). +To be clear, each module has its own factory which is in charge of deploying an instance of that module for the issuers token. -The Polymath CLI (Command Line Interface) commands are operated from a *nix command prompt (unix or mac). +There are General factories which every token uses (if wanted). It works by sending the token to the factory where it asks for an instance of that said module and the token will add an instance of that module to itself. This allows for each token to have its unique modules associated with it. All of this is created through the factories and the module registry keeps a records of all the different modules factories that are registered. -It can be used in three differents ways: +As of now, Polymath is the only one that can add or register a module factory to the module registry. Polymath submits the modules to the registry, however, we are exploring different approaches to open up development to other parties such as potentially working with external developers to provide services to issuers through modules. -1. Connected to a full ethereum node: -You have to save your Parity account password to `$HOME/password.file` and run Parity with the following command to get started (make sure the node is fully synced before using the CLI tool): -```bash -parity --chain ropsten --rpcapi "eth,net,web3,personal,parity" --unlock YOUR_ETH_ACCOUNT --password $HOME/password.file -``` -2. Connected to a remote ethereum node: -You can access Ethereum via the Infura load-balanced nodes. You have to save your private key to `./privKey` file and run CLI command adding `--remote-node ` option. -```bash -node CLI/polymath-cli faucet --remote-node kovan -``` -3. Connected to a local private test network using `ganache-cli`. -You have to save the private key for the one of the accounts generated by ganache into `./privKeyLocal`. +**Polymath has 3 main registries** +1. Security Token Registry +2. Features Registry +3. Module Registry +The Polymath Registry holds the addresses of the 3 registries above. -## Poly Faucet +As of the **2.0.0 release**, we have built it out so that the Module and Security Token Registry are upgradeable. This means that down the road if there is something in the logic that we need to change, we can do that without having to re-deploy the whole thing again. All we need to do is update it. -If you are working on a local private network, you should run the faucet command to get Poly necessary to pay fees for the other commands. +### Modules -```bash -node CLI/polymath-cli faucet -``` +**Security Token (ST-20)**: The SecurityToken is an implementation of the ST-20 protocol that allows the addition of different modules to control its behavior. Different modules can be attached to a SecurityToken. -## Generating ST-20 token +We have a ST-20 token which is an Ethereum-based token implemented on top of the ERC-20 protocol that adds the ability for tokens to control transfers based on specific rules. ST-20 tokens rely on Transfer Managers to determine the ruleset the token should apply in order to allow or deny a transfer, be it between the issuer and investors, in a peer to peer exchange, or a transaction with an exchange. -The ST-20 Generator command is a wizard-like script that will guide technical users in the creation and deployment of an ST-20 token. +To simplify, it breaks down to having a base token that gives the issuer the ability to add functionality through modules. -1. Edit `CLI/commands/helpers/contract_addresses.js` to make sure scripts are pointing to the correct contract addresses -2. On the terminal, run the following command: -```bash -node CLI/polymath-cli st20generator -``` -3. Follow the text prompts: - * You will be asked for a token symbol. Enter a new symbol to register or a symbol you have already registered. - * Enter a token name (long name seen by investors) to complete the token registration process. The token will be deployed to the blockchain. - * (Optional) If you want to issue tokens to an address you own enter the address and then how many tokens you want to issue. If you want to issue tokens to a list of affiliates press `Y` and it will update a whitelist with them and then tokens will be issued. - Make sure the `whitelist_data.csv` and `multi_mint_data.csv` files are present in the data folder and fulfilled with the right information. - * Choose between Capped STO and USD Tiered STO. - * Configure the selected STO. Enter start and end times, the issuance type, and exchange rate. -4. Once the process is finished, you can run the `node CLI/polymath-cli st20generator` command again and enter the token symbol to see the STO's live-progress. - -## Whitelisting investors - -After starting the STO you can run a command to mass-update a whitelist of allowed/known investors. -Make sure the `whitelist_data.csv` file is present in the data folder. -The command takes 2 parameters: -- The token symbol for the STO you want to invest in -- (Optional) The size of each batch +###### Example -```bash -node CLI/polymath-cli whitelist TOKEN_SYMBOL [BATCH_SIZE] -``` +We have modules that can deal with transfer management. Restricting transfers through a whitelist or just restricting a transfer between addresses that could make an account go over a specified limit or you can limit the amount of a token holders or you can even limit transfers to prevent dumping of tokens by having a lockup period for token holders. -## Initial minting +#### The Polymath Modules +**TransferManager modules:** These control the logic behind transfers and how they are allowed or disallowed. By default, the ST (Security Token) gets a `GeneralTransferManager` module attached in order to determine if transfers should be allowed based on a whitelist approach. -Before starting the STO you can run a command to distribute tokens to previously whitelisted investors. -Make sure the `multi_mint_data` file is present in the data folder. -The command takes 2 parameters: -- The token symbol for the STO you want to invest in -- (Optional) The size of each batch +The `GeneralTransferManager` behaves differently depending who is trying to transfer the tokens. +a) In an offering setting (investors buying tokens from the issuer) the investor's address should be present on an internal whitelist managed by the issuer within the GeneralTransferManager. -```bash -node CLI/polymath-cli multi_mint TOKEN_SYMBOL [BATCH_SIZE] -``` +b) In a peer to peer transfer, restrictions apply based on real-life lockups that are enforced on-chain. For example, if a particular holder has a 1-year sale restriction for the token, the transaction will fail until that year passes. -## Investing in the STO +**Security Token Offering (STO) modules:** A SecurityToken can be attached to one (and only one) STO module that will dictate the logic of how those tokens will be sold/distributed. An STO is the equivalent to the Crowdsale contracts often found present in traditional ICOs. -You can run the investor_portal command to participate in any STO you have been whitelisted for. -You will be asked for an account, the token symbol and amount for the STO you want to invest in. +**Permission Manager modules:** These modules manage permissions on different aspects of the issuance process. The issuer can use this module to manage permissions and designate administrators on his token. For example, the issuer might give a KYC firm permissions to add investors to the whitelist. -```bash -node CLI/polymath-cli investor_portal -``` +**Checkpoint Modules** +These modules allow the issuer to define checkpoints at which token balances and the total supply of a token can be consistently queried. This functionality is useful for dividend payment mechanisms and on-chain governance, both of which need to be able to determine token balances consistently as of a specified point in time. -## Transferring tokens +**Burn Modules** +These modules allow issuers or investors to burn or redeem their tokens in exchange of another token which can be on chain or offchain. -You can run the transfer command to transfer ST tokens to another account (as long as both are whitelisted and have been cleared of any lockup periods). -- The token symbol of the ST you want to transfer -- The account that will receive the tokens -- How many tokens to send +With the Core **2.0.0 Release**, Polymath has also introduced the `USDTieredSTO`. This new STO module allows a security token to be issued in return for investment (security token offering) in various currencies (ETH, POLY & a USD stable coin). The price of tokens is denominated in USD and the STO allows multiple tiers with different price points to be defined. Discounts for investments made in POLY can also be defined. -```bash -node CLI/polymath-cli transfer TOKEN_SYMBOL ACCOUNT_TO AMOUNT -``` +## CLI and CLI Documentation Wiki: -## Managing modules - -You can run the module manager command to view all the modules attached to a token and their status. -You will be asked for a token symbol. - -```bash -node CLI/polymath-cli module_manager -``` +The CLI is for users that want to easily walkthrough all the details of an STO issuance. The CLI documentation is located on our [Github Wiki](https://github.com/PolymathNetwork/polymath-core/wiki). -## Dividends manager +You can easily navigate through it with the sidebar directory in order to run the CLI and set up and test the following: -You can run this command to create dividends and paid them out proportionally to token holder balances as of the time that the dividend was created, or at the time of a specified checkpoint that was created previously. You can choose between Ether or ERC20 dividens. +1. Prerequisite Instructions / Deploy and setup the Polymath contracts +2. Launch the CLI on Ganache +3. Use the Faucet to get POLY +4. Deploy a token + Launch a USDTieredSTO +5. Whitelist investors +6. Work with the Dividends module +7. Using other CLI features -```bash -node CLI/polymath-cli dividends_manager -``` # Setting up Polymath Core -### v2.0.0 KOVAN - - ----------------------- Polymath Network Smart Contracts: ----------------------- - PolymathRegistry: 0xad09dc7939f09601674c69a07132bc642abeeb10 - SecurityTokenRegistry (Proxy): 0xef600e4904fe0a2f4587ae94bcbed4c9e9aeb37a - ModuleRegistry (Proxy): 0xe8e30fd7d65a5e3b1134ce29d3afb49cc27b7086 - FeatureRegistry: 0x35a8f211763be879541656d692f057d108eec9aa - - ETHOracle: 0xCE5551FC9d43E9D2CC255139169FC889352405C8 - POLYOracle: 0x461d98EF2A0c7Ac1416EF065840fF5d4C946206C - - STFactory: 0x1f08b1473fbb5bfc2bbaea99520291b6120be529 - GeneralTransferManagerFactory: 0xc100ec8f8e397b426a52a5c7acc02892e1d92a53 - GeneralPermissionManagerFactory: 0x96d7d693edd4a2ae773e4dd9739d997f0c38738f - - CappedSTOFactory: 0xfde869904bbc1e881601b2ebde4a77ba3808dfad - USDTieredSTOFactory: 0x01c17f387224148931ce03788e61836e7fe5d753 - USDTieredSTOProxyFactory: 0x63d0371a3dfa419a50670770b55618f6b5269057 - - CountTransferManagerFactory: 0x6691d4e4f8e48c7a3df04c25088169cb101b2882 - PercentageTransferManagerFactory: 0x62dd693e8864874d3d806286983e9da41cd5a035 - ManualApprovalTransferManagerFactory: 0x20ba9fd6907ff42f033df5cfdbaced6426b5e682 - EtherDividendCheckpointFactory: 0xceba16202ce878d1c01a1f5bf3f219b58d712d5f - ERC20DividendCheckpointFactory: 0x5c0051ffdc9655ae7b87a8a79542178be2e973e4 - --------------------------------------------------------------------------------- - - - ## Mainnet -### v1.3.0 (TORO Release) +### v2.0.0 | Contract | Address | | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | @@ -232,7 +149,8 @@ New ManualApprovalTransferManager 0x6af2afad53cb334e62b90ddbdcf3a086f654c298 ## KOVAN -### v1.3.0 (TORO Release) +### v2.0.0 +New Kovan PolyTokenFaucet: 0xb347b9f5b56b431b2cf4e1d90a5995f7519ca792 | Contract | Address | | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | diff --git a/audit reports/Polymath Core 2.0.0 Audit Report .pdf b/audit reports/Polymath Core 2.0.0 Audit Report .pdf new file mode 100644 index 000000000..38821f1ad Binary files /dev/null and b/audit reports/Polymath Core 2.0.0 Audit Report .pdf differ diff --git a/contracts/ModuleRegistry.sol b/contracts/ModuleRegistry.sol index b2f1fbba5..65de42fa6 100644 --- a/contracts/ModuleRegistry.sol +++ b/contracts/ModuleRegistry.sol @@ -51,6 +51,8 @@ contract ModuleRegistry is IModuleRegistry, EternalStorage { event ModuleVerified(address indexed _moduleFactory, bool _verified); // Emit when a ModuleFactory is removed by Polymath event ModuleRemoved(address indexed _moduleFactory, address indexed _decisionMaker); + // Emit when ownership gets transferred + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /////////////// //// Modifiers @@ -374,6 +376,16 @@ contract ModuleRegistry is IModuleRegistry, EternalStorage { set(Encoder.getKey("polyToken"), IPolymathRegistry(_polymathRegistry).getAddress("PolyToken")); } + /** + * @dev Allows the current owner to transfer control of the contract to a newOwner. + * @param _newOwner The address to transfer ownership to. + */ + function transferOwnership(address _newOwner) external onlyOwner { + require(_newOwner != address(0), "Invalid address"); + emit OwnershipTransferred(owner(), _newOwner); + set(Encoder.getKey("owner"), _newOwner); + } + /** * @notice Gets the owner of the contract * @return address owner diff --git a/contracts/SecurityTokenRegistry.sol b/contracts/SecurityTokenRegistry.sol index a9642cc20..d13fbb2b6 100644 --- a/contracts/SecurityTokenRegistry.sol +++ b/contracts/SecurityTokenRegistry.sol @@ -188,7 +188,7 @@ contract SecurityTokenRegistry is ISecurityTokenRegistry, EternalStorage { set(PAUSED, false); set(OWNER, _owner); set(POLYMATHREGISTRY, _polymathRegistry); - _setProtocolVersion(_STFactory, uint8(0), uint8(0), uint8(2)); + _setProtocolVersion(_STFactory, uint8(2), uint8(0), uint8(0)); set(INITIALIZE, true); } @@ -427,10 +427,18 @@ contract SecurityTokenRegistry is ISecurityTokenRegistry, EternalStorage { uint counter = 0; // accessing the data structure userTotickers[_owner].length bytes32[] memory tickers = getArrayBytes32(Encoder.getKey("userToTickers", _owner)); - bytes32[] memory tempList = new bytes32[](tickers.length); for (uint i = 0; i < tickers.length; i++) { string memory ticker = Util.bytes32ToString(tickers[i]); /*solium-disable-next-line security/no-block-members*/ + if (getUint(Encoder.getKey("registeredTickers_expiryDate", ticker)) >= now || _tickerStatus(ticker)) { + counter ++; + } + } + bytes32[] memory tempList = new bytes32[](counter); + counter = 0; + for (i = 0; i < tickers.length; i++) { + ticker = Util.bytes32ToString(tickers[i]); + /*solium-disable-next-line security/no-block-members*/ if (getUint(Encoder.getKey("registeredTickers_expiryDate", ticker)) >= now || _tickerStatus(ticker)) { tempList[counter] = tickers[i]; counter ++; diff --git a/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol b/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol index 3fd33a39b..9c5513ee7 100644 --- a/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol +++ b/contracts/modules/TransferManager/ManualApprovalTransferManagerFactory.sol @@ -18,7 +18,7 @@ contract ManualApprovalTransferManagerFactory is ModuleFactory { constructor (address _polyAddress, uint256 _setupCost, uint256 _usageCost, uint256 _subscriptionCost) public ModuleFactory(_polyAddress, _setupCost, _usageCost, _subscriptionCost) { - version = "2.1.0"; + version = "2.0.1"; name = "ManualApprovalTransferManager"; title = "Manual Approval Transfer Manager"; description = "Manage transfers using single approvals / blocking"; diff --git a/contracts/tokens/SecurityToken.sol b/contracts/tokens/SecurityToken.sol index cfa24baa1..e9782b2d1 100644 --- a/contracts/tokens/SecurityToken.sol +++ b/contracts/tokens/SecurityToken.sol @@ -210,7 +210,7 @@ contract SecurityToken is StandardToken, DetailedERC20, ReentrancyGuard, Registr updateFromRegistry(); tokenDetails = _tokenDetails; granularity = _granularity; - securityTokenVersion = SemanticVersion(0,0,2); + securityTokenVersion = SemanticVersion(2,0,0); } /** diff --git a/docs/images/Core Architecture 2.0.0 Diagram.png b/docs/images/Core Architecture 2.0.0 Diagram.png new file mode 100644 index 000000000..e227d159c Binary files /dev/null and b/docs/images/Core Architecture 2.0.0 Diagram.png differ diff --git a/greenkeeper.json b/greenkeeper.json new file mode 100644 index 000000000..14662df10 --- /dev/null +++ b/greenkeeper.json @@ -0,0 +1,10 @@ +{ + "groups": { + "default": { + "packages": [ + "CLI/package.json", + "package.json" + ] + } + } +} diff --git a/migrations/2_deploy_contracts.js b/migrations/2_deploy_contracts.js index f25cfab35..baa2ae687 100644 --- a/migrations/2_deploy_contracts.js +++ b/migrations/2_deploy_contracts.js @@ -21,6 +21,7 @@ const STFactory = artifacts.require('./tokens/STFactory.sol') const DevPolyToken = artifacts.require('./helpers/PolyTokenFaucet.sol') const MockOracle = artifacts.require('./MockOracle.sol') const TokenLib = artifacts.require('./TokenLib.sol'); +const SecurityToken = artifacts.require('./tokens/SecurityToken.sol') let BigNumber = require('bignumber.js'); const cappedSTOSetupCost = new BigNumber(20000).times(new BigNumber(10).pow(18)); // 20K POLY fee @@ -135,8 +136,8 @@ module.exports = function (deployer, network, accounts) { return deployer.deploy(TokenLib, {from: PolymathAccount}); }).then(() => { // Link libraries - return deployer.link(TokenLib, STFactory); - }).then(() => { + deployer.link(TokenLib, SecurityToken); + deployer.link(TokenLib, STFactory); // A) Deploy the ModuleRegistry Contract (It contains the list of verified ModuleFactory) return deployer.deploy(ModuleRegistry, {from: PolymathAccount}); }).then(() => { @@ -305,6 +306,8 @@ module.exports = function (deployer, network, accounts) { return polymathRegistry.changeAddress("PolyUsdOracle", POLYOracle, {from: PolymathAccount}); }).then(() => { return polymathRegistry.changeAddress("EthUsdOracle", ETHOracle, {from: PolymathAccount}); + }).then(() => { + return deployer.deploy(SecurityToken, 'a', 'a', 18, 1, 'a', polymathRegistry.address, {from: PolymathAccount}); }).then(() => { console.log('\n'); console.log(` diff --git a/package.json b/package.json index 58104d99b..653adb2b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "polymath-core", - "version": "1.4.0", + "version": "2.0.0", "description": "Polymath Network Core Smart Contracts", "main": "truffle.js", "directories": { @@ -29,8 +29,9 @@ "flatten-mocks": "sol-merger './contracts/mocks/*.sol' ./flat/mocks", "flatten-oracles": "sol-merger './contracts/oracles/*.sol' ./flat/oracles", "flatten-proxies": "sol-merger './contracts/proxy/*.sol' ./flat/proxy", + "flatten-proxyFactories": "sol-merger './contracts/modules/STO/ProxyFactory/*.sol' ./flat/modules/STO/proxy", "flatten": "sol-merger './contracts/*.sol' ./flat", - "flatten-all": "npm run flatten-modules && npm run flatten-token && npm run flatten-mocks && npm run flatten-oracles && npm run flatten-proxies && npm run flatten", + "flatten-all": "npm run flatten-modules && npm run flatten-token && npm run flatten-mocks && npm run flatten-oracles && npm run flatten-proxies && npm run flatten && npm run flatten-proxyFactories", "ethereum-bridge": "node_modules/.bin/ethereum-bridge -H localhost:8545 -a 9 --dev", "st20generator": "node demo/ST20Generator", "pretty": "prettier --write --print-width 140 --tab-width 4 \"**/*.js\"" @@ -60,12 +61,12 @@ "babel-preset-stage-2": "6.24.1", "babel-preset-stage-3": "6.24.1", "babel-register": "6.26.0", - "bignumber.js": "^5.0.0", + "bignumber.js": "5.0.0", "chalk": "^2.4.1", "coveralls": "^3.0.1", "ethereumjs-testrpc": "^6.0.3", - "ethers": "^3.0.15", - "fs": "0.0.1-security", + "ethers": "^4.0.7", + "fs": "0.0.2", "openzeppelin-solidity": "1.10.0", "prompt": "^1.0.0", "readline-sync": "^1.4.9", @@ -73,17 +74,17 @@ "request-promise": "^4.2.2", "solc": "^0.4.24", "truffle-contract": "^3.0.4", - "truffle-hdwallet-provider-privkey": "^0.1.0", + "truffle-hdwallet-provider-privkey": "0.2.0", "web3": "1.0.0-beta.34" }, "devDependencies": { "@soldoc/soldoc": "^0.4.3", - "eslint": "^4.19.1", - "eslint-config-standard": "^11.0.0", + "eslint": "^5.8.0", + "eslint-config-standard": "^12.0.0", "eslint-plugin-import": "^2.10.0", - "eslint-plugin-node": "^6.0.1", - "eslint-plugin-promise": "^3.7.0", - "eslint-plugin-standard": "^3.0.1", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", "ethereum-bridge": "^0.6.1", "ethereumjs-abi": "^0.6.5", "ganache-cli": "^6.1.8", @@ -92,12 +93,15 @@ "solidity-coverage": "^0.5.11", "solidity-docgen": "^0.1.0", "solium": "^1.1.6", - "truffle": "^4.1.13", + "truffle": "4.1.14", "truffle-wallet-provider": "0.0.5" }, "greenkeeper": { "ignore": [ - "openzeppelin-solidity" + "openzeppelin-solidity", + "web3", + "bignumber.js", + "truffle-hdwallet-provider-privkey" ] } } diff --git a/scripts/tokenInfo.js b/scripts/tokenInfo-v1.js similarity index 52% rename from scripts/tokenInfo.js rename to scripts/tokenInfo-v1.js index e8a59ca1a..ea14a7efe 100644 --- a/scripts/tokenInfo.js +++ b/scripts/tokenInfo-v1.js @@ -1,24 +1,19 @@ const Web3 = require("web3"); -const fs = require("fs"); -const async = require("async"); -const path = require("path"); const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/")); +var request = require('request-promise') -const securityTokenRegistryABI = JSON.parse(require('fs').readFileSync('../build/contracts/SecurityTokenRegistry.json').toString()).abi; -const securityTokenABI = JSON.parse(require('fs').readFileSync('../build/contracts/SecurityToken.json').toString()).abi; -const generalTransferManagerABI = JSON.parse(require('fs').readFileSync('../build/contracts/GeneralTransferManager.json').toString()).abi; -const securityTokenRegistryAddress = "0xEf58491224958d978fACF55D2120c55A24516B98"; -const securityTokenRegistry = new web3.eth.Contract(securityTokenRegistryABI, securityTokenRegistryAddress); +const securityTokenABI = JSON.parse(require('fs').readFileSync('../CLI/data/SecurityToken1-4-0.json').toString()).abi; +const generalTransferManagerABI = JSON.parse(require('fs').readFileSync('../CLI/data/GeneralTransferManager1-4-0.json').toString()).abi; async function getTokens() { - let strEvents = await web3.eth.getPastLogs({fromBlock:'0x5C5C18', address:securityTokenRegistry.address, topics: ["0x2510d802a0818e71139a7680a6388bcffcd3fa686e02a0f7319488c5bdb38fcb"]}); - for (let i = 0; i < strEvents.length; i++) { - let tokenAddress = '0x' + strEvents[i].topics[1].slice(26,66) - try { - await getInfo(tokenAddress); - } catch(exception) { - console.log('Failed to load info of', tokenAddress, exception); - } + const securityTokenRegistryAddress = "0xEf58491224958d978fACF55D2120c55A24516B98"; + const securityTokenRegistryABI = await getABIfromEtherscan(securityTokenRegistryAddress); + const securityTokenRegistry = new web3.eth.Contract(securityTokenRegistryABI, securityTokenRegistryAddress); + + let logs = await getLogsFromEtherscan(securityTokenRegistry.options.address, web3.utils.hexToNumber('0x5C5C18'), 'latest', 'LogNewSecurityToken(string,address,address)'); + for (let i = 0; i < logs.length; i++) { + let tokenAddress = '0x' + logs[i].topics[1].slice(26, 66) + await getInfo(tokenAddress); } } @@ -36,7 +31,7 @@ async function getInfo(tokenAddress) { console.log("Finished Issuer Minting: " + await token.methods.finishedIssuerMinting().call()); console.log("Finished STO Minting: " + await token.methods.finishedSTOMinting().call()); let gtmRes = await token.methods.modules(2, 0).call(); - let gtmEvents = await web3.eth.getPastLogs({fromBlock:'0x5C5C18', address:gtmRes.moduleAddress}); + let gtmEvents = await getLogsFromEtherscan(gtmRes.moduleAddress, web3.utils.hexToNumber('0x5C5C18'), 'latest', 'LogModifyWhitelist(address,uint256,address,uint256,uint256,uint256,bool)'); console.log("Count of GeneralTransferManager Events: " + gtmEvents.length); console.log("Modules Attached (TransferManager):"); await getModules(2, token); @@ -69,4 +64,41 @@ async function getModules(type, token) { } } -getTokens(); +async function getLogsFromEtherscan(_address, _fromBlock, _toBlock, _eventSignature) { + let urlDomain = 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'logs', + action: 'getLogs', + fromBlock: _fromBlock, + toBlock: _toBlock, + address: _address, + topic0: web3.utils.sha3(_eventSignature), + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return data.result; +} + +async function getABIfromEtherscan(_address) { + let urlDomain = 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'contract', + action: 'getabi', + address: _address, + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return JSON.parse(data.result); +} + +getTokens(); \ No newline at end of file diff --git a/scripts/tokenInfo-v2.js b/scripts/tokenInfo-v2.js new file mode 100644 index 000000000..1d0f9236f --- /dev/null +++ b/scripts/tokenInfo-v2.js @@ -0,0 +1,108 @@ +const Web3 = require("web3"); +const web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/")); +var request = require('request-promise') + +const securityTokenABI = JSON.parse(require('fs').readFileSync('../build/contracts/SecurityToken.json').toString()).abi; +const generalTransferManagerABI = JSON.parse(require('fs').readFileSync('../build/contracts/GeneralTransferManager.json').toString()).abi; + +async function getTokens() { + const securityTokenRegistryAddress = "0x240f9f86b1465bf1b8eb29bc88cbf65573dfdd97"; + const securityTokenRegistryABI = await getABIfromEtherscan(securityTokenRegistryAddress); + const securityTokenRegistry = new web3.eth.Contract(securityTokenRegistryABI, securityTokenRegistryAddress); + + let logs = await getLogsFromEtherscan(securityTokenRegistry.options.address, 0, 'latest', 'NewSecurityToken(string,string,address,address,uint256,address,bool,uint256)'); + console.log(logs.length); + for (let i = 0; i < logs.length; i++) { + let tokenAddress = '0x' + logs[i].topics[1].slice(26, 66) + await getInfo(tokenAddress); + } +} + +async function getInfo(tokenAddress) { + let token = new web3.eth.Contract(securityTokenABI, tokenAddress); + console.log("Token - " + tokenAddress); + console.log("----------------------"); + //console.log("Owner: " + await token.methods.owner().call()); + console.log("Name: " + await token.methods.name().call()); + console.log("Details: " + await token.methods.tokenDetails().call()); + console.log("Symbol: " + await token.methods.symbol().call()); + console.log("Granularity: " + await token.methods.granularity().call()); + console.log("Total Supply: " + await token.methods.totalSupply().call()); + console.log("Transfers Frozen: " + await token.methods.transfersFrozen().call()); + console.log("Minting Frozen: " + await token.methods.mintingFrozen().call()); + let controllerDisabled = await token.methods.controllerDisabled().call(); + if (controllerDisabled) { + console.log("Controller disabled: YES"); + } else { + console.log("Controller: " + await token.methods.controller().call()); + } + console.log("Investors: " + await token.methods.getInvestorCount().call()); + console.log("Latest Checkpoint: " + await token.methods.currentCheckpointId().call()); + let gtmEventsCount = 0; + let gtmModules = await token.methods.getModulesByName(web3.utils.toHex('GeneralTransferManager')).call(); + for (const m of gtmModules) { + let gtmEvents = await getLogsFromEtherscan(m, 9299699, 'latest', 'ModifyWhitelist(address,uint256,address,uint256,uint256,uint256,bool)'); + gtmEventsCount += gtmEvents.length; + } + console.log("Count of GeneralTransferManager Events: " + gtmEventsCount); + console.log("Modules Attached (TransferManager):"); + await getModules(2, token); + console.log("Modules Attached (PermissionManager):"); + await getModules(1, token); + console.log("Modules Attached (STO):"); + await getModules(3, token); + console.log("Modules Attached (Checkpoint):"); + await getModules(4, token); + console.log("Modules Attached (Burn):"); + await getModules(5, token); + console.log(); + console.log(); +} + +async function getModules(type, token) { + let modules = await token.methods.getModulesByType(type).call(); + for (const m of modules) { + let moduleData = await token.methods.getModule(m).call(); + console.log(" Name: " + web3.utils.toAscii(moduleData[0])); + console.log(" Address: " + m); + } +} + +async function getLogsFromEtherscan(_address, _fromBlock, _toBlock, _eventSignature) { + let urlDomain = 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'logs', + action: 'getLogs', + fromBlock: _fromBlock, + toBlock: _toBlock, + address: _address, + topic0: web3.utils.sha3(_eventSignature), + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return data.result; +} + +async function getABIfromEtherscan(_address) { + let urlDomain = 'api'; + const options = { + url: `https://${urlDomain}.etherscan.io/api`, + qs: { + module: 'contract', + action: 'getabi', + address: _address, + apikey: 'THM9IUVC2DJJ6J5MTICDE6H1HGQK14X559' + }, + method: 'GET', + json: true + }; + let data = await request(options); + return JSON.parse(data.result); +} + +getTokens(); \ No newline at end of file diff --git a/test/b_capped_sto.js b/test/b_capped_sto.js index 4ab4c79fc..cf21d75a0 100644 --- a/test/b_capped_sto.js +++ b/test/b_capped_sto.js @@ -470,7 +470,7 @@ contract("CappedSTO", accounts => { it("Should fundRaised value equal to the raised value in the funds receiver wallet", async () => { const newBalance = await web3.eth.getBalance(account_fundsReceiver); //console.log("WWWW",newBalance,await I_CappedSTO.fundsRaised.call(),balanceOfReceiver); - let op = BigNumber(newBalance) + let op = new BigNumber(newBalance) .minus(balanceOfReceiver) .toNumber(); assert.equal( diff --git a/test/c_checkpoints.js b/test/c_checkpoints.js index 6a08b6dea..830acf600 100644 --- a/test/c_checkpoints.js +++ b/test/c_checkpoints.js @@ -226,10 +226,10 @@ contract("Checkpoints", accounts => { let cps = []; let ts = []; for (let j = 0; j < 10; j++) { - let balance1 = BigNumber(await I_SecurityToken.balanceOf(account_investor1)); - let balance2 = BigNumber(await I_SecurityToken.balanceOf(account_investor2)); - let balance3 = BigNumber(await I_SecurityToken.balanceOf(account_investor3)); - let totalSupply = BigNumber(await I_SecurityToken.totalSupply()); + let balance1 = new BigNumber(await I_SecurityToken.balanceOf(account_investor1)); + let balance2 = new BigNumber(await I_SecurityToken.balanceOf(account_investor2)); + let balance3 = new BigNumber(await I_SecurityToken.balanceOf(account_investor3)); + let totalSupply = new BigNumber(await I_SecurityToken.totalSupply()); cps.push([balance1, balance2, balance3]); ts.push(totalSupply); console.log( @@ -265,18 +265,18 @@ contract("Checkpoints", accounts => { receiver = account_investor3; } let m = Math.random(); - let amount = BigNumber(await I_SecurityToken.balanceOf(sender)) + let amount = new BigNumber(await I_SecurityToken.balanceOf(sender)) .mul(Math.random().toFixed(10)) .toFixed(0); if (m > 0.8) { console.log("Sending full balance"); - amount = BigNumber(await I_SecurityToken.balanceOf(sender)); + amount = new BigNumber(await I_SecurityToken.balanceOf(sender)); } console.log("Sender: " + sender + " Receiver: " + receiver + " Amount: " + JSON.stringify(amount)); await I_SecurityToken.transfer(receiver, amount, { from: sender }); } if (Math.random() > 0.5) { - let n = BigNumber(Math.random().toFixed(10)) + let n = new BigNumber(Math.random().toFixed(10)) .mul(10 ** 17) .toFixed(0); let p = Math.random() * 3; @@ -293,7 +293,7 @@ contract("Checkpoints", accounts => { await I_SecurityToken.mint(minter, n, { from: token_owner }); } if (Math.random() > 0.5) { - let n = BigNumber(Math.random().toFixed(10)).mul(10 ** 17); + let n = new BigNumber(Math.random().toFixed(10)).mul(10 ** 17); let p = Math.random() * 3; let r = Math.random() * 3; let burner; @@ -304,7 +304,7 @@ contract("Checkpoints", accounts => { } else { burner = account_investor3; } - let burnerBalance = BigNumber(await I_SecurityToken.balanceOf(burner)); + let burnerBalance = new BigNumber(await I_SecurityToken.balanceOf(burner)); if (n.gt(burnerBalance.div(2))) { n = burnerBalance.div(2); } @@ -314,10 +314,10 @@ contract("Checkpoints", accounts => { } console.log("Checking Interim..."); for (let k = 0; k < cps.length; k++) { - let balance1 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor1, k + 1)); - let balance2 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor2, k + 1)); - let balance3 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor3, k + 1)); - let totalSupply = BigNumber(await I_SecurityToken.totalSupplyAt(k + 1)); + let balance1 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor1, k + 1)); + let balance2 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor2, k + 1)); + let balance3 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor3, k + 1)); + let totalSupply = new BigNumber(await I_SecurityToken.totalSupplyAt(k + 1)); let balances = [balance1, balance2, balance3]; console.log("Checking TotalSupply: " + totalSupply + " is " + ts[k] + " at checkpoint: " + (k + 1)); assert.isTrue(totalSupply.eq(ts[k])); @@ -330,10 +330,10 @@ contract("Checkpoints", accounts => { } console.log("Checking..."); for (let k = 0; k < cps.length; k++) { - let balance1 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor1, k + 1)); - let balance2 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor2, k + 1)); - let balance3 = BigNumber(await I_SecurityToken.balanceOfAt(account_investor3, k + 1)); - let totalSupply = BigNumber(await I_SecurityToken.totalSupplyAt(k + 1)); + let balance1 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor1, k + 1)); + let balance2 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor2, k + 1)); + let balance3 = new BigNumber(await I_SecurityToken.balanceOfAt(account_investor3, k + 1)); + let totalSupply = new BigNumber(await I_SecurityToken.totalSupplyAt(k + 1)); let balances = [balance1, balance2, balance3]; console.log("Checking TotalSupply: " + totalSupply + " is " + ts[k] + " at checkpoint: " + (k + 1)); assert.isTrue(totalSupply.eq(ts[k])); diff --git a/test/e_erc20_dividends.js b/test/e_erc20_dividends.js index 96f27883b..1b2bd7482 100644 --- a/test/e_erc20_dividends.js +++ b/test/e_erc20_dividends.js @@ -353,11 +353,11 @@ contract("ERC20DividendCheckpoint", accounts => { }); it("Issuer pushes dividends iterating over account holders - dividends proportional to checkpoint", async () => { - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); await I_ERC20DividendCheckpoint.pushDividendPayment(0, 0, 10, { from: token_owner, gas: 5000000 }); - let investor1BalanceAfter = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter = BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor1BalanceAfter = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); assert.equal(investor1BalanceAfter.sub(investor1Balance).toNumber(), web3.utils.toWei("0.5", "ether")); assert.equal(investor2BalanceAfter.sub(investor2Balance).toNumber(), web3.utils.toWei("1", "ether")); //Check fully claimed @@ -515,13 +515,13 @@ contract("ERC20DividendCheckpoint", accounts => { it("should investor 3 claims dividend", async () => { console.log((await I_ERC20DividendCheckpoint.dividends(2))[5].toNumber()); - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3Balance = BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); await I_ERC20DividendCheckpoint.pullDividendPayment(2, { from: account_investor3, gasPrice: 0 }); - let investor1BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investor1BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); assert.equal(investor1BalanceAfter1.sub(investor1Balance).toNumber(), 0); assert.equal(investor2BalanceAfter1.sub(investor2Balance).toNumber(), 0); assert.equal(investor3BalanceAfter1.sub(investor3Balance).toNumber(), web3.utils.toWei("7", "ether")); @@ -533,15 +533,15 @@ contract("ERC20DividendCheckpoint", accounts => { it("should issuer pushes remain", async () => { console.log((await I_ERC20DividendCheckpoint.dividends(2))[5].toNumber()); - let investor1BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let investorTempBalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_temp)); + let investor1BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investorTempBalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_temp)); await I_ERC20DividendCheckpoint.pushDividendPayment(2, 0, 10, { from: token_owner }); - let investor1BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let investorTempBalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_temp)); + let investor1BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investorTempBalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_temp)); assert.equal(investor1BalanceAfter2.sub(investor1BalanceAfter1).toNumber(), 0); assert.equal(investor2BalanceAfter2.sub(investor2BalanceAfter1).toNumber(), web3.utils.toWei("3", "ether")); assert.equal(investor3BalanceAfter2.sub(investor3BalanceAfter1).toNumber(), 0); @@ -778,15 +778,15 @@ contract("ERC20DividendCheckpoint", accounts => { }); it("Investor 2 claims dividend", async () => { - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3Balance = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let tempBalance = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let tempBalance = new BigNumber(await web3.eth.getBalance(account_temp)); await I_ERC20DividendCheckpoint.pullDividendPayment(3, { from: account_investor2, gasPrice: 0 }); - let investor1BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let tempBalanceAfter1 = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let tempBalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_temp)); assert.equal(investor1BalanceAfter1.sub(investor1Balance).toNumber(), 0); assert.equal(investor2BalanceAfter1.sub(investor2Balance).toNumber(), web3.utils.toWei("1.8", "ether")); assert.equal(investor3BalanceAfter1.sub(investor3Balance).toNumber(), 0); @@ -794,15 +794,15 @@ contract("ERC20DividendCheckpoint", accounts => { }); it("Should issuer pushes temp investor - investor1 excluded", async () => { - let investor1BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let tempBalanceAfter1 = BigNumber(await I_PolyToken.balanceOf(account_temp)); + let investor1BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let tempBalanceAfter1 = new BigNumber(await I_PolyToken.balanceOf(account_temp)); await I_ERC20DividendCheckpoint.pushDividendPaymentToAddresses(3, [account_temp, account_investor1], { from: token_owner }); - let investor1BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3BalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_investor3)); - let tempBalanceAfter2 = BigNumber(await I_PolyToken.balanceOf(account_temp)); + let investor1BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3BalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let tempBalanceAfter2 = new BigNumber(await I_PolyToken.balanceOf(account_temp)); assert.equal(investor1BalanceAfter2.sub(investor1BalanceAfter1).toNumber(), 0); assert.equal(investor2BalanceAfter2.sub(investor2BalanceAfter1).toNumber(), 0); assert.equal(investor3BalanceAfter2.sub(investor3BalanceAfter1).toNumber(), 0); @@ -823,9 +823,9 @@ contract("ERC20DividendCheckpoint", accounts => { }); it("Issuer reclaims withholding tax", async () => { - let issuerBalance = BigNumber(await I_PolyToken.balanceOf(token_owner)); + let issuerBalance = new BigNumber(await I_PolyToken.balanceOf(token_owner)); await I_ERC20DividendCheckpoint.withdrawWithholding(3, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await I_PolyToken.balanceOf(token_owner)); + let issuerBalanceAfter = new BigNumber(await I_PolyToken.balanceOf(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0.4", "ether")); }); @@ -843,9 +843,9 @@ contract("ERC20DividendCheckpoint", accounts => { }); it("Issuer is able to reclaim dividend after expiry", async () => { - let tokenOwnerBalance = BigNumber(await I_PolyToken.balanceOf(token_owner)); + let tokenOwnerBalance = new BigNumber(await I_PolyToken.balanceOf(token_owner)); await I_ERC20DividendCheckpoint.reclaimDividend(3, { from: token_owner, gasPrice: 0 }); - let tokenOwnerAfter = BigNumber(await I_PolyToken.balanceOf(token_owner)); + let tokenOwnerAfter = new BigNumber(await I_PolyToken.balanceOf(token_owner)); assert.equal(tokenOwnerAfter.sub(tokenOwnerBalance).toNumber(), web3.utils.toWei("7", "ether")); }); diff --git a/test/f_ether_dividends.js b/test/f_ether_dividends.js index 6b7461629..98fd092cc 100644 --- a/test/f_ether_dividends.js +++ b/test/f_ether_dividends.js @@ -324,11 +324,11 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Issuer pushes dividends iterating over account holders - dividends proportional to checkpoint", async () => { - let investor1Balance = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2Balance = BigNumber(await web3.eth.getBalance(account_investor2)); + let investor1Balance = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2Balance = new BigNumber(await web3.eth.getBalance(account_investor2)); await I_EtherDividendCheckpoint.pushDividendPayment(0, 0, 10, { from: token_owner }); - let investor1BalanceAfter = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter = BigNumber(await web3.eth.getBalance(account_investor2)); + let investor1BalanceAfter = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter = new BigNumber(await web3.eth.getBalance(account_investor2)); assert.equal(investor1BalanceAfter.sub(investor1Balance).toNumber(), web3.utils.toWei("0.5", "ether")); assert.equal(investor2BalanceAfter.sub(investor2Balance).toNumber(), web3.utils.toWei("0.8", "ether")); //Check fully claimed @@ -343,16 +343,16 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Issuer reclaims withholding tax", async () => { - let issuerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.withdrawWithholding(0, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalanceAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0.2", "ether")); }); it("No more withholding tax to withdraw", async () => { - let issuerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.withdrawWithholding(0, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalanceAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0", "ether")); }); @@ -401,9 +401,9 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Still no more withholding tax to withdraw", async () => { - let issuerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.withdrawWithholding(0, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalanceAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0", "ether")); }); @@ -445,29 +445,29 @@ contract("EtherDividendCheckpoint", accounts => { }); it("should investor 3 claims dividend - fails bad index", async () => { - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3Balance = BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); await catchRevert(I_EtherDividendCheckpoint.pullDividendPayment(5, { from: account_investor3, gasPrice: 0 })); }); it("Should investor 3 claims dividend", async () => { - let investor1Balance = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2Balance = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3Balance = BigNumber(await web3.eth.getBalance(account_investor3)); + let investor1Balance = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2Balance = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3Balance = new BigNumber(await web3.eth.getBalance(account_investor3)); await I_EtherDividendCheckpoint.pullDividendPayment(2, { from: account_investor3, gasPrice: 0 }); - let investor1BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor3)); + let investor1BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor3)); assert.equal(investor1BalanceAfter1.sub(investor1Balance).toNumber(), 0); assert.equal(investor2BalanceAfter1.sub(investor2Balance).toNumber(), 0); assert.equal(investor3BalanceAfter1.sub(investor3Balance).toNumber(), web3.utils.toWei("7", "ether")); }); it("Still no more withholding tax to withdraw", async () => { - let issuerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.withdrawWithholding(0, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalanceAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0", "ether")); }); @@ -476,13 +476,13 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Issuer pushes remainder", async () => { - let investor1BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor3)); + let investor1BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor3)); await I_EtherDividendCheckpoint.pushDividendPayment(2, 0, 10, { from: token_owner }); - let investor1BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor3)); + let investor1BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor3)); assert.equal(investor1BalanceAfter2.sub(investor1BalanceAfter1).toNumber(), 0); assert.equal(investor2BalanceAfter2.sub(investor2BalanceAfter1).toNumber(), web3.utils.toWei("2.4", "ether")); assert.equal(investor3BalanceAfter2.sub(investor3BalanceAfter1).toNumber(), 0); @@ -491,9 +491,9 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Issuer withdraws new withholding tax", async () => { - let issuerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.withdrawWithholding(2, { from: token_owner, gasPrice: 0 }); - let issuerBalanceAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let issuerBalanceAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(issuerBalanceAfter.sub(issuerBalance).toNumber(), web3.utils.toWei("0.6", "ether")); }); @@ -609,9 +609,9 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Non-owner pushes investor 1 - fails", async () => { - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3Balance = BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); await catchRevert( I_EtherDividendCheckpoint.pushDividendPaymentToAddresses(3, [account_investor2, account_investor1], { from: account_investor2, @@ -621,9 +621,9 @@ contract("EtherDividendCheckpoint", accounts => { }); it("issuer pushes investor 1 with bad dividend index - fails", async () => { - let investor1Balance = BigNumber(await I_PolyToken.balanceOf(account_investor1)); - let investor2Balance = BigNumber(await I_PolyToken.balanceOf(account_investor2)); - let investor3Balance = BigNumber(await I_PolyToken.balanceOf(account_investor3)); + let investor1Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor1)); + let investor2Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor2)); + let investor3Balance = new BigNumber(await I_PolyToken.balanceOf(account_investor3)); await catchRevert( I_EtherDividendCheckpoint.pushDividendPaymentToAddresses(6, [account_investor2, account_investor1], { from: token_owner, @@ -649,15 +649,15 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Investor 2 claims dividend", async () => { - let investor1Balance = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2Balance = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3Balance = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalance = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1Balance = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2Balance = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3Balance = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalance = new BigNumber(await web3.eth.getBalance(account_temp)); await I_EtherDividendCheckpoint.pullDividendPayment(3, { from: account_investor2, gasPrice: 0 }); - let investor1BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalanceAfter1 = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_temp)); assert.equal(investor1BalanceAfter1.sub(investor1Balance).toNumber(), 0); assert.equal(investor2BalanceAfter1.sub(investor2Balance).toNumber(), web3.utils.toWei("1.6", "ether")); assert.equal(investor3BalanceAfter1.sub(investor3Balance).toNumber(), 0); @@ -665,15 +665,15 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Should issuer pushes investor 1 and temp investor", async () => { - let investor1BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter1 = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalanceAfter1 = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalanceAfter1 = new BigNumber(await web3.eth.getBalance(account_temp)); await I_EtherDividendCheckpoint.pushDividendPaymentToAddresses(3, [account_investor1, account_temp], { from: token_owner }); - let investor1BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter2 = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalanceAfter2 = BigNumber(await web3.eth.getBalance(account_temp)); + let investor1BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalanceAfter2 = new BigNumber(await web3.eth.getBalance(account_temp)); assert.equal(investor1BalanceAfter2.sub(investor1BalanceAfter1).toNumber(), 0); assert.equal(investor2BalanceAfter2.sub(investor2BalanceAfter1).toNumber(), 0); assert.equal(investor3BalanceAfter2.sub(investor3BalanceAfter1).toNumber(), 0); @@ -699,9 +699,9 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Issuer is able to reclaim dividend after expiry", async () => { - let tokenOwnerBalance = BigNumber(await web3.eth.getBalance(token_owner)); + let tokenOwnerBalance = new BigNumber(await web3.eth.getBalance(token_owner)); await I_EtherDividendCheckpoint.reclaimDividend(3, { from: token_owner, gasPrice: 0 }); - let tokenOwnerAfter = BigNumber(await web3.eth.getBalance(token_owner)); + let tokenOwnerAfter = new BigNumber(await web3.eth.getBalance(token_owner)); assert.equal(tokenOwnerAfter.sub(tokenOwnerBalance).toNumber(), web3.utils.toWei("7", "ether")); }); @@ -747,19 +747,19 @@ contract("EtherDividendCheckpoint", accounts => { }); it("Should issuer pushes all dividends", async () => { - let investor1BalanceBefore = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceBefore = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceBefore = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalanceBefore = BigNumber(await web3.eth.getBalance(account_temp)); - let tokenBalanceBefore = BigNumber(await web3.eth.getBalance(I_PolyToken.address)); + let investor1BalanceBefore = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceBefore = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceBefore = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalanceBefore = new BigNumber(await web3.eth.getBalance(account_temp)); + let tokenBalanceBefore = new BigNumber(await web3.eth.getBalance(I_PolyToken.address)); await I_EtherDividendCheckpoint.pushDividendPayment(4, 0, 10, { from: token_owner }); - let investor1BalanceAfter = BigNumber(await web3.eth.getBalance(account_investor1)); - let investor2BalanceAfter = BigNumber(await web3.eth.getBalance(account_investor2)); - let investor3BalanceAfter = BigNumber(await web3.eth.getBalance(account_investor3)); - let tempBalanceAfter = BigNumber(await web3.eth.getBalance(account_temp)); - let tokenBalanceAfter = BigNumber(await web3.eth.getBalance(I_PolyToken.address)); + let investor1BalanceAfter = new BigNumber(await web3.eth.getBalance(account_investor1)); + let investor2BalanceAfter = new BigNumber(await web3.eth.getBalance(account_investor2)); + let investor3BalanceAfter = new BigNumber(await web3.eth.getBalance(account_investor3)); + let tempBalanceAfter = new BigNumber(await web3.eth.getBalance(account_temp)); + let tokenBalanceAfter = new BigNumber(await web3.eth.getBalance(I_PolyToken.address)); assert.equal(investor1BalanceAfter.sub(investor1BalanceBefore).toNumber(), web3.utils.toWei("1", "ether")); assert.equal(investor2BalanceAfter.sub(investor2BalanceBefore).toNumber(), web3.utils.toWei("1.6", "ether")); diff --git a/test/j_manual_approval_transfer_manager.js b/test/j_manual_approval_transfer_manager.js index dae21b9c1..5779a1c13 100644 --- a/test/j_manual_approval_transfer_manager.js +++ b/test/j_manual_approval_transfer_manager.js @@ -541,7 +541,7 @@ contract("ManualApprovalTransferManager", accounts => { "Allows an issuer to set manual approvals or blocks for specific pairs of addresses and amounts. Init function takes no parameters.", "Wrong Module added" ); - assert.equal(await I_ManualApprovalTransferManagerFactory.version.call(), "2.1.0"); + assert.equal(await I_ManualApprovalTransferManagerFactory.version.call(), "2.0.1"); }); it("Should get the tags of the factory", async () => { diff --git a/test/k_module_registry.js b/test/k_module_registry.js index 193c53bad..3ec2d0a0d 100644 --- a/test/k_module_registry.js +++ b/test/k_module_registry.js @@ -391,7 +391,7 @@ contract("ModuleRegistry", accounts => { await I_MRProxied.verifyModule(I_TestSTOFactory.address, true, { from: account_polymath }); // Taking the snapshot the revert the changes from here let id = await takeSnapshot(); - await I_TestSTOFactory.changeSTVersionBounds("lowerBound", [0, 1, 0], { from: account_polymath }); + await I_TestSTOFactory.changeSTVersionBounds("lowerBound", [2, 1, 0], { from: account_polymath }); let _lstVersion = await I_TestSTOFactory.getLowerSTVersionBounds.call(); assert.equal(_lstVersion[2], 0); assert.equal(_lstVersion[1], 1); @@ -409,7 +409,7 @@ contract("ModuleRegistry", accounts => { let _ustVersion = await I_TestSTOFactory.getUpperSTVersionBounds.call(); assert.equal(_ustVersion[0], 0); assert.equal(_ustVersion[2], 1); - await I_STRProxied.setProtocolVersion(I_STFactory.address, 1, 0, 1); + await I_STRProxied.setProtocolVersion(I_STFactory.address, 2, 0, 1); // Generate the new securityToken let newSymbol = "toro"; @@ -479,7 +479,7 @@ contract("ModuleRegistry", accounts => { let sto1 = (await I_MRProxied.getModulesByType.call(3))[0]; let sto2 = (await I_MRProxied.getModulesByType.call(3))[1]; - let sto3 = (await I_MRProxied.getModulesByType.call(3))[2]; + let sto3 = (await I_MRProxied.getModulesByType.call(3))[2]; let sto4 = (await I_MRProxied.getModulesByType.call(3))[3]; assert.equal(sto1, I_CappedSTOFactory1.address); @@ -542,7 +542,7 @@ contract("ModuleRegistry", accounts => { I_MRProxied.reclaimERC20("0x000000000000000000000000000000000000000", { from: account_polymath }) ); }); - + it("Should successfully reclaim POLY tokens -- not authorised", async() => { catchRevert( I_MRProxied.reclaimERC20(I_PolyToken.address, { from: account_temp }) @@ -592,7 +592,7 @@ contract("ModuleRegistry", accounts => { I_ReclaimERC20.reclaimERC20("0x000000000000000000000000000000000000000", { from: account_polymath }) ); }); - + it("Should successfully reclaim POLY tokens -- not authorised", async() => { catchRevert( I_ReclaimERC20.reclaimERC20(I_PolyToken.address, { from: account_temp }) @@ -614,7 +614,7 @@ contract("ModuleRegistry", accounts => { describe("Test case for the PolymathRegistry", async() => { it("Should successfully get the address -- fail because key is not exist", async() => { - catchRevert( + catchRevert( I_PolymathRegistry.getAddress("PolyOracle") ); }); @@ -624,6 +624,35 @@ contract("ModuleRegistry", accounts => { assert.equal(_moduleR, I_ModuleRegistryProxy.address); }) }) + + + describe("Test cases for the transferOwnership", async() => { + + it("Should fail to transfer the ownership -- not authorised", async() => { + catchRevert( + I_MRProxied.transferOwnership(account_temp, { from: account_issuer}) + ); + }); + + it("Should fail to transfer the ownership -- 0x address is not allowed", async() => { + catchRevert( + I_MRProxied.transferOwnership("0x000000000000000000000000000000000000000", { from: account_polymath}) + ); + }); + + it("Should successfully transfer the ownership of the STR", async() => { + let tx = await I_MRProxied.transferOwnership(account_temp, { from: account_polymath }); + assert.equal(tx.logs[0].args.previousOwner, account_polymath); + assert.equal(tx.logs[0].args.newOwner, account_temp); + }); + + it("New owner has authorisation", async() => { + let tx = await I_MRProxied.transferOwnership(account_polymath, { from: account_temp }); + assert.equal(tx.logs[0].args.previousOwner, account_temp); + assert.equal(tx.logs[0].args.newOwner, account_polymath); + }); + + }) }); }); }); diff --git a/test/n_security_token_registry.js b/test/n_security_token_registry.js index 9000b87ed..de8b7d733 100644 --- a/test/n_security_token_registry.js +++ b/test/n_security_token_registry.js @@ -563,9 +563,9 @@ contract("SecurityTokenRegistry", accounts => { address_zero, "STFactory002 contract was not deployed" ); - await I_STRProxied.setProtocolVersion(I_STFactory002.address, 0, 2, 0, { from: account_polymath }); + await I_STRProxied.setProtocolVersion(I_STFactory002.address, 2, 2, 0, { from: account_polymath }); let _protocol = await I_STRProxied.getProtocolVersion.call(); - assert.equal(_protocol[0], 0); + assert.equal(_protocol[0], 2); assert.equal(_protocol[1], 2); assert.equal(_protocol[2], 0); }); @@ -993,6 +993,7 @@ contract("SecurityTokenRegistry", accounts => { it("Should get the tickers by owner", async () => { let tickersList = await I_STRProxied.getTickersByOwner.call(token_owner); + console.log(tickersList); assert.equal(tickersList.length, 4); let tickersListArray = await I_STRProxied.getTickersByOwner.call(account_temp); console.log(tickersListArray); @@ -1158,9 +1159,9 @@ contract("SecurityTokenRegistry", accounts => { it("Should successfully change the protocolVersion -- fail in second attempt because of invalid version", async() => { let snap_Id = await takeSnapshot(); - await I_STRProxied.setProtocolVersion(accounts[8], 1, 2, 1, {from: account_polymath }); + await I_STRProxied.setProtocolVersion(accounts[8], 2, 3, 1, {from: account_polymath }); await catchRevert( - I_STRProxied.setProtocolVersion(accounts[8], 0, 2, 1, {from: account_polymath }) + I_STRProxied.setProtocolVersion(accounts[8], 1, 3, 1, {from: account_polymath }) ); await revertToSnapshot(snap_Id); }); diff --git a/test/o_security_token.js b/test/o_security_token.js index f475f6ab8..84aed05f3 100644 --- a/test/o_security_token.js +++ b/test/o_security_token.js @@ -1017,7 +1017,7 @@ contract("SecurityToken", accounts => { let balanceAfter = await I_PolyToken.balanceOf(token_owner); assert.equal( BigNumber(balanceAfter) - .sub(BigNumber(balanceBefore)) + .sub(new BigNumber(balanceBefore)) .toNumber(), web3.utils.toWei("20000", "ether") ); diff --git a/test/p_usd_tiered_sto.js b/test/p_usd_tiered_sto.js index 1bec3697f..b59841e4e 100644 --- a/test/p_usd_tiered_sto.js +++ b/test/p_usd_tiered_sto.js @@ -77,8 +77,8 @@ contract("USDTieredSTO", accounts => { const STOSetupCost = 0; // MockOracle USD prices - const USDETH = BigNumber(500).mul(10 ** 18); // 500 USD/ETH - const USDPOLY = BigNumber(25).mul(10 ** 16); // 0.25 USD/POLY + const USDETH = new BigNumber(500).mul(10 ** 18); // 500 USD/ETH + const USDPOLY = new BigNumber(25).mul(10 ** 16); // 0.25 USD/POLY // STO Configuration Arrays let _startTime = []; @@ -294,10 +294,10 @@ contract("USDTieredSTO", accounts => { _endTime.push(_startTime[stoId] + duration.days(100)); _ratePerTier.push([BigNumber(10 * 10 ** 16), BigNumber(15 * 10 ** 16)]); // [ 0.10 USD/Token, 0.15 USD/Token ] _ratePerTierDiscountPoly.push([BigNumber(10 * 10 ** 16), BigNumber(15 * 10 ** 16)]); // [ 0.10 USD/Token, 0.15 USD/Token ] - _tokensPerTierTotal.push([BigNumber(100000000).mul(BigNumber(10 ** 18)), BigNumber(200000000).mul(BigNumber(10 ** 18))]); // [ 100m Token, 200m Token ] + _tokensPerTierTotal.push([BigNumber(100000000).mul(new BigNumber(10 ** 18)), BigNumber(200000000).mul(new BigNumber(10 ** 18))]); // [ 100m Token, 200m Token ] _tokensPerTierDiscountPoly.push([BigNumber(0), BigNumber(0)]); // [ 0, 0 ] - _nonAccreditedLimitUSD.push(BigNumber(10000).mul(BigNumber(10 ** 18))); // 10k USD - _minimumInvestmentUSD.push(BigNumber(5 * 10 ** 18)); // 5 USD + _nonAccreditedLimitUSD.push(new BigNumber(10000).mul(new BigNumber(10 ** 18))); // 10k USD + _minimumInvestmentUSD.push(new BigNumber(5 * 10 ** 18)); // 5 USD _fundRaiseTypes.push([0, 1, 2]); _wallet.push(WALLET); _reserveWallet.push(RESERVEWALLET); @@ -481,8 +481,8 @@ contract("USDTieredSTO", accounts => { BigNumber(50 * 10 ** 18) ]); _tokensPerTierDiscountPoly.push([BigNumber(0), BigNumber(0), BigNumber(0), BigNumber(0), BigNumber(0), BigNumber(0)]); - _nonAccreditedLimitUSD.push(BigNumber(10000).mul(BigNumber(10 ** 18))); - _minimumInvestmentUSD.push(BigNumber(0)); + _nonAccreditedLimitUSD.push(new BigNumber(10000).mul(new BigNumber(10 ** 18))); + _minimumInvestmentUSD.push(new BigNumber(0)); _fundRaiseTypes.push([0, 1, 2]); _wallet.push(WALLET); _reserveWallet.push(RESERVEWALLET); @@ -568,8 +568,8 @@ contract("USDTieredSTO", accounts => { _ratePerTierDiscountPoly.push([BigNumber(0.5 * 10 ** 18), BigNumber(1 * 10 ** 18)]); // [ 0.5 USD/Token, 1.5 USD/Token ] _tokensPerTierTotal.push([BigNumber(100 * 10 ** 18), BigNumber(50 * 10 ** 18)]); // [ 100 Token, 50 Token ] _tokensPerTierDiscountPoly.push([BigNumber(100 * 10 ** 18), BigNumber(25 * 10 ** 18)]); // [ 100 Token, 25 Token ] - _nonAccreditedLimitUSD.push(BigNumber(25 * 10 ** 18)); // [ 25 USD ] - _minimumInvestmentUSD.push(BigNumber(5)); + _nonAccreditedLimitUSD.push(new BigNumber(25 * 10 ** 18)); // [ 25 USD ] + _minimumInvestmentUSD.push(new BigNumber(5)); _fundRaiseTypes.push([0, 1, 2]); _wallet.push(WALLET); _reserveWallet.push(RESERVEWALLET); @@ -607,8 +607,8 @@ contract("USDTieredSTO", accounts => { _ratePerTierDiscountPoly.push([BigNumber(10 * 10 ** 16), BigNumber(12 * 10 ** 16)]); _tokensPerTierTotal.push([BigNumber(100 * 10 ** 18), BigNumber(200 * 10 ** 18)]); _tokensPerTierDiscountPoly.push([BigNumber(0), BigNumber(50 * 10 ** 18)]); - _nonAccreditedLimitUSD.push(BigNumber(10000).mul(BigNumber(10 ** 18))); - _minimumInvestmentUSD.push(BigNumber(0)); + _nonAccreditedLimitUSD.push(new BigNumber(10000).mul(new BigNumber(10 ** 18))); + _minimumInvestmentUSD.push(new BigNumber(0)); _fundRaiseTypes.push([0, 1, 2]); _wallet.push(WALLET); _reserveWallet.push(RESERVEWALLET); @@ -884,7 +884,7 @@ contract("USDTieredSTO", accounts => { it("Should successfully change config before startTime - limits and tiers, times, addresses", async () => { let stoId = 3; - await I_USDTieredSTO_Array[stoId].modifyLimits(BigNumber(1 * 10 ** 18), BigNumber(15 * 10 ** 18), { from: ISSUER }); + await I_USDTieredSTO_Array[stoId].modifyLimits(new BigNumber(1 * 10 ** 18), BigNumber(15 * 10 ** 18), { from: ISSUER }); assert.equal( (await I_USDTieredSTO_Array[stoId].minimumInvestmentUSD.call()).toNumber(), BigNumber(15 * 10 ** 18).toNumber(), @@ -963,7 +963,7 @@ contract("USDTieredSTO", accounts => { await catchRevert(I_USDTieredSTO_Array[stoId].modifyFunding([0, 1], { from: ISSUER })); await catchRevert( - I_USDTieredSTO_Array[stoId].modifyLimits(BigNumber(15 * 10 ** 18), BigNumber(1 * 10 ** 18), { from: ISSUER }) + I_USDTieredSTO_Array[stoId].modifyLimits(new BigNumber(15 * 10 ** 18), BigNumber(1 * 10 ** 18), { from: ISSUER }) ); await catchRevert( @@ -1116,7 +1116,7 @@ contract("USDTieredSTO", accounts => { // Set as accredited await I_USDTieredSTO_Array[stoId].changeAccredited([ACCREDITED1], [true], { from: ISSUER }); - let investment_USD = BigNumber(2).mul(10 ** 18); + let investment_USD = new BigNumber(2).mul(10 ** 18); let investment_ETH = await convert(stoId, tierId, false, "USD", "ETH", investment_USD); let investment_POLY = await convert(stoId, tierId, false, "USD", "POLY", investment_USD); let investment_DAI = investment_USD; @@ -1400,23 +1400,23 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await web3.eth.sendTransaction({ @@ -1426,21 +1426,21 @@ contract("USDTieredSTO", accounts => { gasPrice: GAS_PRICE, gas: 1000000 }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.gasUsed); console.log(" Gas fallback purchase: ".grey + tx1.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -1527,22 +1527,22 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(NONACCREDITED1, { @@ -1550,20 +1550,20 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -1611,7 +1611,7 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -1621,15 +1621,15 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -1637,20 +1637,20 @@ contract("USDTieredSTO", accounts => { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -1699,7 +1699,7 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -1710,16 +1710,16 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_InvestorDAIBal = await I_DaiToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let init_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); @@ -1728,21 +1728,21 @@ contract("USDTieredSTO", accounts => { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithUSD: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_InvestorDAIBal = await I_DaiToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let final_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); @@ -1796,21 +1796,21 @@ contract("USDTieredSTO", accounts => { await I_USDTieredSTO_Array[stoId].changeAccredited([ACCREDITED1], [true], { from: ISSUER }); - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await web3.eth.sendTransaction({ @@ -1820,19 +1820,19 @@ contract("USDTieredSTO", accounts => { gasPrice: GAS_PRICE, gas: 1000000 }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.gasUsed); console.log(" Gas fallback purchase: ".grey + tx1.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -1879,21 +1879,21 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(ACCREDITED1, { @@ -1901,19 +1901,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -1960,7 +1960,7 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -1979,14 +1979,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -1994,19 +1994,19 @@ contract("USDTieredSTO", accounts => { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2118,14 +2118,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy with ETH @@ -2134,19 +2134,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2215,14 +2215,14 @@ contract("USDTieredSTO", accounts => { init_TokenSupply = await I_SecurityToken.totalSupply(); init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -2230,19 +2230,19 @@ contract("USDTieredSTO", accounts => { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); final_TokenSupply = await I_SecurityToken.totalSupply(); final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2308,7 +2308,7 @@ contract("USDTieredSTO", accounts => { let stoId = 0; let tierId = 0; - let investment_Token = BigNumber(50).mul(10 ** 18); + let investment_Token = new BigNumber(50).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -2332,12 +2332,12 @@ contract("USDTieredSTO", accounts => { let tierId; // set new exchange rates - let high_USDETH = BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH - let high_USDPOLY = BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY - let low_USDETH = BigNumber(250).mul(10 ** 18); // 250 USD per ETH - let low_USDPOLY = BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY + let high_USDETH = new BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH + let high_USDPOLY = new BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY + let low_USDETH = new BigNumber(250).mul(10 ** 18); // 250 USD per ETH + let low_USDPOLY = new BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY - let investment_USD = BigNumber(web3.utils.toWei("50")); // USD + let investment_USD = new BigNumber(web3.utils.toWei("50")); // USD let investment_ETH_high = investment_USD.div(high_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH let investment_POLY_high = investment_USD.div(high_USDPOLY).mul(10 ** 18); // USD / USD/POLY = POLY let investment_ETH_low = investment_USD.div(low_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH @@ -2402,7 +2402,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); + let delta_Token = new BigNumber(5).mul(10 ** 18); let ethTier0 = await convert(stoId, startTier, false, "TOKEN", "ETH", delta_Token); let ethTier1 = await convert(stoId, endTier, false, "TOKEN", "ETH", delta_Token); @@ -2412,14 +2412,14 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(NONACCREDITED1, { @@ -2427,19 +2427,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2496,7 +2496,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); // Token + let delta_Token = new BigNumber(5).mul(10 ** 18); // Token let polyTier0 = await convert(stoId, startTier, false, "TOKEN", "POLY", delta_Token); let polyTier1 = await convert(stoId, endTier, false, "TOKEN", "POLY", delta_Token); @@ -2509,33 +2509,33 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx2 = await I_USDTieredSTO_Array[stoId].buyWithPOLY(NONACCREDITED1, investment_POLY, { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2595,7 +2595,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); // Token + let delta_Token = new BigNumber(5).mul(10 ** 18); // Token let ethTier0 = await convert(stoId, startTier, false, "TOKEN", "ETH", delta_Token); let ethTier1 = await convert(stoId, endTier, false, "TOKEN", "ETH", delta_Token); @@ -2605,14 +2605,14 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(ACCREDITED1, { @@ -2620,19 +2620,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2689,7 +2689,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); // Token + let delta_Token = new BigNumber(5).mul(10 ** 18); // Token let daiTier0 = await convert(stoId, startTier, false, "TOKEN", "USD", delta_Token); let daiTier1 = await convert(stoId, endTier, false, "TOKEN", "USD", delta_Token); @@ -2702,35 +2702,35 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_InvestorDAIBal = await I_DaiToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let init_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); let tx2 = await I_USDTieredSTO_Array[stoId].buyWithUSD(ACCREDITED1, investment_DAI, { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithUSD: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_InvestorDAIBal = await I_DaiToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(DAI); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let final_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); @@ -2792,7 +2792,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); // Token + let delta_Token = new BigNumber(5).mul(10 ** 18); // Token let polyTier0 = await convert(stoId, startTier, false, "TOKEN", "POLY", delta_Token); let polyTier1 = await convert(stoId, endTier, false, "TOKEN", "POLY", delta_Token); @@ -2805,33 +2805,33 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx2 = await I_USDTieredSTO_Array[stoId].buyWithPOLY(ACCREDITED1, investment_POLY, { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -2925,7 +2925,7 @@ contract("USDTieredSTO", accounts => { let stoId = 1; let tierId = 4; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -2981,12 +2981,12 @@ contract("USDTieredSTO", accounts => { let tierId = 4; // set new exchange rates - let high_USDETH = BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH - let high_USDPOLY = BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY - let low_USDETH = BigNumber(250).mul(10 ** 18); // 250 USD per ETH - let low_USDPOLY = BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY + let high_USDETH = new BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH + let high_USDPOLY = new BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY + let low_USDETH = new BigNumber(250).mul(10 ** 18); // 250 USD per ETH + let low_USDPOLY = new BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY - let investment_USD = BigNumber(web3.utils.toWei("50")); // USD + let investment_USD = new BigNumber(web3.utils.toWei("50")); // USD let investment_ETH_high = investment_USD.div(high_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH let investment_POLY_high = investment_USD.div(high_USDPOLY).mul(10 ** 18); // USD / USD/POLY = POLY let investment_ETH_low = investment_USD.div(low_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH @@ -3072,22 +3072,22 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await web3.eth.sendTransaction({ @@ -3097,20 +3097,20 @@ contract("USDTieredSTO", accounts => { gasPrice: GAS_PRICE, gas: 1000000 }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.gasUsed); console.log(" Gas fallback purchase: ".grey + tx1.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3196,21 +3196,21 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(NONACCREDITED1, { @@ -3218,19 +3218,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3277,7 +3277,7 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, true, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, true, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, true, "TOKEN", "POLY", investment_Token); @@ -3287,14 +3287,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -3302,19 +3302,19 @@ contract("USDTieredSTO", accounts => { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3364,21 +3364,21 @@ contract("USDTieredSTO", accounts => { await I_USDTieredSTO_Array[stoId].changeAccredited([ACCREDITED1], [true], { from: ISSUER }); - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await web3.eth.sendTransaction({ @@ -3388,19 +3388,19 @@ contract("USDTieredSTO", accounts => { gasPrice: GAS_PRICE, gas: 1000000 }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.gasUsed); console.log(" Gas fallback purchase: ".grey + tx1.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3447,21 +3447,21 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx1 = await I_USDTieredSTO_Array[stoId].buyWithETH(ACCREDITED1, { @@ -3469,19 +3469,19 @@ contract("USDTieredSTO", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - let gasCost1 = BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); + let gasCost1 = new BigNumber(GAS_PRICE).mul(tx1.receipt.gasUsed); console.log(" Gas buyWithETH: ".grey + tx1.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3528,7 +3528,7 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, true, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, true, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, true, "TOKEN", "POLY", investment_Token); @@ -3547,14 +3547,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -3562,19 +3562,19 @@ contract("USDTieredSTO", accounts => { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3675,14 +3675,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -3690,19 +3690,19 @@ contract("USDTieredSTO", accounts => { from: NONACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(NONACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(NONACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(NONACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(NONACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -3958,7 +3958,7 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 0; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, true, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, true, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, true, "TOKEN", "POLY", investment_Token); @@ -4008,12 +4008,12 @@ contract("USDTieredSTO", accounts => { let tierId = 0; // set new exchange rates - let high_USDETH = BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH - let high_USDPOLY = BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY - let low_USDETH = BigNumber(250).mul(10 ** 18); // 250 USD per ETH - let low_USDPOLY = BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY + let high_USDETH = new BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH + let high_USDPOLY = new BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY + let low_USDETH = new BigNumber(250).mul(10 ** 18); // 250 USD per ETH + let low_USDPOLY = new BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, true, "TOKEN", "USD", investment_Token); let investment_ETH_high = investment_USD.div(high_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH @@ -4080,7 +4080,7 @@ contract("USDTieredSTO", accounts => { "currentTier not changed as expected" ); - let delta_Token = BigNumber(5).mul(10 ** 18); // Token + let delta_Token = new BigNumber(5).mul(10 ** 18); // Token let polyTier0 = await convert(stoId, startTier, true, "TOKEN", "POLY", delta_Token); let polyTier1 = await convert(stoId, endTier, true, "TOKEN", "POLY", delta_Token); let investment_Token = delta_Token.add(delta_Token); // 10 Token @@ -4107,33 +4107,33 @@ contract("USDTieredSTO", accounts => { // Process investment let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let tx2 = await I_USDTieredSTO_Array[stoId].buyWithPOLY(ACCREDITED1, investment_POLY, { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -4184,10 +4184,10 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 1; - let discount_Token = BigNumber(20).mul(10 ** 18); + let discount_Token = new BigNumber(20).mul(10 ** 18); let discount_POLY = await convert(stoId, tierId, true, "TOKEN", "POLY", discount_Token); - let regular_Token = BigNumber(10).mul(10 ** 18); + let regular_Token = new BigNumber(10).mul(10 ** 18); let regular_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", regular_Token); let investment_Token = discount_Token.add(regular_Token); @@ -4198,14 +4198,14 @@ contract("USDTieredSTO", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); // Buy With POLY @@ -4213,19 +4213,19 @@ contract("USDTieredSTO", accounts => { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(ACCREDITED1); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(ACCREDITED1)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(ACCREDITED1)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(ACCREDITED1); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(ETH); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(POLY); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); assert.equal( @@ -4289,7 +4289,7 @@ contract("USDTieredSTO", accounts => { from: ACCREDITED1, gasPrice: GAS_PRICE }); - let gasCost2 = BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); + let gasCost2 = new BigNumber(GAS_PRICE).mul(tx2.receipt.gasUsed); console.log(" Gas buyWithPOLY: ".grey + tx2.receipt.gasUsed.toString().grey); let final_TokenSupply = await I_SecurityToken.totalSupply(); @@ -4317,7 +4317,7 @@ contract("USDTieredSTO", accounts => { let stoId = 2; let tierId = 1; - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, false, "TOKEN", "USD", investment_Token); let investment_ETH = await convert(stoId, tierId, false, "TOKEN", "ETH", investment_Token); let investment_POLY = await convert(stoId, tierId, false, "TOKEN", "POLY", investment_Token); @@ -4357,12 +4357,12 @@ contract("USDTieredSTO", accounts => { let tierId = 1; // set new exchange rates - let high_USDETH = BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH - let high_USDPOLY = BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY - let low_USDETH = BigNumber(250).mul(10 ** 18); // 250 USD per ETH - let low_USDPOLY = BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY + let high_USDETH = new BigNumber(1000).mul(10 ** 18); // 1000 USD per ETH + let high_USDPOLY = new BigNumber(50).mul(10 ** 16); // 0.5 USD per POLY + let low_USDETH = new BigNumber(250).mul(10 ** 18); // 250 USD per ETH + let low_USDPOLY = new BigNumber(20).mul(10 ** 16); // 0.2 USD per POLY - let investment_Token = BigNumber(5).mul(10 ** 18); + let investment_Token = new BigNumber(5).mul(10 ** 18); let investment_USD = await convert(stoId, tierId, true, "TOKEN", "USD", investment_Token); let investment_ETH_high = investment_USD.div(high_USDETH).mul(10 ** 18); // USD / USD/ETH = ETH @@ -4505,7 +4505,7 @@ contract("USDTieredSTO", accounts => { it("should get the right conversion for ETH to USD", async () => { // 20 ETH to 10000 USD - let ethInWei = BigNumber(web3.utils.toWei("20", "ether")); + let ethInWei = new BigNumber(web3.utils.toWei("20", "ether")); let usdInWei = await I_USDTieredSTO_Array[0].convertToUSD(ETH, ethInWei); assert.equal( usdInWei.div(10 ** 18).toNumber(), @@ -4518,7 +4518,7 @@ contract("USDTieredSTO", accounts => { it("should get the right conversion for POLY to USD", async () => { // 40000 POLY to 10000 USD - let polyInWei = BigNumber(web3.utils.toWei("40000", "ether")); + let polyInWei = new BigNumber(web3.utils.toWei("40000", "ether")); let usdInWei = await I_USDTieredSTO_Array[0].convertToUSD(POLY, polyInWei); assert.equal( usdInWei.div(10 ** 18).toNumber(), @@ -4533,7 +4533,7 @@ contract("USDTieredSTO", accounts => { describe("convertFromUSD", async () => { it("should get the right conversion for USD to ETH", async () => { // 10000 USD to 20 ETH - let usdInWei = BigNumber(web3.utils.toWei("10000", "ether")); + let usdInWei = new BigNumber(web3.utils.toWei("10000", "ether")); let ethInWei = await I_USDTieredSTO_Array[0].convertFromUSD(ETH, usdInWei); assert.equal( ethInWei.div(10 ** 18).toNumber(), @@ -4546,7 +4546,7 @@ contract("USDTieredSTO", accounts => { it("should get the right conversion for USD to POLY", async () => { // 10000 USD to 40000 POLY - let usdInWei = BigNumber(web3.utils.toWei("10000", "ether")); + let usdInWei = new BigNumber(web3.utils.toWei("10000", "ether")); let polyInWei = await I_USDTieredSTO_Array[0].convertFromUSD(POLY, usdInWei); assert.equal( polyInWei.div(10 ** 18).toNumber(), diff --git a/test/q_usd_tiered_sto_sim.js b/test/q_usd_tiered_sto_sim.js index b287cb201..e8b87b3df 100644 --- a/test/q_usd_tiered_sto_sim.js +++ b/test/q_usd_tiered_sto_sim.js @@ -73,8 +73,8 @@ contract("USDTieredSTO Sim", accounts => { const STOSetupCost = 0; // MockOracle USD prices - const USDETH = BigNumber(500).mul(10 ** 18); // 500 USD/ETH - const USDPOLY = BigNumber(25).mul(10 ** 16); // 0.25 USD/POLY + const USDETH = new BigNumber(500).mul(10 ** 18); // 500 USD/ETH + const USDPOLY = new BigNumber(25).mul(10 ** 16); // 0.25 USD/POLY // STO Configuration Arrays let _startTime = []; @@ -266,8 +266,8 @@ contract("USDTieredSTO Sim", accounts => { _ratePerTierDiscountPoly.push([BigNumber(0.05 * 10 ** 18), BigNumber(0.08 * 10 ** 18), BigNumber(0.13 * 10 ** 18)]); // [ 0.05 USD/Token, 0.08 USD/Token, 0.13 USD/Token ] _tokensPerTierTotal.push([BigNumber(200 * 10 ** 18), BigNumber(500 * 10 ** 18), BigNumber(300 * 10 ** 18)]); // [ 1000 Token, 2000 Token, 1500 Token ] _tokensPerTierDiscountPoly.push([BigNumber(0), BigNumber(50 * 10 ** 18), BigNumber(300 * 10 ** 18)]); // [ 0 Token, 1000 Token, 1500 Token ] - _nonAccreditedLimitUSD.push(BigNumber(10 * 10 ** 18)); // 20 USD - _minimumInvestmentUSD.push(BigNumber(0)); // 1 wei USD + _nonAccreditedLimitUSD.push(new BigNumber(10 * 10 ** 18)); // 20 USD + _minimumInvestmentUSD.push(new BigNumber(0)); // 1 wei USD _fundRaiseTypes.push([0, 1, 2]); _wallet.push(WALLET); _reserveWallet.push(RESERVEWALLET); @@ -384,12 +384,12 @@ contract("USDTieredSTO Sim", accounts => { ---------------------------------------------------------- `); - let totalTokens = BigNumber(0); + let totalTokens = new BigNumber(0); for (var i = 0; i < _tokensPerTierTotal[stoId].length; i++) { totalTokens = totalTokens.add(_tokensPerTierTotal[stoId][i]); } console.log("totalTokens: " + totalTokens.div(10 ** 18).toNumber()); - let tokensSold = BigNumber(0); + let tokensSold = new BigNumber(0); while (true) { switch (getRandomInt(0, 5)) { case 0: // ACCREDITED1 @@ -444,12 +444,12 @@ contract("USDTieredSTO Sim", accounts => { let isPoly = Math.random() >= 0.33; let isDai = Math.random() >= 0.33; - let Token_counter = BigNumber(getRandomInt(1 * 10 ** 10, 50 * 10 ** 10)).mul(10 ** 8); - let investment_USD = BigNumber(0); - let investment_ETH = BigNumber(0); - let investment_POLY = BigNumber(0); - let investment_DAI = BigNumber(0); - let investment_Token = BigNumber(0); + let Token_counter = new BigNumber(getRandomInt(1 * 10 ** 10, 50 * 10 ** 10)).mul(10 ** 8); + let investment_USD = new BigNumber(0); + let investment_ETH = new BigNumber(0); + let investment_POLY = new BigNumber(0); + let investment_DAI = new BigNumber(0); + let investment_Token = new BigNumber(0); let Tokens_total = []; let Tokens_discount = []; @@ -484,19 +484,17 @@ contract("USDTieredSTO Sim", accounts => { if (isPoly) { // 1. POLY and discount (consume up to cap then move to regular) if (Tokens_discount[tier].gt(0)) { - Token_Tier = BigNumber.min([Tokens_total[tier], Tokens_discount[tier], Token_counter]); + Token_Tier = new BigNumber.min([Tokens_total[tier], Tokens_discount[tier], Token_counter]); USD_Tier = Token_Tier.mul(_ratePerTierDiscountPoly[stoId][tier].div(10 ** 18)); if (USD_Tier.gte(USD_remaining)) { USD_overflow = USD_Tier.sub(USD_remaining); Token_overflow = USD_overflow.mul(10 ** 18).div(_ratePerTierDiscountPoly[stoId][tier]); USD_Tier = USD_Tier.sub(USD_overflow); Token_Tier = Token_Tier.sub(Token_overflow); - Token_counter = BigNumber(0); + Token_counter = new BigNumber(0); } - POLY_Tier = USD_Tier.mul(10 ** 18) - .round(0) - .div(USDPOLY) - .round(0); + POLY_Tier = new BigNumber(USD_Tier.mul(10 ** 18).toFixed(0)); + POLY_Tier = POLY_Tier.div(USDPOLY).toFixed(0); USD_remaining = USD_remaining.sub(USD_Tier); Tokens_total[tier] = Tokens_total[tier].sub(Token_Tier); Tokens_discount[tier] = Tokens_discount[tier].sub(Token_Tier); @@ -507,19 +505,17 @@ contract("USDTieredSTO Sim", accounts => { } // 2. POLY and regular (consume up to cap then skip to next tier) if (Tokens_total[tier].gt(0) && Token_counter.gt(0)) { - Token_Tier = BigNumber.min([Tokens_total[tier], Token_counter]); + Token_Tier = new BigNumber.min([Tokens_total[tier], Token_counter]); USD_Tier = Token_Tier.mul(_ratePerTier[stoId][tier].div(10 ** 18)); if (USD_Tier.gte(USD_remaining)) { USD_overflow = USD_Tier.sub(USD_remaining); Token_overflow = USD_overflow.mul(10 ** 18).div(_ratePerTier[stoId][tier]); USD_Tier = USD_Tier.sub(USD_overflow); Token_Tier = Token_Tier.sub(Token_overflow); - Token_counter = BigNumber(0); + Token_counter = new BigNumber(0); } - POLY_Tier = USD_Tier.mul(10 ** 18) - .round(0) - .div(USDPOLY) - .round(0); + POLY_Tier = new BigNumber(USD_Tier.mul(10 ** 18).toFixed(0)); + POLY_Tier = POLY_Tier.div(USDPOLY).toFixed(0); USD_remaining = USD_remaining.sub(USD_Tier); Tokens_total[tier] = Tokens_total[tier].sub(Token_Tier); Token_counter = Token_counter.sub(Token_Tier); @@ -529,16 +525,16 @@ contract("USDTieredSTO Sim", accounts => { } } else if (isDai) { // 3. DAI (consume up to cap then skip to next tier) - Token_Tier = BigNumber.min([Tokens_total[tier], Token_counter]); + Token_Tier = new BigNumber.min([Tokens_total[tier], Token_counter]); USD_Tier = Token_Tier.mul(_ratePerTier[stoId][tier].div(10 ** 18)); if (USD_Tier.gte(USD_remaining)) { USD_overflow = USD_Tier.sub(USD_remaining); Token_overflow = USD_overflow.mul(10 ** 18).div(_ratePerTier[stoId][tier]); USD_Tier = USD_Tier.sub(USD_overflow); Token_Tier = Token_Tier.sub(Token_overflow); - Token_counter = BigNumber(0); + Token_counter = new BigNumber(0); } - DAI_Tier = USD_Tier.round(0); + DAI_Tier = USD_Tier.toFixed(0); USD_remaining = USD_remaining.sub(USD_Tier); Tokens_total[tier] = Tokens_total[tier].sub(Token_Tier); Token_counter = Token_counter.sub(Token_Tier); @@ -547,19 +543,17 @@ contract("USDTieredSTO Sim", accounts => { investment_DAI = investment_USD; } else { // 4. ETH (consume up to cap then skip to next tier) - Token_Tier = BigNumber.min([Tokens_total[tier], Token_counter]); + Token_Tier = new BigNumber.min([Tokens_total[tier], Token_counter]); USD_Tier = Token_Tier.mul(_ratePerTier[stoId][tier].div(10 ** 18)); if (USD_Tier.gte(USD_remaining)) { USD_overflow = USD_Tier.sub(USD_remaining); Token_overflow = USD_overflow.mul(10 ** 18).div(_ratePerTier[stoId][tier]); USD_Tier = USD_Tier.sub(USD_overflow); Token_Tier = Token_Tier.sub(Token_overflow); - Token_counter = BigNumber(0); + Token_counter = new BigNumber(0); } - ETH_Tier = USD_Tier.mul(10 ** 18) - .round(0) - .div(USDETH) - .round(0); + ETH_Tier = new BigNumber(USD_Tier.mul(10 ** 18).toFixed(0)); + ETH_Tier = ETH_Tier.div(USDETH).toFixed(0); USD_remaining = USD_remaining.sub(USD_Tier); Tokens_total[tier] = Tokens_total[tier].sub(Token_Tier); Token_counter = Token_counter.sub(Token_Tier); @@ -590,9 +584,9 @@ contract("USDTieredSTO Sim", accounts => { async function investFAIL(_investor) { let isPoly = Math.random() >= 0.3; let isDAI = Math.random() >= 0.3; - let investment_POLY = BigNumber(40 * 10 ** 18); // 10 USD = 40 POLY - let investment_ETH = BigNumber(0.02 * 10 ** 18); // 10 USD = 0.02 ETH - let investment_DAI = BigNumber(10 * 10 ** 18); // 10 USD = DAI DAI + let investment_POLY = new BigNumber(40 * 10 ** 18); // 10 USD = 40 POLY + let investment_ETH = new BigNumber(0.02 * 10 ** 18); // 10 USD = 0.02 ETH + let investment_DAI = new BigNumber(10 * 10 ** 18); // 10 USD = DAI DAI if (isPoly) { await I_PolyToken.getTokens(investment_POLY, _investor); @@ -626,11 +620,11 @@ contract("USDTieredSTO Sim", accounts => { Tokens_discount, tokensSold ) { - investment_Token = investment_Token.round(0); - investment_USD = investment_USD.round(0); - investment_POLY = investment_POLY.round(0); - investment_DAI = investment_DAI.round(0); - investment_ETH = investment_ETH.round(0); + investment_Token = new BigNumber(investment_Token.toFixed(0)); + investment_USD = new BigNumber(investment_USD.toFixed(0)); + investment_POLY = new BigNumber(investment_POLY.toFixed(0)); + investment_DAI = new BigNumber(investment_DAI.toFixed(0)); + investment_ETH = new BigNumber(investment_ETH.toFixed(0)); console.log(` ------------------- New Investment ------------------- Investor: ${_investor} @@ -658,37 +652,37 @@ contract("USDTieredSTO Sim", accounts => { let init_TokenSupply = await I_SecurityToken.totalSupply(); let init_InvestorTokenBal = await I_SecurityToken.balanceOf(_investor); - let init_InvestorETHBal = BigNumber(await web3.eth.getBalance(_investor)); + let init_InvestorETHBal = new BigNumber(await web3.eth.getBalance(_investor)); let init_InvestorPOLYBal = await I_PolyToken.balanceOf(_investor); let init_InvestorDAIBal = await I_DaiToken.balanceOf(_investor); let init_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let init_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let init_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let init_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_STODAIBal = await I_DaiToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let init_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let init_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(0); let init_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(1); let init_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(2); - let init_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let init_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let init_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let init_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); let tx; - let gasCost = BigNumber(0); + let gasCost = new BigNumber(0); if (isPoly && investment_POLY.gt(10)) { tx = await I_USDTieredSTO_Array[stoId].buyWithPOLY(_investor, investment_POLY, { from: _investor, gasPrice: GAS_PRICE }); - gasCost = BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); + gasCost = new BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); console.log( `buyWithPOLY: ${investment_Token.div(10 ** 18)} tokens for ${investment_POLY.div(10 ** 18)} POLY by ${_investor}` .yellow ); } else if (isDai && investment_DAI.gt(10)) { tx = await I_USDTieredSTO_Array[stoId].buyWithUSD(_investor, investment_DAI, { from: _investor, gasPrice: GAS_PRICE }); - gasCost = BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); + gasCost = new BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); console.log( `buyWithUSD: ${investment_Token.div(10 ** 18)} tokens for ${investment_DAI.div(10 ** 18)} DAI by ${_investor}` .yellow @@ -699,7 +693,7 @@ contract("USDTieredSTO Sim", accounts => { value: investment_ETH, gasPrice: GAS_PRICE }); - gasCost = BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); + gasCost = new BigNumber(GAS_PRICE).mul(tx.receipt.gasUsed); console.log( `buyWithETH: ${investment_Token.div(10 ** 18)} tokens for ${investment_ETH.div(10 ** 18)} ETH by ${_investor}` .yellow @@ -709,18 +703,18 @@ contract("USDTieredSTO Sim", accounts => { let final_TokenSupply = await I_SecurityToken.totalSupply(); let final_InvestorTokenBal = await I_SecurityToken.balanceOf(_investor); - let final_InvestorETHBal = BigNumber(await web3.eth.getBalance(_investor)); + let final_InvestorETHBal = new BigNumber(await web3.eth.getBalance(_investor)); let final_InvestorPOLYBal = await I_PolyToken.balanceOf(_investor); let final_InvestorDAIBal = await I_DaiToken.balanceOf(_investor); let final_STOTokenSold = await I_USDTieredSTO_Array[stoId].getTokensSold(); - let final_STOETHBal = BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); + let final_STOETHBal = new BigNumber(await web3.eth.getBalance(I_USDTieredSTO_Array[stoId].address)); let final_STOPOLYBal = await I_PolyToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_STODAIBal = await I_DaiToken.balanceOf(I_USDTieredSTO_Array[stoId].address); let final_RaisedUSD = await I_USDTieredSTO_Array[stoId].fundsRaisedUSD.call(); let final_RaisedETH = await I_USDTieredSTO_Array[stoId].fundsRaised.call(0); let final_RaisedPOLY = await I_USDTieredSTO_Array[stoId].fundsRaised.call(1); let final_RaisedDAI = await I_USDTieredSTO_Array[stoId].fundsRaised.call(2); - let final_WalletETHBal = BigNumber(await web3.eth.getBalance(WALLET)); + let final_WalletETHBal = new BigNumber(await web3.eth.getBalance(WALLET)); let final_WalletPOLYBal = await I_PolyToken.balanceOf(WALLET); let final_WalletDAIBal = await I_DaiToken.balanceOf(WALLET); diff --git a/test/s_v130_to_v140_upgrade.js b/test/s_v130_to_v140_upgrade.js index 3fb3092aa..014b44ac2 100644 --- a/test/s_v130_to_v140_upgrade.js +++ b/test/s_v130_to_v140_upgrade.js @@ -353,8 +353,8 @@ contract("Upgrade from v1.3.0 to v1.4.0", accounts => { let _ratePerTierDiscountPoly = [BigNumber(0), BigNumber(0), BigNumber(0)]; let _tokensPerTierTotal = [BigNumber(100).mul(10 ** 18), BigNumber(200).mul(10 ** 18), BigNumber(300).mul(10 ** 18)]; let _tokensPerTierDiscountPoly = [BigNumber(0), BigNumber(0), BigNumber(0)]; - let _nonAccreditedLimitUSD = BigNumber(100).mul(10 ** 18); - let _minimumInvestmentUSD = BigNumber(5).mul(10 ** 18); + let _nonAccreditedLimitUSD = new BigNumber(100).mul(10 ** 18); + let _minimumInvestmentUSD = new BigNumber(5).mul(10 ** 18); let _fundRaiseTypes = [0, 1]; let _wallet = ISSUER1; let _reserveWallet = ISSUER1; diff --git a/yarn.lock b/yarn.lock index 31973936e..63f3ead17 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,22 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@soldoc/markdown@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@soldoc/markdown/-/markdown-0.1.0.tgz#9f85be75049af9721b5129f133d52dafbf5f671e" @@ -19,6 +35,11 @@ valid-url "^1.0.9" yargs "^11.0.0" +"@types/node@^10.3.2": + version "10.12.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.2.tgz#d77f9faa027cadad9c912cd47f4f8b07b0fb0864" + integrity sha512-53ElVDSnZeFUUFIYzI8WLQ25IhWzb6vbddNp8UHlXQyU0ET2RhV5zg0NfubzU7iNMh5bBXb0htCzfvrSVNgzaQ== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -66,10 +87,15 @@ acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.5.0: +acorn@^5.0.0: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" +acorn@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" + integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== + aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" @@ -86,7 +112,7 @@ ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^5.1.1, ajv@^5.2.2, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.1.1, ajv@^5.2.2, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -180,6 +206,13 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +arguments-extended@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/arguments-extended/-/arguments-extended-0.0.3.tgz#6107e4917d0eb6f0a4dd66320fc15afc72ef4946" + dependencies: + extended "~0.0.3" + is-extended "~0.0.8" + arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -198,6 +231,14 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-extended@~0.0.3, array-extended@~0.0.4, array-extended@~0.0.5: + version "0.0.11" + resolved "https://registry.yarnpkg.com/array-extended/-/array-extended-0.0.11.tgz#d7144ae748de93ca726f121009dbff1626d164bd" + dependencies: + arguments-extended "~0.0.3" + extended "~0.0.3" + is-extended "~0.0.3" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -306,7 +347,7 @@ aws4@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -938,6 +979,11 @@ big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +bignumber.js@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-5.0.0.tgz#fbce63f09776b3000a83185badcde525daf34833" + integrity sha512-KWTu6ZMVk9sxlDJQh2YH1UOnfDP8O8TpxUxgQG/vKASoSnEjK9aVuOueFaPcQEYQ5fyNXNTOYwYw3099RYebWg== + bignumber.js@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1" @@ -1046,7 +1092,7 @@ borc@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/borc/-/borc-2.0.3.tgz#08845ea73a6d3211120928ee3929f8dc2de9f52e" dependencies: - bignumber.js "^6.0.0" + bignumber.js "^7.2.1" commander "^2.15.0" ieee754 "^1.1.8" json-text-sequence "^0.1" @@ -1648,7 +1694,7 @@ cron-parser@^2.4.0: is-nan "^1.2.1" moment-timezone "^0.5.0" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -1656,6 +1702,17 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -1704,6 +1761,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-extended@~0.0.3: + version "0.0.6" + resolved "https://registry.yarnpkg.com/date-extended/-/date-extended-0.0.6.tgz#23802d57dd1bf7818813fe0c32e851a86da267c9" + dependencies: + array-extended "~0.0.3" + extended "~0.0.3" + is-extended "~0.0.3" + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -1712,7 +1777,7 @@ death@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" -debug@*: +debug@*, debug@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" dependencies: @@ -1740,6 +1805,10 @@ decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +declare.js@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/declare.js/-/declare.js-0.0.8.tgz#0478adff9564c004f51df73d8bc134019d28dcde" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -2195,6 +2264,14 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" +eslint-plugin-es@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz#5acb2565db4434803d1d46a9b4cbc94b345bd028" + integrity sha512-9XcVyZiQRVeFjqHw8qHNDAZcQLqaHlOGGpeYqzYh8S4JYCWTCO3yzyen8yVmA5PratfzTRWDwCOFphtDEG+w/w== + dependencies: + eslint-utils "^1.3.0" + regexpp "^2.0.0" + eslint-plugin-import@^2.10.0: version "2.14.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" @@ -2214,10 +2291,12 @@ eslint-plugin-node@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz#bf19642298064379315d7a4b2a75937376fa05e4" dependencies: - ignore "^3.3.6" + eslint-plugin-es "^1.3.1" + eslint-utils "^1.3.1" + ignore "^5.0.2" minimatch "^3.0.4" - resolve "^1.3.3" - semver "^5.4.1" + resolve "^1.8.1" + semver "^5.5.0" eslint-plugin-promise@^3.7.0: version "3.8.0" @@ -2234,6 +2313,11 @@ eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-utils@^1.3.0, eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" @@ -2242,51 +2326,52 @@ eslint@^4.19.1: version "4.19.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" doctrine "^2.1.0" - eslint-scope "^3.7.1" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + inquirer "^6.1.0" + is-resolvable "^1.1.0" + js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.5" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" - regexpp "^1.0.1" + regexpp "^2.0.1" require-uncached "^1.0.3" - semver "^5.3.0" + semver "^5.5.1" strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" espree@^3.5.4: version "3.5.4" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" @@ -2296,7 +2381,7 @@ esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" -esquery@^1.0.0: +esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" dependencies: @@ -2434,7 +2519,7 @@ ethereumjs-abi@0.6.4: ethereumjs-abi@^0.6.5, "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.5" - resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#00ba8463a7f7a67fcad737ff9c2ebd95643427f7" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#2863c40e0982acfc0b7163f0285d4c56427c7799" dependencies: bn.js "^4.10.0" ethereumjs-util "^5.0.0" @@ -2473,7 +2558,7 @@ ethereumjs-testrpc@^6.0.3: dependencies: webpack "^3.0.0" -ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.1, ethereumjs-tx@^1.3.3: +ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.1, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" dependencies: @@ -2535,13 +2620,13 @@ ethers@^3.0.15: version "3.0.29" resolved "https://registry.yarnpkg.com/ethers/-/ethers-3.0.29.tgz#ce8139955b4ed44456eb6764b089bb117c86775d" dependencies: + "@types/node" "^10.3.2" aes-js "3.0.0" bn.js "^4.4.0" elliptic "6.3.3" - hash.js "^1.0.0" - inherits "2.0.1" + hash.js "1.1.3" js-sha3 "0.5.7" - scrypt-js "2.0.3" + scrypt-js "2.0.4" setimmediate "1.0.4" uuid "2.0.1" xmlhttprequest "1.8.0" @@ -2682,6 +2767,18 @@ extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" +extended@0.0.6, extended@~0.0.3: + version "0.0.6" + resolved "https://registry.yarnpkg.com/extended/-/extended-0.0.6.tgz#7fb8bf7b9dae397586e48570acfd642c78e50669" + dependencies: + extender "~0.0.5" + +extender@~0.0.5: + version "0.0.10" + resolved "https://registry.yarnpkg.com/extender/-/extender-0.0.10.tgz#589c07482be61a1460b6d81f9c24aa67e8f324cd" + dependencies: + declare.js "~0.0.4" + extendr@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/extendr/-/extendr-2.1.0.tgz#301aa0bbea565f4d2dc8f570f2a22611a8527b56" @@ -2692,8 +2789,8 @@ external-editor@^2.0.4: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" + chardet "^0.7.0" + iconv-lite "^0.4.24" tmp "^0.0.33" extglob@^0.3.1: @@ -2739,6 +2836,15 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" +fast-csv@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-2.4.1.tgz#bd7dd268391f729367b59445b8dd0ad026881b26" + dependencies: + extended "0.0.6" + is-extended "0.0.10" + object-extended "0.0.7" + string-extended "0.0.8" + fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -2874,7 +2980,7 @@ form-data@~2.3.2: resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: asynckit "^0.4.0" - combined-stream "1.0.6" + combined-stream "^1.0.6" mime-types "^2.1.12" forwarded@~0.1.2: @@ -3088,7 +3194,7 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^11.0.1: +globals@^11.7.0: version "11.8.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" @@ -3239,6 +3345,14 @@ hash-base@^3.0.0: inherits "^2.0.1" safe-buffer "^5.0.1" +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.5" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" @@ -3323,7 +3437,7 @@ iconv-lite@0.4.23: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -3393,13 +3507,12 @@ inquirer@^3.0.6: chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^3.0.0" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.10" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^6.1.0" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" @@ -3510,6 +3623,12 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extended@0.0.10, is-extended@~0.0.3, is-extended@~0.0.8: + version "0.0.10" + resolved "https://registry.yarnpkg.com/is-extended/-/is-extended-0.0.10.tgz#244e140df75bb1c9a3106f412ff182fb534a6d62" + dependencies: + extended "~0.0.3" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" @@ -3642,7 +3761,7 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-resolvable@^1.0.0: +is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" @@ -3747,7 +3866,7 @@ js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3755,7 +3874,7 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.9.1: +js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -4013,7 +4132,7 @@ lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" -lodash@4.x, lodash@^4.13.1, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: +lodash@4.x, lodash@^4.13.1, lodash@^4.14.2, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -4227,7 +4346,7 @@ mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.18, mime-types@~2.1.19: version "2.1.20" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" dependencies: - mime-db "~1.36.0" + mime-db "~1.37.0" mime@1.4.1: version "1.4.1" @@ -4255,7 +4374,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -4445,6 +4564,11 @@ next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-async-loop@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/node-async-loop/-/node-async-loop-1.2.2.tgz#c5870299bf6477b780c88b431aa5b37733f55a3d" @@ -4595,6 +4719,14 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-extended@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/object-extended/-/object-extended-0.0.7.tgz#84fd23f56b15582aeb3e88b05cb55d2432d68a33" + dependencies: + array-extended "~0.0.4" + extended "~0.0.3" + is-extended "~0.0.3" + object-inspect@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -4809,7 +4941,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -5078,7 +5210,7 @@ react-dom@^16.2.0: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - schedule "^0.5.0" + scheduler "^0.10.0" react@^16.2.0: version "16.5.2" @@ -5087,7 +5219,7 @@ react@^16.2.0: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - schedule "^0.5.0" + scheduler "^0.10.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -5134,7 +5266,7 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -5333,7 +5465,7 @@ resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0: +resolve@^1.1.6, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: @@ -5457,6 +5589,7 @@ schedule@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/schedule/-/schedule-0.5.0.tgz#c128fffa0b402488b08b55ae74bb9df55cc29cc8" dependencies: + loose-envify "^1.1.0" object-assign "^4.1.1" scrypt-async@^1.2.0: @@ -5509,7 +5642,7 @@ semaphore@>=1.0.1, semaphore@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" @@ -5938,6 +6071,15 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" +string-extended@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/string-extended/-/string-extended-0.0.8.tgz#741957dff487b0272a79eec5a44f239ee6f17ccd" + dependencies: + array-extended "~0.0.5" + date-extended "~0.0.3" + extended "~0.0.3" + is-extended "~0.0.3" + string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -6009,7 +6151,7 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -6069,10 +6211,8 @@ table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" + ajv "^6.5.3" + lodash "^4.17.10" slice-ansi "1.0.0" string-width "^2.1.1" @@ -6147,7 +6287,7 @@ taskgroup@^4.0.5, taskgroup@^4.2.0: ambi "^2.2.0" csextends "^1.0.3" -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -6283,10 +6423,10 @@ truffle-hdwallet-provider-privkey@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/truffle-hdwallet-provider-privkey/-/truffle-hdwallet-provider-privkey-0.1.0.tgz#9417047a74ad37d923df926154b6486ffb57f6c9" dependencies: - ethereumjs-tx "^1.3.3" + ethereumjs-tx "^1.3.4" ethereumjs-wallet "^0.6.0" - web3 "^0.20.5" - web3-provider-engine "^13.6.4" + web3 "^0.20.6" + web3-provider-engine "^13.8.0" truffle-wallet-provider@0.0.5: version "0.0.5" @@ -6296,7 +6436,7 @@ truffle-wallet-provider@0.0.5: web3 "^0.18.2" web3-provider-engine "^8.4.0" -truffle@^4.1.13: +truffle@4.1.14: version "4.1.14" resolved "https://registry.yarnpkg.com/truffle/-/truffle-4.1.14.tgz#8d2c298e29abf9b1e486e44ff9faca6d34bb9030" dependencies: @@ -6304,6 +6444,11 @@ truffle@^4.1.13: original-require "1.0.1" solc "0.4.24" +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -6717,7 +6862,7 @@ web3-net@1.0.0-beta.34: web3-core-method "1.0.0-beta.34" web3-utils "1.0.0-beta.34" -web3-provider-engine@^13.6.4: +web3-provider-engine@^13.8.0: version "13.8.0" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz#4c7c1ad2af5f1fe10343b8a65495879a2f9c00df" dependencies: @@ -6865,7 +7010,7 @@ web3@^0.18.2, web3@^0.18.4: xhr2 "*" xmlhttprequest "*" -web3@^0.20.5: +web3@^0.20.6: version "0.20.7" resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7" dependencies: