mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-24 06:57:51 +01:00
Create AccountHandlingApi
, move inheritance from Wallet
into HDWalletApi
(#5627)
* Create AccountHandlingApi, move inheritance from Wallet.scala into HDWalletApi * Fix get wallet accounts test
This commit is contained in:
parent
364df59ea2
commit
4212d6d616
6 changed files with 47 additions and 15 deletions
|
@ -650,6 +650,10 @@ class RoutesSpec extends AnyWordSpec with ScalatestRouteTest with MockFactory {
|
|||
hdAccount = HDAccount(HDCoin(HDPurpose.Legacy, HDCoinType.Testnet), 0)
|
||||
)
|
||||
|
||||
(() => mockWalletApi.accountHandling)
|
||||
.expects()
|
||||
.returning(mockWalletApi)
|
||||
|
||||
(() => mockWalletApi.listAccounts())
|
||||
.expects()
|
||||
.returning(Future.successful(Vector(accountDb)))
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package org.bitcoins.core.api.wallet
|
||||
|
||||
import org.bitcoins.core.api.wallet.db.AccountDb
|
||||
import org.bitcoins.core.hd.AddressType
|
||||
|
||||
import scala.concurrent.Future
|
||||
|
||||
trait AccountHandlingApi {
|
||||
def getDefaultAccount(): Future[AccountDb]
|
||||
def listAccounts(): Future[Vector[AccountDb]]
|
||||
def getDefaultAccountForType(addressType: AddressType): Future[AccountDb]
|
||||
}
|
|
@ -27,9 +27,10 @@ import scala.concurrent.{ExecutionContext, Future}
|
|||
* @see
|
||||
* [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki BIP44]]
|
||||
*/
|
||||
trait HDWalletApi extends WalletApi {
|
||||
trait HDWalletApi extends WalletApi with AccountHandlingApi {
|
||||
|
||||
override def keyManager: BIP39KeyManagerApi
|
||||
def accountHandling: AccountHandlingApi
|
||||
|
||||
/** Gets the balance of the given account */
|
||||
def getBalance(account: HDAccount)(implicit
|
||||
|
@ -67,7 +68,8 @@ trait HDWalletApi extends WalletApi {
|
|||
* @return
|
||||
* Future[AccountDb]
|
||||
*/
|
||||
def getDefaultAccount(): Future[AccountDb]
|
||||
def getDefaultAccount(): Future[AccountDb] =
|
||||
accountHandling.getDefaultAccount()
|
||||
|
||||
/** Fetches the default account for the given address/account kind
|
||||
* @param addressType
|
||||
|
@ -475,7 +477,9 @@ trait HDWalletApi extends WalletApi {
|
|||
chainType: HDChainType,
|
||||
addressIndex: Int): Future[AddressDb]
|
||||
|
||||
def listAccounts(): Future[Vector[AccountDb]]
|
||||
def listAccounts(): Future[Vector[AccountDb]] = {
|
||||
accountHandling.listAccounts()
|
||||
}
|
||||
|
||||
/** Lists all wallet accounts with the given type
|
||||
* @param purpose
|
||||
|
@ -483,8 +487,9 @@ trait HDWalletApi extends WalletApi {
|
|||
* [[Future[Vector[AccountDb]]
|
||||
*/
|
||||
def listAccounts(purpose: HDPurpose)(implicit
|
||||
ec: ExecutionContext): Future[Vector[AccountDb]] =
|
||||
listAccounts().map(_.filter(_.hdAccount.purpose == purpose))
|
||||
ec: ExecutionContext): Future[Vector[AccountDb]] = {
|
||||
accountHandling.listAccounts().map(_.filter(_.hdAccount.purpose == purpose))
|
||||
}
|
||||
|
||||
/** Creates a new account with the given purpose */
|
||||
def createNewAccount(purpose: HDPurpose): Future[HDWalletApi]
|
||||
|
|
|
@ -49,7 +49,6 @@ import scala.util.{Failure, Random, Success}
|
|||
abstract class Wallet
|
||||
extends NeutrinoHDWalletApi
|
||||
with AddressHandling
|
||||
with AccountHandling
|
||||
with FundTransactionHandling
|
||||
with TransactionProcessing
|
||||
with RescanHandling
|
||||
|
@ -96,6 +95,7 @@ abstract class Wallet
|
|||
|
||||
def utxoHandling: UtxoHandling =
|
||||
UtxoHandling(spendingInfoDAO, transactionDAO, chainQueryApi)
|
||||
def accountHandling: AccountHandlingApi = AccountHandling(accountDAO)
|
||||
|
||||
def walletCallbacks: WalletCallbacks = walletConfig.callBacks
|
||||
|
||||
|
@ -1033,6 +1033,11 @@ abstract class Wallet
|
|||
tx: Transaction): Future[Vector[SpendingInfoDb]] = {
|
||||
utxoHandling.unmarkUTXOsAsReserved(tx)
|
||||
}
|
||||
|
||||
override def getDefaultAccountForType(
|
||||
addressType: AddressType): Future[AccountDb] = {
|
||||
accountHandling.getDefaultAccountForType(addressType)
|
||||
}
|
||||
}
|
||||
|
||||
// todo: create multiple wallets, need to maintain multiple databases
|
||||
|
|
|
@ -67,6 +67,8 @@ class WalletHolder(initWalletOpt: Option[DLCNeutrinoHDWalletApi])(implicit
|
|||
}
|
||||
}
|
||||
|
||||
override def accountHandling: AccountHandlingApi = wallet.accountHandling
|
||||
|
||||
def isInitialized: Boolean = synchronized {
|
||||
walletOpt.isDefined
|
||||
}
|
||||
|
@ -653,10 +655,6 @@ class WalletHolder(initWalletOpt: Option[DLCNeutrinoHDWalletApi])(implicit
|
|||
_.getAddress(account, chainType, addressIndex)
|
||||
)
|
||||
|
||||
override def listAccounts(): Future[Vector[AccountDb]] = delegate(
|
||||
_.listAccounts()
|
||||
)
|
||||
|
||||
override def createNewAccount(
|
||||
purpose: HDPurpose
|
||||
): Future[HDWalletApi] = delegate(_.createNewAccount(purpose))
|
||||
|
|
|
@ -1,22 +1,30 @@
|
|||
package org.bitcoins.wallet.internal
|
||||
|
||||
import org.bitcoins.core.api.wallet.AccountHandlingApi
|
||||
import org.bitcoins.core.api.wallet.db.AccountDb
|
||||
import org.bitcoins.core.hd.AddressType._
|
||||
import org.bitcoins.core.hd._
|
||||
import org.bitcoins.core.hd.AddressType.*
|
||||
import org.bitcoins.core.hd.*
|
||||
import org.bitcoins.core.protocol.blockchain.{
|
||||
ChainParams,
|
||||
MainNetChainParams,
|
||||
RegTestNetChainParams,
|
||||
SigNetChainParams,
|
||||
TestNetChainParams
|
||||
}
|
||||
import org.bitcoins.wallet.Wallet
|
||||
import org.bitcoins.wallet.config.WalletAppConfig
|
||||
import org.bitcoins.wallet.models.AccountDAO
|
||||
|
||||
import scala.concurrent.Future
|
||||
import scala.concurrent.{ExecutionContext, Future}
|
||||
|
||||
/** Provides functionality related enumerating accounts. Account creation does
|
||||
* not happen here, as that requires an unlocked wallet.
|
||||
*/
|
||||
private[wallet] trait AccountHandling { self: Wallet =>
|
||||
case class AccountHandling(accountDAO: AccountDAO)(implicit
|
||||
walletConfig: WalletAppConfig,
|
||||
ec: ExecutionContext)
|
||||
extends AccountHandlingApi {
|
||||
|
||||
private val chainParams: ChainParams = walletConfig.chain
|
||||
|
||||
/** @inheritdoc */
|
||||
override def listAccounts(): Future[Vector[AccountDb]] =
|
||||
|
|
Loading…
Add table
Reference in a new issue