Stephen Pair
12 years ago
1 changed files with 78 additions and 0 deletions
@ -0,0 +1,78 @@ |
|||||
|
require('classtool'); |
||||
|
|
||||
|
function ClassSpec(b) { |
||||
|
var fs = require('fs'); |
||||
|
var EncFile = require('./util/EncFile'); |
||||
|
var networks = require('./networks'); |
||||
|
var ENC_METHOD = 'aes-256-cbc'; |
||||
|
|
||||
|
var skeleton = { |
||||
|
client: 'libcoin', |
||||
|
client_version: '0.0.1', |
||||
|
network: 'testnet', |
||||
|
version: 1, |
||||
|
best_hash: null, |
||||
|
best_height: -1, |
||||
|
keys: [], |
||||
|
}; |
||||
|
|
||||
|
function Wallet(cfg) { |
||||
|
if (typeof cfg !== 'object') |
||||
|
cfg = {}; |
||||
|
|
||||
|
// deep copy (no references)
|
||||
|
if (cfg.datastore) |
||||
|
this.datastore = JSON.parse(JSON.stringify(cfg.datastore)); |
||||
|
else |
||||
|
this.datastore = JSON.parse(JSON.stringify(skeleton)); |
||||
|
|
||||
|
this.network = undefined; |
||||
|
this.dirty = cfg.dirty || true; |
||||
|
}; |
||||
|
|
||||
|
Wallet.prototype.readSync = function(filename, passphrase) { |
||||
|
this.datastore = EncFile.readJFileSync(ENC_METHOD, |
||||
|
passphrase, filename); |
||||
|
this.dirty = false; |
||||
|
}; |
||||
|
|
||||
|
Wallet.prototype.writeSync = function(filename, passphrase) { |
||||
|
var tmp_fn = filename + ".tmp"; |
||||
|
|
||||
|
EncFile.writeJFileSync(ENC_METHOD, passphrase, tmp_fn, |
||||
|
this.datastore); |
||||
|
fs.renameSync(tmp_fn, filename); |
||||
|
|
||||
|
this.dirty = false; |
||||
|
}; |
||||
|
|
||||
|
Wallet.prototype.setNetwork = function(netname) { |
||||
|
if (!netname) |
||||
|
netname = this.datastore.network; |
||||
|
|
||||
|
switch (netname) { |
||||
|
case "mainnet": |
||||
|
case "livenet": |
||||
|
this.network = networks.livenet; |
||||
|
break; |
||||
|
case "testnet": |
||||
|
this.network = networks.testnet; |
||||
|
break; |
||||
|
default: |
||||
|
throw new Error("Unsupported network"); |
||||
|
} |
||||
|
|
||||
|
// store+canonicalize name
|
||||
|
this.datastore['network'] = this.network.name; |
||||
|
this.dirty = true; |
||||
|
}; |
||||
|
|
||||
|
Wallet.prototype.addKey = function(wkey) { |
||||
|
this.datastore.keys.push(wkey); |
||||
|
this.dirty = true; |
||||
|
}; |
||||
|
|
||||
|
return Wallet; |
||||
|
}; |
||||
|
module.defineClass(ClassSpec); |
||||
|
|
Loading…
Reference in new issue