This commit is contained in:
parent
635b2d8343
commit
2bf9c4da48
|
@ -19,10 +19,12 @@ var TxProposal = require('./model/txproposal');
|
|||
/**
|
||||
* Creates an instance of the Copay server.
|
||||
* @constructor
|
||||
* @param {Object} opts
|
||||
* @param {Storage} [opts.storage] - The storage provider.
|
||||
*/
|
||||
function CopayServer(opts) {
|
||||
opts = opts || {};
|
||||
this.storage = new Storage(opts);
|
||||
this.storage = opts.storage || new Storage();
|
||||
};
|
||||
|
||||
|
||||
|
@ -81,7 +83,7 @@ CopayServer.prototype.createWallet = function (opts, cb) {
|
|||
};
|
||||
|
||||
|
||||
CopayServer.prototype.runLocked = function (walletId, cb, task) {
|
||||
CopayServer.prototype._runLocked = function (walletId, cb, task) {
|
||||
var self = this;
|
||||
|
||||
Lock.get(walletId, function (lock) {
|
||||
|
@ -105,13 +107,12 @@ CopayServer.prototype.runLocked = function (walletId, cb, task) {
|
|||
CopayServer.prototype.joinWallet = function (opts, cb) {
|
||||
var self = this;
|
||||
|
||||
self.runLocked(opts.walletId, cb, function (cb) {
|
||||
self._runLocked(opts.walletId, cb, function (cb) {
|
||||
self.getWallet({ id: opts.walletId, includeCopayers: true }, function (err, wallet) {
|
||||
if (err) return cb(err);
|
||||
if (!wallet) return cb('Wallet not found');
|
||||
if (_.find(wallet.copayers, { xPubKey: opts.xPubKey })) return cb('Copayer already in wallet');
|
||||
if (wallet.copayers.length == wallet.n) return cb('Wallet full');
|
||||
|
||||
// TODO: validate copayer's extended public key using the public key from this wallet
|
||||
// Note: use Bitcore.crypto.ecdsa .verify()
|
||||
|
||||
|
@ -149,19 +150,21 @@ CopayServer.prototype._doCreateAddress = function (pkr, index, isChange) {
|
|||
CopayServer.prototype.createAddress = function (opts, cb) {
|
||||
var self = this;
|
||||
|
||||
self.getWallet({ id: opts.walletId }, function (err, wallet) {
|
||||
if (err) return cb(err);
|
||||
if (!wallet) return cb('Wallet not found');
|
||||
|
||||
var index = wallet.addressIndex++;
|
||||
self.storage.storeWallet(wallet, function (err) {
|
||||
self._runLocked(opts.walletId, cb, function (cb) {
|
||||
self.getWallet({ id: opts.walletId }, function (err, wallet) {
|
||||
if (err) return cb(err);
|
||||
if (!wallet) return cb('Wallet not found');
|
||||
|
||||
var address = self._doCreateAddress(wallet.publicKeyRing, index, opts.isChange);
|
||||
self.storage.storeAddress(opts.walletId, address, function (err) {
|
||||
var index = wallet.addressIndex++;
|
||||
self.storage.storeWallet(wallet, function (err) {
|
||||
if (err) return cb(err);
|
||||
|
||||
return cb(null, address);
|
||||
var address = self._doCreateAddress(wallet.publicKeyRing, index, opts.isChange);
|
||||
self.storage.storeAddress(opts.walletId, address, function (err) {
|
||||
if (err) return cb(err);
|
||||
|
||||
return cb(null, address);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -9,23 +9,26 @@ var should = chai.should();
|
|||
var levelup = require('levelup');
|
||||
var memdown = require('memdown');
|
||||
|
||||
var Storage = require('../lib/storage');
|
||||
|
||||
var Wallet = require('../lib/model/wallet');
|
||||
var Address = require('../lib/model/address');
|
||||
var Copayer = require('../lib/model/copayer');
|
||||
var CopayServer = require('../lib/server');
|
||||
|
||||
var db;
|
||||
var db, storage;
|
||||
var server;
|
||||
|
||||
describe('Copay server', function() {
|
||||
beforeEach(function() {
|
||||
db = levelup(memdown, { valueEncoding: 'json' });
|
||||
storage = new Storage({ db: db });
|
||||
});
|
||||
|
||||
describe('#getWallet', function() {
|
||||
beforeEach(function() {
|
||||
server = new CopayServer({
|
||||
db: db,
|
||||
storage: storage,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -102,7 +105,7 @@ describe('Copay server', function() {
|
|||
describe('#createWallet', function() {
|
||||
beforeEach(function() {
|
||||
server = new CopayServer({
|
||||
db: db,
|
||||
storage: storage,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -151,7 +154,7 @@ describe('Copay server', function() {
|
|||
describe('#joinWallet', function() {
|
||||
beforeEach(function() {
|
||||
server = new CopayServer({
|
||||
db: db,
|
||||
storage: storage,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -324,7 +327,7 @@ describe('Copay server', function() {
|
|||
describe('#createAddress', function() {
|
||||
beforeEach(function() {
|
||||
server = new CopayServer({
|
||||
db: db,
|
||||
storage: storage,
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -345,7 +348,7 @@ describe('Copay server', function() {
|
|||
describe('#createTx', function() {
|
||||
beforeEach(function(done) {
|
||||
server = new CopayServer({
|
||||
db: db,
|
||||
storage: storage,
|
||||
});
|
||||
server._doCreateAddress = sinon.stub().returns(new Address({ address: 'addr1', path: 'path1' }));
|
||||
helpers.createAndJoinWallet('123', 2, 2, function (err, wallet) {
|
||||
|
|
Loading…
Reference in New Issue