diff --git a/js/controllers/send.js b/js/controllers/send.js index 07bbfbb53..5a78389cc 100644 --- a/js/controllers/send.js +++ b/js/controllers/send.js @@ -52,8 +52,7 @@ angular.module('copay.send').controller('SendController', var amount = (form.amount.$modelValue * 100000000).toString(); // satoshi to string var w = $rootScope.wallet; - w.createTx( address, amount,function() { - + w.createTx(address, amount,function() { $scope.loading = false; $rootScope.$flashMessage = { message: 'The transaction proposal has been created', type: 'success'}; $rootScope.$digest(); diff --git a/js/models/core/Wallet.js b/js/models/core/Wallet.js index 58008ae79..42c754037 100644 --- a/js/models/core/Wallet.js +++ b/js/models/core/Wallet.js @@ -20,7 +20,8 @@ function Wallet(opts) { 'requiredCopayers', 'totalCopayers', 'spendUnconfirmed', 'publicKeyRing', 'txProposals', 'privateKey', 'version' ].forEach(function(k) { - if (typeof opts[k] === 'undefined') throw new Error('missing key:' + k); + if (typeof opts[k] === 'undefined') + throw new Error('missing required option for Wallet: ' + k); self[k] = opts[k]; }); @@ -544,6 +545,8 @@ Wallet.prototype.getUnspent = function(cb) { Wallet.prototype.createTx = function(toAddress, amountSatStr, opts, cb) { var self = this; + alert(amountSatStr); + alert(JSON.stringify(opts)); if (typeof opts === 'function') { cb = opts; opts = {}; diff --git a/js/models/core/WalletFactory.js b/js/models/core/WalletFactory.js index fc7f0ee77..602d8c3a2 100644 --- a/js/models/core/WalletFactory.js +++ b/js/models/core/WalletFactory.js @@ -17,6 +17,8 @@ var Wallet = require('./Wallet'); function WalletFactory(config, version) { var self = this; + config = config || {}; + this.storage = new Storage(config.storage); this.network = new Network(config.network); this.blockchain = new Blockchain(config.blockchain); @@ -97,7 +99,6 @@ WalletFactory.prototype.create = function(opts) { opts.privateKey = opts.privateKey || new PrivateKey({ networkName: this.networkName }); - var requiredCopayers = opts.requiredCopayers || this.walletDefaults.requiredCopayers; var totalCopayers = opts.totalCopayers || this.walletDefaults.totalCopayers; @@ -124,7 +125,7 @@ WalletFactory.prototype.create = function(opts) { opts.spendUnconfirmed = opts.spendUnconfirmed || this.walletDefaults.spendUnconfirmed; opts.requiredCopayers = requiredCopayers; opts.totalCopayers = totalCopayers; - opts.version = this.version; + opts.version = opts.version || this.version; var w = new Wallet(opts); w.store(); return w; diff --git a/test/find_m_n.js b/test/find_m_n.js new file mode 100755 index 000000000..678a3d5dd --- /dev/null +++ b/test/find_m_n.js @@ -0,0 +1,65 @@ +#!/usr/bin/env node + +'use strict'; + +var bitcore = require('bitcore'); +var PublicKeyRing = require('../js/models/core/PublicKeyRing'); +var PrivateKey = require('../js/models/core/PrivateKey'); + +var FakeNetwork = require('./mocks/FakeNetwork'); +var Insight = require('../js/models/blockchain/Insight'); +var FakeStorage = require('./mocks/FakeStorage'); + +var WalletFactory = require('soop').load('../js/models/core/WalletFactory', { + Network: FakeNetwork, + Blockchain: Insight, + Storage: FakeStorage, +}); +var Key = bitcore.Key; + + +var N_LIMIT = 16; +var nn = 'livenet'; + +for (var n = 1; n < N_LIMIT; n++) { + for (var m = 1; m <= n; m++) { + // case m-of-n + console.log('case '+m+'-of-'+n); + // create full pkr + var publicKeyRing = new PublicKeyRing({ + networkName: nn, + requiredCopayers: m, + totalCopayers: n, + }); + var privateKey = null; + for (var i = 0; i < n; i++) { + var pk = new PrivateKey({ + networkName: nn + }); + if (i === 0) { + privateKey = pk; + } else { + publicKeyRing.addCopayer(pk.getExtendedPublicKeyString(), 'dummy'); + } + } + + var opts = {}; + opts.publicKeyRing = publicKeyRing; + opts.privateKey = privateKey; + opts.requiredCopayers = m; + opts.totalCopayers = n; + opts.spendUnconfirmed = true; + opts.version = 'script' + + var w = new WalletFactory(opts).create(opts); + var addr = w.generateAddress(); + console.log('\t receive addr='+addr); + + + var toAddress = 'msj42CCGruhRsFrGATiUuh25dtxYtnpbTx'; + var amount = '5000000'; + + + + } +}