diff --git a/build/env.sh b/build/env.sh index a9a0fbc88..edf64680e 100755 --- a/build/env.sh +++ b/build/env.sh @@ -10,11 +10,11 @@ fi # Create fake Go workspace if it doesn't exist yet. workspace="$PWD/build/_workspace" root="$PWD" -ethdir="$workspace/src/github.com/ethereum" -if [ ! -L "$ethdir/go-ethereum" ]; then +ethdir="$workspace/src/github.com/status-im" +if [ ! -L "$ethdir/status-go" ]; then mkdir -p "$ethdir" cd "$ethdir" - ln -s ../../../../../. go-ethereum + ln -s ../../../../../. status-go cd "$root" fi @@ -25,8 +25,8 @@ GOBIN="$PWD/build/bin" export GOPATH GOBIN # Run the command inside the workspace. -cd "$ethdir/go-ethereum" -PWD="$ethdir/go-ethereum" +cd "$ethdir/status-go" +PWD="$ethdir/status-go" # Launch the arguments with the configured environment. -exec "$@" \ No newline at end of file +exec "$@" diff --git a/src/jail.go b/src/jail.go new file mode 100644 index 000000000..0cea69ae7 --- /dev/null +++ b/src/jail.go @@ -0,0 +1,59 @@ +package main + +import ( + "github.com/robertkrimen/otto" + "fmt" + "encoding/json" +) + +var statusJs string +var vms = make(map[string]*otto.Otto) + +func Init(js string) { + statusJs = js +} + +func printError(error string) string { + str := JSONError{ + Error: error, + } + outBytes, _ := json.Marshal(&str) + return string(outBytes) +} + +func printResult(res string, err error) string { + var out string + if err != nil { + out = printError(err.Error()) + } else { + if "undefined" == res { + res = "null"; + } + out = fmt.Sprintf(`{"result": %s}`, res) + } + + return out +} + +func Parse(chatId string, js string) string { + vm := otto.New() + jjs := statusJs + js + ` + var catalog = JSON.stringify(_status_catalog); + ` + vms[chatId] = vm + _, err := vm.Run(jjs) + res, _ := vm.Get("catalog") + + return printResult(res.String(), err) +} + +func Call(chatId string, path string, args string) string { + vm, ok := vms[chatId] + if !ok { + return printError(fmt.Sprintf("Vm[%s] doesn't exist.", chatId)) + } + + res, err := vm.Call("call", nil, path, args) + + return printResult(res.String(), err); +} diff --git a/src/library.go b/src/library.go index cc05e18ec..d66063e96 100644 --- a/src/library.go +++ b/src/library.go @@ -81,3 +81,20 @@ func StartNode(datadir *C.char) *C.char { return C.CString(string(outBytes)) } + +//export parse +func parse(chatId *C.char, js *C.char) *C.char { + res := Parse(C.GoString(chatId), C.GoString(js)) + return C.CString(res) +} + +//export call +func call(chatId *C.char, path *C.char, params *C.char) *C.char { + res := Call(C.GoString(chatId), C.GoString(path), C.GoString(params)) + return C.CString(res) +} + +//export initJail +func initJail(js *C.char) { + Init(C.GoString(js)) +} diff --git a/src/main.go b/src/main.go index 163bfb42c..d69182542 100644 --- a/src/main.go +++ b/src/main.go @@ -39,14 +39,21 @@ func main() { // Placeholder for anything we want to run by default fmt.Println("You are running statusgo!") + createAndStartNode(".ethereum") + } // MakeNode create a geth node entity func MakeNode(datadir string) *node.Node { + // TODO remove admin rpcapi flag set := flag.NewFlagSet("test", 0) set.Bool("shh", true, "whisper") set.Bool("noeth", true, "disable eth") + set.Bool("rpc", true, "enable rpc") + set.String("rpcaddr", "localhost", "host for RPC") + set.String("rpcport", "8545", "rpc port") + set.String("rpcapi", "db,eth,net,web3,shh,admin", "rpc api(s)") set.String("datadir", datadir, "data directory for geth") set.String("logdir", datadir, "log dir for glog") c = cli.NewContext(nil, set, nil)