github.com/igggame/nebulas-go@v2.1.0+incompatible/nebtestkit/cases/consensus/mint.test.js (about)

     1  'use strict';
     2  
     3  var LocalNodes = require('../../local-nodes');
     4  var BigNumber = require('bignumber.js');
     5  var expect = require('chai').expect;
     6  var sleep = require("system-sleep")
     7  var os = require('os');
     8  
     9  var nodeCnt = 6;
    10  var validators = 6;
    11  var blockInterval = 5;
    12  var dynastyInterval = 60;
    13  var reward = new BigNumber("48e16");
    14  var initial = new BigNumber("1e18");
    15  var nodes = new LocalNodes(nodeCnt);
    16  var connected = 0;
    17  nodes.Start();
    18  
    19  describe('right miner', function () {
    20      before(function (done) {
    21          this.timeout(300000);
    22          setTimeout(done, 5000);
    23      });
    24  
    25      it('check', function (done) {
    26          // start servers
    27          console.log("start servers");
    28          while (true) {
    29              if (connected == nodeCnt - 1) break;
    30              var nodeInfo = nodes.RPC(0).api.nodeInfo().then(function (resp) {
    31                  console.log(resp)
    32                  connected = resp.route_table.length
    33              });
    34              sleep(3000);
    35          }
    36  
    37          // check right miner
    38          console.log("check right miner");
    39          var block = null;
    40          for (var i = 0; i < nodeCnt; i++) {
    41              nodes.RPC(0).api.blockDump(1).then(function (resp) {
    42                  var block = JSON.parse(resp.data)[0];
    43                  console.log(block);
    44                  expect(block.timestamp % 5).to.be.equal(0)
    45                  if (block.height > 1) {
    46                      var idx = (block.timestamp % dynastyInterval) % (blockInterval * validators) / blockInterval;
    47                      if (idx != validators - 1) {
    48                          expect(nodes.Coinbase(idx)).to.be.equal(block.coinbase)
    49                      }
    50                  }
    51              });
    52              sleep(blockInterval * 1000);
    53          }
    54  
    55          // check balances correct
    56          console.log("check balances correct")
    57          nodes.RPC(0).api.blockDump(nodeCnt * 10).then(function (resp) {
    58              var blocks = JSON.parse(resp.data);
    59              console.log(blocks);
    60              var balances = {}
    61              for (var i = 0; i < blocks.length; i++) {
    62                  var block = blocks[i];
    63                  var coinbase = block.coinbase;
    64                  if (balances[coinbase] == undefined) {
    65                      balances[coinbase] = new BigNumber(0)
    66                  }
    67                  balances[blocks[i].coinbase] = balances[blocks[i].coinbase].plus(reward)
    68              }
    69  
    70              var keys = Object.keys(balances);
    71              var tail = blocks[0].hash;
    72              var finished = 0;
    73              for (let i = 0; i < keys.length; i++) {
    74                  // coinbase in genesis, skip it. it's not a valid address
    75                  if (keys[i] == "000000000000000000000000000000000000000000000000") {
    76                      finished += 1;
    77                      continue
    78                  }
    79                  nodes.RPC(0).api.getAccountState(keys[i], tail).then(function (state) {
    80                      var address = keys[i];
    81                      console.log(address, state);
    82                      var balance = new BigNumber(state.balance);
    83                      if (address == "1a263547d167c74cf4b8f9166cfa244de0481c514a45aa2c" ||
    84                          address == "2fe3f9f51f9a05dd5f7c5329127f7c917917149b4e16b0b8") {
    85                          balance = balance.minus(initial);
    86                      }
    87                      expect(balance.toString()).to.be.equal(balances[address].toString());
    88                      finished += 1;
    89                      if (finished == keys.length) {
    90                          console.log("over")
    91                          nodes.Stop();
    92                          done()
    93                      }
    94                  });
    95              }
    96          });
    97      });
    98  });