accounts.go

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

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类型
}

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

查看所有标签

猜你喜欢:

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

移动风暴

移动风暴

[美]弗雷德·沃格尔斯坦 / 朱邦芊 / 中信出版社 / 2014-1-1 / 39

也许,除了伟大的乔布斯,每一位奋力改变世界的硅谷英雄,都值得我们肃然起敬。苹果与谷歌十年博弈,关于这场移动平台战争的报道早已铺天盖地,而这是第一次,我们能听到幕后工程师的真实声音。两大科技巨人用智能手机和平板电脑颠覆了电脑产业。它们位处变革的中心,凭借各自的经营哲学、魅力领袖和商业敏感度,把竞争变成了残酷对决。商业记者沃格尔斯坦报道这场对抗已逾十载,在《移动风暴》中,他带领我们来到一间间办公室和会......一起来看看 《移动风暴》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

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

Markdown 在线编辑器