good morning!!!!

Skip to content
Snippets Groups Projects
Commit faab931c authored by Bas van Kervel's avatar Bas van Kervel
Browse files

only load supported api's

parent d2a87f6f
Branches
Tags
No related merge requests found
......@@ -26,12 +26,18 @@ import (
"path/filepath"
"strings"
"encoding/json"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common/docserver"
re "github.com/ethereum/go-ethereum/jsre"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/rpc/codec"
"github.com/ethereum/go-ethereum/rpc/comms"
"github.com/ethereum/go-ethereum/rpc/shared"
"github.com/peterh/liner"
"github.com/robertkrimen/otto"
"github.com/ethereum/go-ethereum/rpc/api"
)
type prompter interface {
......@@ -120,9 +126,27 @@ func (js *jsre) apiBindings(ipcpath string) {
if err != nil {
utils.Fatalf("Error setting web3 provider: %v", err)
}
_, err = js.re.Eval(`
var eth = web3.eth;
`)
apis, err := js.suportedApis(ipcpath)
if err != nil {
utils.Fatalf("Unable to determine supported api's: %v", err)
}
// load only supported API's in javascript runtime
shortcuts := "var eth = web3.eth; "
for _, apiName := range apis {
if apiName == api.Web3ApiName || apiName == api.EthApiName {
continue // manually mapped
}
if err = js.re.Compile(fmt.Sprintf("%s.js", apiName), api.Javascript(apiName)); err == nil {
shortcuts += fmt.Sprintf("var %s = web3.%s; ", apiName, apiName)
} else {
utils.Fatalf("Error loading %s.js: %v", apiName, err)
}
}
_, err = js.re.Eval(shortcuts)
if err != nil {
utils.Fatalf("Error setting namespaces: %v", err)
......@@ -170,11 +194,59 @@ func (self *jsre) exec(filename string) error {
return nil
}
func (self *jsre) suportedApis(ipcpath string) ([]string, error) {
config := comms.IpcConfig{
Endpoint: ipcpath,
}
client, err := comms.NewIpcClient(config, codec.JSON)
if err != nil {
return nil, err
}
req := shared.Request{
Id: 1,
Jsonrpc: "2.0",
Method: "support_apis",
}
err = client.Send(req)
if err != nil {
return nil, err
}
res, err := client.Recv()
if err != nil {
return nil, err
}
if sucRes, ok := res.(shared.SuccessResponse); ok {
data, _ := json.Marshal(sucRes.Result)
apis := make([]string, 0)
err = json.Unmarshal(data, &apis)
if err == nil {
return apis, nil
}
}
return nil, fmt.Errorf("Unable to determine supported API's")
}
// show summary of current geth instance
func (self *jsre) welcome() {
func (self *jsre) welcome(ipcpath string) {
self.re.Eval(`
console.log('Connected to ' + web3.version.client);
console.log(' Connected to: ' + web3.version.client);
`)
if apis, err := self.suportedApis(ipcpath); err == nil {
apisStr := ""
for _, api := range apis {
apisStr += api + " "
}
self.re.Eval(fmt.Sprintf(`console.log("Available api's: %s");`, apisStr))
} else {
utils.Fatalf("unable to determine supported api's - %v", err)
}
}
func (self *jsre) interactive() {
......
......@@ -25,11 +25,11 @@ import (
"io"
"os"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
"github.com/codegangsta/cli"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/logger"
"github.com/mattn/go-colorable"
"github.com/mattn/go-isatty"
)
const (
......@@ -96,6 +96,6 @@ func run(ctx *cli.Context) {
ipcpath := ctx.GlobalString(utils.IPCPathFlag.Name)
repl := newJSRE(jspath, ipcpath)
repl.welcome()
repl.welcome(ipcpath)
repl.interactive()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment