mirror of
https://github.com/GOSTSec/gostexplr
synced 2025-02-05 19:34:26 +00:00
updates:
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:
parent
96fa3acb2f
commit
6108749fdd
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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;
|
||||
};
|
||||
};
|
||||
|
@ -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,
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
Loading…
x
Reference in New Issue
Block a user