9bbb9df185
Just some minor optimizations I figured out a while ago. By using ReadBytes instead of Bytes on the rlp stream, we can save the allocation of a temporary buffer for the typed tx payload. If kind == rlp.Byte, the size reported by Stream.Kind will be zero, but we need a buffer of size 1 for ReadBytes. Since typed txs always have to be longer than 1 byte, we can just return an error for kind == rlp.Byte. There is a also a small change for Log: since the first three fields of Log are the ones that should appear in the canon encoding, we can simply ignore the remaining fields via struct tag. Doing this removes an indirection through the rlpLog type. --------- Co-authored-by: Martin Holst Swende <martin@swende.se>
91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.
|
|
|
|
package types
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
)
|
|
|
|
var _ = (*logMarshaling)(nil)
|
|
|
|
// MarshalJSON marshals as JSON.
|
|
func (l Log) MarshalJSON() ([]byte, error) {
|
|
type Log struct {
|
|
Address common.Address `json:"address" gencodec:"required"`
|
|
Topics []common.Hash `json:"topics" gencodec:"required"`
|
|
Data hexutil.Bytes `json:"data" gencodec:"required"`
|
|
BlockNumber hexutil.Uint64 `json:"blockNumber" rlp:"-"`
|
|
TxHash common.Hash `json:"transactionHash" gencodec:"required" rlp:"-"`
|
|
TxIndex hexutil.Uint `json:"transactionIndex" rlp:"-"`
|
|
BlockHash common.Hash `json:"blockHash" rlp:"-"`
|
|
Index hexutil.Uint `json:"logIndex" rlp:"-"`
|
|
Removed bool `json:"removed" rlp:"-"`
|
|
}
|
|
var enc Log
|
|
enc.Address = l.Address
|
|
enc.Topics = l.Topics
|
|
enc.Data = l.Data
|
|
enc.BlockNumber = hexutil.Uint64(l.BlockNumber)
|
|
enc.TxHash = l.TxHash
|
|
enc.TxIndex = hexutil.Uint(l.TxIndex)
|
|
enc.BlockHash = l.BlockHash
|
|
enc.Index = hexutil.Uint(l.Index)
|
|
enc.Removed = l.Removed
|
|
return json.Marshal(&enc)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals from JSON.
|
|
func (l *Log) UnmarshalJSON(input []byte) error {
|
|
type Log struct {
|
|
Address *common.Address `json:"address" gencodec:"required"`
|
|
Topics []common.Hash `json:"topics" gencodec:"required"`
|
|
Data *hexutil.Bytes `json:"data" gencodec:"required"`
|
|
BlockNumber *hexutil.Uint64 `json:"blockNumber" rlp:"-"`
|
|
TxHash *common.Hash `json:"transactionHash" gencodec:"required" rlp:"-"`
|
|
TxIndex *hexutil.Uint `json:"transactionIndex" rlp:"-"`
|
|
BlockHash *common.Hash `json:"blockHash" rlp:"-"`
|
|
Index *hexutil.Uint `json:"logIndex" rlp:"-"`
|
|
Removed *bool `json:"removed" rlp:"-"`
|
|
}
|
|
var dec Log
|
|
if err := json.Unmarshal(input, &dec); err != nil {
|
|
return err
|
|
}
|
|
if dec.Address == nil {
|
|
return errors.New("missing required field 'address' for Log")
|
|
}
|
|
l.Address = *dec.Address
|
|
if dec.Topics == nil {
|
|
return errors.New("missing required field 'topics' for Log")
|
|
}
|
|
l.Topics = dec.Topics
|
|
if dec.Data == nil {
|
|
return errors.New("missing required field 'data' for Log")
|
|
}
|
|
l.Data = *dec.Data
|
|
if dec.BlockNumber != nil {
|
|
l.BlockNumber = uint64(*dec.BlockNumber)
|
|
}
|
|
if dec.TxHash == nil {
|
|
return errors.New("missing required field 'transactionHash' for Log")
|
|
}
|
|
l.TxHash = *dec.TxHash
|
|
if dec.TxIndex != nil {
|
|
l.TxIndex = uint(*dec.TxIndex)
|
|
}
|
|
if dec.BlockHash != nil {
|
|
l.BlockHash = *dec.BlockHash
|
|
}
|
|
if dec.Index != nil {
|
|
l.Index = uint(*dec.Index)
|
|
}
|
|
if dec.Removed != nil {
|
|
l.Removed = *dec.Removed
|
|
}
|
|
return nil
|
|
}
|