X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=wallet%2Findexer.go;h=8ae4bacc1da9e0684436aef8377201f1762a846a;hp=4c28679732ee53d5147c46fe124f3c33831292d8;hb=ddc7106558f020bde24cc337d51649611dddaba8;hpb=7d76d575f5101652fba26714b1b6b6523220e126 diff --git a/wallet/indexer.go b/wallet/indexer.go index 4c286797..8ae4bacc 100644 --- a/wallet/indexer.go +++ b/wallet/indexer.go @@ -1,6 +1,7 @@ package wallet import ( + "bytes" "encoding/json" "fmt" "sort" @@ -15,6 +16,7 @@ import ( chainjson "github.com/vapor/encoding/json" "github.com/vapor/protocol/bc" "github.com/vapor/protocol/bc/types" + "github.com/vapor/protocol/vm/vmutil" ) const ( @@ -119,11 +121,18 @@ func (w *Wallet) indexTransactions(batch db.Batch, b *types.Block, txStatus *bc. // filterAccountTxs related and build the fully annotated transactions. func (w *Wallet) filterAccountTxs(b *types.Block, txStatus *bc.TransactionStatus) []*query.AnnotatedTx { annotatedTxs := make([]*query.AnnotatedTx, 0, len(b.Transactions)) - + redeemContract := w.dposAddress.ScriptAddress() + program, _ := vmutil.P2WPKHProgram(redeemContract) transactionLoop: for pos, tx := range b.Transactions { statusFail, _ := txStatus.GetStatus(pos) for _, v := range tx.Outputs { + + if bytes.Equal(v.ControlProgram, program) { + annotatedTxs = append(annotatedTxs, w.buildAnnotatedTransaction(tx, b, statusFail, pos)) + continue transactionLoop + } + var hash [32]byte sha3pool.Sum256(hash[:], v.ControlProgram) if bytes := w.DB.Get(account.ContractKey(hash)); bytes != nil { @@ -133,6 +142,11 @@ transactionLoop: } for _, v := range tx.Inputs { + if bytes.Equal(v.ControlProgram(), program) { + annotatedTxs = append(annotatedTxs, w.buildAnnotatedTransaction(tx, b, statusFail, pos)) + continue transactionLoop + } + outid, err := v.SpentOutputID() if err != nil { continue