github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/accounts/accounts.go (about)

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