|
|
@ -23,6 +23,7 @@ import ( |
|
|
|
"io" |
|
|
|
"io" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common/hexutil" |
|
|
|
"github.com/ethereum/go-ethereum/rlp" |
|
|
|
"github.com/ethereum/go-ethereum/rlp" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
@ -47,12 +48,12 @@ type Log struct { |
|
|
|
type jsonLog struct { |
|
|
|
type jsonLog struct { |
|
|
|
Address *common.Address `json:"address"` |
|
|
|
Address *common.Address `json:"address"` |
|
|
|
Topics *[]common.Hash `json:"topics"` |
|
|
|
Topics *[]common.Hash `json:"topics"` |
|
|
|
Data string `json:"data"` |
|
|
|
Data *hexutil.Bytes `json:"data"` |
|
|
|
BlockNumber string `json:"blockNumber"` |
|
|
|
BlockNumber *hexutil.Uint64 `json:"blockNumber"` |
|
|
|
TxIndex string `json:"transactionIndex"` |
|
|
|
TxIndex *hexutil.Uint `json:"transactionIndex"` |
|
|
|
TxHash *common.Hash `json:"transactionHash"` |
|
|
|
TxHash *common.Hash `json:"transactionHash"` |
|
|
|
BlockHash *common.Hash `json:"blockHash"` |
|
|
|
BlockHash *common.Hash `json:"blockHash"` |
|
|
|
Index string `json:"logIndex"` |
|
|
|
Index *hexutil.Uint `json:"logIndex"` |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func NewLog(address common.Address, topics []common.Hash, data []byte, number uint64) *Log { |
|
|
|
func NewLog(address common.Address, topics []common.Hash, data []byte, number uint64) *Log { |
|
|
@ -85,12 +86,12 @@ func (r *Log) MarshalJSON() ([]byte, error) { |
|
|
|
return json.Marshal(&jsonLog{ |
|
|
|
return json.Marshal(&jsonLog{ |
|
|
|
Address: &r.Address, |
|
|
|
Address: &r.Address, |
|
|
|
Topics: &r.Topics, |
|
|
|
Topics: &r.Topics, |
|
|
|
Data: fmt.Sprintf("0x%x", r.Data), |
|
|
|
Data: (*hexutil.Bytes)(&r.Data), |
|
|
|
BlockNumber: fmt.Sprintf("0x%x", r.BlockNumber), |
|
|
|
BlockNumber: (*hexutil.Uint64)(&r.BlockNumber), |
|
|
|
TxIndex: fmt.Sprintf("0x%x", r.TxIndex), |
|
|
|
TxIndex: (*hexutil.Uint)(&r.TxIndex), |
|
|
|
TxHash: &r.TxHash, |
|
|
|
TxHash: &r.TxHash, |
|
|
|
BlockHash: &r.BlockHash, |
|
|
|
BlockHash: &r.BlockHash, |
|
|
|
Index: fmt.Sprintf("0x%x", r.Index), |
|
|
|
Index: (*hexutil.Uint)(&r.Index), |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -100,29 +101,20 @@ func (r *Log) UnmarshalJSON(input []byte) error { |
|
|
|
if err := json.Unmarshal(input, &dec); err != nil { |
|
|
|
if err := json.Unmarshal(input, &dec); err != nil { |
|
|
|
return err |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
if dec.Address == nil || dec.Topics == nil || dec.Data == "" || dec.BlockNumber == "" || |
|
|
|
if dec.Address == nil || dec.Topics == nil || dec.Data == nil || dec.BlockNumber == nil || |
|
|
|
dec.TxIndex == "" || dec.TxHash == nil || dec.BlockHash == nil || dec.Index == "" { |
|
|
|
dec.TxIndex == nil || dec.TxHash == nil || dec.BlockHash == nil || dec.Index == nil { |
|
|
|
return errMissingLogFields |
|
|
|
return errMissingLogFields |
|
|
|
} |
|
|
|
} |
|
|
|
declog := Log{ |
|
|
|
*r = Log{ |
|
|
|
Address: *dec.Address, |
|
|
|
Address: *dec.Address, |
|
|
|
Topics: *dec.Topics, |
|
|
|
Topics: *dec.Topics, |
|
|
|
TxHash: *dec.TxHash, |
|
|
|
Data: *dec.Data, |
|
|
|
BlockHash: *dec.BlockHash, |
|
|
|
BlockNumber: uint64(*dec.BlockNumber), |
|
|
|
|
|
|
|
TxHash: *dec.TxHash, |
|
|
|
|
|
|
|
TxIndex: uint(*dec.TxIndex), |
|
|
|
|
|
|
|
BlockHash: *dec.BlockHash, |
|
|
|
|
|
|
|
Index: uint(*dec.Index), |
|
|
|
} |
|
|
|
} |
|
|
|
if _, err := fmt.Sscanf(dec.Data, "0x%x", &declog.Data); err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("invalid hex log data") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if _, err := fmt.Sscanf(dec.BlockNumber, "0x%x", &declog.BlockNumber); err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("invalid hex log block number") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if _, err := fmt.Sscanf(dec.TxIndex, "0x%x", &declog.TxIndex); err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("invalid hex log tx index") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if _, err := fmt.Sscanf(dec.Index, "0x%x", &declog.Index); err != nil { |
|
|
|
|
|
|
|
return fmt.Errorf("invalid hex log index") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
*r = declog |
|
|
|
|
|
|
|
return nil |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|