accounts.go

栏目: Go · 发布时间: 7年前

package accounts

import (
   "math/big"

   ethereum "github.com/ethereum/go-ethereum-test"
   "github.com/ethereum/go-ethereum-test/common"
   "github.com/ethereum/go-ethereum/core/types"
   "github.com/ethereum/go-ethereum-test/event"
)

// 一个账号是20个字节的数据。 URL是可选的字段。
type Account struct {
   Address common.Address `json:"address"` // Ethereum帐户地址 AddressLength = 20
   URL     URL            `json:"url"`     // 后端可选的资源定位器
}

type Wallet interface {
   // URL检索可访问此钱包的规范路径。它是
   //用户通过上层定义一个 排序 顺序从多个钱包
   //后端。
   URL() URL

   //状态返回文本状态,以帮助处于当前状态的用户
   //钱包。它还返回一个错误,指示钱包可能出现的任何故障
   //遇到
   Status() (string, error)

   // Open初始化对wallet实例的访问。它不是用来解锁的
   //解密帐户密钥,而不是简单地建立到硬件的连接
   //钱包和/或访问派生种子。
   //
   //密码短语参数可能被a的实现使用,也可能不被使用
   //特别的钱包实例。没有密码开启方法的原因
   //是努力统一钱包处理,无视不同
   //后端提供者。
   //
   //请注意,如果你打开一个钱包,你必须关闭它以释放任何分配
   //资源(在使用硬件钱包时尤其重要)。
   Open(passphrase string) error

   //关闭释放由open wallet实例持有的任何资源。
   Close() error

   //帐户检索钱包当前知道的签名帐户列表
   //of.对于等级决定论的钱包,列表不会是详尽的,
   //只包含在帐户派生期间显式固定的帐户。
   Accounts() []Account

   //包含一个帐户是否属于这个钱包的返回值。
   Contains(account Account) bool

   //派生试图显式地派生一个层次决定论帐户
   //指定的派生路径。如果需要,派生帐户将被添加
   //到钱包的跟踪账户列表。
   Derive(path DerivationPath, pin bool) (Account, error)  // DerivationPath 是[]uint32类型

   //selfderived设置了一个基本帐户派生路径,钱包从中尝试
   //发现非零帐户并自动添加到跟踪列表
   //账户。
   //注意,自派生将增加指定路径的最后一个组件
   //反对使用子路径来查找帐户
   //非零分量。
   //
   //你可以通过调用nil调用selfderived
   //链状态读者。
   SelfDerive(base DerivationPath, chain ethereum.ChainStateReader)
   // SignHash请求钱包在给定的hash上签名。
   //
   //它只通过其中包含的地址查找指定的帐户,
   //或通过嵌入URL字段的任何位置元数据进行选择。
   //
   //如果钱包需要额外的身份验证来签署请求(例如
   //解密账户密码,或验证交易的PIN码
   //将返回一个AuthNeededError实例,其中包含用户的信息
   //关于哪些字段或操作是需要的。用户可以通过提供重试
   //通过SignHashWithPassphrase或通过其他方式(例如解锁)提供所需的详细信息
   //密钥存储库中的帐户)
   SignHash(account Account, hash []byte) ([]byte, error)

   // SignTx请求钱包在指定的交易中签名。
   //
   //它只通过其中包含的地址查找指定的帐户,
   //或通过嵌入URL字段的任何位置元数据进行选择。
   //
   //如果钱包需要额外的身份验证来签署请求(例如
   //密码解密账户,或PIN码验证交易),
   //将返回一个AuthNeededError实例,其中包含用户的信息
   //关于哪些字段或操作是需要的。用户可以通过提供重试
   //通过SignTxWithPassphrase或其他方式(例如解锁)获得所需的详细信息
   //密钥存储库中的帐户)。
   SignTx(account Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error)
   // SignHashWithPassphrase请求钱包用
   //指定密码作为额外的身份验证信息。
   //
   //它只通过其中包含的地址查找指定的帐户,
   //或通过嵌入URL字段的任何位置元数据进行选择。
   SignHashWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error)
   // SignTxWithPassphrase请求钱包在给定的事务中签名
   //指定密码作为额外的身份验证信息。
   //
   //它只通过其中包含的地址查找指定的帐户,
   //或通过嵌入URL字段的任何位置元数据进行选择。
   SignTxWithPassphrase(account Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error)

}

type Backend interface {
   //钱包检索后端当前知道的钱包列表。
   //
   //默认情况下,归还的钱包不会被打开。对于软件HD钱包这
   //意味着没有基本的种子被解密,对于硬件钱包来说没有实际的
   //建立连接。
   //
   //结果钱包列表将根据内部的字母顺序进行排序
   // URL由后端分配。因为钱包(尤其是硬件)可能会来
   //go,同一个钱包可能会出现在列表的不同位置
   //以后的检索。
   Wallets() []Wallet

   //订阅创建一个异步订阅来接收通知
   //后端检测钱包的到达或离开。
   Subscribe(sink chan<- WalletEvent) event.Subscription
}

type WalletEventType int

type WalletEvent struct {
   Wallet Wallet          // Wallet 实例 到达 或者 离开
   Kind   WalletEventType // 系统中发生的事件类型 int类型
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具