aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/gen_structlog.go
blob: 726012e59ecf6470881e27df2337a647c6e46c1d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Code generated by github.com/fjl/gencodec. DO NOT EDIT.

package vm

import (
    "encoding/json"
    "math/big"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/common/hexutil"
    "github.com/ethereum/go-ethereum/common/math"
)

var _ = (*structLogMarshaling)(nil)

// MarshalJSON marshals as JSON.
func (s StructLog) MarshalJSON() ([]byte, error) {
    type StructLog struct {
        Pc            uint64                      `json:"pc"`
        Op            OpCode                      `json:"op"`
        Gas           math.HexOrDecimal64         `json:"gas"`
        GasCost       math.HexOrDecimal64         `json:"gasCost"`
        Memory        hexutil.Bytes               `json:"memory"`
        MemorySize    int                         `json:"memSize"`
        Stack         []*math.HexOrDecimal256     `json:"stack"`
        Storage       map[common.Hash]common.Hash `json:"-"`
        Depth         int                         `json:"depth"`
        RefundCounter uint64                      `json:"refund"`
        Err           error                       `json:"-"`
        OpName        string                      `json:"opName"`
        ErrorString   string                      `json:"error"`
    }
    var enc StructLog
    enc.Pc = s.Pc
    enc.Op = s.Op
    enc.Gas = math.HexOrDecimal64(s.Gas)
    enc.GasCost = math.HexOrDecimal64(s.GasCost)
    enc.Memory = s.Memory
    enc.MemorySize = s.MemorySize
    if s.Stack != nil {
        enc.Stack = make([]*math.HexOrDecimal256, len(s.Stack))
        for k, v := range s.Stack {
            enc.Stack[k] = (*math.HexOrDecimal256)(v)
        }
    }
    enc.Storage = s.Storage
    enc.Depth = s.Depth
    enc.RefundCounter = s.RefundCounter
    enc.Err = s.Err
    enc.OpName = s.OpName()
    enc.ErrorString = s.ErrorString()
    return json.Marshal(&enc)
}

// UnmarshalJSON unmarshals from JSON.
func (s *StructLog) UnmarshalJSON(input []byte) error {
    type StructLog struct {
        Pc            *uint64                     `json:"pc"`
        Op            *OpCode                     `json:"op"`
        Gas           *math.HexOrDecimal64        `json:"gas"`
        GasCost       *math.HexOrDecimal64        `json:"gasCost"`
        Memory        *hexutil.Bytes              `json:"memory"`
        MemorySize    *int                        `json:"memSize"`
        Stack         []*math.HexOrDecimal256     `json:"stack"`
        Storage       map[common.Hash]common.Hash `json:"-"`
        Depth         *int                        `json:"depth"`
        RefundCounter *uint64                     `json:"refund"`
        Err           error                       `json:"-"`
    }
    var dec StructLog
    if err := json.Unmarshal(input, &dec); err != nil {
        return err
    }
    if dec.Pc != nil {
        s.Pc = *dec.Pc
    }
    if dec.Op != nil {
        s.Op = *dec.Op
    }
    if dec.Gas != nil {
        s.Gas = uint64(*dec.Gas)
    }
    if dec.GasCost != nil {
        s.GasCost = uint64(*dec.GasCost)
    }
    if dec.Memory != nil {
        s.Memory = *dec.Memory
    }
    if dec.MemorySize != nil {
        s.MemorySize = *dec.MemorySize
    }
    if dec.Stack != nil {
        s.Stack = make([]*big.Int, len(dec.Stack))
        for k, v := range dec.Stack {
            s.Stack[k] = (*big.Int)(v)
        }
    }
    if dec.Storage != nil {
        s.Storage = dec.Storage
    }
    if dec.Depth != nil {
        s.Depth = *dec.Depth
    }
    if dec.RefundCounter != nil {
        s.RefundCounter = *dec.RefundCounter
    }
    if dec.Err != nil {
        s.Err = dec.Err
    }
    return nil
}