6 "github.com/bytom-spv/account"
7 "github.com/bytom-spv/asset"
8 "github.com/bytom-spv/blockchain/pseudohsm"
9 "github.com/bytom-spv/errors"
13 func (a *API) walletError() Response {
14 return NewErrorResponse(errors.New("wallet not found, please check that the wallet is open"))
17 // WalletImage hold the ziped wallet data
18 type WalletImage struct {
19 AccountImage *account.Image `json:"account_image"`
20 AssetImage *asset.Image `json:"asset_image"`
21 KeyImages *pseudohsm.KeyImage `json:"key_images"`
24 func (a *API) restoreWalletImage(ctx context.Context, image WalletImage) Response {
25 if err := a.wallet.Hsm.Restore(image.KeyImages); err != nil {
26 return NewErrorResponse(errors.Wrap(err, "restore key images"))
28 if err := a.wallet.AssetReg.Restore(image.AssetImage); err != nil {
29 return NewErrorResponse(errors.Wrap(err, "restore asset image"))
31 if err := a.wallet.AccountMgr.Restore(image.AccountImage); err != nil {
32 return NewErrorResponse(errors.Wrap(err, "restore account image"))
34 a.wallet.RescanBlocks()
35 return NewSuccessResponse(nil)
38 func (a *API) backupWalletImage() Response {
39 keyImages, err := a.wallet.Hsm.Backup()
41 return NewErrorResponse(errors.Wrap(err, "backup key images"))
43 assetImage, err := a.wallet.AssetReg.Backup()
45 return NewErrorResponse(errors.Wrap(err, "backup asset image"))
47 accountImage, err := a.wallet.AccountMgr.Backup()
49 return NewErrorResponse(errors.Wrap(err, "backup account image"))
52 image := &WalletImage{
54 AssetImage: assetImage,
55 AccountImage: accountImage,
57 return NewSuccessResponse(image)
60 func (a *API) rescanWallet() Response {
61 a.wallet.RescanBlocks()
62 return NewSuccessResponse(nil)
65 // WalletInfo return wallet information
66 type WalletInfo struct {
67 BestBlockHeight uint64 `json:"best_block_height"`
68 WalletHeight uint64 `json:"wallet_height"`
71 func (a *API) getWalletInfo() Response {
72 bestBlockHeight := a.chain.BestBlockHeight()
73 walletStatus := a.wallet.GetWalletStatusInfo()
75 return NewSuccessResponse(&WalletInfo{
76 BestBlockHeight: bestBlockHeight,
77 WalletHeight: walletStatus.WorkHeight,