OSDN Git Service

fix the bug (#372)
[bytom/vapor.git] / api / query.go
index 369443d..d65acaa 100644 (file)
@@ -11,7 +11,7 @@ import (
        "github.com/vapor/asset"
        "github.com/vapor/blockchain/query"
        "github.com/vapor/blockchain/signers"
-       "github.com/vapor/blockchain/txbuilder"
+       "github.com/vapor/common/arithmetic"
        "github.com/vapor/consensus"
        "github.com/vapor/crypto/ed25519"
        "github.com/vapor/crypto/ed25519/chainkd"
@@ -108,6 +108,26 @@ func (a *API) listBalances(ctx context.Context, filter struct {
        return NewSuccessResponse(balances)
 }
 
+func (a *API) listAccountVotes(ctx context.Context, filter struct {
+       AccountID    string `json:"account_id"`
+       AccountAlias string `json:"account_alias"`
+}) Response {
+       accountID := filter.AccountID
+       if filter.AccountAlias != "" {
+               acc, err := a.wallet.AccountMgr.FindByAlias(filter.AccountAlias)
+               if err != nil {
+                       return NewErrorResponse(err)
+               }
+               accountID = acc.ID
+       }
+
+       votes, err := a.wallet.GetAccountVotes(accountID, "")
+       if err != nil {
+               return NewErrorResponse(err)
+       }
+       return NewSuccessResponse(votes)
+}
+
 // POST /get-transaction
 func (a *API) getTransaction(ctx context.Context, txInfo struct {
        TxID string `json:"tx_id"`
@@ -129,49 +149,37 @@ func (a *API) getTransaction(ctx context.Context, txInfo struct {
 
 // POST /list-transactions
 func (a *API) listTransactions(ctx context.Context, filter struct {
-       ID          string `json:"id"`
-       AccountID   string `json:"account_id"`
-       Detail      bool   `json:"detail"`
-       Unconfirmed bool   `json:"unconfirmed"`
-       From        uint   `json:"from"`
-       Count       uint   `json:"count"`
+       AccountID    string `json:"account_id"`
+       AccountAlias string `json:"account_alias"`
+       StartTxID    string `json:"start_tx_id"`
+       Detail       bool   `json:"detail"`
+       Unconfirmed  bool   `json:"unconfirmed"`
+       Count        uint   `json:"count"`
 }) Response {
-       transactions := []*query.AnnotatedTx{}
-       var err error
-       var transaction *query.AnnotatedTx
-
-       if filter.ID != "" {
-               transaction, err = a.wallet.GetTransactionByTxID(filter.ID)
-               if err != nil && filter.Unconfirmed {
-                       transaction, err = a.wallet.GetUnconfirmedTxByTxID(filter.ID)
-               }
-
-               if err != nil {
-                       return NewErrorResponse(err)
-               }
-               transactions = []*query.AnnotatedTx{transaction}
-       } else {
-               transactions, err = a.wallet.GetTransactions(filter.AccountID)
+       accountID := filter.AccountID
+       if filter.AccountAlias != "" {
+               acc, err := a.wallet.AccountMgr.FindByAlias(filter.AccountAlias)
                if err != nil {
                        return NewErrorResponse(err)
                }
+               accountID = acc.ID
+       }
 
-               if filter.Unconfirmed {
-                       unconfirmedTxs, err := a.wallet.GetUnconfirmedTxs(filter.AccountID)
-                       if err != nil {
-                               return NewErrorResponse(err)
-                       }
-                       transactions = append(unconfirmedTxs, transactions...)
-               }
+       if accountID == "" {
+               return NewErrorResponse(account.ErrAccountIDEmpty)
+       }
+
+       transactions, err := a.wallet.GetTransactions(accountID, filter.StartTxID, filter.Count, filter.Unconfirmed)
+       if err != nil {
+               return NewErrorResponse(err)
        }
 
        if filter.Detail == false {
                txSummary := a.wallet.GetTransactionsSummary(transactions)
-               start, end := getPageRange(len(txSummary), filter.From, filter.Count)
-               return NewSuccessResponse(txSummary[start:end])
+               return NewSuccessResponse(txSummary)
        }
-       start, end := getPageRange(len(transactions), filter.From, filter.Count)
-       return NewSuccessResponse(transactions[start:end])
+
+       return NewSuccessResponse(transactions)
 }
 
 // POST /get-unconfirmed-transaction
@@ -203,6 +211,8 @@ func (a *API) getUnconfirmedTx(ctx context.Context, filter struct {
        switch out := resOut.(type) {
        case *bc.IntraChainOutput:
                tx.MuxID = *out.Source.Ref
+       case *bc.VoteOutput:
+               tx.MuxID = *out.Source.Ref
        case *bc.Retirement:
                tx.MuxID = *out.Source.Ref
        }
@@ -269,7 +279,7 @@ func (a *API) decodeRawTransaction(ctx context.Context, ins struct {
                tx.Outputs = append(tx.Outputs, a.wallet.BuildAnnotatedOutput(&ins.Tx, i))
        }
 
-       tx.Fee = txbuilder.CalculateTxFee(&ins.Tx)
+       tx.Fee, _ = arithmetic.CalculateTxFee(&ins.Tx)
        return NewSuccessResponse(tx)
 }
 
@@ -291,7 +301,7 @@ func (a *API) listUnspentOutputs(ctx context.Context, filter struct {
                }
                accountID = acc.ID
        }
-       accountUTXOs := a.wallet.GetAccountUtxos(accountID, filter.ID, filter.Unconfirmed, filter.SmartContract)
+       accountUTXOs := a.wallet.GetAccountUtxos(accountID, filter.ID, filter.Unconfirmed, filter.SmartContract, false)
 
        UTXOs := []query.AnnotatedUTXO{}
        for _, utxo := range accountUTXOs {
@@ -317,7 +327,7 @@ func (a *API) listUnspentOutputs(ctx context.Context, filter struct {
 
 // return gasRate
 func (a *API) gasRate() Response {
-       gasrate := map[string]int64{"gas_rate": consensus.VMGasRate}
+       gasrate := map[string]int64{"gas_rate": consensus.ActiveNetParams.VMGasRate}
        return NewSuccessResponse(gasrate)
 }