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

View file

@ -238,6 +238,17 @@ func (t *Transaction) Bytes() []byte {
return buf.Bytes() 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 // transactionJSON is a wrapper for Transaction and
// used for correct marhalling of transaction.Data // used for correct marhalling of transaction.Data
type transactionJSON struct { type transactionJSON struct {

View file

@ -279,11 +279,9 @@ func (c *Client) GetRawTransaction(hash util.Uint256) (*transaction.Transaction,
if err != nil { if err != nil {
return nil, err return nil, err
} }
r := io.NewBinReaderFromBuf(txBytes) tx, err := transaction.NewTransactionFromBytes(txBytes)
tx := new(transaction.Transaction) if err != nil {
tx.DecodeBinary(r) return nil, err
if r.Err != nil {
return nil, r.Err
} }
return tx, nil 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 { } else if byteTx, err := reqParams[0].GetBytesHex(); err != nil {
return nil, response.ErrInvalidParams return nil, response.ErrInvalidParams
} else { } else {
r := io.NewBinReaderFromBuf(byteTx) tx, err := transaction.NewTransactionFromBytes(byteTx)
tx := &transaction.Transaction{} if err != nil {
tx.DecodeBinary(r)
if r.Err != nil {
return nil, response.ErrInvalidParams return nil, response.ErrInvalidParams
} }
relayReason := s.coreServer.RelayTxn(tx) relayReason := s.coreServer.RelayTxn(tx)