github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/tests/gen_vmexec.go (about)

     1  
     2  //此源码被清华学神尹成大魔王专业翻译分析并修改
     3  //尹成QQ77025077
     4  //尹成微信18510341407
     5  //尹成所在QQ群721929980
     6  //尹成邮箱 yinc13@mails.tsinghua.edu.cn
     7  //尹成毕业于清华大学,微软区块链领域全球最有价值专家
     8  //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
     9  //
    10  
    11  package tests
    12  
    13  import (
    14  	"encoding/json"
    15  	"errors"
    16  	"math/big"
    17  
    18  	"github.com/ethereum/go-ethereum/common"
    19  	"github.com/ethereum/go-ethereum/common/hexutil"
    20  	"github.com/ethereum/go-ethereum/common/math"
    21  )
    22  
    23  var _ = (*vmExecMarshaling)(nil)
    24  
    25  func (v vmExec) MarshalJSON() ([]byte, error) {
    26  	type vmExec struct {
    27  		Address  common.UnprefixedAddress `json:"address"  gencodec:"required"`
    28  		Caller   common.UnprefixedAddress `json:"caller"   gencodec:"required"`
    29  		Origin   common.UnprefixedAddress `json:"origin"   gencodec:"required"`
    30  		Code     hexutil.Bytes            `json:"code"     gencodec:"required"`
    31  		Data     hexutil.Bytes            `json:"data"     gencodec:"required"`
    32  		Value    *math.HexOrDecimal256    `json:"value"    gencodec:"required"`
    33  		GasLimit math.HexOrDecimal64      `json:"gas"      gencodec:"required"`
    34  		GasPrice *math.HexOrDecimal256    `json:"gasPrice" gencodec:"required"`
    35  	}
    36  	var enc vmExec
    37  	enc.Address = common.UnprefixedAddress(v.Address)
    38  	enc.Caller = common.UnprefixedAddress(v.Caller)
    39  	enc.Origin = common.UnprefixedAddress(v.Origin)
    40  	enc.Code = v.Code
    41  	enc.Data = v.Data
    42  	enc.Value = (*math.HexOrDecimal256)(v.Value)
    43  	enc.GasLimit = math.HexOrDecimal64(v.GasLimit)
    44  	enc.GasPrice = (*math.HexOrDecimal256)(v.GasPrice)
    45  	return json.Marshal(&enc)
    46  }
    47  
    48  func (v *vmExec) UnmarshalJSON(input []byte) error {
    49  	type vmExec struct {
    50  		Address  *common.UnprefixedAddress `json:"address"  gencodec:"required"`
    51  		Caller   *common.UnprefixedAddress `json:"caller"   gencodec:"required"`
    52  		Origin   *common.UnprefixedAddress `json:"origin"   gencodec:"required"`
    53  		Code     *hexutil.Bytes            `json:"code"     gencodec:"required"`
    54  		Data     *hexutil.Bytes            `json:"data"     gencodec:"required"`
    55  		Value    *math.HexOrDecimal256     `json:"value"    gencodec:"required"`
    56  		GasLimit *math.HexOrDecimal64      `json:"gas"      gencodec:"required"`
    57  		GasPrice *math.HexOrDecimal256     `json:"gasPrice" gencodec:"required"`
    58  	}
    59  	var dec vmExec
    60  	if err := json.Unmarshal(input, &dec); err != nil {
    61  		return err
    62  	}
    63  	if dec.Address == nil {
    64  		return errors.New("missing required field 'address' for vmExec")
    65  	}
    66  	v.Address = common.Address(*dec.Address)
    67  	if dec.Caller == nil {
    68  		return errors.New("missing required field 'caller' for vmExec")
    69  	}
    70  	v.Caller = common.Address(*dec.Caller)
    71  	if dec.Origin == nil {
    72  		return errors.New("missing required field 'origin' for vmExec")
    73  	}
    74  	v.Origin = common.Address(*dec.Origin)
    75  	if dec.Code == nil {
    76  		return errors.New("missing required field 'code' for vmExec")
    77  	}
    78  	v.Code = *dec.Code
    79  	if dec.Data == nil {
    80  		return errors.New("missing required field 'data' for vmExec")
    81  	}
    82  	v.Data = *dec.Data
    83  	if dec.Value == nil {
    84  		return errors.New("missing required field 'value' for vmExec")
    85  	}
    86  	v.Value = (*big.Int)(dec.Value)
    87  	if dec.GasLimit == nil {
    88  		return errors.New("missing required field 'gas' for vmExec")
    89  	}
    90  	v.GasLimit = uint64(*dec.GasLimit)
    91  	if dec.GasPrice == nil {
    92  		return errors.New("missing required field 'gasPrice' for vmExec")
    93  	}
    94  	v.GasPrice = (*big.Int)(dec.GasPrice)
    95  	return nil
    96  }