package database.wallet;
import java.io.File;
import org.mapdb.DB;
import org.mapdb.DBMaker;
import org.mapdb.Serializer;
import qora.account.PrivateKeyAccount;
import settings.Settings;
public class SecureWalletDatabase
{
private static final File SECURE_WALLET_FILE = new File(Settings.getInstance().getWalletDir(), "wallet.s.dat");
private static final String SEED = "seed";
private static final String NONCE = "nonce";
private DB database;
private AccountSeedMap accountSeedMap;
public static boolean exists()
{
return SECURE_WALLET_FILE.exists();
}
public SecureWalletDatabase(String password)
{
//OPEN WALLET
SECURE_WALLET_FILE.getParentFile().mkdirs();
//DELETE TRANSACTIONS
//File transactionFile = new File(Settings.getInstance().getWalletDir(), "wallet.s.dat.t");
//transactionFile.delete();
this.database = DBMaker.newFileDB(SECURE_WALLET_FILE)
.encryptionEnable(password)
.closeOnJvmShutdown()
.cacheSize(2048)
.checksumEnable()
.mmapFileEnableIfSupported()
.make();
this.accountSeedMap = new AccountSeedMap(this, this.database);
}
public AccountSeedMap getAccountSeedMap()
{
return this.accountSeedMap;
}
public void setSeed(byte[] seed)
{
this.database.createAtomicVar(SEED, seed, Serializer.BYTE_ARRAY);
}
public byte[] getSeed()
{
return (byte[]) this.database.getAtomicVar(SEED).get();
}
public void setNonce(int nonce)
{
this.database.getAtomicInteger(NONCE).set(nonce);
}
public int getNonce()
{
return this.database.getAtomicInteger(NONCE).intValue();
}
public int getAndIncrementNonce()
{
return this.database.getAtomicInteger(NONCE).getAndIncrement();
}
public void delete(PrivateKeyAccount account)
{
this.accountSeedMap.delete(account);
}
public void commit()
{
this.database.commit();
}
public void close()
{
if(this.database != null)
{
if(!this.database.isClosed())
{
this.database.commit();
this.database.close();
}
}
}
}