Many small improvements
This commit is contained in:
parent
45ec63d2f1
commit
a34bc9e2ea
4 changed files with 45 additions and 39 deletions
6
bitcoinjs-min.js
vendored
6
bitcoinjs-min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -42,7 +42,6 @@ var ECKey = function (input) {
|
|||
this.compressed = true;
|
||||
} else {
|
||||
// hex string?
|
||||
// Prepend zero byte to prevent interpretation as negative integer
|
||||
this.priv = BigInteger.fromByteArrayUnsigned(conv.hexToBytes(input));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,19 +121,17 @@ Script.prototype.getOutType = function () {
|
|||
if (this.chunks[this.chunks.length-1] == Opcode.map.OP_CHECKMULTISIG &&
|
||||
this.chunks[this.chunks.length-2] <= 3) {
|
||||
// Transfer to M-OF-N
|
||||
return 'Multisig';
|
||||
} else if (this.chunks.length == 5 &&
|
||||
return 'P2SH';
|
||||
}
|
||||
else if (this.chunks.length == 5 &&
|
||||
this.chunks[0] == Opcode.map.OP_DUP &&
|
||||
this.chunks[1] == Opcode.map.OP_HASH160 &&
|
||||
this.chunks[3] == Opcode.map.OP_EQUALVERIFY &&
|
||||
this.chunks[4] == Opcode.map.OP_CHECKSIG) {
|
||||
// Transfer to Bitcoin address
|
||||
return 'Address';
|
||||
} else if (this.chunks.length == 2 &&
|
||||
this.chunks[1] == Opcode.map.OP_CHECKSIG) {
|
||||
// Transfer to IP address
|
||||
return 'Pubkey';
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
return 'Strange';
|
||||
}
|
||||
}
|
||||
|
@ -145,10 +143,9 @@ Script.prototype.getOutType = function () {
|
|||
Script.prototype.toScriptHash = function () {
|
||||
var outType = this.getOutType();
|
||||
|
||||
return outType == 'Address' ? this.chunks[2]
|
||||
: outType == 'Pubkey' ? util.sha256ripe160(this.chunks[0])
|
||||
: outType == 'Multisig' ? util.sha256ripe160(this.buffer)
|
||||
: util.sha256ripe160(this.buffer)
|
||||
return outType == 'Pubkey' ? this.chunks[2]
|
||||
: outType == 'P2SH' ? util.sha256ripe160(this.buffer)
|
||||
: util.sha256ripe160(this.buffer)
|
||||
};
|
||||
|
||||
Script.prototype.toAddress = function() {
|
||||
|
@ -368,7 +365,7 @@ Script.createMultiSigInputScript = function(signatures, script)
|
|||
if (signatures.length < k) return false; //Not enough sigs
|
||||
var inScript = new Script();
|
||||
inScript.writeOp(Opcode.map.OP_0);
|
||||
signatures.map(inScript.writeBytes.bind(inScript));
|
||||
signatures.map(function(sig) { inScript.writeBytes(sig) });
|
||||
inScript.writeBytes(script.buffer);
|
||||
return inScript;
|
||||
}
|
||||
|
|
|
@ -9,30 +9,33 @@ var ECDSA = require('./ecdsa');
|
|||
var Address = require('./address');
|
||||
|
||||
var Transaction = function (doc) {
|
||||
this.version = 1;
|
||||
this.lock_time = 0;
|
||||
this.ins = [];
|
||||
this.outs = [];
|
||||
this.timestamp = null;
|
||||
this.block = null;
|
||||
|
||||
if (doc) {
|
||||
if (doc.hash) this.hash = doc.hash;
|
||||
if (doc.version) this.version = doc.version;
|
||||
if (doc.lock_time) this.lock_time = doc.lock_time;
|
||||
if (doc.ins && doc.ins.length) {
|
||||
for (var i = 0; i < doc.ins.length; i++) {
|
||||
this.addInput(new TransactionIn(doc.ins[i]));
|
||||
}
|
||||
this.version = 1;
|
||||
this.lock_time = 0;
|
||||
this.ins = [];
|
||||
this.outs = [];
|
||||
this.timestamp = null;
|
||||
this.block = null;
|
||||
|
||||
if (doc) {
|
||||
if (typeof doc == "string" || util.isArray(doc)) {
|
||||
doc = Transaction.deserialize(doc)
|
||||
}
|
||||
if (doc.hash) this.hash = doc.hash;
|
||||
if (doc.version) this.version = doc.version;
|
||||
if (doc.lock_time) this.lock_time = doc.lock_time;
|
||||
if (doc.ins && doc.ins.length) {
|
||||
for (var i = 0; i < doc.ins.length; i++) {
|
||||
this.addInput(new TransactionIn(doc.ins[i]));
|
||||
}
|
||||
}
|
||||
if (doc.outs && doc.outs.length) {
|
||||
for (var i = 0; i < doc.outs.length; i++) {
|
||||
this.addOutput(new TransactionOut(doc.outs[i]));
|
||||
}
|
||||
}
|
||||
if (doc.timestamp) this.timestamp = doc.timestamp;
|
||||
if (doc.block) this.block = doc.block;
|
||||
}
|
||||
if (doc.outs && doc.outs.length) {
|
||||
for (var i = 0; i < doc.outs.length; i++) {
|
||||
this.addOutput(new TransactionOut(doc.outs[i]));
|
||||
}
|
||||
}
|
||||
if (doc.timestamp) this.timestamp = doc.timestamp;
|
||||
if (doc.block) this.block = doc.block;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -412,6 +415,9 @@ Transaction.prototype.calcImpact = function (wallet) {
|
|||
*/
|
||||
|
||||
Transaction.deserialize = function(buffer) {
|
||||
if (typeof buffer == "string") {
|
||||
buffer = conv.hexToBytes(buffer)
|
||||
}
|
||||
var pos = 0;
|
||||
var readAsInt = function(bytes) {
|
||||
if (bytes == 0) return 0;
|
||||
|
@ -516,6 +522,10 @@ Transaction.prototype.p2shsign = function(index, script, key, type) {
|
|||
|
||||
Transaction.prototype.multisign = Transaction.prototype.p2shsign;
|
||||
|
||||
Transaction.prototype.applyMultisigs = function(index, script, sigs, type) {
|
||||
this.ins[index].script = Script.createMultiSigInputScript(sigs, script);
|
||||
}
|
||||
|
||||
Transaction.prototype.validateSig = function(index, script, sig, pub) {
|
||||
script = new Script(script);
|
||||
var hash = this.hashTransactionForSignature(script,index,1);
|
||||
|
|
Loading…
Reference in a new issue