Documentation ¶
Index ¶
- Constants
- Variables
- func Create(ns walletdb.ReadWriteBucket, seed, pubPassphrase, privPassphrase []byte, ...) error
- func CreateManagerNS(ns walletdb.ReadWriteBucket, defaultScopes map[KeyScope]ScopeAddrSchema) error
- func IsError(err error, code ErrorCode) bool
- func PutSyncedTo(ns walletdb.ReadWriteBucket, bs *BlockStamp) error
- func ValidateAccountName(name string) error
- type AccountProperties
- type AddressType
- type BlockStamp
- type CryptoKeyType
- type DerivationPath
- type EncryptorDecryptor
- type ErrorCode
- type KeyScope
- type ManagedAddress
- type ManagedPubKeyAddress
- type ManagedScriptAddress
- type Manager
- func (m *Manager) AddrAccount(ns walletdb.ReadBucket, address types.Address) (*ScopedKeyManager, uint32, error)
- func (m *Manager) Address(ns walletdb.ReadBucket, address types.Address) (ManagedAddress, error)
- func (m *Manager) Birthday() time.Time
- func (m *Manager) BirthdayBlock(ns walletdb.ReadBucket) (BlockStamp, bool, error)
- func (m *Manager) BlockHash(ns walletdb.ReadBucket, order uint32) (*hash.Hash, error)
- func (m *Manager) ChainHeight() uint32
- func (m *Manager) Close()
- func (m *Manager) FetchScopedKeyManager(scope KeyScope) (*ScopedKeyManager, error)
- func (m *Manager) ForEachAccountAddress(ns walletdb.ReadBucket, account uint32, fn func(maddr ManagedAddress) error) error
- func (m *Manager) IsLocked() bool
- func (m *Manager) Lock() error
- func (m *Manager) SetBirthday(ns walletdb.ReadWriteBucket, birthday time.Time) error
- func (m *Manager) SetBirthdayBlock(ns walletdb.ReadWriteBucket, block BlockStamp, verified bool) error
- func (m *Manager) SetChainHeight(ns walletdb.ReadWriteBucket, height uint32) error
- func (m *Manager) SetSyncedTo(ns walletdb.ReadWriteBucket, bs *BlockStamp) error
- func (m *Manager) SyncedTo() BlockStamp
- func (m *Manager) Unlock(ns walletdb.ReadBucket, passphrase []byte) error
- func (m *Manager) WatchOnly() bool
- type ManagerError
- type MigrationManager
- func (m *MigrationManager) CurrentVersion(ns walletdb.ReadBucket) (uint32, error)
- func (m *MigrationManager) Name() string
- func (m *MigrationManager) Namespace() walletdb.ReadWriteBucket
- func (m *MigrationManager) SetVersion(ns walletdb.ReadWriteBucket, version uint32) error
- func (m *MigrationManager) Versions() []migration.Version
- type ObtainUserInputFunc
- type OpenCallbacks
- type ScopeAddrSchema
- type ScopedIndex
- type ScopedKeyManager
- func (s *ScopedKeyManager) AccountName(ns walletdb.ReadBucket, account uint32) (string, error)
- func (s *ScopedKeyManager) AccountProperties(ns walletdb.ReadBucket, account uint32) (*AccountProperties, error)
- func (s *ScopedKeyManager) AddrAccount(ns walletdb.ReadBucket, address types.Address) (uint32, error)
- func (s *ScopedKeyManager) AddrSchema() ScopeAddrSchema
- func (s *ScopedKeyManager) Address(ns walletdb.ReadBucket, address types.Address) (ManagedAddress, error)
- func (s *ScopedKeyManager) ForEachAccountAddress(ns walletdb.ReadBucket, account uint32, fn func(maddr ManagedAddress) error) error
- func (s *ScopedKeyManager) ImportPrivateKey(ns walletdb.ReadWriteBucket, wif *utils.WIF) (ManagedPubKeyAddress, error)
- func (s *ScopedKeyManager) LastAccount(ns walletdb.ReadBucket) (uint32, error)
- func (s *ScopedKeyManager) LookupAccount(ns walletdb.ReadBucket, name string) (uint32, error)
- func (s *ScopedKeyManager) NewAccount(ns walletdb.ReadWriteBucket, name string) (uint32, error)
- func (s *ScopedKeyManager) NextExternalAddresses(ns walletdb.ReadWriteBucket, account uint32, numAddresses uint32) ([]ManagedAddress, error)
- func (s *ScopedKeyManager) Scope() KeyScope
- type ScryptOptions
Constants ¶
const ( // MaxAccountNum is the maximum allowed account number. This value was // chosen because accounts are hardened children and therefore must not // exceed the hardened child range of extended keys and it provides a // reserved account at the top of the range for supporting imported // addresses. MaxAccountNum = HardenedKeyStart - 2 // 2^31 - 2 // MaxAddressesPerAccount is the maximum allowed number of addresses // per account number. This value is based on the limitation of the // underlying hierarchical deterministic key derivation. MaxAddressesPerAccount = HardenedKeyStart - 1 // ImportedAddrAccount is the account number to use for all imported // addresses. This is useful since normal accounts are derived from // the root hierarchical deterministic key and imported addresses do // not fit into that model. ImportedAddrAccount = MaxAccountNum + 1 // 2^31 - 1 // ImportedAddrAccountName is the name of the imported account. ImportedAddrAccountName = "imported" // HardenedKeyStart is the index at which a hardended key starts. Each // extended key has 2^31 normal child keys and 2^31 hardned child keys. // Thus the range for normal child keys is [0, 2^31 - 1] and the range // for hardened child keys is [2^31, 2^32 - 1]. HardenedKeyStart = 0x80000000 // 2^31 // DefaultAccountNum is the number of the default account. DefaultAccountNum = 0 // Account combination payment mark AccountMergePayNum = -1 // ExternalBranch is the child number to use when performing BIP0044 // style hierarchical deterministic key derivation for the external // branch. ExternalBranch uint32 = 0 // InternalBranch is the child number to use when performing BIP0044 // style hierarchical deterministic key derivation for the internal // branch. InternalBranch uint32 = 1 )
Variables ¶
var ( // KeyScopeBIP0049Plus is the key scope of our modified BIP0049 // derivation. We say this is BIP0049 "plus", as we'll actually use // p2wkh change all change addresses. KeyScopeBIP0049Plus = KeyScope{ Purpose: 49, Coin: 0, } // KeyScopeBIP0084 is the key scope for BIP0084 derivation. BIP0084 // will be used to derive all p2wkh addresses. KeyScopeBIP0084 = KeyScope{ Purpose: 84, Coin: 0, } // KeyScopeBIP0044 is the key scope for BIP0044 derivation. Legacy // wallets will only be able to use this key scope, and no keys beyond // it. KeyScopeBIP0044 = KeyScope{ Purpose: 44, Coin: 0, } // DefaultKeyScopes is the set of default key scopes that will be // created by the root manager upon initial creation. DefaultKeyScopes = []KeyScope{ KeyScopeBIP0049Plus, KeyScopeBIP0084, KeyScopeBIP0044, } // ScopeAddrMap is a map from the default key scopes to the scope // address schema for each scope type. This will be consulted during // the initial creation of the root key manager. ScopeAddrMap = map[KeyScope]ScopeAddrSchema{ KeyScopeBIP0049Plus: { ExternalAddrType: NestedWitnessPubKey, InternalAddrType: WitnessPubKey, }, KeyScopeBIP0084: { ExternalAddrType: WitnessPubKey, InternalAddrType: WitnessPubKey, }, KeyScopeBIP0044: { InternalAddrType: PubKeyHash, ExternalAddrType: PubKeyHash, }, } )
var DefaultScryptOptions = ScryptOptions{
N: 262144,
R: 8,
P: 1,
}
DefaultScryptOptions is the default options used with scrypt.
var (
// LatestMgrVersion is the most recent manager version.
LatestMgrVersion = getLatestVersion()
)
Functions ¶
func Create ¶
func Create(ns walletdb.ReadWriteBucket, seed, pubPassphrase, privPassphrase []byte, chainParams *chaincfg.Params, config *ScryptOptions, birthday time.Time) error
NewScopedKeyManager creates a newgo bu scoped key manager from the root manager. A scoped key manager is a sub-manager that only has the coin type key of a particular coin type and BIP0043 purpose. This is useful as it enables callers to create an arbitrary BIP0043 like schema with a stand alone manager. Note that a new scoped manager cannot be created if: the wallet is watch only, the manager hasn't been unlocked, or the root key has been. neutered from the database.
TODO(roasbeef): addrtype of raw key means it'll look in scripts to possibly mark as gucci?
func CreateManagerNS ¶
func CreateManagerNS(ns walletdb.ReadWriteBucket, defaultScopes map[KeyScope]ScopeAddrSchema) error
createManagerNS creates the initial namespace structure needed for all of the manager data. This includes things such as all of the buckets as well as the version and creation date. In addition to creating the key space for the root address manager, we'll also create internal scopes for all the default manager scope types.
func PutSyncedTo ¶
func PutSyncedTo(ns walletdb.ReadWriteBucket, bs *BlockStamp) error
PutSyncedTo stores the provided synced to blockstamp to the database.
func ValidateAccountName ¶
ValidateAccountName validates the given account name and returns an error, if any.
Types ¶
type AccountProperties ¶
type AccountProperties struct { AccountNumber uint32 AccountName string ExternalKeyCount uint32 InternalKeyCount uint32 ImportedKeyCount uint32 }
AccountProperties contains properties associated with each account, such as the account name, number, and the nubmer of derived and imported keys.
type AddressType ¶
type AddressType uint8
AddressType represents the various address types waddrmgr is currently able to generate, and maintain.
NOTE: These MUST be stable as they're used for scope address schema recognition within the database.
const ( // PubKeyHash is a regular p2pkh address. PubKeyHash AddressType = iota // Script reprints a raw script address. Script // NestedWitnessPubKey represents a p2wkh output nested within a p2sh // output. Using this address type, the wallet can receive funds from // other wallet's which don't yet recognize the new segwit standard // output types. Receiving funds to this address maintains the // scalability, and malleability fixes due to segwit in a backwards // compatible manner. NestedWitnessPubKey // WitnessPubKey represents a p2wkh (pay-to-witness-key-hash) address // type. WitnessPubKey SecpPubKey )
type BlockStamp ¶
BlockStamp defines a block (by height and a unique hash) and is used to mark a point in the blockchain that an address manager element is synced to.
func FetchBirthdayBlock ¶
func FetchBirthdayBlock(ns walletdb.ReadBucket) (BlockStamp, error)
FetchBirthdayBlock retrieves the birthday block from the database.
The block is serialized as follows:
[0:4] block height [4:36] block hash [36:44] block timestamp
func FetchStartBlock ¶
func FetchStartBlock(ns walletdb.ReadBucket) (*BlockStamp, error)
FetchStartBlock loads the start block stamp for the manager from the database.
type CryptoKeyType ¶
type CryptoKeyType byte
CryptoKeyType is used to differentiate between different kinds of crypto keys.
type DerivationPath ¶
type DerivationPath struct { // Account is the account, or the first immediate child from the scoped // manager's hardened coin type key. Account uint32 // Branch is the branch to be derived from the account index above. For // BIP0044-like derivation, this is either 0 (external) or 1 // (internal). However, we allow this value to vary arbitrarily within // its size range. Branch uint32 // Index is the final child in the derivation path. This denotes the // key index within as a child of the account and branch. Index uint32 }
DerivationPath represents a derivation path from a particular key manager's scope. Each ScopedKeyManager starts key derivation from the end of their cointype hardened key: m/purpose'/cointype'. The fields in this struct allow further derivation to the next three child levels after the coin type key. This restriction is in the spriti of BIP0044 type derivation. We maintain a degree of coherency with the standard, but allow arbitrary derivations beyond the cointype key. The key derived using this path will be exactly: m/purpose'/cointype'/account/branch/index, where purpose' and cointype' are bound by the scope of a particular manager.
type EncryptorDecryptor ¶
type EncryptorDecryptor interface { Encrypt(in []byte) ([]byte, error) Decrypt(in []byte) ([]byte, error) Bytes() []byte CopyBytes([]byte) Zero() }
EncryptorDecryptor provides an abstraction on top of snacl.CryptoKey so that our tests can use dependency injection to force the behaviour they need.
type ErrorCode ¶
type ErrorCode int
ErrorCode identifies a kind of error.
const ( // ErrDatabase indicates an error with the underlying database. When // this error code is set, the Err field of the ManagerError will be // set to the underlying error returned from the database. ErrDatabase ErrorCode = iota // ErrUpgrade indicates the manager needs to be upgraded. This should // not happen in practice unless the version number has been increased // and there is not yet any code written to upgrade. ErrUpgrade // ErrKeyChain indicates an error with the key chain typically either // due to the inability to create an extended key or deriving a child // extended key. When this error code is set, the Err field of the // ManagerError will be set to the underlying error. ErrKeyChain // ErrCrypto indicates an error with the cryptography related operations // such as decrypting or encrypting data, parsing an EC public key, // or deriving a secret key from a password. When this error code is // set, the Err field of the ManagerError will be set to the underlying // error. ErrCrypto // ErrInvalidKeyType indicates an error where an invalid crypto // key type has been selected. ErrInvalidKeyType // ErrNoExist indicates that the specified database does not exist. ErrNoExist // ErrAlreadyExists indicates that the specified database already exists. ErrAlreadyExists // ErrCoinTypeTooHigh indicates that the coin type specified in the provided // network parameters is higher than the max allowed value as defined // by the maxCoinType constant. ErrCoinTypeTooHigh // ErrAccountNumTooHigh indicates that the specified account number is higher // than the max allowed value as defined by the MaxAccountNum constant. ErrAccountNumTooHigh // ErrLocked indicates that an operation, which requires the account // manager to be unlocked, was requested on a locked account manager. ErrLocked // ErrWatchingOnly indicates that an operation, which requires the // account manager to have access to private data, was requested on // a watching-only account manager. ErrWatchingOnly // ErrInvalidAccount indicates that the requested account is not valid. ErrInvalidAccount // ErrAddressNotFound indicates that the requested address is not known to // the account manager. ErrAddressNotFound // ErrAccountNotFound indicates that the requested account is not known to // the account manager. ErrAccountNotFound // ErrDuplicateAddress indicates an address already exists. ErrDuplicateAddress // ErrDuplicateAccount indicates an account already exists. ErrDuplicateAccount // ErrTooManyAddresses indicates that more than the maximum allowed number of // addresses per account have been requested. ErrTooManyAddresses // ErrWrongPassphrase indicates that the specified passphrase is incorrect. // This could be for either public or private master keys. ErrWrongPassphrase // ErrWrongNet indicates that the private key to be imported is not for the // the same network the account manager is configured for. ErrWrongNet // ErrCallBackBreak is used to break from a callback function passed // down to the manager. ErrCallBackBreak // ErrEmptyPassphrase indicates that the private passphrase was refused // due to being empty. ErrEmptyPassphrase // ErrScopeNotFound is returned when a target scope cannot be found // within the database. ErrScopeNotFound // ErrBirthdayBlockNotSet is returned when we attempt to retrieve the // wallet's birthday but it has not been set yet. ErrBirthdayBlockNotSet // ErrBlockNotFound is returned when we attempt to retrieve the hash for // a block that we do not know of. ErrBlockNotFound )
These constants are used to identify a specific ManagerError.
type KeyScope ¶
type KeyScope struct { // Purpose is the purpose of this key scope. This is the first child of // the master HD key. Purpose uint32 // Coin is a value that represents the particular coin which is the // child of the purpose key. With this key, any accounts, or other // children can be derived at all. Coin uint32 }
KeyScope represents a restricted key scope from the primary root key within the HD chain. From the root manager (m/) we can create a nearly arbitrary number of ScopedKeyManagers of key derivation path: m/purpose'/cointype'. These scoped managers can then me managed indecently, as they house the encrypted cointype key and can derive any child keys from there on.
type ManagedAddress ¶
type ManagedAddress interface { // Account returns the account the address is associated with. Account() uint32 // Address returns a btcutil.Address for the backing address. Address() types.Address // AddrHash returns the key or script hash related to the address AddrHash() []byte // Imported returns true if the backing address was imported instead // of being part of an address chain. Imported() bool // Internal returns true if the backing address was created for internal // use such as a change output of a transaction. Internal() bool // Compressed returns true if the backing address is compressed. Compressed() bool // Used returns true if the backing address has been used in a transaction. Used(ns walletdb.ReadBucket) bool // AddrType returns the address type of the managed address. This can // be used to quickly discern the address type without further // processing AddrType() AddressType }
ManagedAddress is an interface that provides acces to information regarding an address managed by an address manager. Concrete implementations of this type may provide further fields to provide information specific to that type of address.
type ManagedPubKeyAddress ¶
type ManagedPubKeyAddress interface { ManagedAddress // PubKey returns the public key associated with the address. PubKey() *ecc.PublicKey // ExportPubKey returns the public key associated with the address // serialized as a hex encoded string. ExportPubKey() string // PrivKey returns the private key for the address. It can fail if the // address manager is watching-only or locked, or the address does not // have any keys. PrivKey() (*ecc.PrivateKey, error) // ExportPrivKey returns the private key associated with the address // serialized as Wallet Import Format (WIF). ExportPrivKey() (string, error) // DerivationInfo contains the information required to derive the key // that backs the address via traditional methods from the HD root. For // imported keys, the first value will be set to false to indicate that // we don't know exactly how the key was derived. DerivationInfo() (KeyScope, DerivationPath, bool) }
ManagedPubKeyAddress extends ManagedAddress and additionally provides the public and private keys for pubkey-based addresses.
type ManagedScriptAddress ¶
type ManagedScriptAddress interface { ManagedAddress // Script returns the script associated with the address. Script() ([]byte, error) }
ManagedScriptAddress extends ManagedAddress and represents a pay-to-script-hash style of bitcoin addresses. It additionally provides information about the script.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager represents a concurrency safe crypto currency address manager and key store.
func (*Manager) AddrAccount ¶
func (m *Manager) AddrAccount(ns walletdb.ReadBucket, address types.Address) (*ScopedKeyManager, uint32, error)
AddrAccount returns the account to which the given address belongs. We also return the scoped manager that owns the addr+account combo.
func (*Manager) Address ¶
func (m *Manager) Address(ns walletdb.ReadBucket, address types.Address) (ManagedAddress, error)
Address returns a managed address given the passed address if it is known to the address manager. A managed address differs from the passed address in that it also potentially contains extra information needed to sign transactions such as the associated private key for pay-to-pubkey and pay-to-pubkey-hash addresses and the script associated with pay-to-script-hash addresses.
func (*Manager) Birthday ¶
Birthday returns the birthday, or earliest time a key could have been used, for the manager.
func (*Manager) BirthdayBlock ¶
func (m *Manager) BirthdayBlock(ns walletdb.ReadBucket) (BlockStamp, bool, error)
BirthdayBlock returns the birthday block, or earliest block a key could have been used, for the manager. A boolean is also returned to indicate whether the birthday block has been verified as correct.
func (*Manager) BlockHash ¶
BlockHash returns the block hash at a particular block height. This information is useful for comparing against the chain back-end to see if a reorg is taking place and how far back it goes.
func (*Manager) ChainHeight ¶
func (*Manager) Close ¶
func (m *Manager) Close()
Close cleanly shuts down the manager. It makes a best try effort to remove and zero all private key and sensitive public key material associated with the address manager from memory.
func (*Manager) FetchScopedKeyManager ¶
func (m *Manager) FetchScopedKeyManager(scope KeyScope) (*ScopedKeyManager, error)
FetchScopedKeyManager attempts to fetch an active scoped manager according to its registered scope. If the manger is found, then a nil error is returned along with the active scoped manager. Otherwise, a nil manager and a non-nil error will be returned.
func (*Manager) ForEachAccountAddress ¶
func (m *Manager) ForEachAccountAddress(ns walletdb.ReadBucket, account uint32, fn func(maddr ManagedAddress) error) error
ForEachAccountAddress calls the given function with each address of the given account stored in the manager, breaking early on error.
func (*Manager) IsLocked ¶
IsLocked returns whether or not the address managed is locked. When it is unlocked, the decryption key needed to decrypt private keys used for signing is in memory.
func (*Manager) Lock ¶
Lock performs a best try effort to remove and zero all secret keys associated with the address manager.
This function will return an error if invoked on a watching-only address manager.
func (*Manager) SetBirthday ¶
SetBirthday sets the birthday, or earliest time a key could have been used, for the manager.
func (*Manager) SetBirthdayBlock ¶
func (m *Manager) SetBirthdayBlock(ns walletdb.ReadWriteBucket, block BlockStamp, verified bool) error
SetBirthdayBlock sets the birthday block, or earliest time a key could have been used, for the manager. The verified boolean can be used to specify whether this birthday block should be sanity checked to determine if there exists a better candidate to prevent less block fetching.
func (*Manager) SetChainHeight ¶
func (m *Manager) SetChainHeight(ns walletdb.ReadWriteBucket, height uint32) error
func (*Manager) SetSyncedTo ¶
func (m *Manager) SetSyncedTo(ns walletdb.ReadWriteBucket, bs *BlockStamp) error
SetSyncedTo marks the address manager to be in sync with the recently-seen block described by the blockstamp. When the provided blockstamp is nil, the oldest blockstamp of the block the manager was created at and of all imported addresses will be used. This effectively allows the manager to be marked as unsynced back to the oldest known point any of the addresses have appeared in the block chain.
func (*Manager) SyncedTo ¶
func (m *Manager) SyncedTo() BlockStamp
SyncedTo returns details about the block height and hash that the address manager is synced through at the very least. The intention is that callers can use this information for intelligently initiating rescans to sync back to the best chain from the last known good block.
func (*Manager) Unlock ¶
func (m *Manager) Unlock(ns walletdb.ReadBucket, passphrase []byte) error
Unlock derives the master private key from the specified passphrase. An invalid passphrase will return an error. Otherwise, the derived secret key is stored in memory until the address manager is locked. Any failures that occur during this function will result in the address manager being locked, even if it was already unlocked prior to calling this function.
This function will return an error if invoked on a watching-only address manager.
type ManagerError ¶
type ManagerError struct { ErrorCode ErrorCode // Describes the kind of error Description string // Human readable description of the issue Err error // Underlying error }
ManagerError provides a single type for errors that can happen during address manager operation. It is used to indicate several types of failures including errors with caller requests such as invalid accounts or requesting private keys against a locked address manager, errors with the database (ErrDatabase), errors with key chain derivation (ErrKeyChain), and errors related to crypto (ErrCrypto).
The caller can use type assertions to determine if an error is a ManagerError and access the ErrorCode field to ascertain the specific reason for the failure.
The ErrDatabase, ErrKeyChain, and ErrCrypto error codes will also have the Err field set with the underlying error.
func (ManagerError) Error ¶
func (e ManagerError) Error() string
Error satisfies the error interface and prints human-readable errors.
type MigrationManager ¶
type MigrationManager struct {
// contains filtered or unexported fields
}
MigrationManager is an implementation of the migration.Manager interface that will be used to handle migrations for the address manager. It exposes the necessary parameters required to successfully perform migrations.
func (*MigrationManager) CurrentVersion ¶
func (m *MigrationManager) CurrentVersion(ns walletdb.ReadBucket) (uint32, error)
CurrentVersion returns the current version of the service's database.
NOTE: This method is part of the migration.Manager interface.
func (*MigrationManager) Name ¶
func (m *MigrationManager) Name() string
Name returns the name of the service we'll be attempting to upgrade.
NOTE: This method is part of the migration.Manager interface.
func (*MigrationManager) Namespace ¶
func (m *MigrationManager) Namespace() walletdb.ReadWriteBucket
Namespace returns the top-level bucket of the service.
NOTE: This method is part of the migration.Manager interface.
func (*MigrationManager) SetVersion ¶
func (m *MigrationManager) SetVersion(ns walletdb.ReadWriteBucket, version uint32) error
SetVersion sets the version of the service's database.
NOTE: This method is part of the migration.Manager interface.
func (*MigrationManager) Versions ¶
func (m *MigrationManager) Versions() []migration.Version
Versions returns all of the available database versions of the service.
NOTE: This method is part of the migration.Manager interface.
type ObtainUserInputFunc ¶
ObtainUserInputFunc is a function that reads a user input and returns it as a byte stream. It is used to accept data required during upgrades, for e.g. wallet seed and private passphrase.
type OpenCallbacks ¶
type OpenCallbacks struct { // ObtainSeed is a callback function that is potentially invoked during // upgrades. It is intended to be used to request the wallet seed // from the user (or any other mechanism the caller deems fit). ObtainSeed ObtainUserInputFunc // ObtainPrivatePass is a callback function that is potentially invoked // during upgrades. It is intended to be used to request the wallet // private passphrase from the user (or any other mechanism the caller // deems fit). ObtainPrivatePass ObtainUserInputFunc }
OpenCallbacks houses caller-provided callbacks that may be called when opening an existing manager. The open blocks on the execution of these functions.
type ScopeAddrSchema ¶
type ScopeAddrSchema struct { // ExternalAddrType is the address type for all keys within branch 0. ExternalAddrType AddressType // InternalAddrType is the address type for all keys within branch 1 // (change addresses). InternalAddrType AddressType }
ScopeAddrSchema is the address schema of a particular KeyScope. This will be persisted within the database, and will be consulted when deriving any keys for a particular scope to know how to encode the public keys as addresses.
type ScopedIndex ¶
type ScopedIndex struct { // Scope is the BIP44 account' used to derive the child key. Scope KeyScope // Index is the BIP44 address_index used to derive the child key. Index uint32 }
ScopedIndex is a tuple of KeyScope and child Index. This is used to compactly identify a particular child key, when the account and branch can be inferred from context.
type ScopedKeyManager ¶
type ScopedKeyManager struct {
// contains filtered or unexported fields
}
ScopedKeyManager is a sub key manager under the main root key manager. The root key manager will handle the root HD key (m/), while each sub scoped key manager will handle the cointype key for a particular key scope (m/purpose'/cointype'). This abstraction allows higher-level applications built upon the root key manager to perform their own arbitrary key derivation, while still being protected under the encryption of the root key manager.
func (*ScopedKeyManager) AccountName ¶
func (s *ScopedKeyManager) AccountName(ns walletdb.ReadBucket, account uint32) (string, error)
AccountName returns the account name for the given account number stored in the manager.
func (*ScopedKeyManager) AccountProperties ¶
func (s *ScopedKeyManager) AccountProperties(ns walletdb.ReadBucket, account uint32) (*AccountProperties, error)
AccountProperties returns properties associated with the account, such as the account number, name, and the number of derived and imported keys.
func (*ScopedKeyManager) AddrAccount ¶
func (s *ScopedKeyManager) AddrAccount(ns walletdb.ReadBucket, address types.Address) (uint32, error)
AddrAccount returns the account to which the given address belongs.
func (*ScopedKeyManager) AddrSchema ¶
func (s *ScopedKeyManager) AddrSchema() ScopeAddrSchema
AddrSchema returns the set address schema for the target ScopedKeyManager.
func (*ScopedKeyManager) Address ¶
func (s *ScopedKeyManager) Address(ns walletdb.ReadBucket, address types.Address) (ManagedAddress, error)
Address returns a managed address given the passed address if it is known to the address manager. A managed address differs from the passed address in that it also potentially contains extra information needed to sign transactions such as the associated private key for pay-to-pubkey and pay-to-pubkey-hash addresses and the script associated with pay-to-script-hash addresses.
func (*ScopedKeyManager) ForEachAccountAddress ¶
func (s *ScopedKeyManager) ForEachAccountAddress(ns walletdb.ReadBucket, account uint32, fn func(maddr ManagedAddress) error) error
ForEachAccountAddress calls the given function with each address of the given account stored in the manager, breaking early on error.
func (*ScopedKeyManager) ImportPrivateKey ¶
func (s *ScopedKeyManager) ImportPrivateKey(ns walletdb.ReadWriteBucket, wif *utils.WIF) (ManagedPubKeyAddress, error)
This function will return an error if the address manager is locked and not watching-only, or not for the same network as the key trying to be imported. It will also return an error if the address already exists. Any other errors returned are generally unexpected.
func (*ScopedKeyManager) LastAccount ¶
func (s *ScopedKeyManager) LastAccount(ns walletdb.ReadBucket) (uint32, error)
LastAccount returns the last account stored in the manager.
func (*ScopedKeyManager) LookupAccount ¶
func (s *ScopedKeyManager) LookupAccount(ns walletdb.ReadBucket, name string) (uint32, error)
LookupAccount loads account number stored in the manager for the given account name
func (*ScopedKeyManager) NewAccount ¶
func (s *ScopedKeyManager) NewAccount(ns walletdb.ReadWriteBucket, name string) (uint32, error)
NewAccount creates and returns a new account stored in the manager based on the given account name. If an account with the same name already exists, ErrDuplicateAccount will be returned. Since creating a new account requires access to the cointype keys (from which extended account keys are derived), it requires the manager to be unlocked.
func (*ScopedKeyManager) NextExternalAddresses ¶
func (s *ScopedKeyManager) NextExternalAddresses(ns walletdb.ReadWriteBucket, account uint32, numAddresses uint32) ([]ManagedAddress, error)
NextExternalAddresses returns the specified number of next chained addresses that are intended for external use from the address manager.
func (*ScopedKeyManager) Scope ¶
func (s *ScopedKeyManager) Scope() KeyScope
Scope returns the exact KeyScope of this scoped key manager.
type ScryptOptions ¶
type ScryptOptions struct {
N, R, P int
}
ScryptOptions is used to hold the scrypt parameters needed when deriving new passphrase keys.