resolved merge conflicts
This commit is contained in:
commit
76247ff532
45
bitcore.js
45
bitcore.js
|
@ -14,40 +14,41 @@ requireWhenAccessed('bignum', 'bignum');
|
||||||
requireWhenAccessed('base58', 'base58-native');
|
requireWhenAccessed('base58', 'base58-native');
|
||||||
requireWhenAccessed('bufferput', 'bufferput');
|
requireWhenAccessed('bufferput', 'bufferput');
|
||||||
requireWhenAccessed('buffertools', 'buffertools');
|
requireWhenAccessed('buffertools', 'buffertools');
|
||||||
requireWhenAccessed('Buffers.monkey', './Buffers.monkey');
|
requireWhenAccessed('Buffers.monkey', './patches/Buffers.monkey');
|
||||||
requireWhenAccessed('config', './config');
|
requireWhenAccessed('config', './config');
|
||||||
requireWhenAccessed('const', './const');
|
requireWhenAccessed('const', './const');
|
||||||
requireWhenAccessed('Deserialize', './Deserialize');
|
requireWhenAccessed('Deserialize', './lib/Deserialize');
|
||||||
requireWhenAccessed('log', './util/log');
|
requireWhenAccessed('log', './util/log');
|
||||||
requireWhenAccessed('networks', './networks');
|
requireWhenAccessed('networks', './networks');
|
||||||
requireWhenAccessed('util', './util/util');
|
requireWhenAccessed('util', './util/util');
|
||||||
requireWhenAccessed('EncodedData', './util/EncodedData');
|
requireWhenAccessed('EncodedData', './util/EncodedData');
|
||||||
requireWhenAccessed('VersionedData', './util/VersionedData');
|
requireWhenAccessed('VersionedData', './util/VersionedData');
|
||||||
requireWhenAccessed('BinaryParser', './util/BinaryParser');
|
requireWhenAccessed('BinaryParser', './util/BinaryParser');
|
||||||
requireWhenAccessed('Address', './Address');
|
requireWhenAccessed('Address', './lib/Address');
|
||||||
requireWhenAccessed('BIP32', './BIP32');
|
requireWhenAccessed('BIP32', './lib/BIP32');
|
||||||
requireWhenAccessed('Point', './Point');
|
requireWhenAccessed('Point', './lib/Point');
|
||||||
requireWhenAccessed('Opcode', './Opcode');
|
requireWhenAccessed('Opcode', './lib/Opcode');
|
||||||
requireWhenAccessed('Script', './Script');
|
requireWhenAccessed('Script', './lib/Script');
|
||||||
requireWhenAccessed('Transaction', './Transaction');
|
requireWhenAccessed('Transaction', './lib/Transaction');
|
||||||
requireWhenAccessed('TransactionBuilder', './TransactionBuilder');
|
requireWhenAccessed('TransactionBuilder', './lib/TransactionBuilder');
|
||||||
requireWhenAccessed('Connection', './Connection');
|
requireWhenAccessed('Connection', './lib/Connection');
|
||||||
requireWhenAccessed('Peer', './Peer');
|
requireWhenAccessed('Peer', './lib/Peer');
|
||||||
requireWhenAccessed('Block', './Block');
|
requireWhenAccessed('Block', './lib/Block');
|
||||||
requireWhenAccessed('ScriptInterpreter', './ScriptInterpreter');
|
requireWhenAccessed('ScriptInterpreter', './lib/ScriptInterpreter');
|
||||||
requireWhenAccessed('Bloom', './Bloom');
|
requireWhenAccessed('Bloom', './lib/Bloom');
|
||||||
requireWhenAccessed('Key', './Key');
|
requireWhenAccessed('Key', './lib/Key');
|
||||||
Object.defineProperty(module.exports, 'KeyModule', {get: function() {
|
Object.defineProperty(module.exports, 'KeyModule', {get: function() {
|
||||||
console.log('KeyModule is deprecated.');
|
console.log('KeyModule is deprecated.');
|
||||||
return require('bindings')('KeyModule');
|
return require('bindings')('KeyModule');
|
||||||
}});
|
}});
|
||||||
requireWhenAccessed('SINKey', './SINKey');
|
requireWhenAccessed('SINKey', './lib/SINKey');
|
||||||
requireWhenAccessed('SIN', './SIN');
|
requireWhenAccessed('SIN', './lib/SIN');
|
||||||
requireWhenAccessed('PrivateKey', './PrivateKey');
|
requireWhenAccessed('PrivateKey', './lib/PrivateKey');
|
||||||
requireWhenAccessed('RpcClient', './RpcClient');
|
requireWhenAccessed('RpcClient', './lib/RpcClient');
|
||||||
requireWhenAccessed('Wallet', './Wallet');
|
requireWhenAccessed('Wallet', './lib/Wallet');
|
||||||
requireWhenAccessed('WalletKey', './WalletKey');
|
requireWhenAccessed('WalletKey', './lib/WalletKey');
|
||||||
requireWhenAccessed('PeerManager', './PeerManager');
|
requireWhenAccessed('PeerManager', './lib/PeerManager');
|
||||||
|
requireWhenAccessed('Message', './lib/Message');
|
||||||
module.exports.Buffer = Buffer;
|
module.exports.Buffer = Buffer;
|
||||||
|
|
||||||
if (typeof process.versions === 'undefined') {
|
if (typeof process.versions === 'undefined') {
|
||||||
|
|
|
@ -23,31 +23,32 @@ var pack = function (params) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var modules = [
|
var modules = [
|
||||||
'Address',
|
|
||||||
'BIP32',
|
|
||||||
'Block',
|
|
||||||
'Bloom',
|
|
||||||
'Buffers.monkey',
|
|
||||||
'Connection',
|
|
||||||
'Deserialize',
|
|
||||||
'Gruntfile',
|
'Gruntfile',
|
||||||
'Number.monkey',
|
'lib/Address',
|
||||||
'Opcode',
|
'lib/BIP32',
|
||||||
'Peer',
|
'lib/Block',
|
||||||
'PeerManager',
|
'lib/Bloom',
|
||||||
'PrivateKey',
|
'lib/Connection',
|
||||||
'RpcClient',
|
'lib/Deserialize',
|
||||||
'Key',
|
'lib/Message',
|
||||||
'Point',
|
'lib/Opcode',
|
||||||
'SIN',
|
'lib/Peer',
|
||||||
'SINKey',
|
'lib/PeerManager',
|
||||||
'Script',
|
'lib/PrivateKey',
|
||||||
'ScriptInterpreter',
|
'lib/RpcClient',
|
||||||
'Sign',
|
'lib/Key',
|
||||||
'Transaction',
|
'lib/Point',
|
||||||
'TransactionBuilder',
|
'lib/SIN',
|
||||||
'Wallet',
|
'lib/SINKey',
|
||||||
'WalletKey',
|
'lib/Script',
|
||||||
|
'lib/ScriptInterpreter',
|
||||||
|
'lib/Sign',
|
||||||
|
'lib/Transaction',
|
||||||
|
'lib/TransactionBuilder',
|
||||||
|
'lib/Wallet',
|
||||||
|
'lib/WalletKey',
|
||||||
|
'patches/Buffers.monkey',
|
||||||
|
'patches/Number.monkey',
|
||||||
'config',
|
'config',
|
||||||
'const',
|
'const',
|
||||||
'networks',
|
'networks',
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
var PeerManager = require('../PeerManager');
|
var PeerManager = require('../lib/PeerManager');
|
||||||
var peerman = new PeerManager();
|
var peerman = new PeerManager();
|
||||||
|
|
||||||
peerman.discoverPeers(function(err, peers) {
|
peerman.discoverPeers(function(err, peers) {
|
||||||
|
|
|
@ -4,6 +4,7 @@ var run = function() {
|
||||||
// Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
|
// Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
|
||||||
var bitcore = require('../bitcore');
|
var bitcore = require('../bitcore');
|
||||||
var Peer = bitcore.Peer;
|
var Peer = bitcore.Peer;
|
||||||
|
|
||||||
var TransactionBuilder = bitcore.TransactionBuilder;
|
var TransactionBuilder = bitcore.TransactionBuilder;
|
||||||
var PeerManager = bitcore.PeerManager;
|
var PeerManager = bitcore.PeerManager;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var coinUtil = imports.coinUtil || require('./util/util');
|
var coinUtil = imports.coinUtil || require('../util');
|
||||||
var parent = imports.parent || require('./util/VersionedData');
|
var parent = imports.parent || require('../util/VersionedData');
|
||||||
var networks = imports.networks || require('./networks');
|
var networks = imports.networks || require('../networks');
|
||||||
var Script = imports.Script || require('./Script');
|
var Script = imports.Script || require('./Script');
|
||||||
|
|
||||||
function Address() {
|
function Address() {
|
||||||
|
@ -47,6 +47,10 @@ Address.fromScript = function(script, network) {
|
||||||
if (!network)
|
if (!network)
|
||||||
network = 'livenet';
|
network = 'livenet';
|
||||||
|
|
||||||
|
if (typeof script === 'string') {
|
||||||
|
script = new Script(new Buffer(script,'hex'));
|
||||||
|
}
|
||||||
|
|
||||||
var version = networks[network].P2SHVersion;
|
var version = networks[network].P2SHVersion;
|
||||||
var buf = script.getBuffer();
|
var buf = script.getBuffer();
|
||||||
var hash = coinUtil.sha256ripe160(buf);
|
var hash = coinUtil.sha256ripe160(buf);
|
||||||
|
@ -54,6 +58,45 @@ Address.fromScript = function(script, network) {
|
||||||
return new Address(version, hash);
|
return new Address(version, hash);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//extract and address from scriptPubKey
|
||||||
|
Address.fromScriptPubKey = function(scriptPubKey, network) {
|
||||||
|
|
||||||
|
if (typeof scriptPubKey === 'string') {
|
||||||
|
scriptPubKey = new Script(new Buffer(scriptPubKey,'hex'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!network)
|
||||||
|
network = 'livenet';
|
||||||
|
|
||||||
|
var ret=[], version;
|
||||||
|
var payload = scriptPubKey.capture();
|
||||||
|
|
||||||
|
if (payload) {
|
||||||
|
var txType = scriptPubKey.classify();
|
||||||
|
switch (txType) {
|
||||||
|
case Script.TX_PUBKEY:
|
||||||
|
payload[0] = coinUtil.sha256ripe160(payload[0]);
|
||||||
|
version = networks[network].addressVersion;
|
||||||
|
break;
|
||||||
|
case Script.TX_PUBKEYHASH:
|
||||||
|
version = networks[network].addressVersion;
|
||||||
|
break;
|
||||||
|
case Script.TX_MULTISIG:
|
||||||
|
version = networks[network].addressVersion;
|
||||||
|
for(var i in payload)
|
||||||
|
payload[i] = coinUtil.sha256ripe160(payload[i]);
|
||||||
|
break;
|
||||||
|
case Script.TX_SCRIPTHASH:
|
||||||
|
version = networks[network].P2SHVersion;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for(var i in payload)
|
||||||
|
ret.push(new Address(version,payload[i]));
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
Address.prototype.validate = function() {
|
Address.prototype.validate = function() {
|
||||||
this.doAsBinary(function() {
|
this.doAsBinary(function() {
|
||||||
Address.super(this, 'validate', arguments);
|
Address.super(this, 'validate', arguments);
|
|
@ -1,11 +1,11 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var base58 = imports.base58 || require('base58-native').base58;
|
var base58 = imports.base58 || require('base58-native').base58;
|
||||||
var coinUtil = imports.coinUtil || require('./util/util');
|
var coinUtil = imports.coinUtil || require('../util');
|
||||||
var Key = imports.Key || require('./Key');
|
var Key = imports.Key || require('./Key');
|
||||||
var Point = imports.Point || require('./Point');
|
var Point = imports.Point || require('./Point');
|
||||||
var bignum = imports.bignum || require('bignum');
|
var bignum = imports.bignum || require('bignum');
|
||||||
var crypto = require('crypto');
|
var crypto = require('crypto');
|
||||||
var networks = require('./networks');
|
var networks = require('../networks');
|
||||||
|
|
||||||
var secp256k1_n = new bignum("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
|
var secp256k1_n = new bignum("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
|
||||||
var secp256k1_Gx = new bignum("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16);
|
var secp256k1_Gx = new bignum("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16);
|
|
@ -1,6 +1,6 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
|
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var Debug1 = imports.Debug1 || function() {};
|
var Debug1 = imports.Debug1 || function() {};
|
||||||
var Script = imports.Script || require('./Script');
|
var Script = imports.Script || require('./Script');
|
||||||
var Bignum = imports.Bignum || require('bignum');
|
var Bignum = imports.Bignum || require('bignum');
|
||||||
|
@ -11,7 +11,7 @@ var Transaction = imports.Transaction || require('./Transaction');
|
||||||
var TransactionIn = Transaction.In;
|
var TransactionIn = Transaction.In;
|
||||||
var TransactionOut = Transaction.Out;
|
var TransactionOut = Transaction.Out;
|
||||||
var COINBASE_OP = Transaction.COINBASE_OP;
|
var COINBASE_OP = Transaction.COINBASE_OP;
|
||||||
var VerificationError = imports.VerificationError || require('./util/error').VerificationError;
|
var VerificationError = imports.VerificationError || require('../util/error').VerificationError;
|
||||||
var BlockRules = {
|
var BlockRules = {
|
||||||
maxTimeOffset: 2 * 60 * 60, // How far block timestamps can be into the future
|
maxTimeOffset: 2 * 60 * 60, // How far block timestamps can be into the future
|
||||||
largestHash: Bignum(2).pow(256)
|
largestHash: Bignum(2).pow(256)
|
|
@ -1,20 +1,20 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
|
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
|
|
||||||
var MAX_RECEIVE_BUFFER = 10000000;
|
var MAX_RECEIVE_BUFFER = 10000000;
|
||||||
var PROTOCOL_VERSION = 70000;
|
var PROTOCOL_VERSION = 70000;
|
||||||
|
|
||||||
var Put = imports.Put || require('bufferput');
|
var Put = imports.Put || require('bufferput');
|
||||||
var Buffers = imports.Buffers || require('buffers');
|
var Buffers = imports.Buffers || require('buffers');
|
||||||
require('./Buffers.monkey').patch(Buffers);
|
require('../patches/Buffers.monkey').patch(Buffers);
|
||||||
|
|
||||||
var bitcoreDefaults = imports.config || require('./config');
|
var bitcoreDefaults = imports.config || require('../config');
|
||||||
var networks = imports.networks || require('./networks');
|
var networks = imports.networks || require('../networks');
|
||||||
var Block = imports.Block || require('./Block');
|
var Block = imports.Block || require('./Block');
|
||||||
var Transaction = imports.Transaction || require('./Transaction');
|
var Transaction = imports.Transaction || require('./Transaction');
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var Parser = imports.Parser || require('./util/BinaryParser');
|
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||||
var buffertools = imports.buffertools || require('buffertools');
|
var buffertools = imports.buffertools || require('buffertools');
|
||||||
var doubleSha256 = imports.doubleSha256 || util.twoSha256;
|
var doubleSha256 = imports.doubleSha256 || util.twoSha256;
|
||||||
var nonce = util.generateNonce();
|
var nonce = util.generateNonce();
|
|
@ -7,7 +7,7 @@ if (process.versions) {
|
||||||
module.exports = Key;
|
module.exports = Key;
|
||||||
} else {
|
} else {
|
||||||
// pure js version
|
// pure js version
|
||||||
var ECKey = require('./browser/vendor-bundle.js').ECKey;
|
var ECKey = require('../browser/vendor-bundle.js').ECKey;
|
||||||
var buffertools = require('buffertools');
|
var buffertools = require('buffertools');
|
||||||
|
|
||||||
var kSpec = function() {
|
var kSpec = function() {
|
|
@ -0,0 +1,42 @@
|
||||||
|
'use strict';
|
||||||
|
var imports = require('soop').imports();
|
||||||
|
var coinUtil = imports.coinUtil || require('../util');
|
||||||
|
var Key = imports.Key || require('./Key');
|
||||||
|
|
||||||
|
var Message = function() {
|
||||||
|
};
|
||||||
|
|
||||||
|
Message.sign = function(str, key) {
|
||||||
|
var hash = Message.magicHash(str);
|
||||||
|
var sig = key.signSync(hash);
|
||||||
|
return sig;
|
||||||
|
};
|
||||||
|
|
||||||
|
Message.verifyWithPubKey = function(pubkey, message, sig) {
|
||||||
|
var hash = Message.magicHash(message);
|
||||||
|
var key = new Key();
|
||||||
|
if (pubkey.length == 65)
|
||||||
|
key.compressed = false;
|
||||||
|
key.public = pubkey;
|
||||||
|
|
||||||
|
return key.verifySignatureSync(hash, sig);
|
||||||
|
};
|
||||||
|
|
||||||
|
//TODO: Message.verify ... with address, not pubkey
|
||||||
|
|
||||||
|
Message.magicBytes = new Buffer('Bitcoin Signed Message:\n');
|
||||||
|
|
||||||
|
Message.magicHash = function(str) {
|
||||||
|
var magicBytes = Message.magicBytes;
|
||||||
|
var prefix1 = coinUtil.varIntBuf(magicBytes.length);
|
||||||
|
var message = new Buffer(str);
|
||||||
|
var prefix2 = coinUtil.varIntBuf(message.length);
|
||||||
|
|
||||||
|
var buf = Buffer.concat([prefix1, magicBytes, prefix2, message]);
|
||||||
|
|
||||||
|
var hash = coinUtil.twoSha256(buf);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = require('soop')(Message);
|
|
@ -1,8 +1,7 @@
|
||||||
|
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var extend = imports.extend || require('extend');
|
var extend = imports.extend || require('extend');
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
var bitcoreDefaults = imports.config || require('./config');
|
var bitcoreDefaults = imports.config || require('../config');
|
||||||
var Connection = imports.Connection || require ('./Connection');
|
var Connection = imports.Connection || require ('./Connection');
|
||||||
|
|
||||||
var Peer = imports.Peer || require('./Peer');
|
var Peer = imports.Peer || require('./Peer');
|
||||||
|
@ -217,7 +216,7 @@ PeerManager.prototype.discoverPeers = function(callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var async = imports.async || require('async');
|
var async = imports.async || require('async');
|
||||||
var dns = imports.dns || require('dns');
|
var dns = imports.dns || require('dns');
|
||||||
var networks = imports.networks || require('./networks')[this.config.network];
|
var networks = imports.networks || require('../networks')[this.config.network];
|
||||||
var seeds = networks.dnsSeeds;
|
var seeds = networks.dnsSeeds;
|
||||||
|
|
||||||
// keep track of tried seeds and results
|
// keep track of tried seeds and results
|
|
@ -7,11 +7,11 @@ var assert = require('assert');
|
||||||
|
|
||||||
//browser
|
//browser
|
||||||
if (!process.versions) {
|
if (!process.versions) {
|
||||||
var ECKey = require('./browser/vendor-bundle.js').ECKey;
|
var ECKey = require('../browser/vendor-bundle.js').ECKey;
|
||||||
var ECPointFp = require('./browser/vendor-bundle.js').ECPointFp;
|
var ECPointFp = require('../browser/vendor-bundle.js').ECPointFp;
|
||||||
var ECFieldElementFp = require('./browser/vendor-bundle.js').ECFieldElementFp;
|
var ECFieldElementFp = require('../browser/vendor-bundle.js').ECFieldElementFp;
|
||||||
var getSECCurveByName = require('./browser/vendor-bundle.js').getSECCurveByName;
|
var getSECCurveByName = require('../browser/vendor-bundle.js').getSECCurveByName;
|
||||||
var BigInteger = require('./browser/vendor-bundle.js').BigInteger;
|
var BigInteger = require('../browser/vendor-bundle.js').BigInteger;
|
||||||
var should = require('chai').should();
|
var should = require('chai').should();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
|
|
||||||
var parent = imports.parent || require('./util/VersionedData');
|
var parent = imports.parent || require('../util/VersionedData');
|
||||||
var networks= imports.networks || require('./networks');
|
var networks= imports.networks || require('../networks');
|
||||||
|
|
||||||
//compressed is true if public key is compressed; false otherwise
|
//compressed is true if public key is compressed; false otherwise
|
||||||
function PrivateKey(version, buf, compressed) {
|
function PrivateKey(version, buf, compressed) {
|
|
@ -5,7 +5,7 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var http = imports.http || require('http');
|
var http = imports.http || require('http');
|
||||||
var https = imports.https || require('https');
|
var https = imports.https || require('https');
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
|
|
||||||
function RpcClient(opts) {
|
function RpcClient(opts) {
|
||||||
opts = opts || {};
|
opts = opts || {};
|
|
@ -1,5 +1,5 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var parent = imports.parent || require('./util/VersionedData');
|
var parent = imports.parent || require('../util/VersionedData');
|
||||||
|
|
||||||
function SIN(type, payload) {
|
function SIN(type, payload) {
|
||||||
if (typeof type != 'number') {
|
if (typeof type != 'number') {
|
|
@ -1,5 +1,5 @@
|
||||||
var coinUtil = require('./util/util');
|
var coinUtil = require('../util');
|
||||||
var timeUtil = require('./util/time');
|
var timeUtil = require('../util/time');
|
||||||
var Key = require('./Key');
|
var Key = require('./Key');
|
||||||
var SIN = require('./SIN');
|
var SIN = require('./SIN');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var config = imports.config || require('./config');
|
var config = imports.config || require('../config');
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
var Opcode = imports.Opcode || require('./Opcode');
|
var Opcode = imports.Opcode || require('./Opcode');
|
||||||
var buffertools = imports.buffertools || require('buffertools');
|
var buffertools = imports.buffertools || require('buffertools');
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ for (var i in Opcode.map) {
|
||||||
eval(i + " = " + Opcode.map[i] + ";");
|
eval(i + " = " + Opcode.map[i] + ";");
|
||||||
}
|
}
|
||||||
|
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util/util');
|
||||||
var Parser = imports.Parser || require('./util/BinaryParser');
|
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||||
var Put = imports.Put || require('bufferput');
|
var Put = imports.Put || require('bufferput');
|
||||||
|
|
||||||
var TX_UNKNOWN = 0;
|
var TX_UNKNOWN = 0;
|
|
@ -1,11 +1,11 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var config = imports.config || require('./config');
|
var config = imports.config || require('../config');
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var Opcode = imports.Opcode || require('./Opcode');
|
var Opcode = imports.Opcode || require('./Opcode');
|
||||||
var buffertools = imports.buffertools || require('buffertools');
|
var buffertools = imports.buffertools || require('buffertools');
|
||||||
var bignum = imports.bignum || require('bignum');
|
var bignum = imports.bignum || require('bignum');
|
||||||
var Util = imports.Util || require('./util/util');
|
var Util = imports.Util || require('../util');
|
||||||
var Script = require('./Script');
|
var Script = require('./Script');
|
||||||
var Key = require('./Key');
|
var Key = require('./Key');
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var config = imports.config || require('./config');
|
var config = imports.config || require('../config');
|
||||||
var log = imports.log || require('./util/log');
|
var log = imports.log || require('../util/log');
|
||||||
var Address = imports.Address || require('./Address');
|
var Address = imports.Address || require('./Address');
|
||||||
var Script = imports.Script || require('./Script');
|
var Script = imports.Script || require('./Script');
|
||||||
var ScriptInterpreter = imports.ScriptInterpreter || require('./ScriptInterpreter');
|
var ScriptInterpreter = imports.ScriptInterpreter || require('./ScriptInterpreter');
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var bignum = imports.bignum || require('bignum');
|
var bignum = imports.bignum || require('bignum');
|
||||||
var Put = imports.Put || require('bufferput');
|
var Put = imports.Put || require('bufferput');
|
||||||
var Parser = imports.Parser || require('./util/BinaryParser');
|
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||||
var Step = imports.Step || require('step');
|
var Step = imports.Step || require('step');
|
||||||
var buffertools = imports.buffertools || require('buffertools');
|
var buffertools = imports.buffertools || require('buffertools');
|
||||||
var error = imports.error || require('./util/error');
|
var error = imports.error || require('../util/error');
|
||||||
var networks = imports.networks || require('./networks');
|
var networks = imports.networks || require('../networks');
|
||||||
var WalletKey = imports.WalletKey || require('./WalletKey');
|
var WalletKey = imports.WalletKey || require('./WalletKey');
|
||||||
var PrivateKey = imports.PrivateKey || require('./PrivateKey');
|
var PrivateKey = imports.PrivateKey || require('./PrivateKey');
|
||||||
|
|
|
@ -82,10 +82,10 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
var Address = imports.Address || require('./Address');
|
var Address = imports.Address || require('./Address');
|
||||||
var Script = imports.Script || require('./Script');
|
var Script = imports.Script || require('./Script');
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var bignum = imports.bignum || require('bignum');
|
var bignum = imports.bignum || require('bignum');
|
||||||
var buffertools = imports.buffertools || require('buffertools');
|
var buffertools = imports.buffertools || require('buffertools');
|
||||||
var networks = imports.networks || require('./networks');
|
var networks = imports.networks || require('../networks');
|
||||||
var WalletKey = imports.WalletKey || require('./WalletKey');
|
var WalletKey = imports.WalletKey || require('./WalletKey');
|
||||||
var PrivateKey = imports.PrivateKey || require('./PrivateKey');
|
var PrivateKey = imports.PrivateKey || require('./PrivateKey');
|
||||||
|
|
|
@ -3,10 +3,10 @@ var imports = require('soop').imports();
|
||||||
var hex = function(hex) {return new Buffer(hex, 'hex');};
|
var hex = function(hex) {return new Buffer(hex, 'hex');};
|
||||||
|
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var EncFile = require('./util/EncFile');
|
var EncFile = require('../util/EncFile');
|
||||||
var Address = require('./Address');
|
var Address = require('./Address');
|
||||||
var networks = require('./networks');
|
var networks = require('../networks');
|
||||||
var util = imports.util || require('./util/util');
|
var util = imports.util || require('../util');
|
||||||
var ENC_METHOD = 'aes-256-cbc';
|
var ENC_METHOD = 'aes-256-cbc';
|
||||||
|
|
||||||
var skeleton = {
|
var skeleton = {
|
|
@ -1,7 +1,7 @@
|
||||||
var imports = require('soop').imports();
|
var imports = require('soop').imports();
|
||||||
|
|
||||||
var coinUtil = require('./util/util');
|
var coinUtil = require('../util');
|
||||||
var timeUtil = require('./util/time');
|
var timeUtil = require('../util/time');
|
||||||
var Key = require('./Key');
|
var Key = require('./Key');
|
||||||
var PrivateKey = require('./PrivateKey');
|
var PrivateKey = require('./PrivateKey');
|
||||||
var Address = require('./Address');
|
var Address = require('./Address');
|
|
@ -25,6 +25,7 @@
|
||||||
<script src="test/test.EncodedData.js"></script>
|
<script src="test/test.EncodedData.js"></script>
|
||||||
<script src="test/test.Key.js"></script>
|
<script src="test/test.Key.js"></script>
|
||||||
<script src="test/test.main.js"></script>
|
<script src="test/test.main.js"></script>
|
||||||
|
<script src="test/test.Message.js"></script>
|
||||||
<script src="test/test.misc.js"></script>
|
<script src="test/test.misc.js"></script>
|
||||||
<script src="test/test.Opcode.js"></script>
|
<script src="test/test.Opcode.js"></script>
|
||||||
<script src="test/test.Peer.js"></script>
|
<script src="test/test.Peer.js"></script>
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
<script src="test.EncodedData.js"></script>
|
<script src="test.EncodedData.js"></script>
|
||||||
<script src="test.Key.js"></script>
|
<script src="test.Key.js"></script>
|
||||||
<script src="test.main.js"></script>
|
<script src="test.main.js"></script>
|
||||||
|
<script src="test.Message.js"></script>
|
||||||
<script src="test.misc.js"></script>
|
<script src="test.misc.js"></script>
|
||||||
<script src="test.Opcode.js"></script>
|
<script src="test.Opcode.js"></script>
|
||||||
<script src="test.Peer.js"></script>
|
<script src="test.Peer.js"></script>
|
||||||
|
|
|
@ -119,6 +119,13 @@ describe('Address', function() {
|
||||||
var addr = Address.fromScript(script);
|
var addr = Address.fromScript(script);
|
||||||
var addr2 = Address.fromPubKeys(mReq, pubKeys);
|
var addr2 = Address.fromPubKeys(mReq, pubKeys);
|
||||||
addr.toString().should.equal(addr2.toString());
|
addr.toString().should.equal(addr2.toString());
|
||||||
|
|
||||||
|
// Same case, using HEX
|
||||||
|
var scriptHex = bitcore.Script.createMultisig(mReq, pubKeys).getBuffer().toString('hex');
|
||||||
|
var addrB = Address.fromScript(scriptHex);
|
||||||
|
var addr2B = Address.fromPubKeys(mReq, pubKeys);
|
||||||
|
addrB.toString().should.equal(addr2B.toString());
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('it should make this hand-crafted address', function() {
|
it('it should make this hand-crafted address', function() {
|
||||||
|
@ -138,4 +145,40 @@ describe('Address', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('#fromScriptPubKey', function() {
|
||||||
|
|
||||||
|
// All examples checked againt bitcoind decodescript
|
||||||
|
var cases = [
|
||||||
|
['76a91423b7530a00dd7951e11791c529389421c0b8d83b88ac', 'mimoZNLcP2rrMRgdeX5PSnR7AjCqQveZZ4'],
|
||||||
|
['a9147049be48e74a660157da3ed64569981592f7fa0587','2N3Ux1YTnt1ixofYvJfaabqZSj2MBF3jsmv'],
|
||||||
|
['76a914774e603bafb717bd3f070e68bbcccfd907c77d1388ac', 'mrPnbY1yKDBsdgbHbS7kJ8GVm8F66hWHLE'],
|
||||||
|
['76a914b00127584485a7cff0949ef0f6bc5575f06ce00d88ac', 'mwZabyZXg8JzUtFX1pkGygsMJjnuqiNhgd'],
|
||||||
|
['532103bf025eb410407aec5a67c975ce222e363bb88c69bb1acce45d20d85602df2ec52103d76dd6d99127f4b733e772f0c0a09c573ac7e4d69b8bf50272292da2e093de2c2103dd9acd8dd1816c825d6b0739339c171ae2cb10efb53699680537865b07086e9b2102371cabbaf466c3a536034b4bda64ad515807bffd87488f44f93c2373d4d189c9210264cd444358f8d57f8637a7309f9736806f4883aebc4fe7da4bad1e4b37f2d12c55ae', [
|
||||||
|
"n4JAZc4cJimQbky5wxZUEDeAFZtGaZrjWK",
|
||||||
|
"msge5muNmBSRDn5nsaRcHCU6dg2zimA8wQ",
|
||||||
|
"mvz9MjocpyXdgXqRcZYazsdE8iThdvjdhk",
|
||||||
|
"miQGZ2gybQe7UvUQDBYsgcctUteij5pTpm",
|
||||||
|
"mu9kmhGrzREKsWaXUEUrsRLLMG4UMPy1LF"
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
|
for(var i in cases){
|
||||||
|
var c=cases[i];
|
||||||
|
it('it should generate the right address', function(){
|
||||||
|
if (typeof c[1] === 'string') {
|
||||||
|
(new Address.fromScriptPubKey(c[0],'testnet')).toString().should.equal(c[1]);
|
||||||
|
var s = new bitcore.Script(new Buffer(c[0],'hex'));
|
||||||
|
(new Address.fromScriptPubKey(s,'testnet')).toString().should.equal(c[1]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var as=new Address.fromScriptPubKey(c[0],'testnet');
|
||||||
|
for(var j in as){
|
||||||
|
as[j].toString().should.equal(c[1][j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var chai = chai || require('chai');
|
||||||
|
var should = chai.should();
|
||||||
|
var bitcore = bitcore || require('../bitcore');
|
||||||
|
var Message = bitcore.Message;
|
||||||
|
var coinUtil = bitcore.util;
|
||||||
|
|
||||||
|
describe('Message', function() {
|
||||||
|
describe('sign', function() {
|
||||||
|
it('should return a signature', function() {
|
||||||
|
var key = bitcore.Key.generateSync();
|
||||||
|
var sig = Message.sign('my message', key);
|
||||||
|
sig.length.should.be.greaterThan(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('verifyWithPubKey', function() {
|
||||||
|
it('should verify a signed message', function() {
|
||||||
|
var message = 'my message';
|
||||||
|
var key = bitcore.Key.generateSync();
|
||||||
|
var sig = Message.sign(message, key);
|
||||||
|
Message.verifyWithPubKey(key.public, message, sig).should.equal(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('magicBytes', function() {
|
||||||
|
it('should be "Bitcoin Signed Message:\\n"', function() {
|
||||||
|
Message.magicBytes.toString().should.equal('Bitcoin Signed Message:\n');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('magicHash', function() {
|
||||||
|
it('should hash the message with the magic bytes', function() {
|
||||||
|
var str = 'my message';
|
||||||
|
var magicBytes = Message.magicBytes;
|
||||||
|
var prefix1 = coinUtil.varIntBuf(magicBytes.length);
|
||||||
|
var message = new Buffer(str);
|
||||||
|
var prefix2 = coinUtil.varIntBuf(message.length);
|
||||||
|
|
||||||
|
var buf = Buffer.concat([prefix1, magicBytes, prefix2, message]);
|
||||||
|
|
||||||
|
var hash = coinUtil.twoSha256(buf);
|
||||||
|
|
||||||
|
var hash2 = Message.magicHash(str);
|
||||||
|
|
||||||
|
hash.toString().should.equal(hash2.toString());
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should hash this message the same way as bitcoinjs-lib', function() {
|
||||||
|
var hashHex = '74eacdc6c04724869380907bf4aab561a1494a4a800fba266b29b8158c2c4cec';
|
||||||
|
|
||||||
|
var str = 'this is a test message';
|
||||||
|
hashHex.should.equal(Message.magicHash(str).toString('hex'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1 @@
|
||||||
|
module.exports = require('./util');
|
Loading…
Reference in New Issue