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 });