From bc6fdad786706019fc5aeb9605f1d23b3c5b7522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Wed, 11 May 2016 11:49:44 +0300 Subject: cmd/geth, internal/web3ext, rpc: surface rpc module, fix shh, fix miner --- cmd/geth/js.go | 2 +- internal/web3ext/web3ext.go | 247 +++++++++++++++++++++++--------------------- rpc/server.go | 5 +- rpc/utils.go | 2 +- 4 files changed, 136 insertions(+), 120 deletions(-) diff --git a/cmd/geth/js.go b/cmd/geth/js.go index 2b64303b2..25c4d1a21 100644 --- a/cmd/geth/js.go +++ b/cmd/geth/js.go @@ -199,7 +199,7 @@ func (js *jsre) apiBindings() error { // load only supported API's in javascript runtime shortcuts := "var eth = web3.eth; var personal = web3.personal; " for _, apiName := range apiNames { - if apiName == "web3" || apiName == "rpc" { + if apiName == "web3" { continue // manually mapped or ignore } diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 64c1b5044..9ce106cb8 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -18,44 +18,17 @@ package web3ext var Modules = map[string]string{ - "txpool": TxPool_JS, "admin": Admin_JS, - "personal": Personal_JS, + "debug": Debug_JS, "eth": Eth_JS, "miner": Miner_JS, - "debug": Debug_JS, "net": Net_JS, + "personal": Personal_JS, + "rpc": RPC_JS, + "shh": Shh_JS, + "txpool": TxPool_JS, } -const TxPool_JS = ` -web3._extend({ - property: 'txpool', - methods: - [ - ], - properties: - [ - new web3._extend.Property({ - name: 'content', - getter: 'txpool_content' - }), - new web3._extend.Property({ - name: 'inspect', - getter: 'txpool_inspect' - }), - new web3._extend.Property({ - name: 'status', - getter: 'txpool_status', - outputFormatter: function(status) { - status.pending = web3._extend.utils.toDecimal(status.pending); - status.queued = web3._extend.utils.toDecimal(status.queued); - return status; - } - }) - ] -}); -` - const Admin_JS = ` web3._extend({ property: 'admin', @@ -176,88 +149,6 @@ web3._extend({ }); ` -const Personal_JS = ` -web3._extend({ - property: 'personal', - methods: - [ - new web3._extend.Method({ - name: 'importRawKey', - call: 'personal_importRawKey', - params: 2 - }) - ] -}); -` - -const Eth_JS = ` -web3._extend({ - property: 'eth', - methods: - [ - new web3._extend.Method({ - name: 'sign', - call: 'eth_sign', - params: 2, - inputFormatter: [web3._extend.formatters.inputAddressFormatter, null] - }), - new web3._extend.Method({ - name: 'resend', - call: 'eth_resend', - params: 3, - inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal] - }), - new web3._extend.Method({ - name: 'getNatSpec', - call: 'eth_getNatSpec', - params: 1, - inputFormatter: [web3._extend.formatters.inputTransactionFormatter] - }), - new web3._extend.Method({ - name: 'signTransaction', - call: 'eth_signTransaction', - params: 1, - inputFormatter: [web3._extend.formatters.inputTransactionFormatter] - }), - new web3._extend.Method({ - name: 'submitTransaction', - call: 'eth_submitTransaction', - params: 1, - inputFormatter: [web3._extend.formatters.inputTransactionFormatter] - }) - ], - properties: - [ - new web3._extend.Property({ - name: 'pendingTransactions', - getter: 'eth_pendingTransactions', - outputFormatter: function(txs) { - var formatted = []; - for (var i = 0; i < txs.length; i++) { - formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i])); - formatted[i].blockHash = null; - } - return formatted; - } - }) - ] -}); -` - -const Net_JS = ` -web3._extend({ - property: 'net', - methods: [], - properties: - [ - new web3._extend.Property({ - name: 'version', - getter: 'net_version' - }) - ] -}); -` - const Debug_JS = ` web3._extend({ property: 'debug', @@ -410,6 +301,60 @@ web3._extend({ }); ` +const Eth_JS = ` +web3._extend({ + property: 'eth', + methods: + [ + new web3._extend.Method({ + name: 'sign', + call: 'eth_sign', + params: 2, + inputFormatter: [web3._extend.formatters.inputAddressFormatter, null] + }), + new web3._extend.Method({ + name: 'resend', + call: 'eth_resend', + params: 3, + inputFormatter: [web3._extend.formatters.inputTransactionFormatter, web3._extend.utils.fromDecimal, web3._extend.utils.fromDecimal] + }), + new web3._extend.Method({ + name: 'getNatSpec', + call: 'eth_getNatSpec', + params: 1, + inputFormatter: [web3._extend.formatters.inputTransactionFormatter] + }), + new web3._extend.Method({ + name: 'signTransaction', + call: 'eth_signTransaction', + params: 1, + inputFormatter: [web3._extend.formatters.inputTransactionFormatter] + }), + new web3._extend.Method({ + name: 'submitTransaction', + call: 'eth_submitTransaction', + params: 1, + inputFormatter: [web3._extend.formatters.inputTransactionFormatter] + }) + ], + properties: + [ + new web3._extend.Property({ + name: 'pendingTransactions', + getter: 'eth_pendingTransactions', + outputFormatter: function(txs) { + var formatted = []; + for (var i = 0; i < txs.length; i++) { + formatted.push(web3._extend.formatters.outputTransactionFormatter(txs[i])); + formatted[i].blockHash = null; + } + return formatted; + } + }) + ] +}); +` + const Miner_JS = ` web3._extend({ property: 'miner', @@ -440,7 +385,7 @@ web3._extend({ name: 'setGasPrice', call: 'miner_setGasPrice', params: 1, - inputFormatter: [web3._extend.utils.fromDecial] + inputFormatter: [web3._extend.utils.fromDecimal] }), new web3._extend.Method({ name: 'startAutoDAG', @@ -463,6 +408,48 @@ web3._extend({ }); ` +const Net_JS = ` +web3._extend({ + property: 'net', + methods: [], + properties: + [ + new web3._extend.Property({ + name: 'version', + getter: 'net_version' + }) + ] +}); +` + +const Personal_JS = ` +web3._extend({ + property: 'personal', + methods: + [ + new web3._extend.Method({ + name: 'importRawKey', + call: 'personal_importRawKey', + params: 2 + }) + ] +}); +` + +const RPC_JS = ` +web3._extend({ + property: 'rpc', + methods: [], + properties: + [ + new web3._extend.Property({ + name: 'modules', + getter: 'rpc_modules' + }) + ] +}); +` + const Shh_JS = ` web3._extend({ property: 'shh', @@ -471,7 +458,35 @@ web3._extend({ [ new web3._extend.Property({ name: 'version', - getter: 'shh_version' + getter: 'shh_version', + outputFormatter: web3._extend.utils.toDecimal + }) + ] +}); +` + +const TxPool_JS = ` +web3._extend({ + property: 'txpool', + methods: [], + properties: + [ + new web3._extend.Property({ + name: 'content', + getter: 'txpool_content' + }), + new web3._extend.Property({ + name: 'inspect', + getter: 'txpool_inspect' + }), + new web3._extend.Property({ + name: 'status', + getter: 'txpool_status', + outputFormatter: function(status) { + status.pending = web3._extend.utils.toDecimal(status.pending); + status.queued = web3._extend.utils.toDecimal(status.queued); + return status; + } }) ] }); diff --git a/rpc/server.go b/rpc/server.go index 001107a1b..69f3271e8 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -34,7 +34,8 @@ const ( notificationBufferSize = 10000 // max buffered notifications before codec is closed - DefaultIPCApis = "admin,eth,debug,miner,net,shh,txpool,personal,web3" + MetadataApi = "rpc" + DefaultIPCApis = "admin,debug,eth,miner,net,personal,shh,txpool,web3" DefaultHTTPApis = "eth,net,web3" ) @@ -61,7 +62,7 @@ func NewServer() *Server { // register a default service which will provide meta information about the RPC service such as the services and // methods it offers. rpcService := &RPCService{server} - server.RegisterName("rpc", rpcService) + server.RegisterName(MetadataApi, rpcService) return server } diff --git a/rpc/utils.go b/rpc/utils.go index 86938e9b3..fe482e19d 100644 --- a/rpc/utils.go +++ b/rpc/utils.go @@ -234,7 +234,7 @@ func SupportedModules(client Client) (map[string]string, error) { req := JSONRequest{ Id: []byte("1"), Version: "2.0", - Method: "rpc_modules", + Method: MetadataApi + "_modules", } if err := client.Send(req); err != nil { return nil, err -- cgit v1.2.3