pub struct WalletDb<C, P, CL, R> { /* private fields */ }
Expand description
A wrapper for the SQLite connection to the wallet database, along with a capability to read the
system from the clock. A WalletDb
encapsulates the full set of capabilities that are required
in order to implement the WalletRead
, WalletWrite
and WalletCommitmentTrees
traits.
Implementations§
Source§impl<P, CL, R> WalletDb<Connection, P, CL, R>
impl<P, CL, R> WalletDb<Connection, P, CL, R>
Sourcepub fn for_path<F: AsRef<Path>>(
path: F,
params: P,
clock: CL,
rng: R,
) -> Result<Self, Error>
pub fn for_path<F: AsRef<Path>>( path: F, params: P, clock: CL, rng: R, ) -> Result<Self, Error>
Construct a WalletDb
instance that connects to the wallet database stored at the
specified path.
§Parameters
path
: The path to the SQLite database used to store wallet data.params
: Parameters associated with the Zcash network that the wallet will connect to.clock
: The clock to use in the case that the backend needs access to the system time.rng
: The random number generation capability to be exposed by the createdWalletDb
instance.
Source§impl<C, P, CL, R> WalletDb<C, P, CL, R>
impl<C, P, CL, R> WalletDb<C, P, CL, R>
Sourcepub fn with_gap_limits(self, gap_limits: GapLimits) -> Self
Available on crate feature transparent-inputs
only.
pub fn with_gap_limits(self, gap_limits: GapLimits) -> Self
transparent-inputs
only.Sets the gap limits to be used by the wallet in transparent address generation.
Source§impl<C: Borrow<Connection>, P, CL, R> WalletDb<C, P, CL, R>
impl<C: Borrow<Connection>, P, CL, R> WalletDb<C, P, CL, R>
Sourcepub fn from_connection(conn: C, params: P, clock: CL, rng: R) -> Self
pub fn from_connection(conn: C, params: P, clock: CL, rng: R) -> Self
Constructs a new wrapper around the given connection.
This is provided for use cases such as connection pooling, where conn
may be an
&mut rusqlite::Connection
.
The caller must ensure that [rusqlite::vtab::array::load_module
] has been called
on the connection.
§Parameters
conn
: A connection to the wallet database.params
: Parameters associated with the Zcash network that the wallet will connect to.clock
: The clock to use in the case that the backend needs access to the system time.rng
: The random number generation capability to be exposed by the createdWalletDb
instance.
Source§impl<C: BorrowMut<Connection>, P, CL, R> WalletDb<C, P, CL, R>
impl<C: BorrowMut<Connection>, P, CL, R> WalletDb<C, P, CL, R>
pub fn transactionally<F, A, E: From<Error>>(&mut self, f: F) -> Result<A, E>
Sourcepub fn check_witnesses(
&mut self,
) -> Result<Vec<Range<BlockHeight>>, SqliteClientError>
pub fn check_witnesses( &mut self, ) -> Result<Vec<Range<BlockHeight>>, SqliteClientError>
Attempts to construct a witness for each note belonging to the wallet that is believed by the wallet to currently be spendable, and returns a vector of the ranges that must be rescanned in order to correct missing witness data.
This method is intended for repairing wallets that broke due to bugs in shardtree
.
Sourcepub fn queue_rescans(
&mut self,
rescan_ranges: NonEmpty<Range<BlockHeight>>,
priority: ScanPriority,
) -> Result<(), SqliteClientError>
pub fn queue_rescans( &mut self, rescan_ranges: NonEmpty<Range<BlockHeight>>, priority: ScanPriority, ) -> Result<(), SqliteClientError>
Updates the scan queue by inserting scan ranges for the given range of block heights, with the specified scanning priority.
Source§impl<C: BorrowMut<Connection>, P, CL: Clock, R: RngCore> WalletDb<C, P, CL, R>
impl<C: BorrowMut<Connection>, P, CL: Clock, R: RngCore> WalletDb<C, P, CL, R>
Sourcepub fn schedule_ephemeral_address_checks(
&mut self,
) -> Result<(), SqliteClientError>
Available on crate feature transparent-inputs
only.
pub fn schedule_ephemeral_address_checks( &mut self, ) -> Result<(), SqliteClientError>
transparent-inputs
only.For each ephemeral address in the wallet, ensure that the transaction data request queue contains a request for the wallet to check for UTXOs belonging to that address at some time during the next 24-hour period.
We use randomized scheduling of ephemeral address checks to ensure that a lightwalletd-compromising adversary cannot use temporal clustering to determine what ephemeral addresses belong to a given wallet.
Trait Implementations§
Source§impl<C: Borrow<Connection>, P: Parameters, CL, R> InputSource for WalletDb<C, P, CL, R>
impl<C: Borrow<Connection>, P: Parameters, CL, R> InputSource for WalletDb<C, P, CL, R>
Source§fn get_account_metadata(
&self,
account_id: Self::AccountId,
selector: &NoteFilter,
exclude: &[Self::NoteRef],
) -> Result<AccountMeta, Self::Error>
fn get_account_metadata( &self, account_id: Self::AccountId, selector: &NoteFilter, exclude: &[Self::NoteRef], ) -> Result<AccountMeta, Self::Error>
Returns metadata for the spendable notes in the wallet.
Source§type Error = SqliteClientError
type Error = SqliteClientError
Source§type NoteRef = ReceivedNoteId
type NoteRef = ReceivedNoteId
Source§type AccountId = AccountUuid
type AccountId = AccountUuid
Source§fn get_spendable_note(
&self,
txid: &TxId,
protocol: ShieldedProtocol,
index: u32,
) -> Result<Option<ReceivedNote<Self::NoteRef, Note>>, Self::Error>
fn get_spendable_note( &self, txid: &TxId, protocol: ShieldedProtocol, index: u32, ) -> Result<Option<ReceivedNote<Self::NoteRef, Note>>, Self::Error>
Source§fn select_spendable_notes(
&self,
account: Self::AccountId,
target_value: Zatoshis,
sources: &[ShieldedProtocol],
anchor_height: BlockHeight,
exclude: &[Self::NoteRef],
) -> Result<SpendableNotes<Self::NoteRef>, Self::Error>
fn select_spendable_notes( &self, account: Self::AccountId, target_value: Zatoshis, sources: &[ShieldedProtocol], anchor_height: BlockHeight, exclude: &[Self::NoteRef], ) -> Result<SpendableNotes<Self::NoteRef>, Self::Error>
Source§fn get_unspent_transparent_output(
&self,
outpoint: &OutPoint,
) -> Result<Option<WalletTransparentOutput>, Self::Error>
fn get_unspent_transparent_output( &self, outpoint: &OutPoint, ) -> Result<Option<WalletTransparentOutput>, Self::Error>
outpoint
. Read moreSource§fn get_spendable_transparent_outputs(
&self,
address: &TransparentAddress,
target_height: BlockHeight,
min_confirmations: u32,
) -> Result<Vec<WalletTransparentOutput>, Self::Error>
fn get_spendable_transparent_outputs( &self, address: &TransparentAddress, target_height: BlockHeight, min_confirmations: u32, ) -> Result<Vec<WalletTransparentOutput>, Self::Error>
address
such that, at height target_height
: Read moreSource§impl<C: BorrowMut<Connection>, P: Parameters, CL, R> WalletCommitmentTrees for WalletDb<C, P, CL, R>
impl<C: BorrowMut<Connection>, P: Parameters, CL, R> WalletCommitmentTrees for WalletDb<C, P, CL, R>
type Error = Error
Source§type SaplingShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>
type SaplingShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>
ShardStore
] for the Sapling note commitment tree.Source§type OrchardShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>
type OrchardShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>
ShardStore
] for the Orchard note commitment tree.Source§fn with_sapling_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>, { sapling::NOTE_COMMITMENT_TREE_DEPTH }, SAPLING_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
fn with_sapling_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>, { sapling::NOTE_COMMITMENT_TREE_DEPTH }, SAPLING_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
Source§fn put_sapling_subtree_roots(
&mut self,
start_index: u64,
roots: &[CommitmentTreeRoot<Node>],
) -> Result<(), ShardTreeError<Self::Error>>
fn put_sapling_subtree_roots( &mut self, start_index: u64, roots: &[CommitmentTreeRoot<Node>], ) -> Result<(), ShardTreeError<Self::Error>>
Source§fn with_orchard_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>, { _ }, ORCHARD_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
fn with_orchard_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>, { _ }, ORCHARD_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
Source§fn put_orchard_subtree_roots(
&mut self,
start_index: u64,
roots: &[CommitmentTreeRoot<MerkleHashOrchard>],
) -> Result<(), ShardTreeError<Self::Error>>
fn put_orchard_subtree_roots( &mut self, start_index: u64, roots: &[CommitmentTreeRoot<MerkleHashOrchard>], ) -> Result<(), ShardTreeError<Self::Error>>
Source§impl<P: Parameters, CL, R> WalletCommitmentTrees for WalletDb<SqlTransaction<'_>, P, CL, R>
impl<P: Parameters, CL, R> WalletCommitmentTrees for WalletDb<SqlTransaction<'_>, P, CL, R>
type Error = Error
Source§type SaplingShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>
type SaplingShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>
ShardStore
] for the Sapling note commitment tree.Source§type OrchardShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>
type OrchardShardStore<'a> = SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>
ShardStore
] for the Orchard note commitment tree.Source§fn with_sapling_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>, { sapling::NOTE_COMMITMENT_TREE_DEPTH }, SAPLING_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Error>>,
fn with_sapling_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, Node, SAPLING_SHARD_HEIGHT>, { sapling::NOTE_COMMITMENT_TREE_DEPTH }, SAPLING_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Error>>,
Source§fn put_sapling_subtree_roots(
&mut self,
start_index: u64,
roots: &[CommitmentTreeRoot<Node>],
) -> Result<(), ShardTreeError<Self::Error>>
fn put_sapling_subtree_roots( &mut self, start_index: u64, roots: &[CommitmentTreeRoot<Node>], ) -> Result<(), ShardTreeError<Self::Error>>
Source§fn with_orchard_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>, { _ }, ORCHARD_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
fn with_orchard_tree_mut<F, A, E>(&mut self, callback: F) -> Result<A, E>where
for<'a> F: FnMut(&'a mut ShardTree<SqliteShardStore<&'a Transaction<'a>, MerkleHashOrchard, ORCHARD_SHARD_HEIGHT>, { _ }, ORCHARD_SHARD_HEIGHT>) -> Result<A, E>,
E: From<ShardTreeError<Self::Error>>,
Source§fn put_orchard_subtree_roots(
&mut self,
start_index: u64,
roots: &[CommitmentTreeRoot<MerkleHashOrchard>],
) -> Result<(), ShardTreeError<Self::Error>>
fn put_orchard_subtree_roots( &mut self, start_index: u64, roots: &[CommitmentTreeRoot<MerkleHashOrchard>], ) -> Result<(), ShardTreeError<Self::Error>>
Source§impl<C: Borrow<Connection>, P: Parameters, CL, R> WalletRead for WalletDb<C, P, CL, R>
impl<C: Borrow<Connection>, P: Parameters, CL, R> WalletRead for WalletDb<C, P, CL, R>
Source§type Error = SqliteClientError
type Error = SqliteClientError
Source§type AccountId = AccountUuid
type AccountId = AccountUuid
Source§fn get_account_ids(&self) -> Result<Vec<Self::AccountId>, Self::Error>
fn get_account_ids(&self) -> Result<Vec<Self::AccountId>, Self::Error>
Source§fn get_account(
&self,
account_id: Self::AccountId,
) -> Result<Option<Self::Account>, Self::Error>
fn get_account( &self, account_id: Self::AccountId, ) -> Result<Option<Self::Account>, Self::Error>
Source§fn get_derived_account(
&self,
seed: &SeedFingerprint,
account_id: AccountId,
) -> Result<Option<Self::Account>, Self::Error>
fn get_derived_account( &self, seed: &SeedFingerprint, account_id: AccountId, ) -> Result<Option<Self::Account>, Self::Error>
SeedFingerprint
] and
[zip32::AccountId
], if any.Source§fn validate_seed(
&self,
account_id: Self::AccountId,
seed: &SecretVec<u8>,
) -> Result<bool, Self::Error>
fn validate_seed( &self, account_id: Self::AccountId, seed: &SecretVec<u8>, ) -> Result<bool, Self::Error>
Source§fn seed_relevance_to_derived_accounts(
&self,
seed: &SecretVec<u8>,
) -> Result<SeedRelevance<Self::AccountId>, Self::Error>
fn seed_relevance_to_derived_accounts( &self, seed: &SecretVec<u8>, ) -> Result<SeedRelevance<Self::AccountId>, Self::Error>
Account::source
is AccountSource::Derived
) in the wallet. Read moreSource§fn get_account_for_ufvk(
&self,
ufvk: &UnifiedFullViewingKey,
) -> Result<Option<Self::Account>, Self::Error>
fn get_account_for_ufvk( &self, ufvk: &UnifiedFullViewingKey, ) -> Result<Option<Self::Account>, Self::Error>
UnifiedFullViewingKey
, if any.Source§fn list_addresses(
&self,
account: Self::AccountId,
) -> Result<Vec<AddressInfo>, Self::Error>
fn list_addresses( &self, account: Self::AccountId, ) -> Result<Vec<AddressInfo>, Self::Error>
Source§fn get_last_generated_address_matching(
&self,
account: Self::AccountId,
request: UnifiedAddressRequest,
) -> Result<Option<UnifiedAddress>, Self::Error>
fn get_last_generated_address_matching( &self, account: Self::AccountId, request: UnifiedAddressRequest, ) -> Result<Option<UnifiedAddress>, Self::Error>
Source§fn get_account_birthday(
&self,
account: Self::AccountId,
) -> Result<BlockHeight, Self::Error>
fn get_account_birthday( &self, account: Self::AccountId, ) -> Result<BlockHeight, Self::Error>
Source§fn get_wallet_birthday(&self) -> Result<Option<BlockHeight>, Self::Error>
fn get_wallet_birthday(&self) -> Result<Option<BlockHeight>, Self::Error>
Source§fn get_wallet_summary(
&self,
min_confirmations: u32,
) -> Result<Option<WalletSummary<Self::AccountId>>, Self::Error>
fn get_wallet_summary( &self, min_confirmations: u32, ) -> Result<Option<WalletSummary<Self::AccountId>>, Self::Error>
WalletSummary
that represents the sync status, and the wallet balances
given the specified minimum number of confirmations for all accounts known to the
wallet; or Ok(None)
if the wallet has no summary data available.Source§fn chain_height(&self) -> Result<Option<BlockHeight>, Self::Error>
fn chain_height(&self) -> Result<Option<BlockHeight>, Self::Error>
WalletWrite::update_chain_tip
. Read moreSource§fn get_block_hash(
&self,
block_height: BlockHeight,
) -> Result<Option<BlockHash>, Self::Error>
fn get_block_hash( &self, block_height: BlockHeight, ) -> Result<Option<BlockHash>, Self::Error>
Ok(None)
if the hash
is not found in the database.Source§fn block_metadata(
&self,
height: BlockHeight,
) -> Result<Option<BlockMetadata>, Self::Error>
fn block_metadata( &self, height: BlockHeight, ) -> Result<Option<BlockMetadata>, Self::Error>
Source§fn block_fully_scanned(&self) -> Result<Option<BlockMetadata>, Self::Error>
fn block_fully_scanned(&self) -> Result<Option<BlockMetadata>, Self::Error>
Source§fn get_max_height_hash(
&self,
) -> Result<Option<(BlockHeight, BlockHash)>, Self::Error>
fn get_max_height_hash( &self, ) -> Result<Option<(BlockHeight, BlockHash)>, Self::Error>
Source§fn block_max_scanned(&self) -> Result<Option<BlockMetadata>, Self::Error>
fn block_max_scanned(&self) -> Result<Option<BlockMetadata>, Self::Error>
Source§fn suggest_scan_ranges(&self) -> Result<Vec<ScanRange>, Self::Error>
fn suggest_scan_ranges(&self) -> Result<Vec<ScanRange>, Self::Error>
Source§fn get_target_and_anchor_heights(
&self,
min_confirmations: NonZeroU32,
) -> Result<Option<(BlockHeight, BlockHeight)>, Self::Error>
fn get_target_and_anchor_heights( &self, min_confirmations: NonZeroU32, ) -> Result<Option<(BlockHeight, BlockHeight)>, Self::Error>
Source§fn get_tx_height(&self, txid: TxId) -> Result<Option<BlockHeight>, Self::Error>
fn get_tx_height(&self, txid: TxId) -> Result<Option<BlockHeight>, Self::Error>
Ok(None)
if the
transaction is not in the main chain.Source§fn get_unified_full_viewing_keys(
&self,
) -> Result<HashMap<Self::AccountId, UnifiedFullViewingKey>, Self::Error>
fn get_unified_full_viewing_keys( &self, ) -> Result<HashMap<Self::AccountId, UnifiedFullViewingKey>, Self::Error>
Source§fn get_memo(&self, note_id: NoteId) -> Result<Option<Memo>, Self::Error>
fn get_memo(&self, note_id: NoteId) -> Result<Option<Memo>, Self::Error>
Source§fn get_transaction(
&self,
txid: TxId,
) -> Result<Option<Transaction>, Self::Error>
fn get_transaction( &self, txid: TxId, ) -> Result<Option<Transaction>, Self::Error>
Source§fn get_sapling_nullifiers(
&self,
query: NullifierQuery,
) -> Result<Vec<(Self::AccountId, Nullifier)>, Self::Error>
fn get_sapling_nullifiers( &self, query: NullifierQuery, ) -> Result<Vec<(Self::AccountId, Nullifier)>, Self::Error>
Source§fn get_orchard_nullifiers(
&self,
query: NullifierQuery,
) -> Result<Vec<(Self::AccountId, Nullifier)>, Self::Error>
fn get_orchard_nullifiers( &self, query: NullifierQuery, ) -> Result<Vec<(Self::AccountId, Nullifier)>, Self::Error>
Source§fn get_transparent_receivers(
&self,
account: Self::AccountId,
include_change: bool,
) -> Result<HashMap<TransparentAddress, Option<TransparentAddressMetadata>>, Self::Error>
fn get_transparent_receivers( &self, account: Self::AccountId, include_change: bool, ) -> Result<HashMap<TransparentAddress, Option<TransparentAddressMetadata>>, Self::Error>
Source§fn get_transparent_balances(
&self,
account: Self::AccountId,
max_height: BlockHeight,
) -> Result<HashMap<TransparentAddress, Zatoshis>, Self::Error>
fn get_transparent_balances( &self, account: Self::AccountId, max_height: BlockHeight, ) -> Result<HashMap<TransparentAddress, Zatoshis>, Self::Error>
max_height
, when that balance is non-zero. Read moreSource§fn get_transparent_address_metadata(
&self,
account: Self::AccountId,
address: &TransparentAddress,
) -> Result<Option<TransparentAddressMetadata>, Self::Error>
fn get_transparent_address_metadata( &self, account: Self::AccountId, address: &TransparentAddress, ) -> Result<Option<TransparentAddressMetadata>, Self::Error>
Source§fn utxo_query_height(
&self,
account: Self::AccountId,
) -> Result<BlockHeight, Self::Error>
fn utxo_query_height( &self, account: Self::AccountId, ) -> Result<BlockHeight, Self::Error>
Source§fn get_known_ephemeral_addresses(
&self,
account: Self::AccountId,
index_range: Option<Range<NonHardenedChildIndex>>,
) -> Result<Vec<(TransparentAddress, TransparentAddressMetadata)>, Self::Error>
fn get_known_ephemeral_addresses( &self, account: Self::AccountId, index_range: Option<Range<NonHardenedChildIndex>>, ) -> Result<Vec<(TransparentAddress, TransparentAddressMetadata)>, Self::Error>
Source§fn find_account_for_ephemeral_address(
&self,
address: &TransparentAddress,
) -> Result<Option<Self::AccountId>, Self::Error>
fn find_account_for_ephemeral_address( &self, address: &TransparentAddress, ) -> Result<Option<Self::AccountId>, Self::Error>
get_known_ephemeral_addresses(account_id, None)
for any of the
wallet’s accounts, then return Ok(Some(account_id))
. Otherwise return Ok(None)
. Read moreSource§fn transaction_data_requests(
&self,
) -> Result<Vec<TransactionDataRequest>, Self::Error>
fn transaction_data_requests( &self, ) -> Result<Vec<TransactionDataRequest>, Self::Error>
TransactionDataRequest
values that describe information needed by
the wallet to complete its view of transaction history. Read moreSource§impl<C: Borrow<Connection>, P: Parameters, CL, R> WalletTest for WalletDb<C, P, CL, R>
Available on crate feature test-dependencies
only.
impl<C: Borrow<Connection>, P: Parameters, CL, R> WalletTest for WalletDb<C, P, CL, R>
test-dependencies
only.Source§fn get_tx_history(
&self,
) -> Result<Vec<TransactionSummary<<Self as WalletRead>::AccountId>>, <Self as WalletRead>::Error>
fn get_tx_history( &self, ) -> Result<Vec<TransactionSummary<<Self as WalletRead>::AccountId>>, <Self as WalletRead>::Error>
Source§fn get_sent_note_ids(
&self,
txid: &TxId,
protocol: ShieldedProtocol,
) -> Result<Vec<NoteId>, <Self as WalletRead>::Error>
fn get_sent_note_ids( &self, txid: &TxId, protocol: ShieldedProtocol, ) -> Result<Vec<NoteId>, <Self as WalletRead>::Error>
Source§fn get_sent_outputs(
&self,
txid: &TxId,
) -> Result<Vec<OutputOfSentTx>, <Self as WalletRead>::Error>
fn get_sent_outputs( &self, txid: &TxId, ) -> Result<Vec<OutputOfSentTx>, <Self as WalletRead>::Error>
fn get_checkpoint_history( &self, protocol: &ShieldedProtocol, ) -> Result<Vec<(BlockHeight, Option<Position>)>, <Self as WalletRead>::Error>
Source§fn get_transparent_output(
&self,
outpoint: &OutPoint,
allow_unspendable: bool,
) -> Result<Option<WalletTransparentOutput>, <Self as InputSource>::Error>
fn get_transparent_output( &self, outpoint: &OutPoint, allow_unspendable: bool, ) -> Result<Option<WalletTransparentOutput>, <Self as InputSource>::Error>
outpoint
.
Allows selecting unspendable outputs for testing purposes. Read moreSource§fn get_notes(
&self,
protocol: ShieldedProtocol,
) -> Result<Vec<ReceivedNote<Self::NoteRef, Note>>, <Self as InputSource>::Error>
fn get_notes( &self, protocol: ShieldedProtocol, ) -> Result<Vec<ReceivedNote<Self::NoteRef, Note>>, <Self as InputSource>::Error>
Source§impl<C: BorrowMut<Connection>, P: Parameters, CL: Clock, R> WalletWrite for WalletDb<C, P, CL, R>
impl<C: BorrowMut<Connection>, P: Parameters, CL: Clock, R> WalletWrite for WalletDb<C, P, CL, R>
Source§fn create_account(
&mut self,
account_name: &str,
seed: &SecretVec<u8>,
birthday: &AccountBirthday,
key_source: Option<&str>,
) -> Result<(Self::AccountId, UnifiedSpendingKey), Self::Error>
fn create_account( &mut self, account_name: &str, seed: &SecretVec<u8>, birthday: &AccountBirthday, key_source: Option<&str>, ) -> Result<(Self::AccountId, UnifiedSpendingKey), Self::Error>
Source§fn import_account_hd(
&mut self,
account_name: &str,
seed: &SecretVec<u8>,
account_index: AccountId,
birthday: &AccountBirthday,
key_source: Option<&str>,
) -> Result<(Self::Account, UnifiedSpendingKey), Self::Error>
fn import_account_hd( &mut self, account_name: &str, seed: &SecretVec<u8>, account_index: AccountId, birthday: &AccountBirthday, key_source: Option<&str>, ) -> Result<(Self::Account, UnifiedSpendingKey), Self::Error>
Source§fn import_account_ufvk(
&mut self,
account_name: &str,
ufvk: &UnifiedFullViewingKey,
birthday: &AccountBirthday,
purpose: AccountPurpose,
key_source: Option<&str>,
) -> Result<Self::Account, Self::Error>
fn import_account_ufvk( &mut self, account_name: &str, ufvk: &UnifiedFullViewingKey, birthday: &AccountBirthday, purpose: AccountPurpose, key_source: Option<&str>, ) -> Result<Self::Account, Self::Error>
Source§fn get_next_available_address(
&mut self,
account_uuid: Self::AccountId,
request: UnifiedAddressRequest,
) -> Result<Option<(UnifiedAddress, DiversifierIndex)>, Self::Error>
fn get_next_available_address( &mut self, account_uuid: Self::AccountId, request: UnifiedAddressRequest, ) -> Result<Option<(UnifiedAddress, DiversifierIndex)>, Self::Error>
Source§fn get_address_for_index(
&mut self,
account: Self::AccountId,
diversifier_index: DiversifierIndex,
request: UnifiedAddressRequest,
) -> Result<Option<UnifiedAddress>, Self::Error>
fn get_address_for_index( &mut self, account: Self::AccountId, diversifier_index: DiversifierIndex, request: UnifiedAddressRequest, ) -> Result<Option<UnifiedAddress>, Self::Error>
Source§fn update_chain_tip(
&mut self,
tip_height: BlockHeight,
) -> Result<(), Self::Error>
fn update_chain_tip( &mut self, tip_height: BlockHeight, ) -> Result<(), Self::Error>
Source§fn put_blocks(
&mut self,
from_state: &ChainState,
blocks: Vec<ScannedBlock<Self::AccountId>>,
) -> Result<(), Self::Error>
fn put_blocks( &mut self, from_state: &ChainState, blocks: Vec<ScannedBlock<Self::AccountId>>, ) -> Result<(), Self::Error>
Source§fn put_received_transparent_utxo(
&mut self,
_output: &WalletTransparentOutput,
) -> Result<Self::UtxoRef, Self::Error>
fn put_received_transparent_utxo( &mut self, _output: &WalletTransparentOutput, ) -> Result<Self::UtxoRef, Self::Error>
Source§fn store_decrypted_tx(
&mut self,
d_tx: DecryptedTransaction<'_, Self::AccountId>,
) -> Result<(), Self::Error>
fn store_decrypted_tx( &mut self, d_tx: DecryptedTransaction<'_, Self::AccountId>, ) -> Result<(), Self::Error>
Source§fn store_transactions_to_be_sent(
&mut self,
transactions: &[SentTransaction<'_, Self::AccountId>],
) -> Result<(), Self::Error>
fn store_transactions_to_be_sent( &mut self, transactions: &[SentTransaction<'_, Self::AccountId>], ) -> Result<(), Self::Error>
Source§fn truncate_to_height(
&mut self,
max_height: BlockHeight,
) -> Result<BlockHeight, Self::Error>
fn truncate_to_height( &mut self, max_height: BlockHeight, ) -> Result<BlockHeight, Self::Error>
Source§fn reserve_next_n_ephemeral_addresses(
&mut self,
account_id: Self::AccountId,
n: usize,
) -> Result<Vec<(TransparentAddress, TransparentAddressMetadata)>, Self::Error>
fn reserve_next_n_ephemeral_addresses( &mut self, account_id: Self::AccountId, n: usize, ) -> Result<Vec<(TransparentAddress, TransparentAddressMetadata)>, Self::Error>
n
available ephemeral addresses for the given account.
This cannot be undone, so as far as possible, errors associated with transaction
construction should have been reported before calling this method. Read moreSource§fn set_transaction_status(
&mut self,
txid: TxId,
status: TransactionStatus,
) -> Result<(), Self::Error>
fn set_transaction_status( &mut self, txid: TxId, status: TransactionStatus, ) -> Result<(), Self::Error>
Auto Trait Implementations§
impl<C, P, CL, R> Freeze for WalletDb<C, P, CL, R>
impl<C, P, CL, R> RefUnwindSafe for WalletDb<C, P, CL, R>
impl<C, P, CL, R> Send for WalletDb<C, P, CL, R>
impl<C, P, CL, R> Sync for WalletDb<C, P, CL, R>
impl<C, P, CL, R> Unpin for WalletDb<C, P, CL, R>
impl<C, P, CL, R> UnwindSafe for WalletDb<C, P, CL, R>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered
].§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.