tx extended.
This commit is contained in:
parent
45292df44d
commit
66c881bfb9
@ -1009,6 +1009,7 @@ TX.prototype.toCompact = function toCompact(coins) {
|
||||
block: this.block,
|
||||
height: this.height,
|
||||
ts: this.ts,
|
||||
ps: this.ps,
|
||||
coins: coins ? this.inputs.map(function(input) {
|
||||
return input.output ? input.output.toRaw('hex') : null;
|
||||
}) : null,
|
||||
@ -1025,6 +1026,7 @@ TX._fromCompact = function _fromCompact(json) {
|
||||
data.height = json.height;
|
||||
data.block = json.block;
|
||||
data.ts = json.ts;
|
||||
data.ps = json.ps;
|
||||
|
||||
if (json.coins) {
|
||||
json.coins.forEach(function(output, i) {
|
||||
@ -1051,6 +1053,7 @@ TX.prototype.toJSON = function toJSON() {
|
||||
height: this.height,
|
||||
block: this.block ? utils.revHex(this.block) : null,
|
||||
ts: this.ts,
|
||||
ps: this.ps,
|
||||
index: this.index,
|
||||
version: this.version,
|
||||
inputs: this.inputs.map(function(input) {
|
||||
@ -1069,6 +1072,7 @@ TX._fromJSON = function fromJSON(json) {
|
||||
block: json.block ? utils.revHex(json.block) : null,
|
||||
height: json.height,
|
||||
ts: json.ts,
|
||||
ps: json.ps,
|
||||
index: json.index,
|
||||
version: json.version,
|
||||
inputs: json.inputs.map(function(input) {
|
||||
@ -1106,6 +1110,92 @@ TX.fromRaw = function fromRaw(data, enc) {
|
||||
return new bcoin.tx(TX._fromRaw(data, enc));
|
||||
};
|
||||
|
||||
TX.prototype.toExtended = function toExtended(coins) {
|
||||
var tx = this.render();
|
||||
var buf = new Buffer(tx.length + 4 + 32 + 4 + 4 + 4);
|
||||
var block = this.block ? new Buffer(this.block, 'hex') : constants.zeroHash;
|
||||
var height = this.height;
|
||||
var off = 0;
|
||||
|
||||
if (height === -1)
|
||||
height = 0x7fffffff;
|
||||
|
||||
off += utils.copy(tx, buf, off);
|
||||
off += utils.writeU32(buf, height, off);
|
||||
off += utils.copy(block, buf, off);
|
||||
off += utils.writeU32(buf, this.index, off);
|
||||
off += utils.writeU32(buf, this.ts, off);
|
||||
off += utils.writeU32(buf, this.ps, off);
|
||||
|
||||
if (coins) {
|
||||
off += utils.writeIntv(buf, this.inputs.length, off);
|
||||
this.inputs.forEach(function(input) {
|
||||
var coin;
|
||||
|
||||
if (!input.output) {
|
||||
off += utils.writeIntv(buf, 0, off);
|
||||
return;
|
||||
}
|
||||
|
||||
coin = bcoin.protocol.framer.coin(input.output, true);
|
||||
off += utils.writeIntv(buf, coin.length, off);
|
||||
off += utils.copy(coin, buf, off);
|
||||
});
|
||||
}
|
||||
|
||||
buf._witnessSize = tx._witnessSize;
|
||||
buf._size = tx._size;
|
||||
|
||||
return buf;
|
||||
};
|
||||
|
||||
TX._fromExtended = function _fromExtended(buf) {
|
||||
var tx, coinCount, chunkSize, coin, i;
|
||||
var off = 0;
|
||||
|
||||
tx = bcoin.protocol.parser.parseTX(buf);
|
||||
off = tx._size;
|
||||
|
||||
if (buf.length === tx._size)
|
||||
throw new Error('Not extended.');
|
||||
|
||||
tx.height = utils.readU32(buf, off);
|
||||
off += 4;
|
||||
tx.block = buf.slice(off, off + 32);
|
||||
off += 32;
|
||||
tx.index = utils.readU32(buf, off);
|
||||
off += 4;
|
||||
tx.ts = utils.readU32(buf, off);
|
||||
off += 4;
|
||||
tx.ps = utils.readU32(buf, off);
|
||||
off += 4;
|
||||
|
||||
if (tx.height === 0x7fffffff)
|
||||
tx.height = -1;
|
||||
|
||||
if (buf.length > off) {
|
||||
coinCount = utils.readIntv(buf, off);
|
||||
off = cointCount.off;
|
||||
coinCount = coinCount.r;
|
||||
for (i = 0; i < coinCount; i++) {
|
||||
chunkSize = utils.readIntv(buf, off);
|
||||
off = chunkSize.off;
|
||||
chunkSize = chunkSize.r;
|
||||
coin = buf.slice(off, off + chunkSize);
|
||||
off += chunkSize;
|
||||
if (coin.length === 0)
|
||||
continue;
|
||||
tx.inputs[i].output = bcoin.protocol.parser.parseCoin(coin, true);
|
||||
}
|
||||
}
|
||||
|
||||
return tx;
|
||||
};
|
||||
|
||||
TX.fromExtended = function fromExtended(buf) {
|
||||
return new TX(TX._fromExtended(buf));
|
||||
};
|
||||
|
||||
/**
|
||||
* Expose
|
||||
*/
|
||||
|
||||
@ -152,7 +152,7 @@ WalletDB.prototype.saveJSON = function saveJSON(id, json, callback) {
|
||||
if (json && self.type === 'leveldb') {
|
||||
batch = self.db.batch();
|
||||
Object.keys(json.addressMap).forEach(function(address) {
|
||||
batch.put('a/' + address + '/' + json.id, '');
|
||||
batch.put('w/a/' + address + '/' + json.id, '');
|
||||
});
|
||||
return batch.write(function(err) {
|
||||
if (err)
|
||||
@ -190,7 +190,7 @@ WalletDB.prototype.removeJSON = function removeJSON(id, callback) {
|
||||
if (json && self.type === 'leveldb') {
|
||||
batch = self.db.batch();
|
||||
Object.keys(json.addressMap).forEach(function(address) {
|
||||
batch.del('a/' + address + '/' + json.id);
|
||||
batch.del('w/a/' + address + '/' + json.id);
|
||||
});
|
||||
return batch.write(function(err) {
|
||||
if (err)
|
||||
@ -256,7 +256,7 @@ WalletDB.prototype._getDB = function _getDB(id, callback) {
|
||||
|
||||
callback = utils.ensure(callback);
|
||||
|
||||
key = 'w/' + id;
|
||||
key = 'w/w/' + id;
|
||||
|
||||
this.db.get(key, function(err, json) {
|
||||
if (err && err.type === 'NotFoundError')
|
||||
@ -276,7 +276,7 @@ WalletDB.prototype._getDB = function _getDB(id, callback) {
|
||||
};
|
||||
|
||||
WalletDB.prototype._saveDB = function _saveDB(id, json, callback) {
|
||||
var key = 'w/' + id;
|
||||
var key = 'w/w/' + id;
|
||||
var data;
|
||||
|
||||
callback = utils.ensure(callback);
|
||||
@ -314,7 +314,7 @@ WalletDB.prototype._saveFile = function _saveFile(id, json, callback) {
|
||||
|
||||
WalletDB.prototype._removeDB = function _removeDB(id, callback) {
|
||||
var self = this;
|
||||
var key = 'w/' + id;
|
||||
var key = 'w/w/' + id;
|
||||
|
||||
callback = utils.ensure(callback);
|
||||
|
||||
@ -426,14 +426,14 @@ WalletDB.prototype.saveAddress = function saveAddress(id, address, callback) {
|
||||
callback = utils.ensure(callback);
|
||||
if (this.type !== 'leveldb')
|
||||
return utils.nextTick(callback);
|
||||
this.db.put('a/' + address + '/' + id, '', callback);
|
||||
this.db.put('w/a/' + address + '/' + id, '', callback);
|
||||
};
|
||||
|
||||
WalletDB.prototype.removeAddress = function removeAddress(id, address, callback) {
|
||||
callback = utils.ensure(callback);
|
||||
if (this.type !== 'leveldb')
|
||||
return utils.nextTick(callback);
|
||||
this.db.del('a/' + address + '/' + id, callback);
|
||||
this.db.del('w/a/' + address + '/' + id, callback);
|
||||
};
|
||||
|
||||
WalletDB.prototype._getIDs = function _getIDs(address, callback) {
|
||||
@ -441,8 +441,8 @@ WalletDB.prototype._getIDs = function _getIDs(address, callback) {
|
||||
var ids = [];
|
||||
|
||||
var iter = this.db.db.iterator({
|
||||
gte: 'a/' + address,
|
||||
lte: 'a/' + address + '~',
|
||||
gte: 'w/a/' + address,
|
||||
lte: 'w/a/' + address + '~',
|
||||
keys: true,
|
||||
values: false,
|
||||
fillCache: false,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user