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('bufferput', 'bufferput');
|
||||
requireWhenAccessed('buffertools', 'buffertools');
|
||||
requireWhenAccessed('Buffers.monkey', './Buffers.monkey');
|
||||
requireWhenAccessed('Buffers.monkey', './patches/Buffers.monkey');
|
||||
requireWhenAccessed('config', './config');
|
||||
requireWhenAccessed('const', './const');
|
||||
requireWhenAccessed('Deserialize', './Deserialize');
|
||||
requireWhenAccessed('Deserialize', './lib/Deserialize');
|
||||
requireWhenAccessed('log', './util/log');
|
||||
requireWhenAccessed('networks', './networks');
|
||||
requireWhenAccessed('util', './util/util');
|
||||
requireWhenAccessed('EncodedData', './util/EncodedData');
|
||||
requireWhenAccessed('VersionedData', './util/VersionedData');
|
||||
requireWhenAccessed('BinaryParser', './util/BinaryParser');
|
||||
requireWhenAccessed('Address', './Address');
|
||||
requireWhenAccessed('BIP32', './BIP32');
|
||||
requireWhenAccessed('Point', './Point');
|
||||
requireWhenAccessed('Opcode', './Opcode');
|
||||
requireWhenAccessed('Script', './Script');
|
||||
requireWhenAccessed('Transaction', './Transaction');
|
||||
requireWhenAccessed('TransactionBuilder', './TransactionBuilder');
|
||||
requireWhenAccessed('Connection', './Connection');
|
||||
requireWhenAccessed('Peer', './Peer');
|
||||
requireWhenAccessed('Block', './Block');
|
||||
requireWhenAccessed('ScriptInterpreter', './ScriptInterpreter');
|
||||
requireWhenAccessed('Bloom', './Bloom');
|
||||
requireWhenAccessed('Key', './Key');
|
||||
requireWhenAccessed('Address', './lib/Address');
|
||||
requireWhenAccessed('BIP32', './lib/BIP32');
|
||||
requireWhenAccessed('Point', './lib/Point');
|
||||
requireWhenAccessed('Opcode', './lib/Opcode');
|
||||
requireWhenAccessed('Script', './lib/Script');
|
||||
requireWhenAccessed('Transaction', './lib/Transaction');
|
||||
requireWhenAccessed('TransactionBuilder', './lib/TransactionBuilder');
|
||||
requireWhenAccessed('Connection', './lib/Connection');
|
||||
requireWhenAccessed('Peer', './lib/Peer');
|
||||
requireWhenAccessed('Block', './lib/Block');
|
||||
requireWhenAccessed('ScriptInterpreter', './lib/ScriptInterpreter');
|
||||
requireWhenAccessed('Bloom', './lib/Bloom');
|
||||
requireWhenAccessed('Key', './lib/Key');
|
||||
Object.defineProperty(module.exports, 'KeyModule', {get: function() {
|
||||
console.log('KeyModule is deprecated.');
|
||||
return require('bindings')('KeyModule');
|
||||
}});
|
||||
requireWhenAccessed('SINKey', './SINKey');
|
||||
requireWhenAccessed('SIN', './SIN');
|
||||
requireWhenAccessed('PrivateKey', './PrivateKey');
|
||||
requireWhenAccessed('RpcClient', './RpcClient');
|
||||
requireWhenAccessed('Wallet', './Wallet');
|
||||
requireWhenAccessed('WalletKey', './WalletKey');
|
||||
requireWhenAccessed('PeerManager', './PeerManager');
|
||||
requireWhenAccessed('SINKey', './lib/SINKey');
|
||||
requireWhenAccessed('SIN', './lib/SIN');
|
||||
requireWhenAccessed('PrivateKey', './lib/PrivateKey');
|
||||
requireWhenAccessed('RpcClient', './lib/RpcClient');
|
||||
requireWhenAccessed('Wallet', './lib/Wallet');
|
||||
requireWhenAccessed('WalletKey', './lib/WalletKey');
|
||||
requireWhenAccessed('PeerManager', './lib/PeerManager');
|
||||
requireWhenAccessed('Message', './lib/Message');
|
||||
module.exports.Buffer = Buffer;
|
||||
|
||||
if (typeof process.versions === 'undefined') {
|
||||
|
|
|
@ -23,31 +23,32 @@ var pack = function (params) {
|
|||
};
|
||||
|
||||
var modules = [
|
||||
'Address',
|
||||
'BIP32',
|
||||
'Block',
|
||||
'Bloom',
|
||||
'Buffers.monkey',
|
||||
'Connection',
|
||||
'Deserialize',
|
||||
'Gruntfile',
|
||||
'Number.monkey',
|
||||
'Opcode',
|
||||
'Peer',
|
||||
'PeerManager',
|
||||
'PrivateKey',
|
||||
'RpcClient',
|
||||
'Key',
|
||||
'Point',
|
||||
'SIN',
|
||||
'SINKey',
|
||||
'Script',
|
||||
'ScriptInterpreter',
|
||||
'Sign',
|
||||
'Transaction',
|
||||
'TransactionBuilder',
|
||||
'Wallet',
|
||||
'WalletKey',
|
||||
'lib/Address',
|
||||
'lib/BIP32',
|
||||
'lib/Block',
|
||||
'lib/Bloom',
|
||||
'lib/Connection',
|
||||
'lib/Deserialize',
|
||||
'lib/Message',
|
||||
'lib/Opcode',
|
||||
'lib/Peer',
|
||||
'lib/PeerManager',
|
||||
'lib/PrivateKey',
|
||||
'lib/RpcClient',
|
||||
'lib/Key',
|
||||
'lib/Point',
|
||||
'lib/SIN',
|
||||
'lib/SINKey',
|
||||
'lib/Script',
|
||||
'lib/ScriptInterpreter',
|
||||
'lib/Sign',
|
||||
'lib/Transaction',
|
||||
'lib/TransactionBuilder',
|
||||
'lib/Wallet',
|
||||
'lib/WalletKey',
|
||||
'patches/Buffers.monkey',
|
||||
'patches/Number.monkey',
|
||||
'config',
|
||||
'const',
|
||||
'networks',
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
var PeerManager = require('../PeerManager');
|
||||
var PeerManager = require('../lib/PeerManager');
|
||||
var peerman = new PeerManager();
|
||||
|
||||
peerman.discoverPeers(function(err, peers) {
|
||||
|
|
|
@ -4,6 +4,7 @@ var run = function() {
|
|||
// Replace '../bitcore' with 'bitcore' if you use this code elsewhere.
|
||||
var bitcore = require('../bitcore');
|
||||
var Peer = bitcore.Peer;
|
||||
|
||||
var TransactionBuilder = bitcore.TransactionBuilder;
|
||||
var PeerManager = bitcore.PeerManager;
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
'use strict';
|
||||
var imports = require('soop').imports();
|
||||
var coinUtil = imports.coinUtil || require('./util/util');
|
||||
var parent = imports.parent || require('./util/VersionedData');
|
||||
var networks = imports.networks || require('./networks');
|
||||
var coinUtil = imports.coinUtil || require('../util');
|
||||
var parent = imports.parent || require('../util/VersionedData');
|
||||
var networks = imports.networks || require('../networks');
|
||||
var Script = imports.Script || require('./Script');
|
||||
|
||||
function Address() {
|
||||
|
@ -47,6 +47,10 @@ Address.fromScript = function(script, network) {
|
|||
if (!network)
|
||||
network = 'livenet';
|
||||
|
||||
if (typeof script === 'string') {
|
||||
script = new Script(new Buffer(script,'hex'));
|
||||
}
|
||||
|
||||
var version = networks[network].P2SHVersion;
|
||||
var buf = script.getBuffer();
|
||||
var hash = coinUtil.sha256ripe160(buf);
|
||||
|
@ -54,6 +58,45 @@ Address.fromScript = function(script, network) {
|
|||
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() {
|
||||
this.doAsBinary(function() {
|
||||
Address.super(this, 'validate', arguments);
|
|
@ -1,11 +1,11 @@
|
|||
var imports = require('soop').imports();
|
||||
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 Point = imports.Point || require('./Point');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var crypto = require('crypto');
|
||||
var networks = require('./networks');
|
||||
var networks = require('../networks');
|
||||
|
||||
var secp256k1_n = new bignum("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16);
|
||||
var secp256k1_Gx = new bignum("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", 16);
|
|
@ -1,6 +1,6 @@
|
|||
var imports = require('soop').imports();
|
||||
|
||||
var util = imports.util || require('./util/util');
|
||||
var util = imports.util || require('../util');
|
||||
var Debug1 = imports.Debug1 || function() {};
|
||||
var Script = imports.Script || require('./Script');
|
||||
var Bignum = imports.Bignum || require('bignum');
|
||||
|
@ -11,7 +11,7 @@ var Transaction = imports.Transaction || require('./Transaction');
|
|||
var TransactionIn = Transaction.In;
|
||||
var TransactionOut = Transaction.Out;
|
||||
var COINBASE_OP = Transaction.COINBASE_OP;
|
||||
var VerificationError = imports.VerificationError || require('./util/error').VerificationError;
|
||||
var VerificationError = imports.VerificationError || require('../util/error').VerificationError;
|
||||
var BlockRules = {
|
||||
maxTimeOffset: 2 * 60 * 60, // How far block timestamps can be into the future
|
||||
largestHash: Bignum(2).pow(256)
|
|
@ -1,20 +1,20 @@
|
|||
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 PROTOCOL_VERSION = 70000;
|
||||
|
||||
var Put = imports.Put || require('bufferput');
|
||||
var Buffers = imports.Buffers || require('buffers');
|
||||
require('./Buffers.monkey').patch(Buffers);
|
||||
require('../patches/Buffers.monkey').patch(Buffers);
|
||||
|
||||
var bitcoreDefaults = imports.config || require('./config');
|
||||
var networks = imports.networks || require('./networks');
|
||||
var bitcoreDefaults = imports.config || require('../config');
|
||||
var networks = imports.networks || require('../networks');
|
||||
var Block = imports.Block || require('./Block');
|
||||
var Transaction = imports.Transaction || require('./Transaction');
|
||||
var util = imports.util || require('./util/util');
|
||||
var Parser = imports.Parser || require('./util/BinaryParser');
|
||||
var util = imports.util || require('../util');
|
||||
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
var doubleSha256 = imports.doubleSha256 || util.twoSha256;
|
||||
var nonce = util.generateNonce();
|
|
@ -7,7 +7,7 @@ if (process.versions) {
|
|||
module.exports = Key;
|
||||
} else {
|
||||
// pure js version
|
||||
var ECKey = require('./browser/vendor-bundle.js').ECKey;
|
||||
var ECKey = require('../browser/vendor-bundle.js').ECKey;
|
||||
var buffertools = require('buffertools');
|
||||
|
||||
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 extend = imports.extend || require('extend');
|
||||
var log = imports.log || require('./util/log');
|
||||
var bitcoreDefaults = imports.config || require('./config');
|
||||
var log = imports.log || require('../util/log');
|
||||
var bitcoreDefaults = imports.config || require('../config');
|
||||
var Connection = imports.Connection || require ('./Connection');
|
||||
|
||||
var Peer = imports.Peer || require('./Peer');
|
||||
|
@ -217,7 +216,7 @@ PeerManager.prototype.discoverPeers = function(callback) {
|
|||
var self = this;
|
||||
var async = imports.async || require('async');
|
||||
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;
|
||||
|
||||
// keep track of tried seeds and results
|
|
@ -7,11 +7,11 @@ var assert = require('assert');
|
|||
|
||||
//browser
|
||||
if (!process.versions) {
|
||||
var ECKey = require('./browser/vendor-bundle.js').ECKey;
|
||||
var ECPointFp = require('./browser/vendor-bundle.js').ECPointFp;
|
||||
var ECFieldElementFp = require('./browser/vendor-bundle.js').ECFieldElementFp;
|
||||
var getSECCurveByName = require('./browser/vendor-bundle.js').getSECCurveByName;
|
||||
var BigInteger = require('./browser/vendor-bundle.js').BigInteger;
|
||||
var ECKey = require('../browser/vendor-bundle.js').ECKey;
|
||||
var ECPointFp = require('../browser/vendor-bundle.js').ECPointFp;
|
||||
var ECFieldElementFp = require('../browser/vendor-bundle.js').ECFieldElementFp;
|
||||
var getSECCurveByName = require('../browser/vendor-bundle.js').getSECCurveByName;
|
||||
var BigInteger = require('../browser/vendor-bundle.js').BigInteger;
|
||||
var should = require('chai').should();
|
||||
}
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
var imports = require('soop').imports();
|
||||
|
||||
var parent = imports.parent || require('./util/VersionedData');
|
||||
var networks= imports.networks || require('./networks');
|
||||
var parent = imports.parent || require('../util/VersionedData');
|
||||
var networks= imports.networks || require('../networks');
|
||||
|
||||
//compressed is true if public key is compressed; false otherwise
|
||||
function PrivateKey(version, buf, compressed) {
|
|
@ -5,7 +5,7 @@
|
|||
var imports = require('soop').imports();
|
||||
var http = imports.http || require('http');
|
||||
var https = imports.https || require('https');
|
||||
var log = imports.log || require('./util/log');
|
||||
var log = imports.log || require('../util/log');
|
||||
|
||||
function RpcClient(opts) {
|
||||
opts = opts || {};
|
|
@ -1,5 +1,5 @@
|
|||
var imports = require('soop').imports();
|
||||
var parent = imports.parent || require('./util/VersionedData');
|
||||
var parent = imports.parent || require('../util/VersionedData');
|
||||
|
||||
function SIN(type, payload) {
|
||||
if (typeof type != 'number') {
|
|
@ -1,5 +1,5 @@
|
|||
var coinUtil = require('./util/util');
|
||||
var timeUtil = require('./util/time');
|
||||
var coinUtil = require('../util');
|
||||
var timeUtil = require('../util/time');
|
||||
var Key = require('./Key');
|
||||
var SIN = require('./SIN');
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
var imports = require('soop').imports();
|
||||
var config = imports.config || require('./config');
|
||||
var log = imports.log || require('./util/log');
|
||||
var config = imports.config || require('../config');
|
||||
var log = imports.log || require('../util/log');
|
||||
var Opcode = imports.Opcode || require('./Opcode');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
|
||||
|
@ -9,8 +9,8 @@ for (var i in Opcode.map) {
|
|||
eval(i + " = " + Opcode.map[i] + ";");
|
||||
}
|
||||
|
||||
var util = imports.util || require('./util/util');
|
||||
var Parser = imports.Parser || require('./util/BinaryParser');
|
||||
var util = imports.util || require('../util/util');
|
||||
var Parser = imports.Parser || require('../util/BinaryParser');
|
||||
var Put = imports.Put || require('bufferput');
|
||||
|
||||
var TX_UNKNOWN = 0;
|
|
@ -1,11 +1,11 @@
|
|||
var imports = require('soop').imports();
|
||||
var config = imports.config || require('./config');
|
||||
var log = imports.log || require('./util/log');
|
||||
var util = imports.util || require('./util/util');
|
||||
var config = imports.config || require('../config');
|
||||
var log = imports.log || require('../util/log');
|
||||
var util = imports.util || require('../util');
|
||||
var Opcode = imports.Opcode || require('./Opcode');
|
||||
var buffertools = imports.buffertools || require('buffertools');
|
||||
var bignum = imports.bignum || require('bignum');
|
||||
var Util = imports.Util || require('./util/util');
|
||||
var Util = imports.Util || require('../util');
|
||||
var Script = require('./Script');
|
||||
var Key = require('./Key');
|
||||
|
|
@ -1,17 +1,17 @@
|
|||
var imports = require('soop').imports();
|
||||
var config = imports.config || require('./config');
|
||||
var log = imports.log || require('./util/log');
|
||||
var config = imports.config || require('../config');
|
||||
var log = imports.log || require('../util/log');
|
||||
var Address = imports.Address || require('./Address');
|
||||
var Script = imports.Script || require('./Script');
|
||||
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 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 buffertools = imports.buffertools || require('buffertools');
|
||||
var error = imports.error || require('./util/error');
|
||||
var networks = imports.networks || require('./networks');
|
||||
var error = imports.error || require('../util/error');
|
||||
var networks = imports.networks || require('../networks');
|
||||
var WalletKey = imports.WalletKey || require('./WalletKey');
|
||||
var PrivateKey = imports.PrivateKey || require('./PrivateKey');
|
||||
|
|
@ -82,10 +82,10 @@
|
|||
var imports = require('soop').imports();
|
||||
var Address = imports.Address || require('./Address');
|
||||
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 buffertools = imports.buffertools || require('buffertools');
|
||||
var networks = imports.networks || require('./networks');
|
||||
var networks = imports.networks || require('../networks');
|
||||
var WalletKey = imports.WalletKey || require('./WalletKey');
|
||||
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 fs = require('fs');
|
||||
var EncFile = require('./util/EncFile');
|
||||
var EncFile = require('../util/EncFile');
|
||||
var Address = require('./Address');
|
||||
var networks = require('./networks');
|
||||
var util = imports.util || require('./util/util');
|
||||
var networks = require('../networks');
|
||||
var util = imports.util || require('../util');
|
||||
var ENC_METHOD = 'aes-256-cbc';
|
||||
|
||||
var skeleton = {
|
|
@ -1,7 +1,7 @@
|
|||
var imports = require('soop').imports();
|
||||
|
||||
var coinUtil = require('./util/util');
|
||||
var timeUtil = require('./util/time');
|
||||
var coinUtil = require('../util');
|
||||
var timeUtil = require('../util/time');
|
||||
var Key = require('./Key');
|
||||
var PrivateKey = require('./PrivateKey');
|
||||
var Address = require('./Address');
|
|
@ -25,6 +25,7 @@
|
|||
<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.Message.js"></script>
|
||||
<script src="test/test.misc.js"></script>
|
||||
<script src="test/test.Opcode.js"></script>
|
||||
<script src="test/test.Peer.js"></script>
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
<script src="test.EncodedData.js"></script>
|
||||
<script src="test.Key.js"></script>
|
||||
<script src="test.main.js"></script>
|
||||
<script src="test.Message.js"></script>
|
||||
<script src="test.misc.js"></script>
|
||||
<script src="test.Opcode.js"></script>
|
||||
<script src="test.Peer.js"></script>
|
||||
|
|
|
@ -119,6 +119,13 @@ describe('Address', function() {
|
|||
var addr = Address.fromScript(script);
|
||||
var addr2 = Address.fromPubKeys(mReq, pubKeys);
|
||||
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() {
|
||||
|
@ -137,5 +144,41 @@ describe('Address', function() {
|
|||
addr.toString().should.equal(addr2.toString());
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
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