Safe Haskell | None |
---|---|
Language | Haskell98 |
This package provides a command line application called hw (haskoin wallet). It is a lightweight bitcoin wallet featuring BIP32 key management, deterministic signatures (RFC-6979) and first order support for multisignature transactions. A library API for hw is also exposed.
- clientMain :: IO ()
- data OutputFormat
- data Config = Config {
- configCount :: !Word32
- configMinConf :: !Word32
- configSignTx :: !Bool
- configFee :: !Word64
- configRcptFee :: !Bool
- configAddrType :: !AddressType
- configOffline :: !Bool
- configReversePaging :: !Bool
- configPath :: !(Maybe HardPath)
- configFormat :: !OutputFormat
- configConnect :: !String
- configConnectNotif :: !String
- configDetach :: !Bool
- configFile :: !FilePath
- configTestnet :: !Bool
- configDir :: !FilePath
- configBind :: !String
- configBindNotif :: !String
- configBTCNodes :: !(HashMap Text [BTCNode])
- configMode :: !SPVMode
- configBloomFP :: !Double
- configDatabase :: !(HashMap Text DatabaseConfType)
- configLogFile :: !FilePath
- configPidFile :: !FilePath
- configLogLevel :: !LogLevel
- configVerbose :: !Bool
- configServerKey :: !(Maybe (Restricted Div5 ByteString))
- configServerKeyPub :: !(Maybe (Restricted Div5 ByteString))
- configClientKey :: !(Maybe (Restricted Div5 ByteString))
- configClientKeyPub :: !(Maybe (Restricted Div5 ByteString))
- runSPVServer :: Config -> IO ()
- stopSPVServer :: Config -> IO ()
- data SPVMode
- data JsonAccount = JsonAccount {
- jsonAccountName :: !Text
- jsonAccountType :: !AccountType
- jsonAccountMaster :: !(Maybe XPrvKey)
- jsonAccountMnemonic :: !(Maybe Text)
- jsonAccountDerivation :: !(Maybe HardPath)
- jsonAccountKeys :: ![XPubKey]
- jsonAccountGap :: !Word32
- jsonAccountCreated :: !UTCTime
- data JsonAddr = JsonAddr {
- jsonAddrAddress :: !Address
- jsonAddrIndex :: !KeyIndex
- jsonAddrType :: !AddressType
- jsonAddrLabel :: !Text
- jsonAddrRedeem :: !(Maybe ScriptOutput)
- jsonAddrKey :: !(Maybe PubKeyC)
- jsonAddrCreated :: !UTCTime
- jsonAddrBalance :: !(Maybe BalanceInfo)
- data JsonCoin = JsonCoin {
- jsonCoinHash :: !TxHash
- jsonCoinPos :: !Word32
- jsonCoinValue :: !Word64
- jsonCoinScript :: !ScriptOutput
- jsonCoinCreated :: !UTCTime
- jsonCoinTx :: !(Maybe JsonTx)
- jsonCoinAddress :: !(Maybe JsonAddr)
- jsonCoinSpendingTx :: !(Maybe JsonTx)
- data JsonTx = JsonTx {
- jsonTxHash :: !TxHash
- jsonTxNosigHash :: !TxHash
- jsonTxType :: !TxType
- jsonTxInValue :: !Word64
- jsonTxOutValue :: !Word64
- jsonTxValue :: !Int64
- jsonTxInputs :: ![AddressInfo]
- jsonTxOutputs :: ![AddressInfo]
- jsonTxChange :: ![AddressInfo]
- jsonTxTx :: !Tx
- jsonTxIsCoinbase :: !Bool
- jsonTxConfidence :: !TxConfidence
- jsonTxConfirmedBy :: !(Maybe BlockHash)
- jsonTxConfirmedHeight :: !(Maybe Word32)
- jsonTxConfirmedDate :: !(Maybe Word32)
- jsonTxCreated :: !UTCTime
- jsonTxAccount :: !AccountName
- jsonTxConfirmations :: !(Maybe Word32)
- jsonTxBestBlock :: !(Maybe BlockHash)
- jsonTxBestBlockHeight :: !(Maybe BlockHeight)
- data WalletRequest
- = GetAccountsR !ListRequest
- | PostAccountsR !NewAccount
- | PostAccountRenameR !AccountName !AccountName
- | GetAccountR !AccountName
- | PostAccountKeysR !AccountName ![XPubKey]
- | PostAccountGapR !AccountName !SetAccountGap
- | GetAddressesR !AccountName !AddressType !Word32 !Bool !ListRequest
- | GetAddressesUnusedR !AccountName !AddressType !ListRequest
- | GetAddressR !AccountName !KeyIndex !AddressType !Word32 !Bool
- | PutAddressR !AccountName !KeyIndex !AddressType !AddressLabel
- | PostAddressesR !AccountName !KeyIndex !AddressType
- | GetTxsR !AccountName !ListRequest
- | GetAddrTxsR !AccountName !KeyIndex !AddressType !ListRequest
- | PostTxsR !AccountName !(Maybe XPrvKey) !TxAction
- | GetTxR !AccountName !TxHash
- | GetOfflineTxR !AccountName !TxHash
- | PostOfflineTxR !AccountName !(Maybe XPrvKey) !Tx ![CoinSignData]
- | GetBalanceR !AccountName !Word32 !Bool
- | PostNodeR !NodeAction
- | DeleteTxIdR !TxHash
- | GetSyncR !AccountName !BlockHash !ListRequest
- | GetSyncHeightR !AccountName !BlockHeight !ListRequest
- | GetPendingR !AccountName !ListRequest
- | GetDeadR !AccountName !ListRequest
- data ListRequest = ListRequest {
- listOffset :: !Word32
- listLimit :: !Word32
- listReverse :: !Bool
- data NewAccount = NewAccount {
- newAccountName :: !AccountName
- newAccountType :: !AccountType
- newAccountMnemonic :: !(Maybe Text)
- newAccountMaster :: !(Maybe XPrvKey)
- newAccountDeriv :: !(Maybe HardPath)
- newAccountKeys :: ![XPubKey]
- newAccountReadOnly :: !Bool
- data SetAccountGap = SetAccountGap {
- getAccountGap :: !Word32
- data OfflineTxData = OfflineTxData {
- offlineTxDataTx :: !Tx
- offlineTxDataCoinData :: ![CoinSignData]
- data CoinSignData = CoinSignData {
- coinSignOutPoint :: !OutPoint
- coinSignScriptOutput :: !ScriptOutput
- coinSignDeriv :: !SoftPath
- data TxAction
- = CreateTx {
- accTxActionRecipients :: ![(Address, Word64)]
- accTxActionFee :: !Word64
- accTxActionMinConf :: !Word32
- accTxActionRcptFee :: !Bool
- accTxActionSign :: !Bool
- | ImportTx {
- accTxActionTx :: !Tx
- | SignTx {
- accTxActionHash :: !TxHash
- = CreateTx {
- data AddressLabel = AddressLabel {
- addressLabelLabel :: !Text
- data NodeAction
- = NodeActionRescan {
- nodeActionTimestamp :: !(Maybe Word32)
- | NodeActionStatus
- = NodeActionRescan {
- data AccountType
- data AddressType
- addrTypeIndex :: AddressType -> KeyIndex
- data TxType
- data TxConfidence
- data AddressInfo = AddressInfo {
- addressInfoAddress :: !Address
- addressInfoValue :: !(Maybe Word64)
- addressInfoIsLocal :: !Bool
- data BalanceInfo = BalanceInfo {}
- data WalletResponse a
- = ResponseError {
- responseError :: !Text
- | ResponseValid {
- responseResult :: !(Maybe a)
- = ResponseError {
- data TxCompleteRes = TxCompleteRes {
- txCompleteTx :: !Tx
- txCompleteComplete :: !Bool
- data ListResult a = ListResult {
- listResultItems :: ![a]
- listResultTotal :: !Word32
- data RescanRes = RescanRes {}
- initWallet :: MonadIO m => Double -> SqlPersistT m ()
- accounts :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => ListRequest -> SqlPersistT m ([Account], Word32)
- newAccount :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => NewAccount -> SqlPersistT m (Entity Account, Maybe Mnemonic)
- addAccountKeys :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> [XPubKey] -> SqlPersistT m Account
- getAccount :: (MonadIO m, MonadThrow m) => AccountName -> SqlPersistT m (Entity Account)
- isMultisigAccount :: Account -> Bool
- isReadAccount :: Account -> Bool
- isCompleteAccount :: Account -> Bool
- getAddress :: (MonadIO m, MonadThrow m) => Entity Account -> AddressType -> KeyIndex -> SqlPersistT m (Entity WalletAddr)
- addressesAll :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => SqlPersistT m [WalletAddr]
- addresses :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> AddressType -> SqlPersistT m [WalletAddr]
- addressList :: MonadIO m => Entity Account -> AddressType -> ListRequest -> SqlPersistT m ([WalletAddr], Word32)
- unusedAddresses :: MonadIO m => Entity Account -> AddressType -> ListRequest -> SqlPersistT m ([WalletAddr], Word32)
- addressCount :: MonadIO m => Entity Account -> AddressType -> SqlPersistT m Word32
- setAddrLabel :: (MonadIO m, MonadThrow m) => Entity Account -> KeyIndex -> AddressType -> Text -> SqlPersistT m WalletAddr
- addressPrvKey :: (MonadIO m, MonadThrow m) => Entity Account -> Maybe XPrvKey -> KeyIndex -> AddressType -> SqlPersistT m PrvKeyC
- useAddress :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => WalletAddr -> SqlPersistT m [WalletAddr]
- setAccountGap :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> Word32 -> SqlPersistT m (Entity Account)
- firstAddrTime :: MonadIO m => SqlPersistT m (Maybe Timestamp)
- getPathRedeem :: Account -> SoftPath -> RedeemScript
- getPathPubKey :: Account -> SoftPath -> PubKeyC
- getBloomFilter :: (MonadIO m, MonadThrow m) => SqlPersistT m (BloomFilter, Int, Double)
- txs :: MonadIO m => Maybe TxConfidence -> AccountId -> ListRequest -> SqlPersistT m ([WalletTx], Word32)
- addrTxs :: MonadIO m => Entity Account -> Entity WalletAddr -> ListRequest -> SqlPersistT m ([WalletTx], Word32)
- getTx :: MonadIO m => TxHash -> SqlPersistT m (Maybe Tx)
- getAccountTx :: MonadIO m => AccountId -> TxHash -> SqlPersistT m WalletTx
- importTx :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Tx -> Maybe (TBMChan Notif) -> AccountId -> SqlPersistT m ([WalletTx], [WalletAddr])
- importNetTx :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Tx -> Maybe (TBMChan Notif) -> SqlPersistT m ([WalletTx], [WalletAddr])
- signAccountTx :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> Maybe (TBMChan Notif) -> Maybe XPrvKey -> TxHash -> SqlPersistT m ([WalletTx], [WalletAddr])
- createTx :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> Maybe (TBMChan Notif) -> Maybe XPrvKey -> [(Address, Word64)] -> Word64 -> Word32 -> Bool -> Bool -> SqlPersistT m (WalletTx, [WalletAddr])
- signOfflineTx :: Account -> Maybe XPrvKey -> Tx -> [CoinSignData] -> Tx
- getOfflineTxData :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => AccountId -> TxHash -> SqlPersistT m (OfflineTxData, [InCoinData])
- importMerkles :: MonadIO m => BlockChainAction -> [MerkleTxs] -> Maybe (TBMChan Notif) -> SqlPersistT m ()
- walletBestBlock :: MonadIO m => SqlPersistT m (BlockHash, Word32)
- spendableCoins :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => AccountId -> Word32 -> (SqlExpr (Entity WalletCoin) -> SqlExpr (Entity WalletTx) -> [SqlExpr OrderBy]) -> SqlPersistT m [InCoinData]
- accountBalance :: MonadIO m => AccountId -> Word32 -> Bool -> SqlPersistT m Word64
- addressBalances :: MonadIO m => Entity Account -> KeyIndex -> KeyIndex -> AddressType -> Word32 -> Bool -> SqlPersistT m [(KeyIndex, BalanceInfo)]
- resetRescan :: MonadIO m => SqlPersistT m ()
Client
clientMain :: IO () Source
data OutputFormat Source
FromJSON OutputFormat Source | |
ToJSON OutputFormat Source |
Config | |
|
Server
runSPVServer :: Config -> IO () Source
stopSPVServer :: Config -> IO () Source
API JSON Types
data JsonAccount Source
JsonAccount | |
|
Eq JsonAccount Source | |
Read JsonAccount Source | |
Show JsonAccount Source | |
FromJSON JsonAccount Source | |
ToJSON JsonAccount Source |
JsonAddr | |
|
JsonCoin | |
|
JsonTx | |
|
API Request Types
data WalletRequest Source
FromJSON WalletRequest Source | |
ToJSON WalletRequest Source |
data ListRequest Source
ListRequest | |
|
Eq ListRequest Source | |
Read ListRequest Source | |
Show ListRequest Source | |
FromJSON ListRequest Source | |
ToJSON ListRequest Source |
data NewAccount Source
NewAccount | |
|
Eq NewAccount Source | |
Read NewAccount Source | |
Show NewAccount Source | |
FromJSON NewAccount Source | |
ToJSON NewAccount Source |
data SetAccountGap Source
Eq SetAccountGap Source | |
Read SetAccountGap Source | |
Show SetAccountGap Source | |
FromJSON SetAccountGap Source | |
ToJSON SetAccountGap Source |
data OfflineTxData Source
OfflineTxData | |
|
FromJSON OfflineTxData Source | |
ToJSON OfflineTxData Source |
data CoinSignData Source
CoinSignData | |
|
Eq CoinSignData Source | |
Show CoinSignData Source | |
FromJSON CoinSignData Source | |
ToJSON CoinSignData Source |
CreateTx | |
| |
ImportTx | |
| |
SignTx | |
|
data AddressLabel Source
AddressLabel | |
|
Eq AddressLabel Source | |
Read AddressLabel Source | |
Show AddressLabel Source | |
FromJSON AddressLabel Source | |
ToJSON AddressLabel Source |
data NodeAction Source
Eq NodeAction Source | |
Read NodeAction Source | |
Show NodeAction Source | |
FromJSON NodeAction Source | |
ToJSON NodeAction Source |
data AccountType Source
Eq AccountType Source | |
Read AccountType Source | |
Show AccountType Source | |
NFData AccountType Source | |
PersistFieldSql AccountType Source | |
PersistField AccountType Source | |
FromJSON AccountType Source | |
ToJSON AccountType Source |
data AddressType Source
Eq AddressType Source | |
Read AddressType Source | |
Show AddressType Source | |
NFData AddressType Source | |
PersistFieldSql AddressType Source | |
PersistField AddressType Source | |
FromJSON AddressType Source | |
ToJSON AddressType Source |
addrTypeIndex :: AddressType -> KeyIndex Source
data TxConfidence Source
Eq TxConfidence Source | |
Read TxConfidence Source | |
Show TxConfidence Source | |
NFData TxConfidence Source | |
PersistFieldSql TxConfidence Source | |
PersistField TxConfidence Source | |
FromJSON TxConfidence Source | |
ToJSON TxConfidence Source |
data AddressInfo Source
AddressInfo | |
|
Eq AddressInfo Source | |
Read AddressInfo Source | |
Show AddressInfo Source | |
Generic AddressInfo Source | |
Binary AddressInfo Source | |
NFData AddressInfo Source | |
FromJSON AddressInfo Source | |
ToJSON AddressInfo Source | |
PersistFieldSql [AddressInfo] Source | |
PersistField [AddressInfo] Source | |
type Rep AddressInfo Source |
data BalanceInfo Source
Eq BalanceInfo Source | |
Read BalanceInfo Source | |
Show BalanceInfo Source | |
NFData BalanceInfo Source | |
FromJSON BalanceInfo Source | |
ToJSON BalanceInfo Source |
API Response Types
data WalletResponse a Source
ResponseError | |
| |
ResponseValid | |
|
Eq a => Eq (WalletResponse a) Source | |
Show a => Show (WalletResponse a) Source | |
FromJSON a0 => FromJSON (WalletResponse a) Source | |
ToJSON a0 => ToJSON (WalletResponse a) Source |
data TxCompleteRes Source
TxCompleteRes | |
|
Eq TxCompleteRes Source | |
Read TxCompleteRes Source | |
Show TxCompleteRes Source | |
FromJSON TxCompleteRes Source | |
ToJSON TxCompleteRes Source |
data ListResult a Source
ListResult | |
|
FromJSON a0 => FromJSON (ListResult a) Source | |
ToJSON a0 => ToJSON (ListResult a) Source |
Database Accounts
initWallet :: MonadIO m => Double -> SqlPersistT m () Source
accounts :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => ListRequest -> SqlPersistT m ([Account], Word32) Source
Fetch all accounts
newAccount :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => NewAccount -> SqlPersistT m (Entity Account, Maybe Mnemonic) Source
Create a new account
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Entity Account | Account Entity |
-> [XPubKey] | Thirdparty public keys to add |
-> SqlPersistT m Account | Account information |
Add new thirdparty keys to a multisignature account. This function can fail if the multisignature account already has all required keys.
getAccount :: (MonadIO m, MonadThrow m) => AccountName -> SqlPersistT m (Entity Account) Source
isMultisigAccount :: Account -> Bool Source
isReadAccount :: Account -> Bool Source
isCompleteAccount :: Account -> Bool Source
Database Addresses
:: (MonadIO m, MonadThrow m) | |
=> Entity Account | Account Entity |
-> AddressType | Address type |
-> KeyIndex | Derivation index (key) |
-> SqlPersistT m (Entity WalletAddr) | Address |
Get an address if it exists, or throw an exception otherwise. Fetching addresses in the hidden gap will also throw an exception.
addressesAll :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => SqlPersistT m [WalletAddr] Source
All addresses in the wallet, including hidden gap addresses. This is useful for building a bloom filter.
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Entity Account | Account Entity |
-> AddressType | Address Type |
-> SqlPersistT m [WalletAddr] | Addresses |
All addresses in one account excluding hidden gap.
:: MonadIO m | |
=> Entity Account | Account Entity |
-> AddressType | Address type |
-> ListRequest | List request |
-> SqlPersistT m ([WalletAddr], Word32) | List result |
Get address list.
:: MonadIO m | |
=> Entity Account | Account ID |
-> AddressType | Address type |
-> ListRequest | |
-> SqlPersistT m ([WalletAddr], Word32) | Unused addresses |
Get a list of all unused addresses.
:: MonadIO m | |
=> Entity Account | Account Entity |
-> AddressType | Address type |
-> SqlPersistT m Word32 | Address Count |
Get a count of all the addresses in an account
:: (MonadIO m, MonadThrow m) | |
=> Entity Account | Account ID |
-> KeyIndex | Derivation index |
-> AddressType | Address type |
-> Text | New label |
-> SqlPersistT m WalletAddr |
Add a label to an address.
:: (MonadIO m, MonadThrow m) | |
=> Entity Account | Account Entity |
-> Maybe XPrvKey | If not in account |
-> KeyIndex | Derivation index of the address |
-> AddressType | Address type |
-> SqlPersistT m PrvKeyC | Private key |
Returns the private key of an address.
useAddress :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => WalletAddr -> SqlPersistT m [WalletAddr] Source
Use an address and make sure we have enough gap addresses after it. Returns the new addresses that have been created.
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Entity Account | Account Entity |
-> Word32 | New gap value |
-> SqlPersistT m (Entity Account) |
Set the address gap of an account to a new value. This will create new internal and external addresses as required. The gap can only be increased, not decreased in size.
firstAddrTime :: MonadIO m => SqlPersistT m (Maybe Timestamp) Source
getPathRedeem :: Account -> SoftPath -> RedeemScript Source
getPathPubKey :: Account -> SoftPath -> PubKeyC Source
Database Bloom Filter
getBloomFilter :: (MonadIO m, MonadThrow m) => SqlPersistT m (BloomFilter, Int, Double) Source
Returns a bloom filter containing all the addresses in this wallet. This includes internal and external addresses. The bloom filter can be set on a peer connection to filter the transactions received by that peer.
Database transactions
:: MonadIO m | |
=> Maybe TxConfidence | |
-> AccountId | Account ID |
-> ListRequest | List request |
-> SqlPersistT m ([WalletTx], Word32) | List result |
Get transactions.
:: MonadIO m | |
=> Entity Account | Account entity |
-> Entity WalletAddr | Address entity |
-> ListRequest | List request |
-> SqlPersistT m ([WalletTx], Word32) |
getAccountTx :: MonadIO m => AccountId -> TxHash -> SqlPersistT m WalletTx Source
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Tx | Transaction to import |
-> Maybe (TBMChan Notif) | |
-> AccountId | Account ID |
-> SqlPersistT m ([WalletTx], [WalletAddr]) | New transactions and addresses created |
Import a transaction into the wallet from an unknown source. If the transaction is standard, valid, all inputs are known and all inputs can be spent, then the transaction will be imported as a network transaction. Otherwise, the transaction will be imported into the local account as an offline transaction.
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Tx | |
-> Maybe (TBMChan Notif) | |
-> SqlPersistT m ([WalletTx], [WalletAddr]) | Returns the new transactions and addresses created |
Import a transaction from the network into the wallet. This function assumes transactions are imported in-order (parents first). It also assumes that the confirmations always arrive after the transaction imports. This function is idempotent.
When re-importing an existing transaction, this function will recompute the inputs, outputs and transaction details for each account. A non-dead transaction could be set to dead due to new inputs being double spent. However, we do not allow dead transactions to be revived by reimporting them. Transactions can only be revived if they make it into the main chain.
This function returns the network confidence of the imported transaction.
signAccountTx :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => Entity Account -> Maybe (TBMChan Notif) -> Maybe XPrvKey -> TxHash -> SqlPersistT m ([WalletTx], [WalletAddr]) Source
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> Entity Account | Account Entity |
-> Maybe (TBMChan Notif) | Notification channel |
-> Maybe XPrvKey | Key if not provided by account |
-> [(Address, Word64)] | List of recipient addresses and amounts |
-> Word64 | Fee per 1000 bytes |
-> Word32 | Minimum confirmations |
-> Bool | Should fee be paid by recipient |
-> Bool | Should the transaction be signed |
-> SqlPersistT m (WalletTx, [WalletAddr]) | (New transaction hash, Completed flag) |
Create a transaction sending some coins to a list of recipient addresses.
:: Account | Account used for signing |
-> Maybe XPrvKey | Key if not provided in account |
-> Tx | Transaction to sign |
-> [CoinSignData] | Input signing data |
-> Tx |
getOfflineTxData :: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) => AccountId -> TxHash -> SqlPersistT m (OfflineTxData, [InCoinData]) Source
Database blocks
importMerkles :: MonadIO m => BlockChainAction -> [MerkleTxs] -> Maybe (TBMChan Notif) -> SqlPersistT m () Source
walletBestBlock :: MonadIO m => SqlPersistT m (BlockHash, Word32) Source
Database coins and balances
:: (MonadIO m, MonadThrow m, MonadBase IO m, MonadResource m) | |
=> AccountId | Account key |
-> Word32 | Minimum confirmations |
-> (SqlExpr (Entity WalletCoin) -> SqlExpr (Entity WalletTx) -> [SqlExpr OrderBy]) | Coin ordering policy |
-> SqlPersistT m [InCoinData] | Spendable coins |
addressBalances :: MonadIO m => Entity Account -> KeyIndex -> KeyIndex -> AddressType -> Word32 -> Bool -> SqlPersistT m [(KeyIndex, BalanceInfo)] Source
Rescan
resetRescan :: MonadIO m => SqlPersistT m () Source