-
Notifications
You must be signed in to change notification settings - Fork 256
钱包模块
linj edited this page Nov 23, 2022
·
1 revision
[TOC]
钱包模块主要面向钱包app提供两大服务,一个是区块链账户管理,包括账户的创建,公私钥和地址信息的管理。钱包客户端可以通过这些服务接口创建和管理账户,导出导入私钥等。另一个是交易的签名和发送,用于bty转账和智能合约交易的发送。
chain33钱包模块使用BIP44定义,通过一套seed管理多个币种,seed支持中文字符和英文字符。同时,用户对wallet设置一个password来加密seed信息,password由用户指定和保存。
wallet模块对应有AccountDB,用于存储用户创建的账户信息,包括私钥、地址、公钥等。AccountDB对应的配置信息在chain33配置文件中可配。AccountDB中主要存储3张表,如下:
AccountTable以时间戳和账户地址为key,主要用于所有Account账户的list输出 AddressTable以账户地址为key,主要用于通过address地址查询账户信息 LabelTable以label为key,主要用于通过label查询账户信息 账户信息以WalletAccountStore的格式存储,主要结构如下:
type WalletAccountStore struct {
Privkey string //账户地址对应的私钥
Label string //账户地址对应的标签
Addr string //账户地址
TimeStamp string //创建账户时的时标
}
账户资金信息通过account来存储,结构如下:
type Account struct {
Currency int32 //coins标识,目前只有0 一个值
Balance int64 //账户可用余额
Frozen int64 //账户冻结余额
Addr string //账户的地址
}
wallet模块通过chain33签名框架完成对交易的签名,支持secp256k1签名
wallet模块是普通交易发送的入口,对外提供WalletSendToAddress接口
/**
* 创建账户
* @param: param *types.ReqNewAccount 创建账户参数,包含账户标签lable
* @return:返回账户
*/
NewAccount(param *types.ReqNewAccount) (*types.WalletAccount, error)
/**
* 获取账户列表
* @param: req *types.ReqAccountList 获取账户请求参数,包含WithoutBalance
* @return:返回账户列表
*/
WalletGetAccountList(req *types.ReqAccountList) (*types.WalletAccounts, error)
/**
* 通过私钥导入账户
* @param: param *types.ReqWalletImportPrivkey 待导入账户的私钥
* @return:返回账户
*/
WalletImportprivkey(param *types.ReqWalletImportPrivkey) (*types.WalletAccount, error)
/**
* 导出账户私钥
* @param: param *types.ReqString 待导出的账户地址
* @return:返回私钥
*/
DumpPrivkey(param *types.ReqString) (*types.ReplyString, error)
/**
* 锁定钱包
* @return:返回操作状态
*/
WalletLock() (*types.Reply, error)
/**
* 解锁钱包
* @param: param *types.WalletUnLock 钱包解锁参数
* @return:返回操作状态
*/
WalletUnLock(param *types.WalletUnLock) (*types.Reply, error)
/**
* 设置钱包密码
* @param: param *types.ReqWalletSetPasswd 新旧密码
* @return:返回操作状态
*/
WalletSetPasswd(param *types.ReqWalletSetPasswd) (*types.Reply, error)
/**
* 设置钱包标签
* @param: param *types.ReqWalletSetLabel 待设置的钱包地址和标签
* @return:返回钱包账户
*/
WalletSetLabel(param *types.ReqWalletSetLabel) (*types.WalletAccount, error)
/**
* 获取钱包状态
* @return:返回钱包状态
*/
GetWalletStatus() (*types.WalletStatus, error)
/**
* 生成钱包seed
* @param: param *types.GenSeedLang seed字符语言(0:English, 1:简体中文)
* @return:返回生成的seed
*/
GenSeed(param *types.GenSeedLang) (*types.ReplySeed, error)
/**
* 通过密码获取钱包seed
* @param: param *types.GetSeedByPw seed获取参数,包含密码
* @return:返回seed
*/
GetSeed(param *types.GetSeedByPw) (*types.ReplySeed, error)
/**
* 保存钱包seed
* @param: param *types.SaveSeedByPw 保存seed参数,包含密码和seed字符串
* @return:返回seed
*/
SaveSeed(param *types.SaveSeedByPw) (*types.Reply, error)
/**
* 合并钱包所有账户余额到指定地址
* @param: param *types.ReqWalletMergeBalance 合并参数,包含指定地址
* @return:返回交易hash
*/
WalletMergeBalance(param *types.ReqWalletMergeBalance) (*types.ReplyHashes, error)
/**
* 获取所有钱包的交易记录
* @param: param *types.ReqWalletTransactionList 获取参数,包含开始获取tx,获取数量及顺序
* @return:返回交易列表
*/
WalletTransactionList(param *types.ReqWalletTransactionList) (*types.WalletTxDetails, error)
/**
* 发送一笔交易给指定地址
* @param: param *types.ReqWalletSendToAddress 交易发送参数,包含from,to,amount等交易信息
* @return:返回交易hash
*/
WalletSendToAddress(param *types.ReqWalletSendToAddress) (*types.ReplyHash, error)
/**
* 设置钱包默认的手续费
* @param: param *types.ReqWalletSetFee 带设置手续费参数
* @return:返回操作状态
*/
WalletSetFee(param *types.ReqWalletSetFee) (*types.Reply, error)
/**
* 签名交易
* @param: param *types.ReqSignRawTx 代签名的交易信息
* @return:返回已签名的交易
*/
SignRawTx(param *types.ReqSignRawTx) (*types.ReplySignRawTx, error)
hello world