From 2f55a1d79853c1348fb1a4332fff98110167da80 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 10:23:54 +0200 Subject: restructured eth rpc API --- rpc/api/utils.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 rpc/api/utils.go (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go new file mode 100644 index 000000000..76f00c251 --- /dev/null +++ b/rpc/api/utils.go @@ -0,0 +1,36 @@ +package api + +import ( + "strings" + + "fmt" + + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/rpc/codec" + "github.com/ethereum/go-ethereum/xeth" +) + +const ( + EthApiName = "eth" +) + +// Parse a comma separated API string to individual api's +func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]EthereumApi, error) { + if len(strings.TrimSpace(apistr)) == 0 { + return nil, fmt.Errorf("Empty apistr provided") + } + + names := strings.Split(apistr, ",") + apis := make([]EthereumApi, len(names)) + + for i, name := range names { + switch strings.ToLower(strings.TrimSpace(name)) { + case EthApiName: + apis[i] = NewEthApi(xeth, codec) + default: + return nil, fmt.Errorf("Unknown API '%s'", name) + } + } + + return apis, nil +} -- cgit v1.2.3 From 8ebf2d8fad729a8261f237bb05b6073e6c1b652f Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 10:41:04 +0200 Subject: added RPC/IPC support --- rpc/api/utils.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 76f00c251..a62058140 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/xeth" + "github.com/ethereum/go-ethereum/rpc/shared" ) const ( @@ -34,3 +35,43 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. return apis, nil } + +// combines multiple API's +type mergedApi struct { + apis map[string]EthereumApi +} + +// create new merged api instance +func newMergedApi(apis ...EthereumApi) *mergedApi { + mergedApi := new(mergedApi) + mergedApi.apis = make(map[string]EthereumApi) + + for _, api := range apis { + for _, method := range api.Methods() { + mergedApi.apis[method] = api + } + } + return mergedApi +} + +// Supported RPC methods +func (self *mergedApi) Methods() []string { + all := make([]string, len(self.apis)) + for method, _ := range self.apis { + all = append(all, method) + } + return all +} + +// Call the correct API's Execute method for the given request +func (self *mergedApi) Execute(req *shared.Request) (interface{}, error) { + if api, found := self.apis[req.Method]; found { + return api.Execute(req) + } + return nil, shared.NewNotImplementedError(req.Method) +} + +// Merge multiple API's to a single API instance +func Merge(apis ...EthereumApi) EthereumApi { + return newMergedApi(apis...) +} -- cgit v1.2.3 From a1a475fb9296e214292840d89811123292c7953c Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 12:43:58 +0200 Subject: added console command --- rpc/api/utils.go | 47 ++--------------------------------------------- 1 file changed, 2 insertions(+), 45 deletions(-) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index a62058140..7024365e4 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -8,11 +8,6 @@ import ( "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/rpc/codec" "github.com/ethereum/go-ethereum/xeth" - "github.com/ethereum/go-ethereum/rpc/shared" -) - -const ( - EthApiName = "eth" ) // Parse a comma separated API string to individual api's @@ -28,6 +23,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. switch strings.ToLower(strings.TrimSpace(name)) { case EthApiName: apis[i] = NewEthApi(xeth, codec) + case Web3ApiName: + apis[i] = NewWeb3(xeth, codec) default: return nil, fmt.Errorf("Unknown API '%s'", name) } @@ -35,43 +32,3 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. return apis, nil } - -// combines multiple API's -type mergedApi struct { - apis map[string]EthereumApi -} - -// create new merged api instance -func newMergedApi(apis ...EthereumApi) *mergedApi { - mergedApi := new(mergedApi) - mergedApi.apis = make(map[string]EthereumApi) - - for _, api := range apis { - for _, method := range api.Methods() { - mergedApi.apis[method] = api - } - } - return mergedApi -} - -// Supported RPC methods -func (self *mergedApi) Methods() []string { - all := make([]string, len(self.apis)) - for method, _ := range self.apis { - all = append(all, method) - } - return all -} - -// Call the correct API's Execute method for the given request -func (self *mergedApi) Execute(req *shared.Request) (interface{}, error) { - if api, found := self.apis[req.Method]; found { - return api.Execute(req) - } - return nil, shared.NewNotImplementedError(req.Method) -} - -// Merge multiple API's to a single API instance -func Merge(apis ...EthereumApi) EthereumApi { - return newMergedApi(apis...) -} -- cgit v1.2.3 From 4b9b633dfe8c36d3a8909024ff23a1cdedce44d8 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 14:42:15 +0200 Subject: added miner API --- rpc/api/utils.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 7024365e4..488eb1ec6 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -23,6 +23,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. switch strings.ToLower(strings.TrimSpace(name)) { case EthApiName: apis[i] = NewEthApi(xeth, codec) + case MinerApiName: + apis[i] = NewMinerApi(eth, codec) case Web3ApiName: apis[i] = NewWeb3(xeth, codec) default: @@ -32,3 +34,12 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. return apis, nil } + +func Javascript(name string) string { + switch strings.ToLower(strings.TrimSpace(name)) { + case MinerApiName: + return Miner_JS + } + + return "" +} -- cgit v1.2.3 From d2a87f6f72b1582fd6e220e2a00d7c3f5a6df335 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 14:50:11 +0200 Subject: added net API --- rpc/api/utils.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 488eb1ec6..173a880d4 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -25,6 +25,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. apis[i] = NewEthApi(xeth, codec) case MinerApiName: apis[i] = NewMinerApi(eth, codec) + case NetApiName: + apis[i] = NewNetApi(xeth, eth, codec) case Web3ApiName: apis[i] = NewWeb3(xeth, codec) default: @@ -39,6 +41,8 @@ func Javascript(name string) string { switch strings.ToLower(strings.TrimSpace(name)) { case MinerApiName: return Miner_JS + case NetApiName: + return Net_JS } return "" -- cgit v1.2.3 From 09d0d55fc579701191ff34f38cc20b437ee23577 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 9 Jun 2015 09:48:18 +0200 Subject: added debug API --- rpc/api/utils.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 173a880d4..6e6d5c7b0 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -21,6 +21,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. for i, name := range names { switch strings.ToLower(strings.TrimSpace(name)) { + case DebugApiName: + apis[i] = NewDebugApi(xeth, eth, codec) case EthApiName: apis[i] = NewEthApi(xeth, codec) case MinerApiName: @@ -39,6 +41,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. func Javascript(name string) string { switch strings.ToLower(strings.TrimSpace(name)) { + case DebugApiName: + return Debug_JS case MinerApiName: return Miner_JS case NetApiName: -- cgit v1.2.3 From 08d72a9245ce6f1e11f84a6b59d66cb083bea9f9 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 9 Jun 2015 10:59:44 +0200 Subject: added personal API --- rpc/api/utils.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 6e6d5c7b0..eae23d351 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -29,6 +29,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. apis[i] = NewMinerApi(eth, codec) case NetApiName: apis[i] = NewNetApi(xeth, eth, codec) + case PersonalApiName: + apis[i] = NewPersonal(xeth, eth, codec) case Web3ApiName: apis[i] = NewWeb3(xeth, codec) default: @@ -47,6 +49,8 @@ func Javascript(name string) string { return Miner_JS case NetApiName: return Net_JS + case PersonalApiName: + return Personal_JS } return "" -- cgit v1.2.3 From cc9ae399338557b6671e8fc83bb696c5ddb068fe Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Tue, 9 Jun 2015 16:06:51 +0200 Subject: added admin API --- rpc/api/utils.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index eae23d351..072abf883 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -21,6 +21,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. for i, name := range names { switch strings.ToLower(strings.TrimSpace(name)) { + case AdminApiName: + apis[i] = NewAdminApi(xeth, eth, codec) case DebugApiName: apis[i] = NewDebugApi(xeth, eth, codec) case EthApiName: @@ -30,9 +32,9 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. case NetApiName: apis[i] = NewNetApi(xeth, eth, codec) case PersonalApiName: - apis[i] = NewPersonal(xeth, eth, codec) + apis[i] = NewPersonalApi(xeth, eth, codec) case Web3ApiName: - apis[i] = NewWeb3(xeth, codec) + apis[i] = NewWeb3Api(xeth, codec) default: return nil, fmt.Errorf("Unknown API '%s'", name) } @@ -43,6 +45,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. func Javascript(name string) string { switch strings.ToLower(strings.TrimSpace(name)) { + case AdminApiName: + return Admin_JS case DebugApiName: return Debug_JS case MinerApiName: -- cgit v1.2.3 From 87b62f75a7b9c15c17f3352f1b50ad88966e7070 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 10 Jun 2015 10:37:10 +0200 Subject: added txpool API --- rpc/api/utils.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index 072abf883..b44a325a8 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -31,6 +31,8 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. apis[i] = NewMinerApi(eth, codec) case NetApiName: apis[i] = NewNetApi(xeth, eth, codec) + case txPoolApiName: + apis[i] = NewTxPoolApi(xeth, eth, codec) case PersonalApiName: apis[i] = NewPersonalApi(xeth, eth, codec) case Web3ApiName: @@ -53,6 +55,8 @@ func Javascript(name string) string { return Miner_JS case NetApiName: return Net_JS + case txPoolApiName: + return TxPool_JS case PersonalApiName: return Personal_JS } -- cgit v1.2.3 From 7e41d7ac51fdaba1c03ec3f9cb8cc7a7bc3830f4 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Wed, 10 Jun 2015 12:35:12 +0200 Subject: added shh API --- rpc/api/utils.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index b44a325a8..ad8a97e92 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -31,7 +31,9 @@ func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth. apis[i] = NewMinerApi(eth, codec) case NetApiName: apis[i] = NewNetApi(xeth, eth, codec) - case txPoolApiName: + case ShhApiName: + apis[i] = NewShhApi(xeth, eth, codec) + case TxPoolApiName: apis[i] = NewTxPoolApi(xeth, eth, codec) case PersonalApiName: apis[i] = NewPersonalApi(xeth, eth, codec) @@ -55,7 +57,9 @@ func Javascript(name string) string { return Miner_JS case NetApiName: return Net_JS - case txPoolApiName: + case ShhApiName: + return Shh_JS + case TxPoolApiName: return TxPool_JS case PersonalApiName: return Personal_JS -- cgit v1.2.3 From 348f1562e29c80cac3c1d13ff255a25ed4ec81c7 Mon Sep 17 00:00:00 2001 From: Bas van Kervel Date: Mon, 8 Jun 2015 10:23:54 +0200 Subject: restructured eth rpc API --- rpc/api/utils.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) (limited to 'rpc/api/utils.go') diff --git a/rpc/api/utils.go b/rpc/api/utils.go index ad8a97e92..318d7c39b 100644 --- a/rpc/api/utils.go +++ b/rpc/api/utils.go @@ -10,6 +10,117 @@ import ( "github.com/ethereum/go-ethereum/xeth" ) +var ( + // Mapping between the different methods each api supports + AutoCompletion = map[string][]string{ + "admin": []string{ + "addPeer", + "peers", + "nodeInfo", + "exportChain", + "importChain", + "verbosity", + "chainSyncStatus", + "setSolc", + "datadir", + }, + "debug": []string{ + "dumpBlock", + "getBlockRlp", + "printBlock", + "processBlock", + "seedHash", + "setHead", + }, + "eth": []string{ + "accounts", + "blockNumber", + "getBalance", + "protocolVersion", + "coinbase", + "mining", + "gasPrice", + "getStorage", + "storageAt", + "getStorageAt", + "getTransactionCount", + "getBlockTransactionCountByHash", + "getBlockTransactionCountByNumber", + "getUncleCountByBlockHash", + "getUncleCountByBlockNumber", + "getData", + "getCode", + "sign", + "sendTransaction", + "transact", + "estimateGas", + "call", + "flush", + "getBlockByHash", + "getBlockByNumber", + "getTransactionByHash", + "getTransactionByBlockHashAndIndex", + "getUncleByBlockHashAndIndex", + "getUncleByBlockNumberAndIndex", + "getCompilers", + "compileSolidity", + "newFilter", + "newBlockFilter", + "newPendingTransactionFilter", + "uninstallFilter", + "getFilterChanges", + "getFilterLogs", + "getLogs", + "hashrate", + "getWork", + "submitWork", + }, + "miner": []string{ + "hashrate", + "makeDAG", + "setExtra", + "setGasPrice", + "startAutoDAG", + "start", + "stopAutoDAG", + "stop", + }, + "net": []string{ + "peerCount", + "listening", + }, + "personal": []string{ + "listAccounts", + "newAccount", + "deleteAccount", + "unlockAccount", + }, + "shh": []string{ + "version", + "post", + "hasIdentity", + "newIdentity", + "newFilter", + "uninstallFilter", + "getFilterChanges", + }, + "txpool": []string{ + "status", + }, + "web3": []string{ + "sha3", + "version", + "fromWei", + "toWei", + "toHex", + "toAscii", + "fromAscii", + "toBigNumber", + "isAddress", + }, + } +) + // Parse a comma separated API string to individual api's func ParseApiString(apistr string, codec codec.Codec, xeth *xeth.XEth, eth *eth.Ethereum) ([]EthereumApi, error) { if len(strings.TrimSpace(apistr)) == 0 { -- cgit v1.2.3