1
0
mirror of https://github.com/GOSTSec/gostexplr synced 2025-02-05 19:34:26 +00:00
fixed #4,
add block processing timer,
add hashrate fetcher, add it to block table model,
updated index page output, increase output to 50 rows,
updated database block table datatypes
This commit is contained in:
R4SAS 2019-06-29 19:23:29 +00:00 committed by R4SAS
parent 96fa3acb2f
commit 6108749fdd
6 changed files with 58 additions and 28 deletions

View File

@ -11,7 +11,8 @@ const keepAliveAgent = new http.Agent({ keepAlive: true });
let sync_sql = '',
coolstrs = [];
coolstrs = [],
starttime = 0;
function MakeRPCRequest(postData) {
return new Promise(function(resolve, reject) {
@ -82,7 +83,7 @@ async function saveTransaction(txid, blockHeight) {
SET @txid = LAST_INSERT_ID();
`;
// Loop over vouts
// Loop over vout's
for (var i = 0; i < tx.vout.length; i++) {
const vout = tx.vout[i];
@ -136,7 +137,7 @@ async function saveTransaction(txid, blockHeight) {
`;
}
// Loop over vins
// Loop over vin's
for (var i = 0; i < tx.vin.length; i++) {
const vin = tx.vin[i];
if (vin.txid) {
@ -186,6 +187,7 @@ async function syncNextBlock(syncedHeight) {
id: 1
}));
const blockHash = JSON.parse(res_hash)['result'];
const res_block = await MakeRPCRequest(JSON.stringify({
method: 'getblock',
params: [blockHash],
@ -193,6 +195,13 @@ async function syncNextBlock(syncedHeight) {
}));
const block = JSON.parse(res_block)['result'];
const res_blockhr = await MakeRPCRequest(JSON.stringify({
method: 'getnetworkhashps',
params: [120, height],
id: 1
}));
block.hashrate = JSON.parse(res_blockhr)['result'];
block.time = moment(block.time*1000).format('YYYY-MM-DD HH:mm:ss');
// await models.Block.create(block);
@ -209,8 +218,8 @@ async function syncNextBlock(syncedHeight) {
nonce,
bits,
difficulty,
previousblockhash,
nextblockhash
hashrate,
previousblockhash
)
VALUES (
"${block.hash}",
@ -222,8 +231,8 @@ async function syncNextBlock(syncedHeight) {
"${block.nonce}",
"${block.bits}",
"${block.difficulty}",
"${block.previousblockhash}",
"${block.nextblockhash}"
"${block.hashrate}",
"${block.previousblockhash}"
);
`
coolstrs = []
@ -243,8 +252,8 @@ async function syncNextBlock(syncedHeight) {
// });
sync_sql += `
UPDATE Block
SET nextblockhash="${block.previousblockhash}"
WHERE nextblockhash="${block.previousblockhash}";
SET nextblockhash="${block.hash}"
WHERE hash="${block.previousblockhash}";
`
}
sync_sql += 'COMMIT;'
@ -283,7 +292,7 @@ async function acquireLock() {
} else {
console.log('Could\'nt lock file', ex);
}
throw ex;
process.exit(0);
}
}
@ -300,10 +309,11 @@ async function syncBlockchain() {
console.log('\x1b[34m%s\x1b[0m', 'currentHeight is', currentHeight);
while (syncedHeight < currentHeight) {
starttime = new Date().getTime();
syncedHeight = await syncNextBlock(syncedHeight);
if (coolstrs) {
for(str of coolstrs) {
console.log('\x1b[36m%s\x1b[0m', `syncedHeight: ${syncedHeight}/${currentHeight}`, str)
console.log('\x1b[36m%s\x1b[0m', `syncedHeight: ${syncedHeight}/${currentHeight}`, str, ' [', new Date().getTime() - starttime, 'ms ]')
}
} else {
console.log('\x1b[36m%s\x1b[0m', 'syncedHeight: ', syncedHeight)
@ -312,7 +322,8 @@ async function syncBlockchain() {
} catch (e) {
console.log(e);
} finally {
models.sequelize.close().then(() => process.exit(0));
await models.sequelize.close();
process.exit(0);
}
}

View File

@ -14,8 +14,8 @@ module.exports = (sequelize, DataTypes) => {
const AddressVout = sequelize.define('AddressVout', {}, { timestamps: false });
Address.associate = function (models) {
models.Address.belongsToMany(models.Vout, { through: 'AddressVout' });
models.Address.belongsToMany(models.Vout, { through: 'AddressVout' });
};
return Address;
};
};

View File

@ -1,25 +1,26 @@
'use strict';
module.exports = (sequelize, DataTypes) => {
const Block = sequelize.define('Block', {
height: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true,
height: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true,
},
hash: DataTypes.STRING(64),
size: DataTypes.MEDIUMINT.UNSIGNED,
version: DataTypes.TINYINT.UNSIGNED,
merkleroot: DataTypes.STRING(64),
time: DataTypes.DATE,
nonce: DataTypes.BIGINT,
nonce: DataTypes.BIGINT.UNSIGNED,
bits: DataTypes.STRING(8),
difficulty: DataTypes.DECIMAL(16, 8),
difficulty: DataTypes.DECIMAL(16, 8).UNSIGNED,
hashrate: DataTypes.BIGINT.UNSIGNED,
previousblockhash: DataTypes.STRING(64),
nextblockhash: DataTypes.STRING(64),
}, {
timestamps: false,
timestamps: false,
indexes: [{
unique: true,
fields: ['hash', 'height']
unique: true,
fields: ['hash', 'height']
}],
freezeTableName: true,
});
@ -29,4 +30,4 @@ module.exports = (sequelize, DataTypes) => {
};
return Block;
};
};

View File

@ -6,9 +6,13 @@ var router = express.Router();
router.get('/', async function(req, res, next) {
const blocks = await models.Block.findAll({
attributes: ['height', 'hash'],
attributes: ['height', 'hash', 'time', 'difficulty', 'hashrate'],
order: [['height', 'DESC']],
limit: 30,
limit: 50,
});
blocks.forEach(function(arrayItem) {
arrayItem.ago = arrayItem.time.toUTCString().substring(5);
arrayItem.difficulty = arrayItem.difficulty.toFixed(8);
});
res.render('index', {
blocks,

View File

@ -1,11 +1,25 @@
extends layout
block content
h3 Last 30 blocks
h3 Last 50 blocks
table
tr
td
b Height
td
b Time
td
b Difficulty
td
b Hashrate
td
b Hash
each block in blocks
tr
td #{block.height}
td #{block.height} -
td #{block.ago} -
td #{block.difficulty} -
td #{block.hashrate} -
td
a(href='/block/' + block.hash + '/') #{block.hash}

View File

@ -55,4 +55,4 @@ block content
td #{vout.value}
td
each transaction in vout.Transactions
a(href=`/transaction/${transaction.txid}/`) #{transaction.txid}
a(href=`/transaction/${transaction.txid}/`) #{transaction.txid}