Skip to content

Commit aa57364

Browse files
authored
Merge pull request #461 from PolymathNetwork/CLI-improvements
[CLI] Time travel on development network
2 parents 12d5272 + e7519eb commit aa57364

File tree

2 files changed

+93
-14
lines changed

2 files changed

+93
-14
lines changed

CLI/commands/helpers/time.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const moment = require('moment');
2+
const chalk = require('chalk');
3+
4+
function jumpToTime(timestamp) {
5+
const id = Date.now();
6+
7+
return new Promise((resolve, reject) => {
8+
web3.currentProvider.send(
9+
{
10+
jsonrpc: "2.0",
11+
method: "evm_mine",
12+
params: [timestamp],
13+
id: id
14+
},
15+
(err, res) => {
16+
return err ? reject(err) : resolve(res);
17+
}
18+
);
19+
});
20+
}
21+
22+
async function increaseTimeByDate(toTime) {
23+
if (await web3.eth.net.getId() === 15) {
24+
if (toTime.isValid()) {
25+
let currentTime = (await web3.eth.getBlock('latest')).timestamp;
26+
if (toTime.unix() > currentTime) {
27+
await jumpToTime(toTime.unix());
28+
currentTime = (await web3.eth.getBlock('latest')).timestamp;
29+
console.log(chalk.gree(`Current datetime is ${currentTime} or ${moment.unix(currentTime).format("MM/DD/YYYY HH:mm:ss")}`));
30+
} else {
31+
console.log(chalk.red(`It is not possible to go back in time. Please try again with a time in the future to travel to`));
32+
}
33+
} else {
34+
console.log(chalk.red(`Date format is not valid. Please use a valid Unix epoch time`));
35+
}
36+
} else {
37+
console.log(chalk.red(`Time traveling is only possible over develpment network`));
38+
}
39+
}
40+
41+
function increaseTimeByDuration(duration) {
42+
let currentTime = moment().unix();
43+
let toTime = currentTime.add(duration, "seconds");
44+
return increaseTimeByDate(toTime);
45+
}
46+
47+
function increaseTimeToDate(date) {
48+
var toDate = moment(date, ['MM-DD-YYYY', 'MM-DD-YYYY HH:mm:ss']);
49+
return increaseTimeByDate(toDate);
50+
}
51+
52+
function increaseTimeToEpochDate(epochDate) {
53+
var toTime = moment.unix(epochDate);
54+
return increaseTimeByDate(toTime);
55+
}
56+
57+
module.exports = { increaseTimeByDuration, increaseTimeToDate, increaseTimeToEpochDate };
58+
59+

CLI/polymath-cli.js

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
#!/usr/bin/env node
22

3-
var faucet = require('./commands/faucet');
4-
var investor_portal = require('./commands/investor_portal');
5-
var token_manager = require('./commands/token_manager');
6-
var st20generator = require('./commands/ST20Generator');
7-
var sto_manager = require('./commands/sto_manager');
8-
var transfer = require('./commands/transfer');
9-
var transfer_ownership = require('./commands/transfer_ownership');
10-
var dividends_manager = require('./commands/dividends_manager');
11-
var transfer_manager = require('./commands/transfer_manager');
12-
var contract_manager = require('./commands/contract_manager');
13-
var strMigrator = require('./commands/strMigrator');
14-
var permission_manager = require('./commands/permission_manager');
15-
var program = require('commander');
16-
var gbl = require('./commands/common/global');
3+
const faucet = require('./commands/faucet');
4+
const investor_portal = require('./commands/investor_portal');
5+
const token_manager = require('./commands/token_manager');
6+
const st20generator = require('./commands/ST20Generator');
7+
const sto_manager = require('./commands/sto_manager');
8+
const transfer = require('./commands/transfer');
9+
const transfer_ownership = require('./commands/transfer_ownership');
10+
const dividends_manager = require('./commands/dividends_manager');
11+
const transfer_manager = require('./commands/transfer_manager');
12+
const contract_manager = require('./commands/contract_manager');
13+
const strMigrator = require('./commands/strMigrator');
14+
const permission_manager = require('./commands/permission_manager');
15+
const time = require('./commands/helpers/time')
16+
const gbl = require('./commands/common/global');
17+
const program = require('commander');
18+
const moment = require('moment');
1719
const yaml = require('js-yaml');
1820
const fs = require('fs');
1921

@@ -151,6 +153,24 @@ program
151153
await permission_manager.executeApp();
152154
});
153155

156+
program
157+
.command('time_travel')
158+
.alias('tt')
159+
.option('-p, --period <seconds>', 'Period of time in seconds to increase')
160+
.option('-d, --toDate <date>', 'Human readable date ("MM/DD/YY [HH:mm:ss]") to travel to')
161+
.option('-e, --toEpochTime <epochTime>', 'Unix Epoch time to travel to')
162+
.description('Increases time on EVM according to given value.')
163+
.action(async function (cmd) {
164+
await gbl.initialize(program.remoteNode);
165+
if (cmd.period) {
166+
await time.increaseTimeByDuration(parseInt(cmd.period));
167+
} else if (cmd.toDate) {
168+
await time.increaseTimeToDate(cmd.toDate);
169+
} else if (cmd.toEpochTime) {
170+
await time.increaseTimeToEpochDate(cmd.toEpochTime);
171+
}
172+
});
173+
154174
program.parse(process.argv);
155175

156176
if (typeof program.commands.length == 0) {

0 commit comments

Comments
 (0)