aboutsummaryrefslogblamecommitdiffstats
path: root/rpc/args.go
blob: f560512422e091185c39dc640f2b7937b65855a8 (plain) (tree)
1
2
3
4
5
6
7
8
9

           
        
               

                       
 

                                                 
 


                                

 








                                                                     
         



                                                 
         

                  

 


                                  

 




                                                                       

         



                                                                          
 

                                                 

         
                  

 






                         

 







                                                            
         
 





                                                      
         






                                                    



                            

                          

 



                                                                 
                                    
         










                                                                                  

 


                                                                                   



                  
                              


                          

 














                                                                                  
         

                  

 


                                                                                   
         


                                                                               



                  
                            

                          

 









                                                                 
         






                                                                                  

 


                                                                                   



                  
                            

                          

 













                                                                                  
         

                  

 


                                                                                   



                  


                          

 













                                                                                  
         

                  

 


                                                                                   


                  




                      


































                                                                      
                                    
         











                                                                         
 



                           
                            
                         



                    


























                                                                               


                                  






                       



















                                                               

                                       
                                                                                    

                            
                                                                               


                  




                                
                         


                       













































































































                                                                               


















                                                                    
package rpc

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

    "github.com/ethereum/go-ethereum/ethutil"
)

type GetBlockByHashArgs struct {
    BlockHash    string
    Transactions bool
}

func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.BlockHash = obj[0].(string)

    if len(obj) > 1 {
        args.Transactions = obj[1].(bool)
    }

    return nil
}

type GetBlockByNumberArgs struct {
    BlockNumber  uint64
    Transactions bool
}

func (args *GetBlockByNumberArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[0].(string)))

    if len(obj) > 1 {
        args.Transactions = obj[1].(bool)
    }

    return nil
}

type NewTxArgs struct {
    From     string
    To       string
    Value    *big.Int
    Gas      *big.Int
    GasPrice *big.Int
    Data     string
}

func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []struct {
        From     string `json:"from"`
        To       string `json:"to"`
        Value    string `json:"value"`
        Gas      string `json:"gas"`
        GasPrice string `json:"gasPrice"`
        Data     string `json:"data"`
    }

    if err = json.Unmarshal(b, &obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.From = obj[0].From
    args.To = obj[0].To
    args.Value = ethutil.Big(obj[0].Value)
    args.Gas = ethutil.Big(obj[0].Gas)
    args.GasPrice = ethutil.Big(obj[0].GasPrice)
    args.Data = obj[0].Data

    return nil
}

type GetStorageArgs struct {
    Address     string
    BlockNumber uint64
}

func (args *GetStorageArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Address = obj[0].(string)

    if len(obj) > 1 {
        args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[1].(string)))
    }

    return nil
}

func (args *GetStorageArgs) requirements() error {
    if len(args.Address) == 0 {
        return NewErrorWithMessage(errArguments, "Address cannot be blank")
    }
    return nil
}

type GetStorageAtArgs struct {
    Address     string
    Key         string
    BlockNumber uint64
}

func (args *GetStorageAtArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 2 {
        return errArguments
    }
    args.Address = obj[0].(string)
    args.Key = obj[1].(string)

    if len(obj) > 2 {
        args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[2].(string)))
    }

    return nil
}

func (args *GetStorageAtArgs) requirements() error {
    if len(args.Address) == 0 {
        return NewErrorWithMessage(errArguments, "Address cannot be blank")
    }

    if len(args.Key) == 0 {
        return NewErrorWithMessage(errArguments, "Key cannot be blank")
    }
    return nil
}

type GetTxCountArgs struct {
    Address     string
    BlockNumber uint64
}

func (args *GetTxCountArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments

    }
    args.Address = obj[0].(string)

    if len(obj) > 1 {
        args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[1].(string)))
    }

    return nil
}

func (args *GetTxCountArgs) requirements() error {
    if len(args.Address) == 0 {
        return NewErrorWithMessage(errArguments, "Address cannot be blank")
    }
    return nil
}

type GetBalanceArgs struct {
    Address     string
    BlockNumber uint64
}

func (args *GetBalanceArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Address = obj[0].(string)

    if len(obj) > 1 {
        args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[1].(string)))
    }

    return nil
}

func (args *GetBalanceArgs) requirements() error {
    if len(args.Address) == 0 {
        return NewErrorWithMessage(errArguments, "Address cannot be blank")
    }
    return nil
}

type GetDataArgs struct {
    Address     string
    BlockNumber uint64
}

func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Address = obj[0].(string)

    if len(obj) > 1 {
        args.BlockNumber = ethutil.BytesToNumber(fromHex(obj[1].(string)))
    }

    return nil
}

func (args *GetDataArgs) requirements() error {
    if len(args.Address) == 0 {
        return NewErrorWithMessage(errArguments, "Address cannot be blank")
    }
    return nil
}

type Sha3Args struct {
    Data string
}

func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return NewErrorWithMessage(errDecodeArgs, err.Error())
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Data = obj[0].(string)

    return nil
}

type FilterArgs struct {
    FromBlock uint64
    ToBlock   uint64
    Limit     uint64
    Offset    uint64
    Address   string
    Topics    []string
}

func (args *FilterArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []struct {
        FromBlock string   `json:"fromBlock"`
        ToBlock   string   `json:"toBlock"`
        Limit     string   `json:"limit"`
        Offset    string   `json:"offset"`
        Address   string   `json:"address"`
        Topics    []string `json:"topics"`
    }

    if err = json.Unmarshal(b, &obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.FromBlock = ethutil.BytesToNumber(fromHex(obj[0].FromBlock))
    args.ToBlock = ethutil.BytesToNumber(fromHex(obj[0].ToBlock))
    args.Limit = ethutil.BytesToNumber(fromHex(obj[0].Limit))
    args.Offset = ethutil.BytesToNumber(fromHex(obj[0].Offset))
    args.Address = obj[0].Address
    args.Topics = obj[0].Topics

    return nil
}

type FilterOptions struct {
    Earliest int64
    Latest   int64
    Address  interface{}
    Topic    []string
    Skip     int
    Max      int
}

func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
    var obj []struct {
        FromBlock string   `json:"fromBlock"`
        ToBlock   string   `json:"toBlock"`
        Limit     string   `json:"limit"`
        Offset    string   `json:"offset"`
        Address   string   `json:"address"`
        Topics    []string `json:"topics"`
    }

    if err = json.Unmarshal(b, &obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Earliest = int64(ethutil.BytesToNumber(fromHex(obj[0].FromBlock)))
    args.Latest = int64(ethutil.BytesToNumber(fromHex(obj[0].ToBlock)))
    args.Max = int(ethutil.BytesToNumber(fromHex(obj[0].Limit)))
    args.Skip = int(ethutil.BytesToNumber(fromHex(obj[0].Offset)))
    args.Address = obj[0].Address
    args.Topic = obj[0].Topics

    return nil
}

// type FilterChangedArgs struct {
//  n int
// }

type DbArgs struct {
    Database string
    Key      string
    Value    string
}

func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 2 {
        return errArguments
    }
    args.Database = obj[0].(string)
    args.Key = obj[1].(string)

    if len(obj) > 2 {
        args.Value = obj[2].(string)
    }

    return nil
}

func (a *DbArgs) requirements() error {
    if len(a.Database) == 0 {
        return NewErrorWithMessage(errArguments, "Database cannot be blank")
    }
    if len(a.Key) == 0 {
        return NewErrorWithMessage(errArguments, "Key cannot be blank")
    }
    return nil
}

type WhisperMessageArgs struct {
    Payload  string
    To       string
    From     string
    Topic    []string
    Priority uint32
    Ttl      uint32
}

func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []struct {
        Payload  string
        To       string
        From     string
        Topic    []string
        Priority string
        Ttl      string
    }

    if err = json.Unmarshal(b, &obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }
    args.Payload = obj[0].Payload
    args.To = obj[0].To
    args.From = obj[0].From
    args.Topic = obj[0].Topic
    args.Priority = uint32(ethutil.BytesToNumber(fromHex(obj[0].Priority)))
    args.Ttl = uint32(ethutil.BytesToNumber(fromHex(obj[0].Ttl)))

    return nil
}

type CompileArgs struct {
    Source string
}

func (args *CompileArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []interface{}
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) > 0 {
        args.Source = obj[0].(string)
    }

    return nil
}

type FilterStringArgs struct {
    Word string
}

func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []string
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errDecodeArgs
    }

    args.Word = obj[0]

    return nil
}

type FilterIdArgs struct {
    Id int
}

func (args *FilterIdArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []string
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errDecodeArgs
    }

    args.Id = int(ethutil.BytesToNumber(fromHex(obj[0])))

    return nil
}

type WhisperIdentityArgs struct {
    Identity string
}

func (args *WhisperIdentityArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []string
    r := bytes.NewReader(b)
    if err := json.NewDecoder(r).Decode(&obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errDecodeArgs
    }

    args.Identity = obj[0]

    return nil
}

type WhisperFilterArgs struct {
    To     string
    From   string
    Topics []string
}

func (args *WhisperFilterArgs) UnmarshalJSON(b []byte) (err error) {
    var obj []WhisperFilterArgs

    if err = json.Unmarshal(b, &obj); err != nil {
        return errDecodeArgs
    }

    if len(obj) < 1 {
        return errArguments
    }

    args.To = obj[0].To
    args.From = obj[0].From
    args.Topics = obj[0].Topics

    return nil
}