From f91c6270b0652f0a69e5d823fd399de356a1ab72 Mon Sep 17 00:00:00 2001 From: Yongfeng LI Date: Fri, 23 Mar 2018 16:59:18 +0800 Subject: [PATCH] move request handle methods to API struct (#470) * move account related request handle methods to API * move asset related request methods to API * move hsm related request methods to API * move other request methods to API --- blockchain/accesstokens.go | 16 +++--- blockchain/accounts.go | 22 ++++---- blockchain/api.go | 105 ++++++++++++++++++++------------------- blockchain/assets.go | 12 ++--- blockchain/blockchain_reactor.go | 48 +++++++++--------- blockchain/hsm.go | 24 ++++----- blockchain/miner.go | 14 +++--- blockchain/query.go | 28 +++++------ blockchain/receivers.go | 6 +-- blockchain/request.go | 6 +-- blockchain/transact.go | 34 ++++++------- blockchain/txfeeds.go | 26 +++++----- blockchain/wallet.go | 12 ++--- 13 files changed, 178 insertions(+), 175 deletions(-) diff --git a/blockchain/accesstokens.go b/blockchain/accesstokens.go index e5adc2b6..7ca971f4 100644 --- a/blockchain/accesstokens.go +++ b/blockchain/accesstokens.go @@ -6,19 +6,19 @@ import ( log "github.com/sirupsen/logrus" ) -func (bcr *BlockchainReactor) createAccessToken(ctx context.Context, x struct { +func (a *API) createAccessToken(ctx context.Context, x struct { ID string `json:"id"` Type string `json:"type"` }) Response { - token, err := bcr.wallet.Tokens.Create(ctx, x.ID, x.Type) + token, err := a.wallet.Tokens.Create(ctx, x.ID, x.Type) if err != nil { return NewErrorResponse(err) } return NewSuccessResponse(token) } -func (bcr *BlockchainReactor) listAccessTokens(ctx context.Context) Response { - tokens, err := bcr.wallet.Tokens.List(ctx) +func (a *API) listAccessTokens(ctx context.Context) Response { + tokens, err := a.wallet.Tokens.List(ctx) if err != nil { log.Errorf("listAccessTokens: %v", err) return NewErrorResponse(err) @@ -27,22 +27,22 @@ func (bcr *BlockchainReactor) listAccessTokens(ctx context.Context) Response { return NewSuccessResponse(tokens) } -func (bcr *BlockchainReactor) deleteAccessToken(ctx context.Context, x struct { +func (a *API) deleteAccessToken(ctx context.Context, x struct { ID string `json:"id"` Token string `json:"token"` }) Response { //TODO Add delete permission verify. - if err := bcr.wallet.Tokens.Delete(ctx, x.ID); err != nil { + if err := a.wallet.Tokens.Delete(ctx, x.ID); err != nil { return NewErrorResponse(err) } return NewSuccessResponse(nil) } -func (bcr *BlockchainReactor) checkAccessToken(ctx context.Context, x struct { +func (a *API) checkAccessToken(ctx context.Context, x struct { ID string `json:"id"` Secret string `json:"secret"` }) Response { - if _, err := bcr.wallet.Tokens.Check(ctx, x.ID, x.Secret); err != nil { + if _, err := a.wallet.Tokens.Check(ctx, x.ID, x.Secret); err != nil { return NewErrorResponse(err) } diff --git a/blockchain/accounts.go b/blockchain/accounts.go index 4ee042cf..b35c88d1 100644 --- a/blockchain/accounts.go +++ b/blockchain/accounts.go @@ -13,13 +13,13 @@ import ( ) // POST /create-account -func (bcr *BlockchainReactor) createAccount(ctx context.Context, ins struct { +func (a *API) createAccount(ctx context.Context, ins struct { RootXPubs []chainkd.XPub `json:"root_xpubs"` Quorum int `json:"quorum"` Alias string `json:"alias"` Tags map[string]interface{} `json:"tags"` }) Response { - acc, err := bcr.wallet.AccountMgr.Create(ctx, ins.RootXPubs, ins.Quorum, ins.Alias, ins.Tags) + acc, err := a.wallet.AccountMgr.Create(ctx, ins.RootXPubs, ins.Quorum, ins.Alias, ins.Tags) if err != nil { return NewErrorResponse(err) } @@ -35,12 +35,12 @@ func (bcr *BlockchainReactor) createAccount(ctx context.Context, ins struct { } // POST /update-account-tags -func (bcr *BlockchainReactor) updateAccountTags(ctx context.Context, updateTag struct { +func (a *API) updateAccountTags(ctx context.Context, updateTag struct { AccountInfo string `json:"account_info"` Tags map[string]interface{} `json:"tags"` }) Response { - err := bcr.wallet.AccountMgr.UpdateTags(nil, updateTag.AccountInfo, updateTag.Tags) + err := a.wallet.AccountMgr.UpdateTags(nil, updateTag.AccountInfo, updateTag.Tags) if err != nil { return NewErrorResponse(err) } @@ -50,10 +50,10 @@ func (bcr *BlockchainReactor) updateAccountTags(ctx context.Context, updateTag s // // POST /delete-account -func (bcr *BlockchainReactor) deleteAccount(ctx context.Context, in struct { +func (a *API) deleteAccount(ctx context.Context, in struct { AccountInfo string `json:"account_info"` }) Response { - if err := bcr.wallet.AccountMgr.DeleteAccount(in); err != nil { + if err := a.wallet.AccountMgr.DeleteAccount(in); err != nil { return NewErrorResponse(err) } return NewSuccessResponse(nil) @@ -65,7 +65,7 @@ type validateAddressResp struct { } // POST /validate-address -func (bcr *BlockchainReactor) validateAddress(ctx context.Context, ins struct { +func (a *API) validateAddress(ctx context.Context, ins struct { Address string `json:"address"` }) Response { resp := &validateAddressResp{ @@ -92,7 +92,7 @@ func (bcr *BlockchainReactor) validateAddress(ctx context.Context, ins struct { } resp.Vaild = true - resp.IsLocal = bcr.wallet.AccountMgr.IsLocalControlProgram(program) + resp.IsLocal = a.wallet.AccountMgr.IsLocalControlProgram(program) return NewSuccessResponse(resp) } @@ -102,8 +102,8 @@ type addressResp struct { Address string `json:"address"` } -func (bcr *BlockchainReactor) listAddresses(ctx context.Context) Response { - cps, err := bcr.wallet.AccountMgr.ListControlProgram() +func (a *API) listAddresses(ctx context.Context) Response { + cps, err := a.wallet.AccountMgr.ListControlProgram() if err != nil { return NewErrorResponse(err) } @@ -114,7 +114,7 @@ func (bcr *BlockchainReactor) listAddresses(ctx context.Context) Response { continue } - accountAlias := bcr.wallet.AccountMgr.GetAliasByID(cp.AccountID) + accountAlias := a.wallet.AccountMgr.GetAliasByID(cp.AccountID) addresses = append(addresses, &addressResp{AccountAlias: accountAlias, AccountID: cp.AccountID, Address: cp.Address}) } return NewSuccessResponse(addresses) diff --git a/blockchain/api.go b/blockchain/api.go index 6438e741..e62b557d 100644 --- a/blockchain/api.go +++ b/blockchain/api.go @@ -18,6 +18,7 @@ import ( "github.com/bytom/net/http/authn" "github.com/bytom/net/http/httpjson" "github.com/bytom/net/http/static" + "github.com/bytom/blockchain/wallet" ) var ( @@ -43,6 +44,7 @@ func (wh *waitHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { type API struct { bcr *BlockchainReactor + wallet *wallet.Wallet server *http.Server handler http.Handler } @@ -100,7 +102,8 @@ func (a *API) StartServer(address string) { func NewAPI(bcr *BlockchainReactor, config *cfg.Config) *API { api := &API{ - bcr: bcr, + bcr: bcr, + wallet: bcr.wallet, } api.buildHandler() api.initServer(config) @@ -116,70 +119,70 @@ func (a *API) ServeHTTP(rw http.ResponseWriter, req *http.Request) { func (a *API) buildHandler() { m := http.NewServeMux() if a.bcr.wallet != nil && a.bcr.wallet.AccountMgr != nil && a.bcr.wallet.AssetReg != nil { - m.Handle("/create-account", jsonHandler(a.bcr.createAccount)) - m.Handle("/update-account-tags", jsonHandler(a.bcr.updateAccountTags)) - m.Handle("/create-account-receiver", jsonHandler(a.bcr.createAccountReceiver)) + m.Handle("/create-account", jsonHandler(a.createAccount)) + m.Handle("/update-account-tags", jsonHandler(a.updateAccountTags)) + m.Handle("/create-account-receiver", jsonHandler(a.createAccountReceiver)) m.Handle("/list-accounts", jsonHandler(a.bcr.listAccounts)) - m.Handle("/list-addresses", jsonHandler(a.bcr.listAddresses)) - m.Handle("/delete-account", jsonHandler(a.bcr.deleteAccount)) - m.Handle("/validate-address", jsonHandler(a.bcr.validateAddress)) - - m.Handle("/create-asset", jsonHandler(a.bcr.createAsset)) - m.Handle("/update-asset-alias", jsonHandler(a.bcr.updateAssetAlias)) - m.Handle("/update-asset-tags", jsonHandler(a.bcr.updateAssetTags)) - m.Handle("/list-assets", jsonHandler(a.bcr.listAssets)) - - m.Handle("/create-key", jsonHandler(a.bcr.pseudohsmCreateKey)) - m.Handle("/list-keys", jsonHandler(a.bcr.pseudohsmListKeys)) - m.Handle("/delete-key", jsonHandler(a.bcr.pseudohsmDeleteKey)) - m.Handle("/reset-key-password", jsonHandler(a.bcr.pseudohsmResetPassword)) - - m.Handle("/get-transaction", jsonHandler(a.bcr.getTransaction)) - m.Handle("/list-transactions", jsonHandler(a.bcr.listTransactions)) - m.Handle("/list-balances", jsonHandler(a.bcr.listBalances)) + m.Handle("/list-addresses", jsonHandler(a.listAddresses)) + m.Handle("/delete-account", jsonHandler(a.deleteAccount)) + m.Handle("/validate-address", jsonHandler(a.validateAddress)) + + m.Handle("/create-asset", jsonHandler(a.createAsset)) + m.Handle("/update-asset-alias", jsonHandler(a.updateAssetAlias)) + m.Handle("/update-asset-tags", jsonHandler(a.updateAssetTags)) + m.Handle("/list-assets", jsonHandler(a.listAssets)) + + m.Handle("/create-key", jsonHandler(a.pseudohsmCreateKey)) + m.Handle("/list-keys", jsonHandler(a.pseudohsmListKeys)) + m.Handle("/delete-key", jsonHandler(a.pseudohsmDeleteKey)) + m.Handle("/reset-key-password", jsonHandler(a.pseudohsmResetPassword)) + + m.Handle("/get-transaction", jsonHandler(a.getTransaction)) + m.Handle("/list-transactions", jsonHandler(a.listTransactions)) + m.Handle("/list-balances", jsonHandler(a.listBalances)) } else { log.Warn("Please enable wallet") } m.Handle("/", alwaysError(errors.New("not Found"))) - m.Handle("/build-transaction", jsonHandler(a.bcr.build)) - m.Handle("/sign-transaction", jsonHandler(a.bcr.pseudohsmSignTemplates)) - m.Handle("/submit-transaction", jsonHandler(a.bcr.submit)) - m.Handle("/sign-submit-transaction", jsonHandler(a.bcr.signSubmit)) - - m.Handle("/create-transaction-feed", jsonHandler(a.bcr.createTxFeed)) - m.Handle("/get-transaction-feed", jsonHandler(a.bcr.getTxFeed)) - m.Handle("/update-transaction-feed", jsonHandler(a.bcr.updateTxFeed)) - m.Handle("/delete-transaction-feed", jsonHandler(a.bcr.deleteTxFeed)) - m.Handle("/list-transaction-feeds", jsonHandler(a.bcr.listTxFeeds)) - m.Handle("/list-unspent-outputs", jsonHandler(a.bcr.listUnspentOutputs)) + m.Handle("/build-transaction", jsonHandler(a.build)) + m.Handle("/sign-transaction", jsonHandler(a.pseudohsmSignTemplates)) + m.Handle("/submit-transaction", jsonHandler(a.submit)) + m.Handle("/sign-submit-transaction", jsonHandler(a.signSubmit)) + + m.Handle("/create-transaction-feed", jsonHandler(a.createTxFeed)) + m.Handle("/get-transaction-feed", jsonHandler(a.getTxFeed)) + m.Handle("/update-transaction-feed", jsonHandler(a.updateTxFeed)) + m.Handle("/delete-transaction-feed", jsonHandler(a.deleteTxFeed)) + m.Handle("/list-transaction-feeds", jsonHandler(a.listTxFeeds)) + m.Handle("/list-unspent-outputs", jsonHandler(a.listUnspentOutputs)) m.Handle("/info", jsonHandler(a.bcr.info)) - m.Handle("/create-access-token", jsonHandler(a.bcr.createAccessToken)) - m.Handle("/list-access-tokens", jsonHandler(a.bcr.listAccessTokens)) - m.Handle("/delete-access-token", jsonHandler(a.bcr.deleteAccessToken)) - m.Handle("/check-access-token", jsonHandler(a.bcr.checkAccessToken)) + m.Handle("/create-access-token", jsonHandler(a.createAccessToken)) + m.Handle("/list-access-tokens", jsonHandler(a.listAccessTokens)) + m.Handle("/delete-access-token", jsonHandler(a.deleteAccessToken)) + m.Handle("/check-access-token", jsonHandler(a.checkAccessToken)) - m.Handle("/block-hash", jsonHandler(a.bcr.getBestBlockHash)) + m.Handle("/block-hash", jsonHandler(a.getBestBlockHash)) - m.Handle("/export-private-key", jsonHandler(a.bcr.walletExportKey)) - m.Handle("/import-private-key", jsonHandler(a.bcr.walletImportKey)) - m.Handle("/import-key-progress", jsonHandler(a.bcr.keyImportProgress)) + m.Handle("/export-private-key", jsonHandler(a.walletExportKey)) + m.Handle("/import-private-key", jsonHandler(a.walletImportKey)) + m.Handle("/import-key-progress", jsonHandler(a.keyImportProgress)) - m.Handle("/get-block-header-by-hash", jsonHandler(a.bcr.getBlockHeaderByHash)) - m.Handle("/get-block-header-by-height", jsonHandler(a.bcr.getBlockHeaderByHeight)) - m.Handle("/get-block", jsonHandler(a.bcr.getBlock)) - m.Handle("/get-block-count", jsonHandler(a.bcr.getBlockCount)) - m.Handle("/get-block-transactions-count-by-hash", jsonHandler(a.bcr.getBlockTransactionsCountByHash)) - m.Handle("/get-block-transactions-count-by-height", jsonHandler(a.bcr.getBlockTransactionsCountByHeight)) + m.Handle("/get-block-header-by-hash", jsonHandler(a.getBlockHeaderByHash)) + m.Handle("/get-block-header-by-height", jsonHandler(a.getBlockHeaderByHeight)) + m.Handle("/get-block", jsonHandler(a.getBlock)) + m.Handle("/get-block-count", jsonHandler(a.getBlockCount)) + m.Handle("/get-block-transactions-count-by-hash", jsonHandler(a.getBlockTransactionsCountByHash)) + m.Handle("/get-block-transactions-count-by-height", jsonHandler(a.getBlockTransactionsCountByHeight)) - m.Handle("/net-info", jsonHandler(a.bcr.getNetInfo)) + m.Handle("/net-info", jsonHandler(a.getNetInfo)) - m.Handle("/is-mining", jsonHandler(a.bcr.isMining)) - m.Handle("/gas-rate", jsonHandler(a.bcr.gasRate)) - m.Handle("/getwork", jsonHandler(a.bcr.getWork)) - m.Handle("/submitwork", jsonHandler(a.bcr.submitWork)) + m.Handle("/is-mining", jsonHandler(a.isMining)) + m.Handle("/gas-rate", jsonHandler(a.gasRate)) + m.Handle("/getwork", jsonHandler(a.getWork)) + m.Handle("/submitwork", jsonHandler(a.submitWork)) latencyHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { if l := latency(m, req); l != nil { diff --git a/blockchain/assets.go b/blockchain/assets.go index 178fde7d..65d3bbc4 100644 --- a/blockchain/assets.go +++ b/blockchain/assets.go @@ -10,14 +10,14 @@ import ( ) // POST /create-asset -func (bcr *BlockchainReactor) createAsset(ctx context.Context, ins struct { +func (a *API) createAsset(ctx context.Context, ins struct { Alias string `json:"alias"` RootXPubs []chainkd.XPub `json:"root_xpubs"` Quorum int `json:"quorum"` Definition map[string]interface{} `json:"definition"` Tags map[string]interface{} `json:"tags"` }) Response { - ass, err := bcr.wallet.AssetReg.Define( + ass, err := a.wallet.AssetReg.Define( ins.RootXPubs, ins.Quorum, ins.Definition, @@ -39,11 +39,11 @@ func (bcr *BlockchainReactor) createAsset(ctx context.Context, ins struct { } // POST /update-asset-tags -func (bcr *BlockchainReactor) updateAssetTags(ctx context.Context, updateTag struct { +func (a *API) updateAssetTags(ctx context.Context, updateTag struct { AssetInfo string `json:"asset_info"` Tags map[string]interface{} `json:"tags"` }) Response { - err := bcr.wallet.AssetReg.UpdateTags(nil, updateTag.AssetInfo, updateTag.Tags) + err := a.wallet.AssetReg.UpdateTags(nil, updateTag.AssetInfo, updateTag.Tags) if err != nil { return NewErrorResponse(err) } @@ -52,11 +52,11 @@ func (bcr *BlockchainReactor) updateAssetTags(ctx context.Context, updateTag str } // POST /update-asset-alias -func (bcr *BlockchainReactor) updateAssetAlias(updateAlias struct { +func (a *API) updateAssetAlias(updateAlias struct { OldAlias string `json:"old_alias"` NewAlias string `json:"new_alias"` }) Response { - if err := bcr.wallet.AssetReg.UpdateAssetAlias(updateAlias.OldAlias, updateAlias.NewAlias); err != nil { + if err := a.wallet.AssetReg.UpdateAssetAlias(updateAlias.OldAlias, updateAlias.NewAlias); err != nil { return NewErrorResponse(err) } diff --git a/blockchain/blockchain_reactor.go b/blockchain/blockchain_reactor.go index bb8e949e..4a239432 100644 --- a/blockchain/blockchain_reactor.go +++ b/blockchain/blockchain_reactor.go @@ -13,7 +13,7 @@ import ( ) // return network infomation -func (bcr *BlockchainReactor) getNetInfo() Response { +func (a *API) getNetInfo() Response { type netInfo struct { Listening bool `json:"listening"` Syncing bool `json:"syncing"` @@ -23,30 +23,30 @@ func (bcr *BlockchainReactor) getNetInfo() Response { HighestBlock uint64 `json:"highest_block"` } net := &netInfo{} - net.Listening = bcr.sw.IsListening() - net.Syncing = bcr.blockKeeper.IsCaughtUp() - net.Mining = bcr.mining.IsMining() - net.PeerCount = len(bcr.sw.Peers().List()) - net.CurrentBlock = bcr.blockKeeper.chainHeight - net.HighestBlock = bcr.blockKeeper.maxPeerHeight + net.Listening = a.bcr.sw.IsListening() + net.Syncing = a.bcr.blockKeeper.IsCaughtUp() + net.Mining = a.bcr.mining.IsMining() + net.PeerCount = len(a.bcr.sw.Peers().List()) + net.CurrentBlock = a.bcr.blockKeeper.chainHeight + net.HighestBlock = a.bcr.blockKeeper.maxPeerHeight return NewSuccessResponse(net) } // return best block hash -func (bcr *BlockchainReactor) getBestBlockHash() Response { - blockHash := map[string]string{"blockHash": bcr.chain.BestBlockHash().String()} +func (a *API) getBestBlockHash() Response { + blockHash := map[string]string{"blockHash": a.bcr.chain.BestBlockHash().String()} return NewSuccessResponse(blockHash) } // return block header by hash -func (bcr *BlockchainReactor) getBlockHeaderByHash(strHash string) Response { +func (a *API) getBlockHeaderByHash(strHash string) Response { hash := bc.Hash{} if err := hash.UnmarshalText([]byte(strHash)); err != nil { log.WithField("error", err).Error("Error occurs when transforming string hash to hash struct") return NewErrorResponse(err) } - block, err := bcr.chain.GetBlockByHash(&hash) + block, err := a.bcr.chain.GetBlockByHash(&hash) if err != nil { log.WithField("error", err).Error("Fail to get block by hash") return NewErrorResponse(err) @@ -90,23 +90,23 @@ type GetBlockResp struct { } // return block by hash -func (bcr *BlockchainReactor) getBlock(ins GetBlockReq) Response { +func (a *API) getBlock(ins GetBlockReq) Response { var err error block := &types.Block{} if len(ins.BlockHash) == 32 { b32 := [32]byte{} copy(b32[:], ins.BlockHash) hash := bc.NewHash(b32) - block, err = bcr.chain.GetBlockByHash(&hash) + block, err = a.bcr.chain.GetBlockByHash(&hash) } else { - block, err = bcr.chain.GetBlockByHeight(ins.BlockHeight) + block, err = a.bcr.chain.GetBlockByHeight(ins.BlockHeight) } if err != nil { return NewErrorResponse(err) } blockHash := block.Hash() - txStatus, err := bcr.chain.GetTransactionStatus(&blockHash) + txStatus, err := a.bcr.chain.GetTransactionStatus(&blockHash) rawBlock, err := block.MarshalText() if err != nil { return NewErrorResponse(err) @@ -153,14 +153,14 @@ func (bcr *BlockchainReactor) getBlock(ins GetBlockReq) Response { } // return block transactions count by hash -func (bcr *BlockchainReactor) getBlockTransactionsCountByHash(strHash string) Response { +func (a *API) getBlockTransactionsCountByHash(strHash string) Response { hash := bc.Hash{} if err := hash.UnmarshalText([]byte(strHash)); err != nil { log.WithField("error", err).Error("Error occurs when transforming string hash to hash struct") return NewErrorResponse(err) } - legacyBlock, err := bcr.chain.GetBlockByHash(&hash) + legacyBlock, err := a.bcr.chain.GetBlockByHash(&hash) if err != nil { log.WithField("error", err).Error("Fail to get block by hash") return NewErrorResponse(err) @@ -171,8 +171,8 @@ func (bcr *BlockchainReactor) getBlockTransactionsCountByHash(strHash string) Re } // return block transactions count by height -func (bcr *BlockchainReactor) getBlockTransactionsCountByHeight(height uint64) Response { - legacyBlock, err := bcr.chain.GetBlockByHeight(height) +func (a *API) getBlockTransactionsCountByHeight(height uint64) Response { + legacyBlock, err := a.bcr.chain.GetBlockByHeight(height) if err != nil { log.WithField("error", err).Error("Fail to get block by hash") return NewErrorResponse(err) @@ -183,19 +183,19 @@ func (bcr *BlockchainReactor) getBlockTransactionsCountByHeight(height uint64) R } // return current block count -func (bcr *BlockchainReactor) getBlockCount() Response { - blockHeight := map[string]uint64{"block_count": bcr.chain.Height()} +func (a *API) getBlockCount() Response { + blockHeight := map[string]uint64{"block_count": a.bcr.chain.Height()} return NewSuccessResponse(blockHeight) } // return is in mining or not -func (bcr *BlockchainReactor) isMining() Response { - IsMining := map[string]bool{"isMining": bcr.mining.IsMining()} +func (a *API) isMining() Response { + IsMining := map[string]bool{"isMining": a.bcr.mining.IsMining()} return NewSuccessResponse(IsMining) } // return gasRate -func (bcr *BlockchainReactor) gasRate() Response { +func (a *API) gasRate() Response { gasrate := map[string]int64{"gasRate": consensus.VMGasRate} return NewSuccessResponse(gasrate) } diff --git a/blockchain/hsm.go b/blockchain/hsm.go index 46b0f6bb..36635af4 100644 --- a/blockchain/hsm.go +++ b/blockchain/hsm.go @@ -20,26 +20,26 @@ func init() { errorFormatter.Errors[pseudohsm.ErrTooManyAliasesToList] = httperror.Info{400, "BTM802", "Too many aliases to list"} } -func (bcr *BlockchainReactor) pseudohsmCreateKey(ctx context.Context, in struct { +func (a *API) pseudohsmCreateKey(ctx context.Context, in struct { Alias string `json:"alias"` Password string `json:"password"` }) Response { - xpub, err := bcr.wallet.Hsm.XCreate(in.Alias, in.Password) + xpub, err := a.wallet.Hsm.XCreate(in.Alias, in.Password) if err != nil { return NewErrorResponse(err) } return NewSuccessResponse(xpub) } -func (bcr *BlockchainReactor) pseudohsmListKeys(ctx context.Context) Response { - return NewSuccessResponse(bcr.wallet.Hsm.ListKeys()) +func (a *API) pseudohsmListKeys(ctx context.Context) Response { + return NewSuccessResponse(a.wallet.Hsm.ListKeys()) } -func (bcr *BlockchainReactor) pseudohsmDeleteKey(ctx context.Context, x struct { +func (a *API) pseudohsmDeleteKey(ctx context.Context, x struct { Password string `json:"password"` XPub chainkd.XPub `json:"xpub"` }) Response { - if err := bcr.wallet.Hsm.XDelete(x.XPub, x.Password); err != nil { + if err := a.wallet.Hsm.XDelete(x.XPub, x.Password); err != nil { return NewErrorResponse(err) } return NewSuccessResponse(nil) @@ -50,11 +50,11 @@ type signResp struct { SignComplete bool `json:"sign_complete"` } -func (bcr *BlockchainReactor) pseudohsmSignTemplates(ctx context.Context, x struct { +func (a *API) pseudohsmSignTemplates(ctx context.Context, x struct { Password string `json:"password"` Txs txbuilder.Template `json:"transaction"` }) Response { - if err := txbuilder.Sign(ctx, &x.Txs, nil, x.Password, bcr.pseudohsmSignTemplate); err != nil { + if err := txbuilder.Sign(ctx, &x.Txs, nil, x.Password, a.pseudohsmSignTemplate); err != nil { log.WithField("build err", err).Error("fail on sign transaction.") return NewErrorResponse(err) } @@ -62,21 +62,21 @@ func (bcr *BlockchainReactor) pseudohsmSignTemplates(ctx context.Context, x stru return NewSuccessResponse(&signResp{Tx: &x.Txs, SignComplete: txbuilder.SignProgress(&x.Txs)}) } -func (bcr *BlockchainReactor) pseudohsmSignTemplate(ctx context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) { - return bcr.wallet.Hsm.XSign(xpub, path, data[:], password) +func (a *API) pseudohsmSignTemplate(ctx context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) { + return a.wallet.Hsm.XSign(xpub, path, data[:], password) } type ResetPasswordResp struct { Changed bool `json:"changed"` } -func (bcr *BlockchainReactor) pseudohsmResetPassword(ctx context.Context, ins struct { +func (a *API) pseudohsmResetPassword(ctx context.Context, ins struct { XPub chainkd.XPub `json:"xpub"` OldPassword string `json:"old_password"` NewPassword string `json:"new_password"` }) Response { resp := &ResetPasswordResp{Changed: false} - if err := bcr.wallet.Hsm.ResetPassword(ins.XPub, ins.OldPassword, ins.NewPassword); err != nil { + if err := a.wallet.Hsm.ResetPassword(ins.XPub, ins.OldPassword, ins.NewPassword); err != nil { return NewSuccessResponse(resp) } resp.Changed = true diff --git a/blockchain/miner.go b/blockchain/miner.go index dc32ee93..f3799682 100644 --- a/blockchain/miner.go +++ b/blockchain/miner.go @@ -19,13 +19,13 @@ type GetWorkResp struct { Seed *bc.Hash `json:"seed"` } -func (bcr *BlockchainReactor) getWork() Response { - bh, err := bcr.miningPool.GetWork() +func (a *API) getWork() Response { + bh, err := a.bcr.miningPool.GetWork() if err != nil { return NewErrorResponse(err) } - seed, err := bcr.chain.GetSeed(bh.Height, &bh.PreviousBlockHash) + seed, err := a.bcr.chain.GetSeed(bh.Height, &bh.PreviousBlockHash) if err != nil { return NewErrorResponse(err) } @@ -37,15 +37,15 @@ func (bcr *BlockchainReactor) getWork() Response { return NewSuccessResponse(resp) } -func (bcr *BlockchainReactor) submitWork(bh *types.BlockHeader) Response { - success := bcr.miningPool.SubmitWork(bh) +func (a *API) submitWork(bh *types.BlockHeader) Response { + success := a.bcr.miningPool.SubmitWork(bh) return NewSuccessResponse(success) } -func (bcr *BlockchainReactor) getBlockHeaderByHeight(ctx context.Context, req struct { +func (a *API) getBlockHeaderByHeight(ctx context.Context, req struct { Height uint64 `json:"block_height"` }) Response { - block, err := bcr.chain.GetBlockByHeight(req.Height) + block, err := a.bcr.chain.GetBlockByHeight(req.Height) if err != nil { return NewErrorResponse(err) } diff --git a/blockchain/query.go b/blockchain/query.go index 29794d64..86dd0c35 100755 --- a/blockchain/query.go +++ b/blockchain/query.go @@ -34,10 +34,10 @@ func (bcr *BlockchainReactor) listAccounts(ctx context.Context, filter struct { } // POST /list-assets -func (bcr *BlockchainReactor) listAssets(ctx context.Context, filter struct { +func (a *API) listAssets(ctx context.Context, filter struct { ID string `json:"id"` }) Response { - assets, err := bcr.wallet.AssetReg.ListAssets(filter.ID) + assets, err := a.wallet.AssetReg.ListAssets(filter.ID) if err != nil { log.Errorf("listAssets: %v", err) return NewErrorResponse(err) @@ -47,8 +47,8 @@ func (bcr *BlockchainReactor) listAssets(ctx context.Context, filter struct { } // POST /listBalances -func (bcr *BlockchainReactor) listBalances(ctx context.Context) Response { - if balances, err := bcr.wallet.GetAccountBalances(""); err != nil { +func (a *API) listBalances(ctx context.Context) Response { + if balances, err := a.wallet.GetAccountBalances(""); err != nil { log.Errorf("GetAccountUTXOs: %v", err) return NewErrorResponse(err) } else { @@ -57,10 +57,10 @@ func (bcr *BlockchainReactor) listBalances(ctx context.Context) Response { } // POST /get-transaction -func (bcr *BlockchainReactor) getTransaction(ctx context.Context, txInfo struct { +func (a *API) getTransaction(ctx context.Context, txInfo struct { TxID string `json:"tx_id"` }) Response { - transaction, err := bcr.wallet.GetTransactionByTxID(txInfo.TxID) + transaction, err := a.wallet.GetTransactionByTxID(txInfo.TxID) if err != nil { log.Errorf("getTransaction error: %v", err) return NewErrorResponse(err) @@ -70,7 +70,7 @@ func (bcr *BlockchainReactor) getTransaction(ctx context.Context, txInfo struct } // POST /list-transactions -func (bcr *BlockchainReactor) listTransactions(ctx context.Context, filter struct { +func (a *API) listTransactions(ctx context.Context, filter struct { ID string `json:"id"` AccountID string `json:"account_id"` Detail bool `json:"detail"` @@ -79,9 +79,9 @@ func (bcr *BlockchainReactor) listTransactions(ctx context.Context, filter struc var err error if filter.AccountID != "" { - transactions, err = bcr.wallet.GetTransactionsByAccountID(filter.AccountID) + transactions, err = a.wallet.GetTransactionsByAccountID(filter.AccountID) } else { - transactions, err = bcr.wallet.GetTransactionsByTxID(filter.ID) + transactions, err = a.wallet.GetTransactionsByTxID(filter.ID) } if err != nil { @@ -90,17 +90,17 @@ func (bcr *BlockchainReactor) listTransactions(ctx context.Context, filter struc } if filter.Detail == false { - txSummary := bcr.wallet.GetTransactionsSummary(transactions) + txSummary := a.wallet.GetTransactionsSummary(transactions) return NewSuccessResponse(txSummary) } return NewSuccessResponse(transactions) } // POST /list-unspent-outputs -func (bcr *BlockchainReactor) listUnspentOutputs(ctx context.Context, filter struct { +func (a *API) listUnspentOutputs(ctx context.Context, filter struct { ID string `json:"id"` }) Response { - accountUTXOs, err := bcr.wallet.GetAccountUTXOs(filter.ID) + accountUTXOs, err := a.wallet.GetAccountUTXOs(filter.ID) if err != nil { log.Errorf("list Unspent Outputs: %v", err) return NewErrorResponse(err) @@ -119,8 +119,8 @@ func (bcr *BlockchainReactor) listUnspentOutputs(ctx context.Context, filter str ControlProgramIndex: utxo.ControlProgramIndex, Address: utxo.Address, ValidHeight: utxo.ValidHeight, - Alias: bcr.wallet.AccountMgr.GetAliasByID(utxo.AccountID), - AssetAlias: bcr.wallet.AssetReg.GetAliasByID(utxo.AssetID.String()), + Alias: a.wallet.AccountMgr.GetAliasByID(utxo.AccountID), + AssetAlias: a.wallet.AssetReg.GetAliasByID(utxo.AssetID.String()), }) } diff --git a/blockchain/receivers.go b/blockchain/receivers.go index de54a60f..04c8f5c5 100755 --- a/blockchain/receivers.go +++ b/blockchain/receivers.go @@ -6,13 +6,13 @@ import ( "github.com/bytom/blockchain/txbuilder" ) -func (bcr *BlockchainReactor) createAccountReceiver(ctx context.Context, ins struct { +func (a *API) createAccountReceiver(ctx context.Context, ins struct { AccountID string `json:"account_id"` AccountAlias string `json:"account_alias"` }) Response { accountID := ins.AccountID if ins.AccountAlias != "" { - account, err := bcr.wallet.AccountMgr.FindByAlias(ctx, ins.AccountAlias) + account, err := a.wallet.AccountMgr.FindByAlias(ctx, ins.AccountAlias) if err != nil { return NewErrorResponse(err) } @@ -20,7 +20,7 @@ func (bcr *BlockchainReactor) createAccountReceiver(ctx context.Context, ins str accountID = account.ID } - program, err := bcr.wallet.AccountMgr.CreateAddress(ctx, accountID, false) + program, err := a.wallet.AccountMgr.CreateAddress(ctx, accountID, false) if err != nil { return NewErrorResponse(err) } diff --git a/blockchain/request.go b/blockchain/request.go index 12356bd3..843a3810 100644 --- a/blockchain/request.go +++ b/blockchain/request.go @@ -22,7 +22,7 @@ type BuildRequest struct { TimeRange uint64 `json:"time_range"` } -func (bcr *BlockchainReactor) filterAliases(ctx context.Context, br *BuildRequest) error { +func (a *API) filterAliases(ctx context.Context, br *BuildRequest) error { for i, m := range br.Actions { id, _ := m["asset_id"].(string) alias, _ := m["asset_alias"].(string) @@ -31,7 +31,7 @@ func (bcr *BlockchainReactor) filterAliases(ctx context.Context, br *BuildReques case consensus.BTMAlias: m["asset_id"] = consensus.BTMAssetID.String() default: - id, err := bcr.wallet.AssetReg.GetIDByAlias(alias) + id, err := a.wallet.AssetReg.GetIDByAlias(alias) if err != nil { return errors.WithDetailf(err, "invalid asset alias %s on action %d", alias, i) } @@ -42,7 +42,7 @@ func (bcr *BlockchainReactor) filterAliases(ctx context.Context, br *BuildReques id, _ = m["account_id"].(string) alias, _ = m["account_alias"].(string) if id == "" && alias != "" { - acc, err := bcr.wallet.AccountMgr.FindByAlias(ctx, alias) + acc, err := a.wallet.AccountMgr.FindByAlias(ctx, alias) if err != nil { return errors.WithDetailf(err, "invalid account alias %s on action %d", alias, i) } diff --git a/blockchain/transact.go b/blockchain/transact.go index 43b31749..1bf5b350 100644 --- a/blockchain/transact.go +++ b/blockchain/transact.go @@ -17,11 +17,11 @@ import ( var defaultTxTTL = 5 * time.Minute -func (bcr *BlockchainReactor) actionDecoder(action string) (func([]byte) (txbuilder.Action, error), bool) { +func (a *API) actionDecoder(action string) (func([]byte) (txbuilder.Action, error), bool) { var decoder func([]byte) (txbuilder.Action, error) switch action { case "control_account": - decoder = bcr.wallet.AccountMgr.DecodeControlAction + decoder = a.wallet.AccountMgr.DecodeControlAction case "control_address": decoder = txbuilder.DecodeControlAddressAction case "control_program": @@ -29,13 +29,13 @@ func (bcr *BlockchainReactor) actionDecoder(action string) (func([]byte) (txbuil case "control_receiver": decoder = txbuilder.DecodeControlReceiverAction case "issue": - decoder = bcr.wallet.AssetReg.DecodeIssueAction + decoder = a.wallet.AssetReg.DecodeIssueAction case "retire": decoder = txbuilder.DecodeRetireAction case "spend_account": - decoder = bcr.wallet.AccountMgr.DecodeSpendAction + decoder = a.wallet.AccountMgr.DecodeSpendAction case "spend_account_unspent_output": - decoder = bcr.wallet.AccountMgr.DecodeSpendUTXOAction + decoder = a.wallet.AccountMgr.DecodeSpendUTXOAction default: return nil, false } @@ -69,8 +69,8 @@ func mergeActions(req *BuildRequest) []map[string]interface{} { return actions } -func (bcr *BlockchainReactor) buildSingle(ctx context.Context, req *BuildRequest) (*txbuilder.Template, error) { - err := bcr.filterAliases(ctx, req) +func (a *API) buildSingle(ctx context.Context, req *BuildRequest) (*txbuilder.Template, error) { + err := a.filterAliases(ctx, req) if err != nil { return nil, err } @@ -81,7 +81,7 @@ func (bcr *BlockchainReactor) buildSingle(ctx context.Context, req *BuildRequest if !ok { return nil, errors.WithDetailf(errBadActionType, "no action type provided on action %d", i) } - decoder, ok := bcr.actionDecoder(typ) + decoder, ok := a.actionDecoder(typ) if !ok { return nil, errors.WithDetailf(errBadActionType, "unknown action type %q on action %d", typ, i) } @@ -126,10 +126,10 @@ func (bcr *BlockchainReactor) buildSingle(ctx context.Context, req *BuildRequest } // POST /build-transaction -func (bcr *BlockchainReactor) build(ctx context.Context, buildReqs *BuildRequest) Response { +func (a *API) build(ctx context.Context, buildReqs *BuildRequest) Response { subctx := reqid.NewSubContext(ctx, reqid.New()) - tmpl, err := bcr.buildSingle(subctx, buildReqs) + tmpl, err := a.buildSingle(subctx, buildReqs) if err != nil { return NewErrorResponse(err) } @@ -137,12 +137,12 @@ func (bcr *BlockchainReactor) build(ctx context.Context, buildReqs *BuildRequest return NewSuccessResponse(tmpl) } -func (bcr *BlockchainReactor) submitSingle(ctx context.Context, tpl *txbuilder.Template) (map[string]string, error) { +func (a *API) submitSingle(ctx context.Context, tpl *txbuilder.Template) (map[string]string, error) { if tpl.Transaction == nil { return nil, errors.Wrap(txbuilder.ErrMissingRawTx) } - if err := txbuilder.FinalizeTx(ctx, bcr.chain, tpl.Transaction); err != nil { + if err := txbuilder.FinalizeTx(ctx, a.bcr.chain, tpl.Transaction); err != nil { return nil, errors.Wrapf(err, "tx %s", tpl.Transaction.ID.String()) } @@ -221,10 +221,10 @@ type submitTxResp struct { } // POST /submit-transaction -func (bcr *BlockchainReactor) submit(ctx context.Context, ins struct { +func (a *API) submit(ctx context.Context, ins struct { Tx types.Tx `json:"raw_transaction"` }) Response { - if err := txbuilder.FinalizeTx(ctx, bcr.chain, &ins.Tx); err != nil { + if err := txbuilder.FinalizeTx(ctx, a.bcr.chain, &ins.Tx); err != nil { return NewErrorResponse(err) } @@ -233,17 +233,17 @@ func (bcr *BlockchainReactor) submit(ctx context.Context, ins struct { } // POST /sign-submit-transaction -func (bcr *BlockchainReactor) signSubmit(ctx context.Context, x struct { +func (a *API) signSubmit(ctx context.Context, x struct { Password []string `json:"password"` Txs txbuilder.Template `json:"transaction"` }) Response { - if err := txbuilder.Sign(ctx, &x.Txs, nil, x.Password[0], bcr.pseudohsmSignTemplate); err != nil { + if err := txbuilder.Sign(ctx, &x.Txs, nil, x.Password[0], a.pseudohsmSignTemplate); err != nil { log.WithField("build err", err).Error("fail on sign transaction.") return NewErrorResponse(err) } log.Info("Sign Transaction complete.") - txID, err := bcr.submitSingle(nil, &x.Txs) + txID, err := a.submitSingle(nil, &x.Txs) if err != nil { log.WithField("err", err).Error("submit single tx") return NewErrorResponse(err) diff --git a/blockchain/txfeeds.go b/blockchain/txfeeds.go index b081f37b..5486742a 100644 --- a/blockchain/txfeeds.go +++ b/blockchain/txfeeds.go @@ -11,11 +11,11 @@ import ( ) // POST /create-txfeed -func (bcr *BlockchainReactor) createTxFeed(ctx context.Context, in struct { +func (a *API) createTxFeed(ctx context.Context, in struct { Alias string `json:"alias"` Filter string `json:"filter"` }) Response { - if err := bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil { + if err := a.bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil { log.WithField("error", err).Error("Add TxFeed Failed") return NewErrorResponse(err) } @@ -37,11 +37,11 @@ func (bcr *BlockchainReactor) getTxFeedByAlias(ctx context.Context, filter strin } // POST /get-transaction-feed -func (bcr *BlockchainReactor) getTxFeed(ctx context.Context, in struct { +func (a *API) getTxFeed(ctx context.Context, in struct { Alias string `json:"alias,omitempty"` }) Response { var tmpTxFeed interface{} - rawTxfeed, err := bcr.getTxFeedByAlias(ctx, in.Alias) + rawTxfeed, err := a.bcr.getTxFeedByAlias(ctx, in.Alias) if err != nil { return NewErrorResponse(err) } @@ -54,35 +54,35 @@ func (bcr *BlockchainReactor) getTxFeed(ctx context.Context, in struct { } // POST /delete-transaction-feed -func (bcr *BlockchainReactor) deleteTxFeed(ctx context.Context, in struct { +func (a *API) deleteTxFeed(ctx context.Context, in struct { Alias string `json:"alias,omitempty"` }) Response { - if err := bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil { + if err := a.bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil { return NewErrorResponse(err) } return NewSuccessResponse(nil) } // POST /update-transaction-feed -func (bcr *BlockchainReactor) updateTxFeed(ctx context.Context, in struct { +func (a *API) updateTxFeed(ctx context.Context, in struct { Alias string `json:"alias"` Filter string `json:"filter"` }) Response { - if err := bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil { + if err := a.bcr.txFeedTracker.Delete(ctx, in.Alias); err != nil { return NewErrorResponse(err) } - if err := bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil { + if err := a.bcr.txFeedTracker.Create(ctx, in.Alias, in.Filter); err != nil { log.WithField("error", err).Error("Update TxFeed Failed") return NewErrorResponse(err) } return NewSuccessResponse(nil) } -func (bcr *BlockchainReactor) getTxFeeds() ([]txfeed.TxFeed, error) { +func (a *API) getTxFeeds() ([]txfeed.TxFeed, error) { txFeed := txfeed.TxFeed{} txFeeds := make([]txfeed.TxFeed, 0) - iter := bcr.txFeedTracker.DB.Iterator() + iter := a.bcr.txFeedTracker.DB.Iterator() defer iter.Release() for iter.Next() { @@ -97,8 +97,8 @@ func (bcr *BlockchainReactor) getTxFeeds() ([]txfeed.TxFeed, error) { // listTxFeeds is an http handler for listing txfeeds. It does not take a filter. // POST /list-transaction-feeds -func (bcr *BlockchainReactor) listTxFeeds(ctx context.Context) Response { - txFeeds, err := bcr.getTxFeeds() +func (a *API) listTxFeeds(ctx context.Context) Response { + txFeeds, err := a.getTxFeeds() if err != nil { return NewErrorResponse(err) } diff --git a/blockchain/wallet.go b/blockchain/wallet.go index bdd88497..faee8167 100644 --- a/blockchain/wallet.go +++ b/blockchain/wallet.go @@ -20,11 +20,11 @@ type KeyImportParams struct { AccountAlias string `json:"account_alias"` } -func (bcr *BlockchainReactor) walletExportKey(ctx context.Context, in struct { +func (a *API) walletExportKey(ctx context.Context, in struct { Password string `json:"password"` XPub chainkd.XPub `json:"xpub"` }) Response { - key, err := bcr.wallet.ExportAccountPrivKey(in.XPub, in.Password) + key, err := a.wallet.ExportAccountPrivKey(in.XPub, in.Password) if err != nil { return NewErrorResponse(err) } @@ -35,7 +35,7 @@ func (bcr *BlockchainReactor) walletExportKey(ctx context.Context, in struct { return NewSuccessResponse(privateKey{PrivateKey: *key}) } -func (bcr *BlockchainReactor) walletImportKey(ctx context.Context, in KeyImportParams) Response { +func (a *API) walletImportKey(ctx context.Context, in KeyImportParams) Response { rawData, err := base58.Decode(in.XPrv) if err != nil { return NewErrorResponse(err) @@ -54,15 +54,15 @@ func (bcr *BlockchainReactor) walletImportKey(ctx context.Context, in KeyImportP var xprv [64]byte copy(xprv[:], rawData[:64]) - xpub, err := bcr.wallet.ImportAccountPrivKey(xprv, in.KeyAlias, in.Password, in.Index, in.AccountAlias) + xpub, err := a.wallet.ImportAccountPrivKey(xprv, in.KeyAlias, in.Password, in.Index, in.AccountAlias) if err != nil { return NewErrorResponse(err) } return NewSuccessResponse(xpub) } -func (bcr *BlockchainReactor) keyImportProgress(ctx context.Context) Response { - data, err := bcr.wallet.GetRescanStatus() +func (a *API) keyImportProgress(ctx context.Context) Response { + data, err := a.wallet.GetRescanStatus() if err != nil { return NewErrorResponse(err) } -- 2.11.0