From 381864d869a2c53f9f2d01ab810db4a757692e32 Mon Sep 17 00:00:00 2001 From: Nguyen Sy Thanh Son Date: Fri, 11 Jan 2019 17:14:12 +0000 Subject: [PATCH] verify signing tx --- common/types.go | 1 + contracts/utils.go | 28 +++++++++++++++------------- core/types/transaction.go | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/common/types.go b/common/types.go index ad06240675..6a7be73c98 100644 --- a/common/types.go +++ b/common/types.go @@ -39,6 +39,7 @@ const ( UnvoteMethod = "0x02aa9be2" ProposeMethod = "0x01267951" ResignMethod = "0xae6e43f5" + SignMethod = "0xe341eaa4" ) var ( diff --git a/contracts/utils.go b/contracts/utils.go index bdfde9828c..d48207e200 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -336,22 +336,24 @@ func GetRewardForCheckpoint(c *posv.Posv, chain consensus.ChainReader, number ui var signTxs []*types.Transaction for _, tx := range txs { - var b uint - for _, r := range receipts { - if r.TxHash == tx.Hash() { - b = r.Status - break + if tx.IsSigningTransaction() { + var b uint + for _, r := range receipts { + if r.TxHash == tx.Hash() { + b = r.Status + break + } } - } - if b == types.ReceiptStatusFailed { - continue - } + if b == types.ReceiptStatusFailed { + continue + } - signTxs = append(signTxs, tx) - blkHash := common.BytesToHash(tx.Data()[len(tx.Data())-32:]) - from := *tx.From() - data[blkHash] = append(data[blkHash], from) + signTxs = append(signTxs, tx) + blkHash := common.BytesToHash(tx.Data()[len(tx.Data())-32:]) + from := *tx.From() + data[blkHash] = append(data[blkHash], from) + } } c.BlockSigners.Add(header.Hash(), signTxs) diff --git a/core/types/transaction.go b/core/types/transaction.go index 9bc42013b0..339e3562f5 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -291,7 +291,22 @@ func (tx *Transaction) IsSigningTransaction() bool { if tx.To() == nil { return false } - return tx.To().String() == common.BlockSigners + + if tx.To().String() != common.BlockSigners { + return false + } + + method := common.ToHex(tx.Data()[0:4]) + + if method != common.SignMethod { + return false + } + + if len(tx.Data()) != (32*2 + 4) { + return false + } + + return true } func (tx *Transaction) IsVotingTransaction() (bool, *common.Address) {