Skip to content

Commit

Permalink
merged in upstream changes, resolved conflict in package.json, add te…
Browse files Browse the repository at this point in the history
…st for SOCKS5 Connection instantiation
  • Loading branch information
Gordon Hall committed Apr 11, 2014
2 parents e53a234 + 387185e commit 3ba4352
Show file tree
Hide file tree
Showing 21 changed files with 297 additions and 38 deletions.
47 changes: 45 additions & 2 deletions Address.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
'use strict';
var imports = require('soop').imports();
var parent = imports.parent || require('./util/VersionedData');
var networks= imports.networks || require('./networks');
var coinUtil = imports.coinUtil || require('./util/util');
var parent = imports.parent || require('./util/VersionedData');
var networks = imports.networks || require('./networks');
var Script = imports.Script || require('./Script');

function Address() {
Address.super(this, arguments);
Expand All @@ -10,6 +12,47 @@ function Address() {
Address.parent = parent;
parent.applyEncodingsTo(Address);

//create a pubKeyHash address
Address.fromPubKey = function(pubKey, network) {
if (!network)
network = 'livenet';

if (pubKey.length != 33 && pubKey.length != 65)
throw new Error('Invalid public key');

var version = networks[network].addressVersion;
var hash = coinUtil.sha256ripe160(pubKey);

return new Address(version, hash);
};

//create a p2sh m-of-n multisig address
Address.fromPubKeys = function(mReq, pubKeys, network, opts) {
if (!network)
network = 'livenet';

for (var i in pubKeys) {
var pubKey = pubKeys[i];
if (pubKey.length != 33 && pubKey.length != 65)
throw new Error('Invalid public key');
}

var script = Script.createMultisig(mReq, pubKeys, opts);

return Address.fromScript(script, network);
};

//create a p2sh address from redeemScript
Address.fromScript = function(script, network) {
if (!network)
network = 'livenet';

var version = networks[network].P2SHVersion;
var buf = script.getBuffer();
var hash = coinUtil.sha256ripe160(buf);

return new Address(version, hash);
};

Address.prototype.validate = function() {
this.doAsBinary(function() {
Expand Down
3 changes: 1 addition & 2 deletions Buffers.monkey.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ exports.patch = function(Buffers) {
}
var pos = this.pos(i);
this.buffers = this.buffers.slice(pos.buf);
this.buffers[0].length -= pos.offset;
this.buffers[0].offset += pos.offset;
this.buffers[0] = new Buffer(this.buffers[0].slice(pos.offset));
this.length -= i;
};
};
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ peerman.on('connect', function() {
var conn = peerman.getActiveConnection();
if (conn) {
var outs = [{address:toAddress, amount:amt}];
var opts = {remainderAddress: changeAddressString};
var opts = {remainderOut: {address: changeAddressString}};
var Builder = bitcore.TransactionBuilder;

var tx = new Builder(opts)
Expand Down
1 change: 0 additions & 1 deletion Script.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ function Script(buffer) {
this.chunks = [];
this.parse();
}
this.class = Script;

Script.TX_UNKNOWN = TX_UNKNOWN;
Script.TX_PUBKEY = TX_PUBKEY;
Expand Down
24 changes: 21 additions & 3 deletions Transaction.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ function TransactionIn(data) {
this.q = data.q ? data.q : data.sequence;
}

TransactionIn.MAX_SEQUENCE = 0xffffffff;

TransactionIn.prototype.getScript = function getScript() {
return new Script(this.s);
};
Expand Down Expand Up @@ -125,7 +127,6 @@ function Transaction(data) {
}) : [];
if (data.buffer) this._buffer = data.buffer;
};
this.class = Transaction;
Transaction.In = TransactionIn;
Transaction.Out = TransactionOut;

Expand Down Expand Up @@ -197,6 +198,22 @@ Transaction.prototype.getHash = function getHash() {
return this.hash;
};


Transaction.prototype.calcNormalizedHash = function () {
this.normalizedHash = this.hashForSignature(new Script(),0, SIGHASH_ALL);
return this.normalizedHash;
};


Transaction.prototype.getNormalizedHash = function () {
if (!this.normalizedHash || !this.normalizedHash.length) {
this.normalizedHash = this.calcNormalizedHash();
}
return this.normalizedHash;
};



// convert encoded list of inputs to easy-to-use JS list-of-lists
Transaction.prototype.inputs = function inputs() {
var res = [];
Expand Down Expand Up @@ -432,7 +449,8 @@ Transaction.prototype.getStandardizedObject = function getStandardizedObject() {
prev_out: {
hash: buffertools.reverse(new Buffer(txin.getOutpointHash())).toString('hex'),
n: txin.getOutpointIndex()
}
},
sequence: txin.q
};
if (txin.isCoinBase()) {
txinObj.coinbase = txin.s.toString('hex');
Expand Down Expand Up @@ -568,7 +586,7 @@ Transaction.prototype.calcSize = function() {
return totalSize;
};

Transaction.prototype.getSize = function getHash() {
Transaction.prototype.getSize = function () {
if (!this.size) {
this.size = this.calcSize();
}
Expand Down
10 changes: 6 additions & 4 deletions TransactionBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ function TransactionBuilder(opts) {

this.tx = {};
this.inputsSigned= 0;
this.signaturesAdded= 0;

return this;
}
Expand Down Expand Up @@ -482,7 +483,7 @@ TransactionBuilder.prototype._signPubKey = function(walletKeyMap, input, txSigHa
var scriptSig = new Script();
scriptSig.chunks.push(sig);
scriptSig.updateBuffer();
return {isFullySigned: true, signaturesAdded: true, script: scriptSig.getBuffer()};
return {isFullySigned: true, signaturesAdded: 1, script: scriptSig.getBuffer()};
};

TransactionBuilder.prototype._signPubKeyHash = function(walletKeyMap, input, txSigHash) {
Expand All @@ -501,7 +502,7 @@ TransactionBuilder.prototype._signPubKeyHash = function(walletKeyMap, input, txS
scriptSig.chunks.push(sig);
scriptSig.chunks.push(wk.privKey.public);
scriptSig.updateBuffer();
return {isFullySigned: true, signaturesAdded: true, script: scriptSig.getBuffer()};
return {isFullySigned: true, signaturesAdded: 1, script: scriptSig.getBuffer()};
};

// FOR TESTING
Expand Down Expand Up @@ -577,7 +578,7 @@ TransactionBuilder.prototype._signMultiSig = function(walletKeyMap, input, txSig
originalScriptBuf = this.tx.ins[input.i].s;

var scriptSig = new Script (originalScriptBuf);
var signaturesAdded = false;
var signaturesAdded = 0;

for(var j=0; j<l && scriptSig.countMissingSignatures(); j++) {
var wk = this._findWalletKey(walletKeyMap, {pubKeyBuf: pubkeys[j]});
Expand All @@ -586,7 +587,7 @@ TransactionBuilder.prototype._signMultiSig = function(walletKeyMap, input, txSig
var newScriptSig = this._updateMultiSig(wk, scriptSig, txSigHash, nreq);
if (newScriptSig) {
scriptSig = newScriptSig;
signaturesAdded = true;
signaturesAdded++;
}
}

Expand Down Expand Up @@ -694,6 +695,7 @@ TransactionBuilder.prototype.sign = function(keys) {
if (ret && ret.script) {
tx.ins[i].s = ret.script;
if (ret.isFullySigned) this.inputsSigned++;
if (ret.signaturesAdded) this.signaturesAdded +=ret.signaturesAdded;
}
}
return this;
Expand Down
1 change: 1 addition & 0 deletions bitcore.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ requireWhenAccessed('bignum', 'bignum');
requireWhenAccessed('base58', 'base58-native');
requireWhenAccessed('bufferput', 'bufferput');
requireWhenAccessed('buffertools', 'buffertools');
requireWhenAccessed('Buffers.monkey', './Buffers.monkey');
requireWhenAccessed('config', './config');
requireWhenAccessed('const', './const');
requireWhenAccessed('Deserialize', './Deserialize');
Expand Down
3 changes: 3 additions & 0 deletions browser/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ var createBitcore = function(opts) {
b.require(opts.dir + 'base58-native', {
expose: 'base58-native'
});
b.require(opts.dir + 'buffers', {
expose: 'buffers'
});
b.require('./' + opts.dir + 'bitcore', {
expose: 'bitcore'
});
Expand Down
2 changes: 1 addition & 1 deletion examples/CreateAndSignTx-PayToPubkeyHash.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var run = function() {

var outs = [{address:toAddress, amount:amt}];
var keys = [priv];
var opts = {remainderAddress: changeAddressString};
var opts = {remainderOut: {address: changeAddressString}};
var Builder = bitcore.TransactionBuilder;

var tx = new Builder(opts)
Expand Down
4 changes: 2 additions & 2 deletions examples/CreateAndSignTx-PayToScriptHash.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ var run = function() {
});

// multisig p2sh
var opts = {nreq:3, pubkeys:pubkeys, amount:0.05};
var opts = {nreq:3, pubkeys:pubkeys};

// p2scriphash p2sh
//var opts = [{address: an_address, amount:0.05}];
//var opts = [{address: an_address}];

var info = Builder.infoForP2sh(opts, 'testnet');
var p2shScript = info.scriptBufHex;
Expand Down
16 changes: 9 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,16 +60,17 @@
"binary": "=0.3.0",
"step": "=0.0.4",
"buffers": "=0.1.1",
"buffertools": "~2.0.1",
"browserify": "~3.32.1",
"browser-pack": "~2.0.1",
"commander": "~2.1.0",
"buffertools": "=2.1.2",
"browserify": "=3.40.0",
"browser-pack": "=2.0.1",
"commander": "=2.1.0",
"browserify-bignum": "git://github.com/maraoz/browserify-bignum.git",
"browserify-buffertools": "git://github.com/maraoz/browserify-buffertools.git",
"brfs": "~1.0.0",
"socks5-client": "~0.3.6",
"chai": "~1.9.0",
"uglifyify": "~1.2.3"
"brfs": "=1.0.0",
"chai": "=1.9.1",
"uglifyify": "=1.2.3"
},
"devDependencies": {
"grunt-contrib-watch": "~0.5.3",
Expand All @@ -85,7 +86,8 @@
"istanbul": "~0.2.6"
},
"testling": {
"files": "test/test*.js",
"harness": "mocha-bdd",
"html": "test/index-testling.html",
"browsers": [
"ie/6..latest",
"chrome/22..latest",
Expand Down
22 changes: 13 additions & 9 deletions src/eckey.cc
Original file line number Diff line number Diff line change
Expand Up @@ -160,20 +160,24 @@ Key::New()
Handle<Value>
Key::New(const Arguments& args)
{
if (!args.IsConstructCall()) {
return FromConstructorTemplate(s_ct, args);
}

HandleScope scope;

Key* key = new Key();
if (key->lastError != NULL) {
return VException(key->lastError);
// this was invoked as Key() not new Key()
if (!args.IsConstructCall()) {
const int argc = 1;
Local<Value> argv[argc] = { args[0] };
return scope.Close(s_ct->GetFunction()->NewInstance(argc, argv));
}
else{
Key* key = new Key();
if (key->lastError != NULL) {
return VException(key->lastError);
}

key->Wrap(args.Holder());
key->Wrap(args.Holder());

return scope.Close(args.This());
return scope.Close(args.This());
}
}

Handle<Value>
Expand Down
52 changes: 52 additions & 0 deletions test/index-testling.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html>
<head>
<title>Mocha</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script src="./node_modules/mocha/mocha.js"></script>
<script src="./node_modules/chai/chai.js"></script>
<script>mocha.setup('bdd')</script>
<script>mocha.reporter('tap')</script>
<script src="./browser/bundle.js"></script>
<script src="./browser/testdata.js"></script>
<script src="test/adapter.js"></script>

<script src="test/test.Address.js"></script>
<script src="test/test.basic.js"></script>
<script src="test/test.BIP32.js"></script>
<script src="test/test.Block.js"></script>
<script src="test/test.Bloom.js"></script>
<script src="test/test.Connection.js"></script>
<script src="test/test.EncodedData.js"></script>
<script src="test/test.Key.js"></script>
<script src="test/test.main.js"></script>
<script src="test/test.misc.js"></script>
<script src="test/test.Opcode.js"></script>
<script src="test/test.Peer.js"></script>
<script src="test/test.PeerManager.js"></script>
<script src="test/test.Point.js"></script>
<script src="test/test.PrivateKey.js"></script>
<script src="test/test.RpcClient.js"></script>
<script src="test/test.Script.js"></script>
<script src="test/test.ScriptInterpreter.js"></script>
<script src="test/test.sighash.js"></script>
<script src="test/test.SIN.js"></script>
<script src="test/test.SINKey.js"></script>
<script src="test/test.Transaction.js"></script>
<script src="test/test.TransactionBuilder.js"></script>
<script src="test/test.util.js"></script>
<script src="test/test.VersionedData.js"></script>
<script src="test/test.Wallet.js"></script>
<script src="test/test.WalletKey.js"></script>
<!--
-->
<script>
mocha.run();
</script>
</body>
</html>

0 comments on commit 3ba4352

Please sign in to comment.