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