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';
|
||||
/* Utility Libraries required for Standard operations
|
||||
* 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 = {};
|
||||
btrx.version = 2; //flochange look at this version
|
||||
btrx.inputs = [];
|
||||
@ -4992,6 +4992,78 @@
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user