core/vm: use package hexutil for JSON handling
This commit is contained in:
parent
ec75953f50
commit
65e6319b12
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,9 @@ var unmarshalLogTests = map[string]struct {
|
|||||||
"ok": {
|
"ok": {
|
||||||
input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x000000000000000000000000000000000000000000000001a055690d9db80000","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`,
|
input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x000000000000000000000000000000000000000000000001a055690d9db80000","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`,
|
||||||
},
|
},
|
||||||
|
"empty data": {
|
||||||
|
input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`,
|
||||||
|
},
|
||||||
"missing data": {
|
"missing data": {
|
||||||
input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`,
|
input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`,
|
||||||
wantError: errMissingLogFields,
|
wantError: errMissingLogFields,
|
||||||
|
Loading…
Reference in New Issue
Block a user