lib v1.4.2: (flo) bitjs.transaction deserialize
- pass tx_data (hex or byte array) to bitjs.transaction to deserialize the transaction ie, `tx = bitjs.transaction(tx_data)` - invoking without any parameter `bitjs.transaction()` will create an empty tx as before (no change)
This commit is contained in:
parent
e4fd63912c
commit
24415b835c
76
lib.js
76
lib.js
@ -1,4 +1,4 @@
|
|||||||
(function (GLOBAL) { //lib v1.4.1b
|
(function (GLOBAL) { //lib v1.4.2
|
||||||
'use strict';
|
'use strict';
|
||||||
/* Utility Libraries required for Standard operations
|
/* Utility Libraries required for Standard operations
|
||||||
* All credits for these codes belong to their respective creators, moderators and owners.
|
* All credits for these codes belong to their respective creators, moderators and owners.
|
||||||
@ -4492,7 +4492,7 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
bitjs.transaction = function () {
|
bitjs.transaction = function (tx_data = undefined) {
|
||||||
var btrx = {};
|
var btrx = {};
|
||||||
btrx.version = 2; //flochange look at this version
|
btrx.version = 2; //flochange look at this version
|
||||||
btrx.inputs = [];
|
btrx.inputs = [];
|
||||||
@ -4992,6 +4992,78 @@
|
|||||||
return Crypto.util.bytesToHex(buffer);
|
return Crypto.util.bytesToHex(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* deserialize a transaction */
|
||||||
|
function deserialize(buffer) {
|
||||||
|
if (typeof buffer == "string") {
|
||||||
|
buffer = Crypto.util.hexToBytes(buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
var pos = 0;
|
||||||
|
|
||||||
|
var readAsInt = function (bytes) {
|
||||||
|
if (bytes == 0) return 0;
|
||||||
|
pos++;
|
||||||
|
return buffer[pos - 1] + readAsInt(bytes - 1) * 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
var readVarInt = function () {
|
||||||
|
pos++;
|
||||||
|
if (buffer[pos - 1] < 253) {
|
||||||
|
return buffer[pos - 1];
|
||||||
|
}
|
||||||
|
return readAsInt(buffer[pos - 1] - 251);
|
||||||
|
}
|
||||||
|
|
||||||
|
var readBytes = function (bytes) {
|
||||||
|
pos += bytes;
|
||||||
|
return buffer.slice(pos - bytes, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
var readVarString = function () {
|
||||||
|
var size = readVarInt();
|
||||||
|
return readBytes(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
var bytesToStr = function (bytes) {
|
||||||
|
return bytes.map(b => String.fromCharCode(b)).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
const self = btrx;
|
||||||
|
|
||||||
|
self.version = readAsInt(4);
|
||||||
|
|
||||||
|
var ins = readVarInt();
|
||||||
|
for (var i = 0; i < ins; i++) {
|
||||||
|
self.inputs.push({
|
||||||
|
outpoint: {
|
||||||
|
hash: Crypto.util.bytesToHex(readBytes(32).reverse()),
|
||||||
|
index: readAsInt(4)
|
||||||
|
},
|
||||||
|
script: readVarString(),
|
||||||
|
sequence: readAsInt(4)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var outs = readVarInt();
|
||||||
|
for (var i = 0; i < outs; i++) {
|
||||||
|
self.outputs.push({
|
||||||
|
value: bitjs.bytesToNum(readBytes(8)),
|
||||||
|
script: readVarString()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
self.lock_time = readAsInt(4);
|
||||||
|
|
||||||
|
//flochange - floData field
|
||||||
|
self.floData = bytesToStr(readVarString());
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
//deserialize the data if passed
|
||||||
|
if (tx_data)
|
||||||
|
deserialize(tx_data);
|
||||||
|
|
||||||
return btrx;
|
return btrx;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user