Skip to content

Commit

Permalink
Changes over import keys to use the new worker threads #319
Browse files Browse the repository at this point in the history
  • Loading branch information
James Calfee committed Oct 20, 2015
1 parent a7984e6 commit 7a27005
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 192 deletions.
17 changes: 0 additions & 17 deletions dl/src/actions/ImportKeysActions.js

This file was deleted.

4 changes: 1 addition & 3 deletions dl/src/alt-instance.js
@@ -1,9 +1,7 @@
var Alt = require("alt");
var alt = new Alt();


// DEBUG log all action events
// https://github.com/goatslacker/alt/issues/516
// alt.dispatcher.register('alt.dispatcher', console.log.bind(console))
alt.dispatcher.register(console.log.bind(console, 'alt.dispatcher'))

module.exports = alt;
62 changes: 31 additions & 31 deletions dl/src/stores/AddressIndex.js
Expand Up @@ -47,39 +47,39 @@ class AddressIndex extends BaseStore {

/** Worker thread implementation (for more than 10K keys) */
addAll(pubkeys) {
console.log("addAll");
this.saving()
this.loadAddyMap().then( () => {
var AddressIndexWorker = require("worker!workers/AddressIndexWorker")
var worker = new AddressIndexWorker
worker.postMessage({ pubkeys })
var _this = this
worker.onmessage = event => { try {
console.log("addAll onmessage");
var key_addresses = event.data
var dirty = false
var addresses = _this.state.addresses.withMutations( addresses => {
for(let i = 0; i < pubkeys.length; i++) {
var pubkey = pubkeys[i]
if(_this.pubkeys.has(pubkey)) continue
_this.pubkeys.add(pubkey)
// Gather all 5 legacy address formats (see key.addresses)
var address_strings = key_addresses[i]
for(let address of address_strings) {
addresses.set(address, pubkey)
dirty = true
return new Promise( (resolve, reject) => {
this.saving()
this.loadAddyMap().then( () => {
var AddressIndexWorker = require("worker!workers/AddressIndexWorker")
var worker = new AddressIndexWorker
worker.postMessage({ pubkeys })
var _this = this
worker.onmessage = event => { try {
var key_addresses = event.data
var dirty = false
var addresses = _this.state.addresses.withMutations( addresses => {
for(let i = 0; i < pubkeys.length; i++) {
var pubkey = pubkeys[i]
if(_this.pubkeys.has(pubkey)) continue
_this.pubkeys.add(pubkey)
// Gather all 5 legacy address formats (see key.addresses)
var address_strings = key_addresses[i]
for(let address of address_strings) {
addresses.set(address, pubkey)
dirty = true
}
}
})
if( dirty ) {
_this.setState({ addresses })
_this.saveAddyMap()
} else {
_this.setState({ saving: false })
}
})
if( dirty ) {
_this.setState({ addresses })
_this.saveAddyMap()
} else {
_this.setState({ saving: false })
}
console.log("addAll onmessage done");
} catch( e ) { console.error('AddressIndex.addAll', e) }}
}).catch ( e => { throw e })
resolve()
} catch( e ) { console.error('AddressIndex.addAll', e); reject(e) }}
}).catch ( e => { throw e })
})
}

loadAddyMap() {
Expand Down
18 changes: 0 additions & 18 deletions dl/src/stores/ImportKeysStore.js

This file was deleted.

3 changes: 3 additions & 0 deletions dl/src/stores/PrivateKeyStore.js
Expand Up @@ -8,6 +8,7 @@ import {PrivateKeyTcomb} from "./tcomb_structs";
import PrivateKeyActions from "actions/PrivateKeyActions"
import CachedPropertyActions from "actions/CachedPropertyActions"
import AddressIndex from "stores/AddressIndex"
import ChainStore from "api/ChainStore"
import PublicKey from "ecc/key_public"
import Address from "ecc/address"

Expand Down Expand Up @@ -169,9 +170,11 @@ class PrivateKeyStore extends BaseStore {
var private_tcomb = PrivateKeyTcomb(private_key_object)
store.add( private_key_object )
keys.set( private_key_object.pubkey, private_tcomb )
ChainStore.getAccountRefsOfKey(private_key_object.pubkey)
}
})
this.setState({ keys })
this.binaryBackupRecommended()
return duplicate_count
}

Expand Down
70 changes: 12 additions & 58 deletions dl/src/stores/WalletDb.js
Expand Up @@ -35,7 +35,7 @@ class WalletDb extends BaseStore {
// WalletDb use to be a plan old javascript class (not an Alt store) so
// for now many methods need to be exported...
this._export(
"checkNextGeneratedKey","getWallet","onLock","isLocked","decryptTcomb_PrivateKey","getPrivateKey","process_transaction","transaction_update","transaction_update_keys","getBrainKey","getBrainKeyPrivate","onCreateWallet","validatePassword","changePassword","generateNextKey","incrementBrainKeySequence","importKeys","saveKeys","saveKey","setWalletModified","setBackupDate","setBrainkeyBackupDate","_updateWallet","loadDbData",
"checkNextGeneratedKey","getWallet","onLock","isLocked","decryptTcomb_PrivateKey","getPrivateKey","process_transaction","transaction_update","transaction_update_keys","getBrainKey","getBrainKeyPrivate","onCreateWallet","validatePassword","changePassword","generateNextKey","incrementBrainKeySequence","saveKeys","saveKey","setWalletModified","setBackupDate","setBrainkeyBackupDate","_updateWallet","loadDbData",
"importKeysWorker"
)
}
Expand Down Expand Up @@ -337,11 +337,11 @@ class WalletDb extends BaseStore {
}

importKeysWorker(private_key_objs) {
WalletUnlockActions.unlock().then( () => {
return new Promise( (resolve, reject) => {
var pubkeys = []
for(let private_key_obj of private_key_objs)
pubkeys.push( private_key_obj.public_key_string )
AddressIndex.addAll(pubkeys)
var addyIndexPromise = AddressIndex.addAll(pubkeys)

var private_plainhex_array = []
for(let private_key_obj of private_key_objs)
Expand Down Expand Up @@ -379,74 +379,28 @@ class WalletDb extends BaseStore {
}
enc_private_key_objs.push(private_key_object)
}
console.log("Ready to save private keys");
console.log("Saving private keys", new Date().toString());
var transaction = _this.transaction_update_keys()
var insertKeysPromise = idb_helper.on_transaction_end(transaction)
try {
var duplicate_count = PrivateKeyStore.
addPrivateKeys_noindex(enc_private_key_objs, transaction )
var duplicate_count = PrivateKeyStore
.addPrivateKeys_noindex(enc_private_key_objs, transaction )
if( private_key_objs.length != duplicate_count )
_this.setWalletModified(transaction)
_this.setState({saving_keys: false})
resolve(Promise.all([ insertKeysPromise, addyIndexPromise ]).then( ()=> {
console.log("Done saving keys", new Date().toString())
// return { duplicate_count }
}))
} catch(e) {
transaction.abort()
console.error(e)
reject(e)
}
console.log("Done saving keys");
} catch( e ) { console.error('AesWorker.encrypt', e) }}
})
}

importKeys(private_key_objs) {
if(TRACE) console.log('... WalletDb.importKeys START')
return WalletUnlockActions.unlock().then( () => {
var transaction = this.transaction_update_keys()
var promises = []
var import_count = 0, duplicate_count = 0
if(TRACE) console.log('... importKeys save key loop start')
for(let private_key_obj of private_key_objs) {

var private_key =
private_key_obj.private_key ||
PrivateKey.fromWif( private_key_obj.wif )

if( ! private_key) {
console.error("ERROR WalletDb importKeys, missing private_key or wif")
continue
}
promises.push(
this.saveKey(
private_key,
null,//brainkey_sequence
private_key_obj.import_account_names,
private_key_obj.public_key_string,
transaction
).then(
ret => {
if(ret.result == "duplicate") {
duplicate_count++
} else if(ret.result == "added") {
import_count++
} else
throw new Error('unknown return',ret)
return ret.id
}
)
)
}
if(TRACE) console.log('... importKeys save key loop done')
return this.setWalletModified(transaction).then( ()=> {
return Promise.all(promises).catch( error => {
//DEBUG
console.log('importKeys transaction.abort', error)
throw error
}).then( private_key_ids => {
if(TRACE) console.log('... WalletDb.importKeys done')
return {import_count, duplicate_count, private_key_ids}
})
})
})
}

saveKeys(private_keys, transaction, public_key_string) {
var promises = []
for(let private_key_record of private_keys) {
Expand Down
2 changes: 1 addition & 1 deletion web/app/components/Wallet/BalanceClaimAssetTotal.jsx
Expand Up @@ -23,7 +23,7 @@ export default class BalanceClaimAssetTotals extends Component {
.map( l => l.reduce( (r,v) => r + Number(v.balance.amount), 0 ))

if( ! total_by_asset.size)
return <div>No balances to claim</div>
return <div>None</div>

return <div>
{total_by_asset.map( (total, asset_id) =>
Expand Down

0 comments on commit 7a27005

Please sign in to comment.