OSDN Git Service

modify bytomcli reset-key-password response
[bytom/bytom-spv.git] / api / wallet.go
1 package api
2
3 import (
4         "context"
5
6         "github.com/bytom/account"
7         "github.com/bytom/asset"
8         "github.com/bytom/blockchain/pseudohsm"
9         "github.com/bytom/errors"
10 )
11
12 // POST /wallet error
13 func (a *API) walletError() Response {
14         return NewErrorResponse(errors.New("wallet not found, please check that the wallet is open"))
15 }
16
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"`
22 }
23
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"))
27         }
28         if err := a.wallet.AssetReg.Restore(image.AssetImage); err != nil {
29                 return NewErrorResponse(errors.Wrap(err, "restore asset image"))
30         }
31         if err := a.wallet.AccountMgr.Restore(image.AccountImage); err != nil {
32                 return NewErrorResponse(errors.Wrap(err, "restore account image"))
33         }
34         a.wallet.RescanBlocks()
35         return NewSuccessResponse(nil)
36 }
37
38 func (a *API) backupWalletImage() Response {
39         keyImages, err := a.wallet.Hsm.Backup()
40         if err != nil {
41                 return NewErrorResponse(errors.Wrap(err, "backup key images"))
42         }
43         assetImage, err := a.wallet.AssetReg.Backup()
44         if err != nil {
45                 return NewErrorResponse(errors.Wrap(err, "backup asset image"))
46         }
47         accountImage, err := a.wallet.AccountMgr.Backup()
48         if err != nil {
49                 return NewErrorResponse(errors.Wrap(err, "backup account image"))
50         }
51
52         image := &WalletImage{
53                 KeyImages:    keyImages,
54                 AssetImage:   assetImage,
55                 AccountImage: accountImage,
56         }
57         return NewSuccessResponse(image)
58 }