From e407c08668faa378d25a016f59df26386ac2e1c4 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Thu, 19 Jan 2017 04:39:25 -0800 Subject: [PATCH] net: drop getutxos impl. --- lib/net/packets.js | 341 --------------------------------------------- lib/net/peer.js | 77 ---------- 2 files changed, 418 deletions(-) diff --git a/lib/net/packets.js b/lib/net/packets.js index b7900e30..179c657d 100644 --- a/lib/net/packets.js +++ b/lib/net/packets.js @@ -57,8 +57,6 @@ exports.types = { FILTERADD: 19, FILTERCLEAR: 20, MERKLEBLOCK: 21, - GETUTXOS: 22, - UTXOS: 23, FEEFILTER: 24, SENDCMPCT: 25, CMPCTBLOCK: 26, @@ -2422,339 +2420,6 @@ MerkleBlockPacket.fromRaw = function fromRaw(data, enc) { return new MerkleBlockPacket().fromRaw(data); }; -/** - * Represents a `getutxos` packet. - * @exports GetUTXOsPacket - * @constructor - * @param {Boolean} mempool - * @param {Outpoint[]} prevout - * @property {Boolean} mempool - * @property {Outpoint[]} prevout - */ - -function GetUTXOsPacket(mempool, prevout) { - if (!(this instanceof GetUTXOsPacket)) - return new GetUTXOsPacket(mempool, prevout); - - Packet.call(this); - - this.mempool = mempool || false; - this.prevout = prevout || []; -} - -util.inherits(GetUTXOsPacket, Packet); - -GetUTXOsPacket.prototype.cmd = 'getutxos'; -GetUTXOsPacket.prototype.type = exports.types.GETUTXOS; - -/** - * Get serialization size. - * @returns {Number} - */ - -GetUTXOsPacket.prototype.getSize = function getSize() { - var size = 0; - size += 1; - size += encoding.sizeVarint(this.prevout.length); - size += this.prevout.length * 36; - return size; -}; - -/** - * Serialize getutxos packet to writer. - * @param {BufferWriter} bw - */ - -GetUTXOsPacket.prototype.toWriter = function toWriter(bw) { - var i, prevout; - - bw.writeU8(this.mempool ? 1 : 0); - bw.writeVarint(this.prevout.length); - - for (i = 0; i < this.prevout.length; i++) { - prevout = this.prevout[i]; - prevout.toWriter(bw); - } - - return bw; -}; - -/** - * Serialize getutxos packet. - * @returns {Buffer} - */ - -GetUTXOsPacket.prototype.toRaw = function toRaw() { - var size = this.getSize(); - return this.toWriter(new StaticWriter(size)).render(); -}; - -/** - * Inject properties from buffer reader. - * @private - * @param {BufferReader} br - */ - -GetUTXOsPacket.prototype.fromReader = function fromReader(br) { - var i, count; - - this.mempool = br.readU8() === 1; - - count = br.readVarint(); - - for (i = 0; i < count; i++) - this.prevout.push(Outpoint.fromReader(br)); - - return this; -}; - -/** - * Inject properties from serialized data. - * @private - * @param {Buffer} data - */ - -GetUTXOsPacket.prototype.fromRaw = function fromRaw(data) { - return this.fromReader(new BufferReader(data)); -}; - -/** - * Instantiate getutxos packet from buffer reader. - * @param {BufferReader} br - * @returns {GetBlocksPacket} - */ - -GetUTXOsPacket.fromReader = function fromReader(br) { - return new GetUTXOsPacket().fromReader(br); -}; - -/** - * Instantiate getutxos packet from serialized data. - * @param {Buffer} data - * @param {String?} enc - * @returns {GetBlocksPacket} - */ - -GetUTXOsPacket.fromRaw = function fromRaw(data, enc) { - if (typeof data === 'string') - data = new Buffer(data, enc); - return new GetUTXOsPacket().fromRaw(data); -}; - -/** - * Represents a `utxos` packet. - * @exports UTXOsPacket - * @constructor - * @param {Object} options - * @property {Number} height - * @property {Hash} tip - * @property {Boolean[]} hits - * @property {Coin[]} coins - */ - -function UTXOsPacket(options) { - if (!(this instanceof UTXOsPacket)) - return new UTXOsPacket(options); - - Packet.call(this); - - this.height = -1; - this.tip = encoding.NULL_HASH; - this.hits = []; - this.coins = []; - - if (options) - this.fromOptions(options); -} - -util.inherits(UTXOsPacket, Packet); - -UTXOsPacket.prototype.cmd = 'utxos'; -UTXOsPacket.prototype.type = exports.types.UTXOS; - -/** - * Inject properties from options. - * @private - * @param {Buffer} data - */ - -UTXOsPacket.prototype.fromOptions = function fromOptions(options) { - if (options.height != null) { - assert(util.isNumber(options.height)); - this.height = options.height; - } - - if (options.tip) { - assert(typeof options.tip === 'string'); - this.tip = options.tip; - } - - if (options.hits) { - assert(Array.isArray(options.hits)); - this.hits = options.hits; - } - - if (options.coins) { - assert(Array.isArray(options.coins)); - this.coins = options.coins; - } - - return this; -}; - -/** - * Instantiate utxos packet from options. - * @param {Buffer} data - * @param {String?} enc - * @returns {GetBlocksPacket} - */ - -UTXOsPacket.fromOptions = function fromOptions(options) { - return new UTXOsPacket().fromOptions(options); -}; - -/** - * Get serialization size. - * @returns {Number} - */ - -UTXOsPacket.prototype.getSize = function getSize() { - var size = 0; - var i; - - size += 4; - size += 32; - size += encoding.sizeVarlen((this.hits.length + 7) / 8 | 0); - size += encoding.sizeVarint(this.coins.length); - - for (i = 0; i < this.coins.length; i++) - size += 12 * this.coins[i].script.getVarSize(); - - return size; -}; - -/** - * Serialize utxos packet to writer. - * @param {BufferWriter} bw - */ - -UTXOsPacket.prototype.toWriter = function toWriter(bw) { - var map = new Buffer((this.hits.length + 7) / 8 | 0); - var i, bit, oct, coin, height; - - for (i = 0; i < this.hits.length; i++) { - bit = i % 8; - oct = (i - bit) / 8; - map[oct] |= +this.hits[i] << (7 - bit); - } - - bw.writeU32(this.height); - bw.writeHash(this.tip); - bw.writeVarBytes(map); - bw.writeVarInt(this.coins.length); - - for (i = 0; i < this.coins.length; i++) { - coin = this.coins[i]; - height = coin.height; - - if (height === -1) - height = 0x7fffffff; - - bw.writeU32(coin.version); - bw.writeU32(height); - bw.write64(coin.value); - bw.writeVarBytes(coin.script.toRaw()); - } - - return bw; -}; - -/** - * Serialize utxos packet. - * @returns {Buffer} - */ - -UTXOsPacket.prototype.toRaw = function toRaw() { - var size = this.getSize(); - return this.toWriter(new StaticWriter(size)).render(); -}; - -/** - * Inject properties from buffer reader. - * @private - * @param {BufferReader} br - */ - -UTXOsPacket.prototype.fromReader = function fromReader(br) { - var i, bit, oct, coin, output; - var version, height, map, count; - - this.height = br.readU32(); - this.tip = br.readHash('hex'); - - map = br.readVarBytes(); - count = br.readVarint(); - - for (i = 0; i < map.length * 8; i++) { - bit = i % 8; - oct = (i - bit) / 8; - this.hits.push((map[oct] >> (7 - bit)) & 1); - } - - for (i = 0; i < count; i++) { - version = br.readU32(); - height = br.readU32(); - coin = new Coin(); - - if (height === 0x7fffffff) - height = -1; - - output = Output.fromReader(br); - - coin.version = version; - coin.height = height; - coin.script = output.script; - coin.value = output.value; - - this.coins.push(coin); - } - - return this; -}; - -/** - * Inject properties from serialized data. - * @private - * @param {Buffer} data - */ - -UTXOsPacket.prototype.fromRaw = function fromRaw(data) { - return this.fromReader(new BufferReader(data)); -}; - -/** - * Instantiate utxos packet from buffer reader. - * @param {BufferReader} br - * @returns {UTXOsPacket} - */ - -UTXOsPacket.fromReader = function fromReader(br) { - return new UTXOsPacket().fromReader(br); -}; - -/** - * Instantiate utxos packet from serialized data. - * @param {Buffer} data - * @param {String?} enc - * @returns {UTXOsPacket} - */ - -UTXOsPacket.fromRaw = function fromRaw(data, enc) { - if (typeof data === 'string') - data = new Buffer(data, enc); - return new UTXOsPacket().fromRaw(data); -}; - /** * Represents a `feefilter` packet. * @exports FeeFilterPacket @@ -3862,10 +3527,6 @@ exports.fromRaw = function fromRaw(cmd, data) { return FilterClearPacket.fromRaw(data); case 'merkleblock': return MerkleBlockPacket.fromRaw(data); - case 'getutxos': - return GetUTXOsPacket.fromRaw(data); - case 'utxos': - return UTXOsPacket.fromRaw(data); case 'feefilter': return FeeFilterPacket.fromRaw(data); case 'sendcmpct': @@ -3918,8 +3579,6 @@ exports.FilterLoadPacket = FilterLoadPacket; exports.FilterAddPacket = FilterAddPacket; exports.FilterClearPacket = FilterClearPacket; exports.MerkleBlockPacket = MerkleBlockPacket; -exports.GetUTXOsPacket = GetUTXOsPacket; -exports.UTXOsPacket = UTXOsPacket; exports.FeeFilterPacket = FeeFilterPacket; exports.SendCmpctPacket = SendCmpctPacket; exports.CmpctBlockPacket = CmpctBlockPacket; diff --git a/lib/net/peer.js b/lib/net/peer.js index 85ee00e7..70e49858 100644 --- a/lib/net/peer.js +++ b/lib/net/peer.js @@ -1504,12 +1504,6 @@ Peer.prototype.handlePacket = co(function* handlePacket(packet) { case packetTypes.MERKLEBLOCK: yield this.handleMerkleBlock(packet); break; - case packetTypes.GETUTXOS: - yield this.handleGetUTXOs(packet); - break; - case packetTypes.UTXOS: - yield this.handleUTXOs(packet); - break; case packetTypes.FEEFILTER: yield this.handleFeeFilter(packet); break; @@ -1735,77 +1729,6 @@ Peer.prototype.handleFeeFilter = co(function* handleFeeFilter(packet) { this.emit('feefilter', rate); }); -/** - * Handle `utxos` packet. - * @private - * @param {UTXOsPacket} - */ - -Peer.prototype.handleUTXOs = co(function* handleUTXOs(utxos) { - this.logger.debug('Received %d utxos (%s).', - utxos.coins.length, this.hostname); - this.emit('utxos', utxos); -}); - -/** - * Handle `getutxos` packet. - * @private - */ - -Peer.prototype.handleGetUTXOs = co(function* handleGetUTXOs(packet) { - var i, utxos, prevout, hash, index, coin; - - if (!this.chain.synced) - return; - - if (this.options.selfish) - return; - - if (this.chain.options.spv) - return; - - if (packet.prevout.length > 15) - return; - - utxos = new packets.UTXOsPacket(); - - for (i = 0; i < packet.prevout.length; i++) { - prevout = packet.prevout[i]; - hash = prevout.hash; - index = prevout.index; - - if (this.mempool && packet.mempool) { - coin = this.mempool.getCoin(hash, index); - - if (coin) { - utxos.hits.push(1); - utxos.coins.push(coin); - continue; - } - - if (this.mempool.isSpent(hash, index)) { - utxos.hits.push(0); - continue; - } - } - - coin = yield this.chain.db.getCoin(hash, index); - - if (!coin) { - utxos.hits.push(0); - continue; - } - - utxos.hits.push(1); - utxos.coins.push(coin); - } - - utxos.height = this.chain.height; - utxos.tip = this.chain.tip.hash; - - this.send(utxos); -}); - /** * Handle `getheaders` packet. * @private