diff options
-rw-r--r-- | rpc/api.go | 47 | ||||
-rw-r--r-- | rpc/args.go | 17 | ||||
-rw-r--r-- | rpc/args_test.go | 6 | ||||
-rw-r--r-- | rpc/responses.go | 1 |
4 files changed, 56 insertions, 15 deletions
diff --git a/rpc/api.go b/rpc/api.go index f214c212b..fb974883a 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -394,7 +394,7 @@ func (self *EthereumApi) MessagesChanged(id int, reply *interface{}) error { } func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{}) error { - err := p.xeth().Whisper().Post(args.Payload, args.To, args.From, args.Topic, args.Priority, args.Ttl) + err := p.xeth().Whisper().Post(args.Payload, args.To, args.From, args.Topics, args.Priority, args.Ttl) if err != nil { return err } @@ -597,10 +597,10 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error if err != nil { return err } - if args.TxIndex > int64(len(v.Transactions)) || args.TxIndex < 0 { + if args.Index > int64(len(v.Transactions)) || args.Index < 0 { return NewErrorWithMessage(errDecodeArgs, "Transaction index does not exist") } - *reply = v.Transactions[args.TxIndex] + *reply = v.Transactions[args.Index] case "eth_getTransactionByBlockNumberAndIndex": args := new(BlockNumIndexArgs) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -611,13 +611,48 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error if err != nil { return err } - if args.TxIndex > int64(len(v.Transactions)) || args.TxIndex < 0 { + if args.Index > int64(len(v.Transactions)) || args.Index < 0 { return NewErrorWithMessage(errDecodeArgs, "Transaction index does not exist") } - *reply = v.Transactions[args.TxIndex] + *reply = v.Transactions[args.Index] case "eth_getUncleByBlockHashAndIndex": + args := new(HashIndexArgs) + if err := json.Unmarshal(req.Params, &args); err != nil { + return err + } + + v, err := p.GetBlockByHash(args.BlockHash, false) + if err != nil { + return err + } + if args.Index > int64(len(v.Uncles)) || args.Index < 0 { + return NewErrorWithMessage(errDecodeArgs, "Uncle index does not exist") + } + + uncle, err := p.GetBlockByHash(toHex(v.Uncles[args.Index]), false) + if err != nil { + return err + } + *reply = uncle case "eth_getUncleByBlockNumberAndIndex": - return errNotImplemented + args := new(BlockNumIndexArgs) + if err := json.Unmarshal(req.Params, &args); err != nil { + return err + } + + v, err := p.GetBlockByNumber(args.BlockNumber, true) + if err != nil { + return err + } + if args.Index > int64(len(v.Uncles)) || args.Index < 0 { + return NewErrorWithMessage(errDecodeArgs, "Uncle index does not exist") + } + + uncle, err := p.GetBlockByHash(toHex(v.Uncles[args.Index]), false) + if err != nil { + return err + } + *reply = uncle case "eth_getCompilers": return p.GetCompilers(reply) case "eth_compileSolidity": diff --git a/rpc/args.go b/rpc/args.go index 2f361526a..d4d807060 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -40,7 +40,12 @@ func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) { if len(obj) < 1 { return errArguments } - args.BlockHash = obj[0].(string) + + argstr, ok := obj[0].(string) + if !ok { + return errDecodeArgs + } + args.BlockHash = argstr if len(obj) > 1 { args.Transactions = obj[1].(bool) @@ -219,12 +224,12 @@ func (args *GetDataArgs) requirements() error { type BlockNumIndexArgs struct { BlockNumber int64 - TxIndex int64 + Index int64 } type HashIndexArgs struct { BlockHash string - TxIndex int64 + Index int64 } type Sha3Args struct { @@ -362,7 +367,7 @@ type WhisperMessageArgs struct { Payload string To string From string - Topic []string + Topics []string Priority uint32 Ttl uint32 } @@ -372,7 +377,7 @@ func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) { Payload string To string From string - Topic []string + Topics []string Priority string Ttl string } @@ -387,7 +392,7 @@ func (args *WhisperMessageArgs) UnmarshalJSON(b []byte) (err error) { args.Payload = obj[0].Payload args.To = obj[0].To args.From = obj[0].From - args.Topic = obj[0].Topic + args.Topics = obj[0].Topics args.Priority = uint32(ethutil.Big(obj[0].Priority).Int64()) args.Ttl = uint32(ethutil.Big(obj[0].Ttl).Int64()) diff --git a/rpc/args_test.go b/rpc/args_test.go index ec5400f3f..027624500 100644 --- a/rpc/args_test.go +++ b/rpc/args_test.go @@ -270,7 +270,7 @@ func TestFilterOptions(t *testing.T) { t.Errorf("Address shoud be %#v but is %#v", expected.Address, args.Address) } - // if expected.Topic != args.Topic { + // if expected.Topics != args.Topics { // t.Errorf("Topic shoud be %#v but is %#v", expected.Topic, args.Topic) // } } @@ -316,7 +316,7 @@ func TestWhisperMessageArgs(t *testing.T) { expected.Payload = "0x68656c6c6f20776f726c64" expected.Priority = 100 expected.Ttl = 100 - expected.Topic = []string{"0x68656c6c6f20776f726c64"} + expected.Topics = []string{"0x68656c6c6f20776f726c64"} args := new(WhisperMessageArgs) if err := json.Unmarshal([]byte(input), &args); err != nil { @@ -343,7 +343,7 @@ func TestWhisperMessageArgs(t *testing.T) { t.Errorf("Priority shoud be %#v but is %#v", expected.Priority, args.Priority) } - // if expected.Topic != args.Topic { + // if expected.Topics != args.Topics { // t.Errorf("Topic shoud be %#v but is %#v", expected.Topic, args.Topic) // } } diff --git a/rpc/responses.go b/rpc/responses.go index 20b13f6e2..f41ce7b96 100644 --- a/rpc/responses.go +++ b/rpc/responses.go @@ -2,6 +2,7 @@ package rpc import ( "encoding/json" + // "fmt" "math/big" "github.com/ethereum/go-ethereum/core/types" |