github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/accounts/accounts.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:31</date> 10 //</624450063606747136> 11 12 13 //软件包帐户实现了高级以太坊帐户管理。 14 package accounts 15 16 import ( 17 "math/big" 18 19 ethereum "github.com/ethereum/go-ethereum" 20 "github.com/ethereum/go-ethereum/common" 21 "github.com/ethereum/go-ethereum/core/types" 22 "github.com/ethereum/go-ethereum/event" 23 ) 24 25 //帐户表示位于定义的特定位置的以太坊帐户 26 //通过可选的URL字段。 27 type Account struct { 28 Address common.Address `json:"address"` //从密钥派生的以太坊帐户地址 29 URL URL `json:"url"` //后端中的可选资源定位器 30 } 31 32 //Wallet表示可能包含一个或多个软件或硬件钱包 33 //账户(源自同一种子)。 34 type Wallet interface { 35 //URL检索可访问此钱包的规范路径。它是 36 //用户按上层定义多个钱包的排序顺序 37 //后端。 38 URL() URL 39 40 //状态返回文本状态以帮助用户处于 41 //钱包。它还返回一个错误,指示钱包可能发生的任何故障。 42 //遇到。 43 Status() (string, error) 44 45 //open初始化对钱包实例的访问。它不是用来解锁或 46 //解密帐户密钥,而不是简单地建立到硬件的连接 47 //钱包和/或获取衍生种子。 48 // 49 //passphrase参数可能被 50 //特定钱包实例。没有无密码打开方法的原因 51 //是为了争取一个统一的钱包处理,忘却了不同 52 //后端提供程序。 53 // 54 //请注意,如果您打开一个钱包,您必须关闭它以释放任何分配的 55 //资源(使用硬件钱包时尤其重要)。 56 Open(passphrase string) error 57 58 //关闭释放打开钱包实例持有的任何资源。 59 Close() error 60 61 //帐户检索钱包当前识别的签名帐户列表 62 //的。对于等级决定论钱包,列表不会是详尽的, 63 //而是只包含在帐户派生期间显式固定的帐户。 64 Accounts() []Account 65 66 //包含返回帐户是否属于此特定钱包的一部分。 67 Contains(account Account) bool 68 69 //派生尝试在处显式派生层次确定性帐户 70 //指定的派生路径。如果请求,将添加派生帐户 71 //到钱包的跟踪帐户列表。 72 Derive(path DerivationPath, pin bool) (Account, error) 73 74 //SelfDerive设置钱包尝试的基本帐户派生路径 75 //发现非零帐户并自动将其添加到跟踪的列表 76 //账户。 77 // 78 //注意,自派生将增加指定路径的最后一个组件 79 //与减少到子路径以允许发现开始的帐户相反 80 //来自非零组件。 81 // 82 //您可以通过使用nil调用selfderive来禁用自动帐户发现 83 //链状态读取器。 84 SelfDerive(base DerivationPath, chain ethereum.ChainStateReader) 85 86 //sign hash请求钱包对给定的hash进行签名。 87 // 88 //它只通过包含在中的地址查找指定的帐户, 89 //或者可以借助嵌入的URL字段中的任何位置元数据。 90 // 91 //如果钱包需要额外的认证来签署请求(例如 92 //用于解密帐户的密码,或用于验证事务的PIN代码)。 93 //将返回一个authneedederror实例,其中包含用户的信息 94 //关于需要哪些字段或操作。用户可以通过提供 95 //通过带密码的signhash或其他方式(例如解锁)获得所需的详细信息 96 //密钥库中的帐户)。 97 SignHash(account Account, hash []byte) ([]byte, error) 98 99 //signtx请求钱包签署给定的交易。 100 // 101 //它只通过包含在中的地址查找指定的帐户, 102 //或者可以借助嵌入的URL字段中的任何位置元数据。 103 // 104 //如果钱包需要额外的认证来签署请求(例如 105 //用于解密帐户的密码,或用于验证事务的PIN代码)。 106 //将返回一个authneedederror实例,其中包含用户的信息 107 //关于需要哪些字段或操作。用户可以通过提供 108 //通过带密码的SIGNTX或其他方式(例如解锁)获得所需的详细信息 109 //密钥库中的帐户)。 110 SignTx(account Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) 111 112 //signhashwithpassphrase请求钱包使用 113 //提供作为额外身份验证信息的密码。 114 // 115 //它只通过包含在中的地址查找指定的帐户, 116 //或者可以借助嵌入的URL字段中的任何位置元数据。 117 SignHashWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error) 118 119 //signtxwithpassphrase请求钱包签署给定的交易,使用 120 //提供作为额外身份验证信息的密码。 121 // 122 //它只通过包含在中的地址查找指定的帐户, 123 //或者可以借助嵌入的URL字段中的任何位置元数据。 124 SignTxWithPassphrase(account Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) 125 } 126 127 //后端是一个“钱包提供商”,可能包含他们可以使用的一批账户。 128 //根据要求签署交易。 129 type Backend interface { 130 //Wallets检索后端当前已知的钱包列表。 131 // 132 //默认情况下不会打开返回的钱包。对于软件高清钱包 133 //意味着没有基本种子被解密,对于硬件钱包,没有实际的 134 //已建立连接。 135 // 136 //生成的钱包列表将根据其内部的字母顺序进行排序。 137 //后端分配的URL。因为钱包(尤其是硬件)可能会出现 138 //去吧,同一个钱包可能会出现在列表中的不同位置 139 //后续检索。 140 Wallets() []Wallet 141 142 //订阅创建异步订阅以在 143 //后端检测钱包的到达或离开。 144 Subscribe(sink chan<- WalletEvent) event.Subscription 145 } 146 147 //WalletEventType表示可以由 148 //钱包订阅子系统。 149 type WalletEventType int 150 151 const ( 152 //当通过USB或通过 153 //密钥库中的文件系统事件。 154 WalletArrived WalletEventType = iota 155 156 //当钱包成功打开时,Walletopened会被触发。 157 //启动任何后台进程,如自动密钥派生。 158 WalletOpened 159 160 //壁纸 161 WalletDropped 162 ) 163 164 //WalletEvent是当钱包到达或 165 //检测到离场。 166 type WalletEvent struct { 167 Wallet Wallet //钱包实例到达或离开 168 Kind WalletEventType //系统中发生的事件类型 169 } 170