core: add NewTransactionFromBytes method to Transaction

Added `NewTransactionFromBytes(b []byte)` method to
transaction.Transaction in order to avoid code duplication.
This commit is contained in:
Anna Shaleva 2020-04-13 12:02:18 +03:00
parent 5a22651e36
commit d1f92a585b
4 changed files with 18 additions and 12 deletions

View file

@ -4,7 +4,6 @@ import (
"encoding/hex"
"testing"
"github.com/nspcc-dev/neo-go/pkg/internal/testserdes"
"github.com/stretchr/testify/assert"
)
@ -20,7 +19,7 @@ var (
func decodeTransaction(rawTX string, t *testing.T) *Transaction {
b, err1 := hex.DecodeString(rawTX)
assert.Nil(t, err1)
tx := &Transaction{}
assert.NoError(t, testserdes.DecodeBinary(b, tx))
tx, err := NewTransactionFromBytes(b)
assert.NoError(t, err)
return tx
}

View file

@ -238,6 +238,17 @@ func (t *Transaction) Bytes() []byte {
return buf.Bytes()
}
// NewTransactionFromBytes decodes byte array into *Transaction
func NewTransactionFromBytes(b []byte) (*Transaction, error) {
tx := &Transaction{}
r := io.NewBinReaderFromBuf(b)
tx.DecodeBinary(r)
if r.Err != nil {
return nil, r.Err
}
return tx, nil
}
// transactionJSON is a wrapper for Transaction and
// used for correct marhalling of transaction.Data
type transactionJSON struct {

View file

@ -279,11 +279,9 @@ func (c *Client) GetRawTransaction(hash util.Uint256) (*transaction.Transaction,
if err != nil {
return nil, err
}
r := io.NewBinReaderFromBuf(txBytes)
tx := new(transaction.Transaction)
tx.DecodeBinary(r)
if r.Err != nil {
return nil, r.Err
tx, err := transaction.NewTransactionFromBytes(txBytes)
if err != nil {
return nil, err
}
return tx, nil
}

View file

@ -931,10 +931,8 @@ func (s *Server) sendrawtransaction(reqParams request.Params) (interface{}, erro
} else if byteTx, err := reqParams[0].GetBytesHex(); err != nil {
return nil, response.ErrInvalidParams
} else {
r := io.NewBinReaderFromBuf(byteTx)
tx := &transaction.Transaction{}
tx.DecodeBinary(r)
if r.Err != nil {
tx, err := transaction.NewTransactionFromBytes(byteTx)
if err != nil {
return nil, response.ErrInvalidParams
}
relayReason := s.coreServer.RelayTxn(tx)