accounts

package
v0.0.0-...-de85661 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 3, 2022 License: Unlicense Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MimetypeDataWithValidator = "data/validator"
	MimetypeTypedData         = "data/typed"
	MimetypeClique            = "application/x-clique-header"
	MimetypeTextPlain         = "text/plain"
)
View Source
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
)
View Source
const (
	KeyStoreScheme = "keystore"
)

Variables

View Source
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")
)
View Source
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.

View Source
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.

View Source
var ErrInvalidPassphrase = errors.New("invalid password")

当解密操作接收到错误的密码短语时,将返回errInvalidPassphase。

View Source
var ErrNotSupported = errors.New("not supported")

当从不支持的帐户后端请求操作时,将返回ErrNotSupported。

View Source
var ErrUnknownAccount = errors.New("unknown account")

对于没有后端提供指定帐户的任何请求的操作,都会返回ErrUnknownAccount。

View Source
var ErrUnknownWallet = errors.New("unknown wallet")

对于没有后端提供指定钱包的任何请求操作,都会返回ErrUnknownWallet。

View Source
var ErrWalletAlreadyOpen = errors.New("wallet already open")

如果第二次尝试打开钱包,则返回ErrWalletAlreadyOpen。

View Source
var ErrWalletClosed = errors.New("wallet closed")

如果钱包脱机,则返回ErrWalletClosed。

View Source
var KeyStoreType = reflect.TypeOf(&KeyStore{})

KeyStoreType是密钥库后端的反射类型。

View Source
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

func EncryptKey(key *Key, auth string, scryptN, scryptP int) ([]byte, error)

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

func NewAuthNeededError(needed string) error

NewAuthNeededError创建一个新的身份验证错误,其中包含有关所需字段集的额外详细信息。

func TextAndHash

func TextAndHash(data []byte) ([]byte, string)

TextAndHash是一个帮助函数,用于计算给定消息的哈希,该哈希可安全用于计算签名。 哈希计算为keccak256(“\x19Octopus签名消息:\n“${Message length}${Message}”)。 这为已签名的消息提供了上下文,并阻止了事务的签名。

func TextHash

func TextHash(data []byte) []byte

TextHash是一个帮助函数,用于计算给定消息的哈希值,该哈希值可安全用于计算签名。 哈希计算为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帐户。

func StoreKey

func StoreKey(dir, auth string, scryptN, scryptP int) (Account, error)

StoreKey生成密钥,用“auth”加密并存储在给定目录中

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

type AmbiguousAddrError struct {
	Addr    entity.Address
	Matches []Account
}

尝试解锁存在多个文件的地址时,将返回AmbiguousAddError。

func (*AmbiguousAddrError) Error

func (err *AmbiguousAddrError) Error() string

type AuthNeededError

type AuthNeededError struct {
	Needed string // 用户需要提供的额外身份验证
}

AuthNeededError由签名请求的后端返回,其中要求用户在签名成功之前提供进一步的身份验证。 这通常意味着要么需要提供密码,要么可能是某个硬件设备显示的一次性PIN码。

func (*AuthNeededError) Error

func (err *AuthNeededError) Error() string

Error实现标准错误接口。

type Backend

type Backend interface {
	// Wallet检索后端当前知道的钱包列表。
	//默认情况下,不会打开返回的钱包。
	//对于软件高清钱包,这意味着没有解密任何基本种子,而对于硬件钱包,则没有建立任何实际连接。
	//生成的钱包列表将根据后端分配的内部URL按字母顺序排序。
	//由于钱包(尤其是硬件)可能来去不定,因此在后续检索过程中,同一个钱包可能会出现在列表中的不同位置。
	Wallets() []Wallet

	// Subscribe创建异步订阅,以便在后端检测到钱包到达或离开时接收通知。
	Subscribe(sink chan<- WalletEvent) event.Subscription
}

后端是一个“钱包提供商”,其中可能包含一批他们可以签署交易的账户,并可根据请求签署交易。

type Config

type Config struct {
	InsecureUnlockAllowed bool // 是否允许在不安全的环境下解锁帐户
}

被移除以支持Clef。

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 Key struct {
	// 版本4“随机”表示未从密钥数据派生的唯一id
	Id uuid.UUID
	// 为了简化查找,我们还存储地址
	Address entity.Address
	// 我们只存储privkey,因为pubkey/address可以从中派生。此结构中的privkey始终为纯文本
	PrivateKey *ecdsa.PrivateKey
}

func DecryptKey

func DecryptKey(keyjson []byte, auth string) (*Key, error)

DecryptKey对json blob中的密钥进行解密,并返回私钥本身。

type KeyStore

type KeyStore struct {
	// contains filtered or unexported fields
}

密钥库管理磁盘上的密钥存储目录。

func NewKeyStore

func NewKeyStore(keydir string, scryptN, scryptP int) *KeyStore

NewKeyStore为给定目录创建密钥库。

func NewPlaintextKeyStore

func NewPlaintextKeyStore(keydir string) *KeyStore

NewPlaintextKeyStore为给定目录创建密钥库。不推荐使用:使用NewKeyStore。

func (*KeyStore) Accounts

func (ks *KeyStore) Accounts() []Account

Accounts返回目录中存在的所有密钥文件。

func (*KeyStore) Find

func (ks *KeyStore) Find(a Account) (Account, error)

Find将给定帐户解析为密钥库中的唯一条目。

func (*KeyStore) Import

func (ks *KeyStore) Import(keyJSON []byte, passphrase, newPassphrase string) (Account, error)

Import将给定的加密JSON密钥存储到密钥目录中。

func (*KeyStore) ImportECDSA

func (ks *KeyStore) ImportECDSA(priv *ecdsa.PrivateKey, passphrase string) (Account, error)

ImportECDSA将给定的密钥存储到密钥目录中,并使用密码对其进行加密。

func (*KeyStore) ImportPreSaleKey

func (ks *KeyStore) ImportPreSaleKey(keyJSON []byte, passphrase string) (Account, error)

ImportPreSaleKey对给定的以太坊预售钱包进行解密,并将密钥文件存储在密钥目录中。 密钥文件使用相同的密码短语加密。

func (*KeyStore) Lock

func (ks *KeyStore) Lock(addr entity.Address) error

锁从内存中删除具有给定地址的私钥。

func (*KeyStore) NewAccount

func (ks *KeyStore) NewAccount(passphrase string) (Account, error)

NewAccount生成一个新密钥并将其存储到密钥目录中,并使用密码短语对其进行加密。

func (*KeyStore) SignHash

func (ks *KeyStore) SignHash(a Account, hash []byte) ([]byte, error)

SignHash为给定哈希计算ECDSA签名。生成的签名采用[R | | S | V]格式,其中V为0或1。

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

func (ks *KeyStore) TimedUnlock(a Account, passphrase string, timeout time.Duration) error

TimedUnlock使用密码短语解锁给定帐户。帐户在超时期间保持解锁。 超时0将解锁帐户,直到程序退出。帐户必须与唯一密钥文件匹配。 如果帐户地址已解锁一段时间,TimedUnlock会延长或缩短活动解锁超时。 如果该地址之前已无限期解锁,则不会更改超时。

func (*KeyStore) Unlock

func (ks *KeyStore) Unlock(a Account, passphrase string) error

Unlock无限期解锁给定帐户。

func (*KeyStore) Update

func (ks *KeyStore) Update(a Account, passphrase, newPassphrase string) error

Update更改现有帐户的密码短语。

func (*KeyStore) Wallets

func (ks *KeyStore) Wallets() []Wallet

钱包实现帐户。后端,从密钥库目录返回所有单钥匙钱包。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager是一个总体客户经理,可以与各种后端进行通信以签署交易。

func NewManager

func NewManager(config *Config, backends ...Backend) *Manager

NewManager创建一个通用帐户管理器,通过各种支持的后端签署交易。

func (*Manager) Accounts

func (am *Manager) Accounts() []entity.Address

Accounts返回acentitymanager中所有钱包的所有帐户地址

func (*Manager) AddBackend

func (am *Manager) AddBackend(backend Backend)

AddBackend开始跟踪钱包更新的其他后端。cmd/geth假设此func返回后,后端已经集成。

func (*Manager) Backends

func (am *Manager) Backends(kind reflect.Type) []Backend

后端从帐户管理器检索具有给定类型的后端。

func (*Manager) Close

func (am *Manager) Close() error

关闭终止客户经理的内部通知过程。

func (*Manager) Config

func (am *Manager) Config() *Config

Config返回帐户管理器的配置。

func (*Manager) Find

func (am *Manager) Find(account Account) (Wallet, error)

查找尝试查找与特定帐户对应的钱包。由于帐户可以动态添加到钱包中或从钱包中删除,因此此方法在钱包数量上具有线性运行时。

func (*Manager) Subscribe

func (am *Manager) Subscribe(sink chan<- WalletEvent) event.Subscription

Subscribe创建异步订阅,以便在经理检测到钱包从其任何后端到达或离开时接收通知。

func (*Manager) Wallet

func (am *Manager) Wallet(url string) (Wallet, error)

Wallet检索与特定URL关联的钱包。

func (*Manager) Wallets

func (am *Manager) Wallets() []Wallet

Wallets返回在此帐户管理器下注册的所有签名者帐户。

type URL

type URL struct {
	Scheme string // 用于标识可用帐户后端的协议方案
	Path   string // 后端用于标识唯一实体的路径
}

URL表示钱包或帐户的规范标识URL。这是url的简化版本。 URL,具有重要的限制(此处认为是功能),即它仅包含值可复制组件,并且不进行任何特殊字符的URL编码/解码。 前者对于允许复制帐户而不保留对原始版本的实时引用很重要,而后者对于确保一个单一的规范形式而不是RFC 3986规范允许的多个规范形式很重要。 因此,这些URL不应在octopus钱包或帐户的范围之外使用。

func (URL) Cmp

func (u URL) Cmp(url URL) int

Cmp比较x和y并返回:

-1 if x <  y
 0 if x == y
+1 if x >  y

func (URL) MarshalJSON

func (u URL) MarshalJSON() ([]byte, error)

MarshalJSON实现json。Marshaller接口。

func (URL) String

func (u URL) String() string

String实现stringer接口。

func (URL) TerminalString

func (u URL) TerminalString() string

TerminalString实现日志。TerminalStringer接口。

func (*URL) UnmarshalJSON

func (u *URL) UnmarshalJSON(input []byte) error

Unmarshalson解析url。

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)

Directories

Path Synopsis
Package usbwallet implements support for USB hardware wallets.
Package usbwallet implements support for USB hardware wallets.
trezor
Package trezor contains the wire protocol.
Package trezor contains the wire protocol.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL