Documentation ¶
Index ¶
- Constants
- Variables
- func DecryptDataV3(cryptoJson CryptoJSON, auth string) ([]byte, error)
- func DefaultIterator(base DerivationPath) func() DerivationPath
- func EncryptKey(key *Key, auth string, scryptN, scryptP int) ([]byte, error)
- func LedgerLiveIterator(base DerivationPath) func() DerivationPath
- func NewAuthNeededError(needed string) error
- func TextAndHash(data []byte) ([]byte, string)
- func TextHash(data []byte) []byte
- type Account
- type AccountsByURL
- type AmbiguousAddrError
- type AuthNeededError
- type Backend
- type Config
- type CryptoJSON
- type DerivationPath
- type Key
- type KeyStore
- func (ks *KeyStore) Accounts() []Account
- func (ks *KeyStore) Find(a Account) (Account, error)
- func (ks *KeyStore) Import(keyJSON []byte, passphrase, newPassphrase string) (Account, error)
- func (ks *KeyStore) ImportECDSA(priv *ecdsa.PrivateKey, passphrase string) (Account, error)
- func (ks *KeyStore) ImportPreSaleKey(keyJSON []byte, passphrase string) (Account, error)
- func (ks *KeyStore) Lock(addr entity.Address) error
- func (ks *KeyStore) NewAccount(passphrase string) (Account, error)
- func (ks *KeyStore) SignHash(a Account, hash []byte) ([]byte, error)
- func (ks *KeyStore) SignHashWithPassphrase(a Account, passphrase string, hash []byte) (signature []byte, err error)
- func (ks *KeyStore) SignTx(a Account, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error)
- func (ks *KeyStore) SignTxWithPassphrase(a Account, passphrase string, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error)
- func (ks *KeyStore) Subscribe(sink chan<- WalletEvent) event.Subscription
- func (ks *KeyStore) TimedUnlock(a Account, passphrase string, timeout time.Duration) error
- func (ks *KeyStore) Unlock(a Account, passphrase string) error
- func (ks *KeyStore) Update(a Account, passphrase, newPassphrase string) error
- func (ks *KeyStore) Wallets() []Wallet
- type Manager
- func (am *Manager) Accounts() []entity.Address
- func (am *Manager) AddBackend(backend Backend)
- func (am *Manager) Backends(kind reflect.Type) []Backend
- func (am *Manager) Close() error
- func (am *Manager) Config() *Config
- func (am *Manager) Find(account Account) (Wallet, error)
- func (am *Manager) Subscribe(sink chan<- WalletEvent) event.Subscription
- func (am *Manager) Wallet(url string) (Wallet, error)
- func (am *Manager) Wallets() []Wallet
- type URL
- type Wallet
- type WalletEvent
- type WalletEventType
- type WalletsByURL
Constants ¶
const ( MimetypeDataWithValidator = "data/validator" MimetypeTypedData = "data/typed" MimetypeClique = "application/x-clique-header" MimetypeTextPlain = "text/plain" )
const ( // StandardScryptN是Scrypt加密算法的N参数,使用256MB内存,在现代处理器上大约需要1s的CPU时间。 StandardScryptN = 1 << 18 // StandardScryptP是Scrypt加密算法的P参数,使用256MB内存,在现代处理器上大约需要1s的CPU时间。 StandardScryptP = 1 //LightScryptN是Scrypt加密算法的N参数,使用4MB内存,在现代处理器上占用大约100ms的CPU时间。 LightScryptN = 1 << 12 // LightScryptP是Scrypt加密算法的P参数,使用4MB内存,在现代处理器上需要大约100ms的CPU时间。 LightScryptP = 6 )
const (
KeyStoreScheme = "keystore"
)
Variables ¶
var ( ErrLocked = NewAuthNeededError("password or unlock") ErrNoMatch = errors.New("no key for given address or file") ErrDecrypt = errors.New("could not decrypt key with given password") // 如果试图导入的帐户已存在于密钥库中,则返回ErrAccountAlreadyExists。 ErrAccountAlreadyExists = errors.New("account already exists") )
var DefaultBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0, 0}
DefaultBaseDerivationPath is the base path from which custom derivation endpoints are incremented. As such, the first account will be at m/44'/60'/0'/0/0, the second at m/44'/60'/0'/0/1, etc.
var DefaultRootDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0}
DefaultRootDerivationPath is the root path to which custom derivation endpoints are appended. As such, the first account will be at m/44'/60'/0'/0, the second at m/44'/60'/0'/1, etc.
var ErrInvalidPassphrase = errors.New("invalid password")
当解密操作接收到错误的密码短语时,将返回errInvalidPassphase。
var ErrNotSupported = errors.New("not supported")
当从不支持的帐户后端请求操作时,将返回ErrNotSupported。
var ErrUnknownAccount = errors.New("unknown account")
对于没有后端提供指定帐户的任何请求的操作,都会返回ErrUnknownAccount。
var ErrUnknownWallet = errors.New("unknown wallet")
对于没有后端提供指定钱包的任何请求操作,都会返回ErrUnknownWallet。
var ErrWalletAlreadyOpen = errors.New("wallet already open")
如果第二次尝试打开钱包,则返回ErrWalletAlreadyOpen。
var ErrWalletClosed = errors.New("wallet closed")
如果钱包脱机,则返回ErrWalletClosed。
var KeyStoreType = reflect.TypeOf(&KeyStore{})
KeyStoreType是密钥库后端的反射类型。
var LegacyLedgerBaseDerivationPath = DerivationPath{0x80000000 + 44, 0x80000000 + 60, 0x80000000 + 0, 0}
LegacyLedgerBaseDerivationPath is the legacy base path from which custom derivation endpoints are incremented. As such, the first account will be at m/44'/60'/0'/0, the second at m/44'/60'/0'/1, etc.
Functions ¶
func DecryptDataV3 ¶
func DecryptDataV3(cryptoJson CryptoJSON, auth string) ([]byte, error)
func DefaultIterator ¶
func DefaultIterator(base DerivationPath) func() DerivationPath
DefaultIterator creates a BIP-32 path iterator, which progresses by increasing the last component: i.e. m/44'/60'/0'/0/0, m/44'/60'/0'/0/1, m/44'/60'/0'/0/2, ... m/44'/60'/0'/0/N.
func EncryptKey ¶
EncryptKey使用指定的scrypt参数将密钥加密到json blob中,稍后可以解密该blob。
func LedgerLiveIterator ¶
func LedgerLiveIterator(base DerivationPath) func() DerivationPath
LedgerLiveIterator creates a bip44 path iterator for Ledger Live. Ledger Live increments the third component rather than the fifth component i.e. m/44'/60'/0'/0/0, m/44'/60'/1'/0/0, m/44'/60'/2'/0/0, ... m/44'/60'/N'/0/0.
func NewAuthNeededError ¶
NewAuthNeededError创建一个新的身份验证错误,其中包含有关所需字段集的额外详细信息。
func TextAndHash ¶
TextAndHash是一个帮助函数,用于计算给定消息的哈希,该哈希可安全用于计算签名。 哈希计算为keccak256(“\x19Octopus签名消息:\n“${Message length}${Message}”)。 这为已签名的消息提供了上下文,并阻止了事务的签名。
Types ¶
type Account ¶
type Account struct { Address entity.Address `json:"address"` //从密钥派生的octopus帐户地址 URL URL `json:"url"` // 后端中的可选资源定位器 }
Account表示位于可选URL字段定义的特定位置的octopus帐户。
type AccountsByURL ¶
type AccountsByURL []Account
AccountsByURL implements sort.Interface for []Account based on the URL field.
func (AccountsByURL) Len ¶
func (a AccountsByURL) Len() int
func (AccountsByURL) Less ¶
func (a AccountsByURL) Less(i, j int) bool
func (AccountsByURL) Swap ¶
func (a AccountsByURL) Swap(i, j int)
type AmbiguousAddrError ¶
尝试解锁存在多个文件的地址时,将返回AmbiguousAddError。
func (*AmbiguousAddrError) Error ¶
func (err *AmbiguousAddrError) Error() string
type AuthNeededError ¶
type AuthNeededError struct {
Needed string // 用户需要提供的额外身份验证
}
AuthNeededError由签名请求的后端返回,其中要求用户在签名成功之前提供进一步的身份验证。 这通常意味着要么需要提供密码,要么可能是某个硬件设备显示的一次性PIN码。
type Backend ¶
type Backend interface { // Wallet检索后端当前知道的钱包列表。 //默认情况下,不会打开返回的钱包。 //对于软件高清钱包,这意味着没有解密任何基本种子,而对于硬件钱包,则没有建立任何实际连接。 //生成的钱包列表将根据后端分配的内部URL按字母顺序排序。 //由于钱包(尤其是硬件)可能来去不定,因此在后续检索过程中,同一个钱包可能会出现在列表中的不同位置。 Wallets() []Wallet // Subscribe创建异步订阅,以便在后端检测到钱包到达或离开时接收通知。 Subscribe(sink chan<- WalletEvent) event.Subscription }
后端是一个“钱包提供商”,其中可能包含一批他们可以签署交易的账户,并可根据请求签署交易。
type CryptoJSON ¶
type CryptoJSON struct { Cipher string `json:"cipher"` CipherText string `json:"ciphertext"` CipherParams cipherparamsJSON `json:"cipherparams"` KDF string `json:"kdf"` KDFParams map[string]interface{} `json:"kdfparams"` MAC string `json:"mac"` }
func EncryptDataV3 ¶
func EncryptDataV3(data, auth []byte, scryptN, scryptP int) (CryptoJSON, error)
Encryptdata使用密码“auth”对作为“data”给定的数据进行加密。
type DerivationPath ¶
type DerivationPath []uint32
DerivationPath represents the computer friendly version of a hierarchical deterministic wallet account derivation path.
The BIP-32 spec https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki defines derivation paths to be of the form:
m / purpose' / coin_type' / account' / change / address_index
The BIP-44 spec https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki defines that the `purpose` be 44' (or 0x8000002C) for crypto currencies, and SLIP-44 https://github.com/satoshilabs/slips/blob/master/slip-0044.md assigns the `coin_type` 60' (or 0x8000003C) to Ethereum.
The root path for Ethereum is m/44'/60'/0'/0 according to the specification from https://github.com/ethereum/EIPs/issues/84, albeit it's not set in stone yet whether accounts should increment the last component or the children of that. We will go with the simpler approach of incrementing the last component.
func ParseDerivationPath ¶
func ParseDerivationPath(path string) (DerivationPath, error)
ParseDerivationPath converts a user specified derivation path string to the internal binary representation.
Full derivation paths need to start with the `m/` prefix, relative derivation paths (which will get appended to the default root path) must not have prefixes in front of the first element. Whitespace is ignored.
func (DerivationPath) MarshalJSON ¶
func (path DerivationPath) MarshalJSON() ([]byte, error)
MarshalJSON turns a derivation path into its json-serialized string
func (DerivationPath) String ¶
func (path DerivationPath) String() string
String implements the stringer interface, converting a binary derivation path to its canonical representation.
func (*DerivationPath) UnmarshalJSON ¶
func (path *DerivationPath) UnmarshalJSON(b []byte) error
UnmarshalJSON a json-serialized string back into a derivation path
type Key ¶
type KeyStore ¶
type KeyStore struct {
// contains filtered or unexported fields
}
密钥库管理磁盘上的密钥存储目录。
func NewKeyStore ¶
NewKeyStore为给定目录创建密钥库。
func NewPlaintextKeyStore ¶
NewPlaintextKeyStore为给定目录创建密钥库。不推荐使用:使用NewKeyStore。
func (*KeyStore) ImportECDSA ¶
ImportECDSA将给定的密钥存储到密钥目录中,并使用密码对其进行加密。
func (*KeyStore) ImportPreSaleKey ¶
ImportPreSaleKey对给定的以太坊预售钱包进行解密,并将密钥文件存储在密钥目录中。 密钥文件使用相同的密码短语加密。
func (*KeyStore) NewAccount ¶
NewAccount生成一个新密钥并将其存储到密钥目录中,并使用密码短语对其进行加密。
func (*KeyStore) SignHashWithPassphrase ¶
func (ks *KeyStore) SignHashWithPassphrase(a Account, passphrase string, hash []byte) (signature []byte, err error)
如果与给定地址匹配的私钥可以用给定的密码短语解密,SignHashWithPassphrase将对哈希进行签名。生成的签名采用[R | | S | V]格式,其中V为0或1。
func (*KeyStore) SignTx ¶
func (ks *KeyStore) SignTx(a Account, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error)
SignTx使用请求的帐户签署给定的交易。
func (*KeyStore) SignTxWithPassphrase ¶
func (ks *KeyStore) SignTxWithPassphrase(a Account, passphrase string, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error)
如果与给定地址匹配的私钥可以用给定的密码短语解密,SignTxWithPassphrase将对事务进行签名。
func (*KeyStore) Subscribe ¶
func (ks *KeyStore) Subscribe(sink chan<- WalletEvent) event.Subscription
订阅实现帐户。后端,创建异步订阅以接收有关添加或删除密钥库钱包的通知。
func (*KeyStore) TimedUnlock ¶
TimedUnlock使用密码短语解锁给定帐户。帐户在超时期间保持解锁。 超时0将解锁帐户,直到程序退出。帐户必须与唯一密钥文件匹配。 如果帐户地址已解锁一段时间,TimedUnlock会延长或缩短活动解锁超时。 如果该地址之前已无限期解锁,则不会更改超时。
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager是一个总体客户经理,可以与各种后端进行通信以签署交易。
func NewManager ¶
NewManager创建一个通用帐户管理器,通过各种支持的后端签署交易。
func (*Manager) AddBackend ¶
AddBackend开始跟踪钱包更新的其他后端。cmd/geth假设此func返回后,后端已经集成。
func (*Manager) Subscribe ¶
func (am *Manager) Subscribe(sink chan<- WalletEvent) event.Subscription
Subscribe创建异步订阅,以便在经理检测到钱包从其任何后端到达或离开时接收通知。
type URL ¶
URL表示钱包或帐户的规范标识URL。这是url的简化版本。 URL,具有重要的限制(此处认为是功能),即它仅包含值可复制组件,并且不进行任何特殊字符的URL编码/解码。 前者对于允许复制帐户而不保留对原始版本的实时引用很重要,而后者对于确保一个单一的规范形式而不是RFC 3986规范允许的多个规范形式很重要。 因此,这些URL不应在octopus钱包或帐户的范围之外使用。
func (URL) TerminalString ¶
TerminalString实现日志。TerminalStringer接口。
type Wallet ¶
type Wallet interface { // URL检索可访问此钱包的规范路径。上层使用它定义从多个后端到所有钱包的排序顺序。 URL() URL // Status返回文本状态,以帮助用户了解钱包的当前状态。它还返回一个错误,指示钱包可能遇到的任何故障。 Status() (string, error) // Open初始化对wallet实例的访问。它并不意味着解锁或解密帐户密钥,而只是建立与硬件钱包的连接和/或访问派生种子。 //特定钱包实例的实现可能使用或不使用passphrase参数。没有无密码开放方法的原因是为了实现统一的钱包处理,而不考虑不同的后端提供商。 //请注意,如果您打开钱包,必须将其关闭以释放任何分配的资源(使用硬件钱包时尤其重要)。 Open(passphrase string) error // Close释放打开的wallet实例所持有的所有资源。 Close() error // Accounts检索钱包当前知道的签名帐户列表。 //对于分层确定性钱包,该列表不会详尽无遗,而只包含在帐户派生过程中显式固定的帐户。 Accounts() []Account // 包含返回帐户是否属于此特定钱包的一部分。 Contains(account Account) bool // 派生尝试在指定的派生路径上显式派生层次确定性帐户。 //如果需要,派生帐户将添加到钱包的跟踪帐户列表中。 Derive(path DerivationPath, pin bool) (Account, error) // SelfDerive设置基本帐户派生路径,钱包尝试从中发现非零帐户,并自动将其添加到跟踪帐户列表中。 //注意,自派生将递增指定路径的最后一个组件,而不是递减到子路径中,以允许发现从非零组件开始的帐户。 //一些硬件钱包在进化过程中切换了派生路径,因此这种方法也支持提供多个基础来发现旧用户帐户。只有最后一个基数将用于派生下一个空帐户。 //您可以通过使用零链状态读取器调用SelfDerive来禁用自动帐户发现。 SelfDerive(bases []DerivationPath, chain octopus.ChainStateReader) // SignData请求钱包对给定数据的哈希进行签名,它可以仅通过包含在其中的地址来查找指定的帐户,也可以选择借助嵌入URL字段中的任何位置元数据来查找指定的帐户。 //如果钱包需要额外的身份验证来签署请求(例如,解密帐户的密码或验证交易的PIN码),将返回AuthNeededError实例,其中包含用户需要哪些字段或操作的信息。 //用户可以通过SignDataWithPassphrase或其他方式(例如解锁密钥库中的帐户)提供所需的详细信息来重试。 SignData(account Account, mimeType string, data []byte) ([]byte, error) // SignDataWithPassphrase与SignData相同,但也接受密码 //注意:错误的调用可能会将两个字符串弄错,并在mimetype字段中提供密码,反之亦然。 //因此,实现永远不应回显mimetype或在错误响应中返回mimetype SignDataWithPassphrase(account Account, passphrase, mimeType string, data []byte) ([]byte, error) // SignText请求钱包对给定数据段的哈希进行签名,该数据段以以太坊前缀方案为前缀,钱包可以仅通过其包含的地址查找指定的帐户,也可以借助嵌入URL字段中的任何位置元数据进行查找。 //如果钱包需要额外的身份验证来签署请求(例如,解密帐户的密码或验证交易的PIN码),将返回AuthNeededError实例,其中包含用户需要哪些字段或操作的信息。 //用户可以通过SignTextWithPassphrase或其他方式(例如解锁密钥库中的帐户)提供所需的详细信息来重试。 //此方法应以“规范”格式返回签名,v为0或1。 SignText(account Account, text []byte) ([]byte, error) // SignTextWithPassphrase与Signtext相同,但也接受密码 SignTextWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) // SignTx请求钱包签署给定交易。 //它可以单独通过其中包含的地址来查找指定的帐户,也可以选择借助嵌入URL字段中的任何位置元数据来查找指定的帐户。 //如果钱包需要额外的身份验证来签署请求(例如,解密帐户的密码或验证交易的PIN码),将返回AuthNeededError实例,其中包含用户需要哪些字段或操作的信息。 //用户可以通过SignTxWithPassphrase或其他方block锁密钥库中的帐户)提供所需的详细信息来重试。 SignTx(account Account, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error) // SignTxWithPassphrase与SignTx相同,但也接受密码 SignTxWithPassphrase(account Account, passphrase string, tx *block2.Transaction, chainID *big.Int) (*block2.Transaction, error) }
Wallet表示可能包含一个或多个帐户(源自同一种子)的软件或硬件钱包。
type WalletEvent ¶
type WalletEvent struct { Wallet Wallet // 钱包实例到达或离开 Kind WalletEventType // 系统中发生的事件类型 }
WalletEvent是在检测到钱包到达或离开时由帐户后端触发的事件。
type WalletEventType ¶
type WalletEventType int
WalletEventType表示钱包订阅子系统可以触发的不同事件类型。
const ( // 当通过USB或密钥库中的文件系统事件检测到新钱包时,将触发WalletArrived。 WalletArrived WalletEventType = iota //WalletOpened在钱包成功打开时触发,目的是启动任何后台进程,如自动密钥导出。 WalletOpened // WalletDropped WalletDropped )
type WalletsByURL ¶
type WalletsByURL []Wallet
WalletsByURL implements sort.Interface for []Wallet based on the URL field.
func (WalletsByURL) Len ¶
func (w WalletsByURL) Len() int
func (WalletsByURL) Less ¶
func (w WalletsByURL) Less(i, j int) bool
func (WalletsByURL) Swap ¶
func (w WalletsByURL) Swap(i, j int)
Source Files ¶
- hd.go
- octopus_accounts.go
- octopus_accounts_cache.go
- octopus_accounts_errors.go
- octopus_accounts_init.go
- octopus_accounts_kestorePlain.go
- octopus_accounts_key.go
- octopus_accounts_keystore.go
- octopus_accounts_keystoreWallet.go
- octopus_accounts_manager.go
- octopus_accounts_passphrase.go
- octopus_accounts_url.go
- presale.go
- sort.go