forked from cerc-io/plugeth
Merge branch 'rpcfrontier' into develop
This commit is contained in:
commit
048d4ec5be
13
rpc/api.go
13
rpc/api.go
@ -9,11 +9,11 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/common"
|
|
||||||
"github.com/ethereum/go-ethereum/event"
|
"github.com/ethereum/go-ethereum/event"
|
||||||
"github.com/ethereum/go-ethereum/event/filter"
|
"github.com/ethereum/go-ethereum/event/filter"
|
||||||
"github.com/ethereum/go-ethereum/state"
|
"github.com/ethereum/go-ethereum/state"
|
||||||
@ -371,6 +371,11 @@ func (p *EthereumApi) NewWhisperIdentity(reply *interface{}) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (p *EthereumApi) RemoveWhisperIdentity(args *WhisperIdentityArgs, reply *interface{}) error {
|
||||||
|
// *reply = p.xeth().Whisper().RemoveIdentity(args.Identity)
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
|
||||||
func (p *EthereumApi) NewWhisperFilter(args *WhisperFilterArgs, reply *interface{}) error {
|
func (p *EthereumApi) NewWhisperFilter(args *WhisperFilterArgs, reply *interface{}) error {
|
||||||
var id int
|
var id int
|
||||||
opts := new(xeth.Options)
|
opts := new(xeth.Options)
|
||||||
@ -751,6 +756,12 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
|
|||||||
return p.WhisperPost(args, reply)
|
return p.WhisperPost(args, reply)
|
||||||
case "shh_newIdentity":
|
case "shh_newIdentity":
|
||||||
return p.NewWhisperIdentity(reply)
|
return p.NewWhisperIdentity(reply)
|
||||||
|
// case "shh_removeIdentity":
|
||||||
|
// args := new(WhisperIdentityArgs)
|
||||||
|
// if err := json.Unmarshal(req.Params, &args); err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// return p.RemoveWhisperIdentity(args, reply)
|
||||||
case "shh_hasIdentity":
|
case "shh_hasIdentity":
|
||||||
args := new(WhisperIdentityArgs)
|
args := new(WhisperIdentityArgs)
|
||||||
if err := json.Unmarshal(req.Params, &args); err != nil {
|
if err := json.Unmarshal(req.Params, &args); err != nil {
|
||||||
|
68
rpc/args.go
68
rpc/args.go
@ -331,42 +331,6 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
|
|||||||
return nil
|
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 = uint64(common.Big(obj[0].FromBlock).Int64())
|
|
||||||
// args.ToBlock = uint64(common.Big(obj[0].ToBlock).Int64())
|
|
||||||
// args.Limit = uint64(common.Big(obj[0].Limit).Int64())
|
|
||||||
// args.Offset = uint64(common.Big(obj[0].Offset).Int64())
|
|
||||||
// args.Address = obj[0].Address
|
|
||||||
// args.Topics = obj[0].Topics
|
|
||||||
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
|
|
||||||
type FilterOptions struct {
|
type FilterOptions struct {
|
||||||
Earliest int64
|
Earliest int64
|
||||||
Latest int64
|
Latest int64
|
||||||
@ -378,8 +342,8 @@ type FilterOptions struct {
|
|||||||
|
|
||||||
func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
||||||
var obj []struct {
|
var obj []struct {
|
||||||
FromBlock string `json:"fromBlock"`
|
FromBlock interface{} `json:"fromBlock"`
|
||||||
ToBlock string `json:"toBlock"`
|
ToBlock interface{} `json:"toBlock"`
|
||||||
Limit string `json:"limit"`
|
Limit string `json:"limit"`
|
||||||
Offset string `json:"offset"`
|
Offset string `json:"offset"`
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
@ -394,8 +358,32 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
|||||||
return NewInsufficientParamsError(len(obj), 1)
|
return NewInsufficientParamsError(len(obj), 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
args.Earliest = int64(common.Big(obj[0].FromBlock).Int64())
|
fromstr, ok := obj[0].FromBlock.(string)
|
||||||
args.Latest = int64(common.Big(obj[0].ToBlock).Int64())
|
if !ok {
|
||||||
|
return NewDecodeParamError("FromBlock is not a string")
|
||||||
|
}
|
||||||
|
|
||||||
|
switch fromstr {
|
||||||
|
case "latest":
|
||||||
|
args.Earliest = 0
|
||||||
|
default:
|
||||||
|
args.Earliest = int64(common.Big(obj[0].FromBlock.(string)).Int64())
|
||||||
|
}
|
||||||
|
|
||||||
|
tostr, ok := obj[0].ToBlock.(string)
|
||||||
|
if !ok {
|
||||||
|
return NewDecodeParamError("ToBlock is not a string")
|
||||||
|
}
|
||||||
|
|
||||||
|
switch tostr {
|
||||||
|
case "latest":
|
||||||
|
args.Latest = 0
|
||||||
|
case "pending":
|
||||||
|
args.Latest = -1
|
||||||
|
default:
|
||||||
|
args.Latest = int64(common.Big(obj[0].ToBlock.(string)).Int64())
|
||||||
|
}
|
||||||
|
|
||||||
args.Max = int(common.Big(obj[0].Limit).Int64())
|
args.Max = int(common.Big(obj[0].Limit).Int64())
|
||||||
args.Skip = int(common.Big(obj[0].Offset).Int64())
|
args.Skip = int(common.Big(obj[0].Offset).Int64())
|
||||||
args.Address = obj[0].Address
|
args.Address = obj[0].Address
|
||||||
|
120
rpc/args_test.go
120
rpc/args_test.go
@ -74,6 +74,16 @@ func TestGetBlockByHashArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetBlockByHashEmpty(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetBlockByHashArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetBlockByNumberArgs(t *testing.T) {
|
func TestGetBlockByNumberArgs(t *testing.T) {
|
||||||
input := `["0x1b4", false]`
|
input := `["0x1b4", false]`
|
||||||
expected := new(GetBlockByNumberArgs)
|
expected := new(GetBlockByNumberArgs)
|
||||||
@ -94,6 +104,16 @@ func TestGetBlockByNumberArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetBlockByNumberEmpty(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetBlockByNumberArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewTxArgs(t *testing.T) {
|
func TestNewTxArgs(t *testing.T) {
|
||||||
input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
|
input := `[{"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",
|
||||||
"to": "0xd46e8dd67c5d32be8058bb8eb970870f072445675",
|
"to": "0xd46e8dd67c5d32be8058bb8eb970870f072445675",
|
||||||
@ -139,6 +159,16 @@ func TestNewTxArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewTxArgsEmpty(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(NewTxArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetStorageArgs(t *testing.T) {
|
func TestGetStorageArgs(t *testing.T) {
|
||||||
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]`
|
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]`
|
||||||
expected := new(GetStorageArgs)
|
expected := new(GetStorageArgs)
|
||||||
@ -163,6 +193,16 @@ func TestGetStorageArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetStorageEmptyArgs(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetStorageArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetStorageAtArgs(t *testing.T) {
|
func TestGetStorageAtArgs(t *testing.T) {
|
||||||
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "0x0", "0x2"]`
|
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "0x0", "0x2"]`
|
||||||
expected := new(GetStorageAtArgs)
|
expected := new(GetStorageAtArgs)
|
||||||
@ -192,6 +232,16 @@ func TestGetStorageAtArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetStorageAtEmptyArgs(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetStorageAtArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetTxCountArgs(t *testing.T) {
|
func TestGetTxCountArgs(t *testing.T) {
|
||||||
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]`
|
input := `["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"]`
|
||||||
expected := new(GetTxCountArgs)
|
expected := new(GetTxCountArgs)
|
||||||
@ -216,6 +266,16 @@ func TestGetTxCountArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetTxCountEmptyArgs(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetTxCountArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetDataArgs(t *testing.T) {
|
func TestGetDataArgs(t *testing.T) {
|
||||||
input := `["0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", "latest"]`
|
input := `["0xd5677cf67b5aa051bb40496e68ad359eb97cfbf8", "latest"]`
|
||||||
expected := new(GetDataArgs)
|
expected := new(GetDataArgs)
|
||||||
@ -240,6 +300,16 @@ func TestGetDataArgs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetDataEmptyArgs(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(GetDataArgs)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestFilterOptions(t *testing.T) {
|
func TestFilterOptions(t *testing.T) {
|
||||||
input := `[{
|
input := `[{
|
||||||
"fromBlock": "0x1",
|
"fromBlock": "0x1",
|
||||||
@ -286,6 +356,56 @@ func TestFilterOptions(t *testing.T) {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilterOptionsWords(t *testing.T) {
|
||||||
|
input := `[{
|
||||||
|
"fromBlock": "latest",
|
||||||
|
"toBlock": "pending"
|
||||||
|
}]`
|
||||||
|
expected := new(FilterOptions)
|
||||||
|
expected.Earliest = 0
|
||||||
|
expected.Latest = -1
|
||||||
|
|
||||||
|
args := new(FilterOptions)
|
||||||
|
if err := json.Unmarshal([]byte(input), &args); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if expected.Earliest != args.Earliest {
|
||||||
|
t.Errorf("Earliest shoud be %#v but is %#v", expected.Earliest, args.Earliest)
|
||||||
|
}
|
||||||
|
|
||||||
|
if expected.Latest != args.Latest {
|
||||||
|
t.Errorf("Latest shoud be %#v but is %#v", expected.Latest, args.Latest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterOptionsNums(t *testing.T) {
|
||||||
|
input := `[{
|
||||||
|
"fromBlock": 2,
|
||||||
|
"toBlock": 3
|
||||||
|
}]`
|
||||||
|
|
||||||
|
args := new(FilterOptions)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
switch err.(type) {
|
||||||
|
case *DecodeParamError:
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
t.Errorf("Should have *DecodeParamError but instead have %T", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterOptionsEmptyArgs(t *testing.T) {
|
||||||
|
input := `[]`
|
||||||
|
|
||||||
|
args := new(FilterOptions)
|
||||||
|
err := json.Unmarshal([]byte(input), &args)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Expected error but didn't get one")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDbArgs(t *testing.T) {
|
func TestDbArgs(t *testing.T) {
|
||||||
input := `["0x74657374","0x6b6579","0x6d79537472696e67"]`
|
input := `["0x74657374","0x6b6579","0x6d79537472696e67"]`
|
||||||
expected := new(DbArgs)
|
expected := new(DbArgs)
|
||||||
|
@ -45,6 +45,11 @@ func UnmarshalRawMessages(b []byte, iface interface{}, number *int64) (err error
|
|||||||
return NewDecodeParamError(err.Error())
|
return NewDecodeParamError(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hrm... Occurs when no params
|
||||||
|
if len(data) == 0 {
|
||||||
|
return NewDecodeParamError("No data")
|
||||||
|
}
|
||||||
|
|
||||||
// Number index determines the index in the array for a possible block number
|
// Number index determines the index in the array for a possible block number
|
||||||
numberIndex := 0
|
numberIndex := 0
|
||||||
|
|
||||||
|
@ -116,6 +116,15 @@ func (self *Whisper) GetIdentity(key *ecdsa.PublicKey) *ecdsa.PrivateKey {
|
|||||||
return self.keys[string(crypto.FromECDSAPub(key))]
|
return self.keys[string(crypto.FromECDSAPub(key))]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (self *Whisper) RemoveIdentity(key *ecdsa.PublicKey) bool {
|
||||||
|
// k := string(crypto.FromECDSAPub(key))
|
||||||
|
// if _, ok := self.keys[k]; ok {
|
||||||
|
// delete(self.keys, k)
|
||||||
|
// return true
|
||||||
|
// }
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
|
||||||
func (self *Whisper) Watch(opts Filter) int {
|
func (self *Whisper) Watch(opts Filter) int {
|
||||||
return self.filters.Install(filter.Generic{
|
return self.filters.Install(filter.Generic{
|
||||||
Str1: string(crypto.FromECDSAPub(opts.To)),
|
Str1: string(crypto.FromECDSAPub(opts.To)),
|
||||||
|
@ -4,8 +4,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/whisper"
|
"github.com/ethereum/go-ethereum/whisper"
|
||||||
)
|
)
|
||||||
@ -63,6 +63,10 @@ func (self *Whisper) HasIdentity(key string) bool {
|
|||||||
return self.Whisper.HasIdentity(crypto.ToECDSAPub(common.FromHex(key)))
|
return self.Whisper.HasIdentity(crypto.ToECDSAPub(common.FromHex(key)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func (self *Whisper) RemoveIdentity(key string) bool {
|
||||||
|
// return self.Whisper.RemoveIdentity(crypto.ToECDSAPub(common.FromHex(key)))
|
||||||
|
// }
|
||||||
|
|
||||||
func (self *Whisper) Watch(opts *Options) int {
|
func (self *Whisper) Watch(opts *Options) int {
|
||||||
filter := whisper.Filter{
|
filter := whisper.Filter{
|
||||||
To: crypto.ToECDSAPub(common.FromHex(opts.To)),
|
To: crypto.ToECDSAPub(common.FromHex(opts.To)),
|
||||||
|
Loading…
Reference in New Issue
Block a user