Manuel Araoz
11 years ago
1 changed files with 0 additions and 131 deletions
@ -1,131 +0,0 @@ |
|||
#!/usr/bin/env node
|
|||
<<<<<<< HEAD |
|||
======= |
|||
|
|||
>>>>>>> 71e1c718ac8f5eb89acedb4f91f2207ec463808b |
|||
'use strict'; |
|||
|
|||
process.env.NODE_ENV = process.env.NODE_ENV || 'development'; |
|||
|
|||
var fs = require('fs'); |
|||
var HeaderDB = require('./HeaderDB').class(); |
|||
var Block = require('bitcore/Block').class(); |
|||
var CoinConst = require('bitcore/const'); |
|||
var coinUtil = require('bitcore/util/util'); |
|||
var networks = require('bitcore/networks'); |
|||
var Parser = require('bitcore/util/BinaryParser').class(); |
|||
var Sync = require('./lib/Sync').class(); |
|||
var Peer = require('bitcore/Peer').class(); |
|||
|
|||
var peerdb_fn = 'peerdb.json'; |
|||
var peerdb = undefined; |
|||
|
|||
var PROGRAM_VERSION = '0.1'; |
|||
var program = require('commander'); |
|||
|
|||
program |
|||
.version(PROGRAM_VERSION) |
|||
.option('-N --network [testnet]', 'Set bitcoin network [testnet]', 'testnet') |
|||
.parse(process.argv); |
|||
|
|||
var sync = new Sync({ |
|||
networkName: program.network |
|||
}); |
|||
sync.init(); |
|||
|
|||
var PeerManager = require('bitcore/PeerManager').createClass({ |
|||
config: { |
|||
network: program.network |
|||
} |
|||
}); |
|||
|
|||
function peerdb_load() { |
|||
try { |
|||
peerdb = JSON.parse(fs.readFileSync(peerdb_fn)); |
|||
} catch(d) { |
|||
console.warn('Unable to read peer db', peerdb_fn, 'creating new one.'); |
|||
peerdb = [{ |
|||
ipv4: '127.0.0.1', |
|||
port: 18333 |
|||
}, |
|||
]; |
|||
|
|||
fs.writeFileSync(peerdb_fn, JSON.stringify(peerdb)); |
|||
} |
|||
} |
|||
|
|||
function handle_inv(info) { |
|||
// TODO: should limit the invs to objects we haven't seen yet
|
|||
var invs = info.message.invs; |
|||
invs.forEach(function(inv) { |
|||
console.log('Handle inv for a ' + CoinConst.MSG.to_str(inv.type)); |
|||
}); |
|||
// this is not needed right now, but it's left in case
|
|||
// we need to store more info in the future
|
|||
info.conn.sendGetData(invs); |
|||
} |
|||
|
|||
function handle_tx(info) { |
|||
var tx = info.message.tx.getStandardizedObject(); |
|||
console.log('Handle tx: ' + tx.hash); |
|||
sync.storeTxs([tx.hash], function(err) { |
|||
if (err) { |
|||
console.log('Error in handle TX: ' + err); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
function handle_block(info) { |
|||
var block = info.message.block; |
|||
var now = Math.round(new Date().getTime() / 1000); |
|||
var blockHash = coinUtil.formatHashFull(block.calcHash()); |
|||
console.log('Handle block: ' + blockHash); |
|||
sync.storeBlock({ |
|||
'hash': blockHash, |
|||
'time': now |
|||
}, |
|||
function(err) { |
|||
if (err) { |
|||
console.log('Error in handle Block: ' + err); |
|||
} else { |
|||
// if no errors importing block, import the transactions
|
|||
var hashes = block.txs.map(function(tx) { |
|||
return coinUtil.formatHashFull(tx.hash); |
|||
}); |
|||
sync.storeTxs(hashes, function() {}); |
|||
} |
|||
}); |
|||
|
|||
} |
|||
|
|||
function handle_connected(data) { |
|||
var peerman = data.pm; |
|||
var peers_n = peerman.peers.length; |
|||
console.log('p2psync: Connected to ' + peers_n + ' peer' + (peers_n !== 1 ? 's': '')); |
|||
} |
|||
|
|||
function p2psync() { |
|||
var peerman = new PeerManager(); |
|||
|
|||
peerdb.forEach(function(datum) { |
|||
var peer = new Peer(datum.ipv4, datum.port); |
|||
peerman.addPeer(peer); |
|||
}); |
|||
|
|||
peerman.on('connection', function(conn) { |
|||
conn.on('inv', handle_inv); |
|||
conn.on('block', handle_block); |
|||
conn.on('tx', handle_tx); |
|||
}); |
|||
peerman.on('connect', handle_connected); |
|||
|
|||
peerman.start(); |
|||
} |
|||
|
|||
function main() { |
|||
peerdb_load(); |
|||
p2psync(); |
|||
} |
|||
|
|||
main(); |
|||
|
Loading…
Reference in new issue