Skip to content

Commit

Permalink
network refactors
Browse files Browse the repository at this point in the history
  • Loading branch information
maraoz committed Apr 7, 2014
1 parent 54bbc42 commit 7135342
Show file tree
Hide file tree
Showing 14 changed files with 76 additions and 93 deletions.
6 changes: 3 additions & 3 deletions Address.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,16 @@ Address.prototype.network = function() {
var testnet = networks.testnet;

var answer;
if (version === livenet.addressPubkey || version === livenet.addressScript)
if (version === livenet.addressVersion || version === livenet.P2SHVersion)
answer = livenet;
else if (version === testnet.addressPubkey || version === testnet.addressScript)
else if (version === testnet.addressVersion || version === testnet.P2SHVersion)
answer = testnet;

return answer;
};

Address.prototype.isScript = function() {
return this.isValid() && this.version() === this.network().addressScript;
return this.isValid() && this.version() === this.network().P2SHVersion;
};


Expand Down
30 changes: 15 additions & 15 deletions BIP32.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ var secp256k1_Gx = new bignum("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D95

var BIP32 = function(bytes) {
if (bytes == 'mainnet' || bytes == 'livenet')
this.version = networks['livenet'].bip32private;
this.version = networks['livenet'].bip32privateVersion;
else if (bytes == 'testnet')
this.version = networks['testnet'].bip32private;
this.version = networks['testnet'].bip32privateVersion;

if (bytes == 'mainnet' || bytes == 'livenet' || bytes == 'testnet') {
this.depth = 0x00;
Expand Down Expand Up @@ -63,7 +63,7 @@ BIP32.seed = function(bytes, network) {
bip32.parentFingerprint = new Buffer([0, 0, 0, 0]);
bip32.childIndex = new Buffer([0, 0, 0, 0]);
bip32.chainCode = hash.slice(32, 64);
bip32.version = networks[network].bip32private;
bip32.version = networks[network].bip32privateVersion;
bip32.eckey = new Key();
bip32.eckey.private = hash.slice(0, 32);
bip32.eckey.regenerateSync();
Expand All @@ -89,12 +89,12 @@ BIP32.prototype.initFromBytes = function(bytes) {
var keyBytes = bytes.slice(45, 78);

var isPrivate =
(this.version == networks['livenet'].bip32private ||
this.version == networks['testnet'].bip32private );
(this.version == networks['livenet'].bip32privateVersion ||
this.version == networks['testnet'].bip32privateVersion );

var isPublic =
(this.version == networks['livenet'].bip32public ||
this.version == networks['testnet'].bip32public );
(this.version == networks['livenet'].bip32publicVersion ||
this.version == networks['testnet'].bip32publicVersion );

if (isPrivate && keyBytes[0] == 0) {
this.eckey = new Key();
Expand All @@ -121,13 +121,13 @@ BIP32.prototype.buildExtendedPublicKey = function() {

var v = null;
switch(this.version) {
case networks['livenet'].bip32public:
case networks['livenet'].bip32private:
v = networks['livenet'].bip32public;
case networks['livenet'].bip32publicVersion:
case networks['livenet'].bip32privateVersion:
v = networks['livenet'].bip32publicVersion;
break;
case networks['testnet'].bip32public:
case networks['testnet'].bip32private:
v = networks['testnet'].bip32public;
case networks['testnet'].bip32publicVersion:
case networks['testnet'].bip32privateVersion:
v = networks['testnet'].bip32publicVersion;
break;
default:
throw new Error("Unknown version");
Expand Down Expand Up @@ -256,8 +256,8 @@ BIP32.prototype.deriveChild = function(i) {
var usePrivate = (i & 0x80000000) != 0;

var isPrivate =
(this.version == networks['livenet'].bip32private ||
this.version == networks['testnet'].bip32private );
(this.version == networks['livenet'].bip32privateVersion ||
this.version == networks['testnet'].bip32privateVersion );

if (usePrivate && (!this.hasPrivateKey || !isPrivate))
throw new Error("Cannot do private key derivation without private key");
Expand Down
4 changes: 2 additions & 2 deletions PrivateKey.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ PrivateKey.prototype.network = function() {
var testnet = networks.testnet;

var answer;
if (version === livenet.keySecret)
if (version === livenet.privKeyVersion)
answer = livenet;
else if (version === testnet.keySecret)
else if (version === testnet.privKeyVersion)
answer = testnet;

return answer;
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,21 +232,21 @@ var getAddrStr = function(s) {
switch (type) {
case Script.TX_PUBKEY:
var chunk = s.captureOne();
addr = new Address(network.addressPubkey, coinUtil.sha256ripe160(chunk));
addr = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
addrStrs.push(addr.toString());
break;
case Script.TX_PUBKEYHASH:
addr = new Address(network.addressPubkey, s.captureOne());
addr = new Address(network.addressVersion, s.captureOne());
addrStrs.push(addr.toString());
break;
case Script.TX_SCRIPTHASH:
addr = new Address(network.addressScript, s.captureOne());
addr = new Address(network.P2SHVersion, s.captureOne());
addrStrs.push(addr.toString());
break;
case Script.TX_MULTISIG:
var chunks = s.capture();
chunks.forEach(function(chunk) {
var a = new Address(network.addressPubkey, coinUtil.sha256ripe160(chunk));
var a = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
addrStrs.push(a.toString());
});
break;
Expand Down
10 changes: 5 additions & 5 deletions Sign.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
var subType = undefined;
var subData = undefined;
if (txType == TX_SCRIPTHASH) {
var addr = new Address(network.addressScript, scriptData[0]);
var addr = new Address(network.P2SHVersion, scriptData[0]);
var addrStr = addr.toString();
if (!(addrStr in scripts))
throw new Error("unknown script hash address");
Expand All @@ -61,7 +61,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
return;

var pubkeyhash = util.sha256ripe160(scriptData[0]);
var addr = new Address(network.addressPubkey, pubkeyhash);
var addr = new Address(network.addressVersion, pubkeyhash);
var addrStr = addr.toString();
if (!(addrStr in keys))
throw new Error("unknown pubkey");
Expand All @@ -75,7 +75,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
if (scriptSig.chunks.length > 0)
return;

var addr = new Address(network.addressPubkey, scriptData[0]);
var addr = new Address(network.addressVersion, scriptData[0]);
var addrStr = addr.toString();
if (!(addrStr in keys))
throw new Error("unknown pubkey hash address");
Expand All @@ -90,7 +90,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
if (scriptSig.chunks.length > 0)
return;

var addr = new Address(network.addressPubkey, subData[0]);
var addr = new Address(network.addressVersion, subData[0]);
var addrStr = addr.toString();
if (!(addrStr in keys))
throw new Error("unknown script(pubkey hash) address");
Expand All @@ -110,7 +110,7 @@ function signTxIn(nIn, tx, txInputs, network, keys, scripts)
continue;

var pubkeyhash = util.sha256ripe160(scriptSig.chunks[i]);
var addr = new Address(network.addressPubkey, pubkeyhash);
var addr = new Address(network.addressVersion, pubkeyhash);
var addrStr = addr.toString();
if (!(addrStr in keys))
continue;
Expand Down
8 changes: 4 additions & 4 deletions TransactionBuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ TransactionBuilder.scriptForAddress = function(addressString) {

var version = address.version();
var script;
if (version === livenet.addressPubkey || version === testnet.addressPubkey)
if (version === livenet.addressVersion || version === testnet.addressVersion)
script = Script.createPubKeyHashOut(address.payload());
else if (version === livenet.addressScript || version === testnet.addressScript)
else if (version === livenet.P2SHVersion || version === testnet.P2SHVersion)
script = Script.createP2SH(address.payload());
else
throw new Error('invalid output address');
Expand Down Expand Up @@ -169,7 +169,7 @@ TransactionBuilder.infoForP2sh = function(opts, networkName) {
var hash = util.sha256ripe160(script.getBuffer());

var version = networkName === 'testnet' ?
networks.testnet.addressScript : networks.livenet.addressScript;
networks.testnet.P2SHVersion : networks.livenet.P2SHVersion;

var addr = new Address(version, hash);
var addrStr = addr.as('base58');
Expand Down Expand Up @@ -439,7 +439,7 @@ TransactionBuilder.prototype._checkTx = function() {
TransactionBuilder.prototype._multiFindKey = function(walletKeyMap,pubKeyHash) {
var wk;
[ networks.livenet, networks.testnet].forEach(function(n) {
[ n.addressPubkey, n.addressScript].forEach(function(v) {
[ n.addressVersion, n.P2SHVersion].forEach(function(v) {
var a = new Address(v,pubKeyHash);
if (!wk && walletKeyMap[a]) {
wk = walletKeyMap[a];
Expand Down
2 changes: 1 addition & 1 deletion Wallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ Wallet.prototype.expandKeys = function(keys) {
Wallet.prototype.addScript = function(script) {
var buf = script.getBuffer();
var hash = util.sha256ripe160(buf);
var addr = new Address(this.network.addressScript, hash);
var addr = new Address(this.network.P2SHVersion, hash);
var addrStr = addr.as('base58');
this.datastore.scripts[addrStr] = buf.toString('hex');
this.dirty = true;
Expand Down
4 changes: 2 additions & 2 deletions WalletKey.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ WalletKey.prototype.generate = function() {
WalletKey.prototype.storeObj = function() {
var pubKey = this.privKey.public.toString('hex');
var pubKeyHash = coinUtil.sha256ripe160(this.privKey.public);
var addr = new Address(this.network.addressPubkey, pubKeyHash);
var priv = new PrivateKey(this.network.keySecret, this.privKey.private, this.privKey.compressed);
var addr = new Address(this.network.addressVersion, pubKeyHash);
var priv = new PrivateKey(this.network.privKeyVersion, this.privKey.private, this.privKey.compressed);
var obj = {
created: this.created,
priv: priv.toString(),
Expand Down
2 changes: 1 addition & 1 deletion examples/CreateScript.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ var run = function() {
p('\tHex : ' + buffertools.toHex(s.buffer));
p('\tHuman : ' + s.toHumanReadable());
p('\tScript Hash: ' + buffertools.toHex(hash));
var a = new Address(networks.livenet.addressScript,hash);
var a = new Address(networks.livenet.P2SHVersion,hash);
p('\tp2sh Addr: ' + a.toString());

};
Expand Down
8 changes: 4 additions & 4 deletions examples/Script.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@ var run = function() {
switch (type) {
case Script.TX_PUBKEY:
var chunk = s.captureOne();
addr = new Address(network.addressPubkey, coinUtil.sha256ripe160(chunk));
addr = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
addrStrs.push(addr.toString());
break;
case Script.TX_PUBKEYHASH:
addr = new Address(network.addressPubkey, s.captureOne());
addr = new Address(network.addressVersion, s.captureOne());
addrStrs.push(addr.toString());
break;
case Script.TX_SCRIPTHASH:
addr = new Address(network.addressScript, s.captureOne());
addr = new Address(network.P2SHVersion, s.captureOne());
addrStrs.push(addr.toString());
break;
case Script.TX_MULTISIG:
var chunks = s.capture();
chunks.forEach(function(chunk) {
var a = new Address(network.addressPubkey, coinUtil.sha256ripe160(chunk));
var a = new Address(network.addressVersion, coinUtil.sha256ripe160(chunk));
addrStrs.push(a.toString());
});
break;
Expand Down
63 changes: 17 additions & 46 deletions networks.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,69 +4,40 @@ var hex = function(hex) {return new Buffer(hex, 'hex');};

exports.livenet = {
name: 'livenet',
addressVersion: 0x00,
magic: hex('f9beb4d9'),
addressVersion: 0x00,
privKeyVersion: 128,
P2SHVersion: 5,
bip32publicVersion: 0x0488b21e,
bip32privateVersion: 0x0488ade4,
genesisBlock: {
hash: hex('6FE28C0AB6F1B372C1A6A246AE63F74F931E8365E15A089C68D6190000000000'),
merkle_root: hex('3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A'),
height: 0,
nonce: 2083236893,
version: 1,
hash: hex('6FE28C0AB6F1B372C1A6A246AE63F74F931E8365E15A089C68D6190000000000'),
prev_hash: buffertools.fill(new Buffer(32), 0),
timestamp: 1231006505,
merkle_root: hex('3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A'),
bits: 486604799
},
genesisBlockTx: {
outs: [{
v: hex('00F2052A01000000'), // 50 BTC
s: new Put()
.word8(65) // 65 bytes of data follow
.put(hex('04678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5F'))
.word8(0xAC) // OP_CHECKSIG
.buffer()
}],
lock_time: 0,
version: 1,
hash: hex('3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A'),
ins: [{
q: 0xFFFFFFFF,
o: hex("0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF"),
s: new Put()
.put(hex('04FFFF001D010445'))
.put(new Buffer('The Times 03/Jan/2009 Chancellor on brink of ' +
'second bailout for banks', 'ascii'))
.buffer()
}]
},
proofOfWorkLimit: hex("00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"),
checkpoints: [], // need to put checkpoint blocks here
addressPubkey: 0,
addressScript: 5,
bip32public: 0x0488b21e,
bip32private: 0x0488ade4,
keySecret: 128,
bits: 486604799,
}
};

exports.testnet = {
name: 'testnet',
addressVersion: 0x6f,
magic: hex('0b110907'),
addressVersion: 0x6f,
privKeyVersion: 239,
P2SHVersion: 196,
bip32publicVersion: 0x043587cf,
bip32privateVersion: 0x04358394,
genesisBlock: {
hash: hex('43497FD7F826957108F4A30FD9CEC3AEBA79972084E90EAD01EA330900000000'),
merkle_root: hex('3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A'),
height: 0,
nonce: 414098458,
version: 1,
hash: hex('43497FD7F826957108F4A30FD9CEC3AEBA79972084E90EAD01EA330900000000'),
prev_hash: buffertools.fill(new Buffer(32), 0),
timestamp: 1296688602,
merkle_root: hex('3BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A'),
bits: 486604799,
},
genesisBlockTx: module.exports.livenet.genesisBlockTx,
proofOfWorkLimit: module.exports.livenet.proofOfWorkLimit,
checkpoints: [], // need to put checkput blocks here
addressPubkey: 111,
addressScript: 196,
bip32public: 0x043587cf,
bip32private: 0x04358394,
keySecret: 239,
}
};
2 changes: 1 addition & 1 deletion test/test.PrivateKey.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ describe('PrivateKey', function() {
it('should convert hex testnet private key with compressed public key to base58check format', function() {
var hex = 'b9f4892c9e8282028fea1d2667c4dc5213564d41fc5783896a0d843fc15089f3';
var buf = new Buffer(hex, 'hex');
var privkey = new PrivateKey(networks.testnet.keySecret, buf, true);
var privkey = new PrivateKey(networks.testnet.privKeyVersion, buf, true);

privkey.as('base58').should.equal('cTpB4YiyKiBcPxnefsDpbnDxFDffjqJob8wGCEDXxgQ7zQoMXJdH');
});
Expand Down
8 changes: 4 additions & 4 deletions test/test.basic.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ var Key = bitcore.Key;

function test_encode_priv(b58, payload, isTestnet, isCompressed) {
var network = isTestnet ? networks.testnet : networks.livenet;
var version = network.keySecret;
var version = network.privKeyVersion;

var buf_pl = new Buffer(payload, 'hex');
var buf;
Expand All @@ -37,7 +37,7 @@ function test_encode_priv(b58, payload, isTestnet, isCompressed) {
function test_encode_pub(b58, payload, isTestnet, addrType) {
var isScript = (addrType === 'script');
var network = isTestnet ? networks.testnet : networks.livenet;
var version = isScript ? network.addressScript : network.addressPubkey;
var version = isScript ? network.P2SHVersion : network.addressVersion;
var buf = new Buffer(payload, 'hex');
var addr = new Address(version, buf);
addr.toString().should.equal(b58);
Expand All @@ -46,7 +46,7 @@ function test_encode_pub(b58, payload, isTestnet, addrType) {

function test_decode_priv(b58, payload, isTestnet, isCompressed) {
var network = isTestnet ? networks.testnet : networks.livenet;
var version = network.keySecret;
var version = network.privKeyVersion;

var buf_pl = new Buffer(payload, 'hex');
var buf;
Expand All @@ -65,7 +65,7 @@ function test_decode_priv(b58, payload, isTestnet, isCompressed) {
function test_decode_pub(b58, payload, isTestnet, addrType) {
var isScript = (addrType === 'script');
var network = isTestnet ? networks.testnet : networks.livenet;
var version = isScript ? network.addressScript : network.addressPubkey;
var version = isScript ? network.P2SHVersion : network.addressVersion;
var buf = new Buffer(payload, 'hex');
var addr = new Address(b58);

Expand Down

0 comments on commit 7135342

Please sign in to comment.