aboutsummaryrefslogtreecommitdiffstats
path: root/ethereum
diff options
context:
space:
mode:
Diffstat (limited to 'ethereum')
-rw-r--r--ethereum/cmd.go32
-rw-r--r--ethereum/flags.go76
-rw-r--r--ethereum/javascript_runtime.go231
-rw-r--r--ethereum/js_lib.go53
-rw-r--r--ethereum/main.go57
-rw-r--r--ethereum/repl.go153
-rw-r--r--ethereum/repl_darwin.go123
l---------ethereum/repl_linux.go1
-rw-r--r--ethereum/repl_windows.go24
9 files changed, 0 insertions, 750 deletions
diff --git a/ethereum/cmd.go b/ethereum/cmd.go
deleted file mode 100644
index 08147824d..000000000
--- a/ethereum/cmd.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package main
-
-import (
- "github.com/ethereum/eth-go"
- "github.com/ethereum/go-ethereum/utils"
- "io/ioutil"
- "os"
-)
-
-func InitJsConsole(ethereum *eth.Ethereum) {
- repl := NewJSRepl(ethereum)
- go repl.Start()
- utils.RegisterInterrupt(func(os.Signal) {
- repl.Stop()
- })
-}
-
-func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
- file, err := os.Open(InputFile)
- if err != nil {
- logger.Fatalln(err)
- }
- content, err := ioutil.ReadAll(file)
- if err != nil {
- logger.Fatalln(err)
- }
- re := NewJSRE(ethereum)
- utils.RegisterInterrupt(func(os.Signal) {
- re.Stop()
- })
- re.Run(string(content))
-}
diff --git a/ethereum/flags.go b/ethereum/flags.go
deleted file mode 100644
index d5a9c3a8a..000000000
--- a/ethereum/flags.go
+++ /dev/null
@@ -1,76 +0,0 @@
-package main
-
-import (
- "flag"
- "fmt"
- "github.com/ethereum/eth-go/ethlog"
- "os"
- "os/user"
- "path"
-)
-
-var Identifier string
-var KeyRing string
-var KeyStore string
-var StartRpc bool
-var RpcPort int
-var UseUPnP bool
-var OutboundPort string
-var ShowGenesis bool
-var AddPeer string
-var MaxPeer int
-var GenAddr bool
-var UseSeed bool
-var SecretFile string
-var ExportDir string
-var NonInteractive bool
-var Datadir string
-var LogFile string
-var ConfigFile string
-var DebugFile string
-var LogLevel int
-
-// flags specific to cli client
-var StartMining bool
-var StartJsConsole bool
-var InputFile string
-
-func defaultDataDir() string {
- usr, _ := user.Current()
- return path.Join(usr.HomeDir, ".ethereum")
-}
-
-var defaultConfigFile = path.Join(defaultDataDir(), "conf.ini")
-
-func Init() {
- flag.Usage = func() {
- fmt.Fprintf(os.Stderr, "%s [options] [filename]:\noptions precedence: default < config file < environment variables < command line\n", os.Args[0])
- flag.PrintDefaults()
- }
-
- flag.StringVar(&Identifier, "id", "", "Custom client identifier")
- flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
- flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)")
- flag.StringVar(&OutboundPort, "port", "30303", "listening port")
- flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
- flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers")
- flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on")
- flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
- flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
- flag.BoolVar(&UseSeed, "seed", true, "seed peers")
- flag.BoolVar(&GenAddr, "genaddr", false, "create a new priv/pub key")
- flag.StringVar(&SecretFile, "import", "", "imports the file given (hex or mnemonic formats)")
- flag.StringVar(&ExportDir, "export", "", "exports the session keyring to files in the directory given")
- flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)")
- flag.StringVar(&Datadir, "datadir", defaultDataDir(), "specifies the datadir to use")
- flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
- flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
- flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
-
- flag.BoolVar(&StartMining, "mine", false, "start dagger mining")
- flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console")
-
- flag.Parse()
-
- InputFile = flag.Arg(0)
-}
diff --git a/ethereum/javascript_runtime.go b/ethereum/javascript_runtime.go
deleted file mode 100644
index 852a50487..000000000
--- a/ethereum/javascript_runtime.go
+++ /dev/null
@@ -1,231 +0,0 @@
-package main
-
-import (
- "fmt"
- "github.com/ethereum/eth-go"
- "github.com/ethereum/eth-go/ethchain"
- "github.com/ethereum/eth-go/ethlog"
- "github.com/ethereum/eth-go/ethpub"
- "github.com/ethereum/eth-go/ethutil"
- "github.com/ethereum/go-ethereum/utils"
- "github.com/obscuren/otto"
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
-)
-
-var jsrelogger = ethlog.NewLogger("JSRE")
-
-type JSRE struct {
- ethereum *eth.Ethereum
- vm *otto.Otto
- lib *ethpub.PEthereum
-
- blockChan chan ethutil.React
- changeChan chan ethutil.React
- quitChan chan bool
-
- objectCb map[string][]otto.Value
-}
-
-func (jsre *JSRE) LoadExtFile(path string) {
- result, err := ioutil.ReadFile(path)
- if err == nil {
- jsre.vm.Run(result)
- } else {
- jsrelogger.Debugln("Could not load file:", path)
- }
-}
-
-func (jsre *JSRE) LoadIntFile(file string) {
- assetPath := path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal", "assets", "ext")
- jsre.LoadExtFile(path.Join(assetPath, file))
-}
-
-func NewJSRE(ethereum *eth.Ethereum) *JSRE {
- re := &JSRE{
- ethereum,
- otto.New(),
- ethpub.NewPEthereum(ethereum),
- make(chan ethutil.React, 1),
- make(chan ethutil.React, 1),
- make(chan bool),
- make(map[string][]otto.Value),
- }
-
- // Init the JS lib
- re.vm.Run(jsLib)
-
- // Load extra javascript files
- re.LoadIntFile("string.js")
- re.LoadIntFile("big.js")
-
- // We have to make sure that, whoever calls this, calls "Stop"
- go re.mainLoop()
-
- re.Bind("eth", &JSEthereum{re.lib, re.vm})
-
- re.initStdFuncs()
-
- jsrelogger.Infoln("started")
-
- return re
-}
-
-func (self *JSRE) Bind(name string, v interface{}) {
- self.vm.Set(name, v)
-}
-
-func (self *JSRE) Run(code string) (otto.Value, error) {
- return self.vm.Run(code)
-}
-
-func (self *JSRE) Require(file string) error {
- if len(filepath.Ext(file)) == 0 {
- file += ".js"
- }
-
- fh, err := os.Open(file)
- if err != nil {
- return err
- }
-
- content, _ := ioutil.ReadAll(fh)
- self.Run("exports = {};(function() {" + string(content) + "})();")
-
- return nil
-}
-
-func (self *JSRE) Stop() {
- // Kill the main loop
- self.quitChan <- true
-
- close(self.blockChan)
- close(self.quitChan)
- close(self.changeChan)
- jsrelogger.Infoln("stopped")
-}
-
-func (self *JSRE) mainLoop() {
- // Subscribe to events
- reactor := self.ethereum.Reactor()
- reactor.Subscribe("newBlock", self.blockChan)
-
-out:
- for {
- select {
- case <-self.quitChan:
- break out
- case block := <-self.blockChan:
- if _, ok := block.Resource.(*ethchain.Block); ok {
- }
- case object := <-self.changeChan:
- if stateObject, ok := object.Resource.(*ethchain.StateObject); ok {
- for _, cb := range self.objectCb[ethutil.Bytes2Hex(stateObject.Address())] {
- val, _ := self.vm.ToValue(ethpub.NewPStateObject(stateObject))
- cb.Call(cb, val)
- }
- } else if storageObject, ok := object.Resource.(*ethchain.StorageState); ok {
- for _, cb := range self.objectCb[ethutil.Bytes2Hex(storageObject.StateAddress)+ethutil.Bytes2Hex(storageObject.Address)] {
- val, _ := self.vm.ToValue(ethpub.NewPStorageState(storageObject))
- cb.Call(cb, val)
- }
- }
- }
- }
-}
-
-func (self *JSRE) initStdFuncs() {
- t, _ := self.vm.Get("eth")
- eth := t.Object()
- eth.Set("watch", self.watch)
- eth.Set("addPeer", self.addPeer)
- eth.Set("require", self.require)
- eth.Set("stopMining", self.stopMining)
- eth.Set("startMining", self.startMining)
- eth.Set("execBlock", self.execBlock)
-}
-
-/*
- * The following methods are natively implemented javascript functions
- */
-
-func (self *JSRE) stopMining(call otto.FunctionCall) otto.Value {
- v, _ := self.vm.ToValue(utils.StopMining(self.ethereum))
- return v
-}
-
-func (self *JSRE) startMining(call otto.FunctionCall) otto.Value {
- v, _ := self.vm.ToValue(utils.StartMining(self.ethereum))
- return v
-}
-
-// eth.watch
-func (self *JSRE) watch(call otto.FunctionCall) otto.Value {
- addr, _ := call.Argument(0).ToString()
- var storageAddr string
- var cb otto.Value
- var storageCallback bool
- if len(call.ArgumentList) > 2 {
- storageCallback = true
- storageAddr, _ = call.Argument(1).ToString()
- cb = call.Argument(2)
- } else {
- cb = call.Argument(1)
- }
-
- if storageCallback {
- self.objectCb[addr+storageAddr] = append(self.objectCb[addr+storageAddr], cb)
-
- event := "storage:" + string(ethutil.Hex2Bytes(addr)) + ":" + string(ethutil.Hex2Bytes(storageAddr))
- self.ethereum.Reactor().Subscribe(event, self.changeChan)
- } else {
- self.objectCb[addr] = append(self.objectCb[addr], cb)
-
- event := "object:" + string(ethutil.Hex2Bytes(addr))
- self.ethereum.Reactor().Subscribe(event, self.changeChan)
- }
-
- return otto.UndefinedValue()
-}
-
-func (self *JSRE) addPeer(call otto.FunctionCall) otto.Value {
- host, err := call.Argument(0).ToString()
- if err != nil {
- return otto.FalseValue()
- }
- self.ethereum.ConnectToPeer(host)
-
- return otto.TrueValue()
-}
-
-func (self *JSRE) require(call otto.FunctionCall) otto.Value {
- file, err := call.Argument(0).ToString()
- if err != nil {
- return otto.UndefinedValue()
- }
- if err := self.Require(file); err != nil {
- fmt.Println("err:", err)
- return otto.UndefinedValue()
- }
-
- t, _ := self.vm.Get("exports")
-
- return t
-}
-
-func (self *JSRE) execBlock(call otto.FunctionCall) otto.Value {
- hash, err := call.Argument(0).ToString()
- if err != nil {
- return otto.UndefinedValue()
- }
-
- err = utils.BlockDo(self.ethereum, ethutil.Hex2Bytes(hash))
- if err != nil {
- fmt.Println(err)
- return otto.FalseValue()
- }
-
- return otto.TrueValue()
-}
diff --git a/ethereum/js_lib.go b/ethereum/js_lib.go
deleted file mode 100644
index 189dcc3a0..000000000
--- a/ethereum/js_lib.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package main
-
-const jsLib = `
-function pp(object) {
- var str = "";
-
- if(object instanceof Array) {
- str += "[ ";
- for(var i = 0, l = object.length; i < l; i++) {
- str += pp(object[i]);
-
- if(i < l-1) {
- str += ", ";
- }
- }
- str += " ]";
- } else if(typeof(object) === "object") {
- str += "{ ";
- var last = Object.keys(object).sort().pop()
- for(var k in object) {
- str += k + ": " + pp(object[k]);
-
- if(k !== last) {
- str += ", ";
- }
- }
- str += " }";
- } else if(typeof(object) === "string") {
- str += "\033[32m'" + object + "'";
- } else if(typeof(object) === "undefined") {
- str += "\033[1m\033[30m" + object;
- } else if(typeof(object) === "number") {
- str += "\033[31m" + object;
- } else if(typeof(object) === "function") {
- str += "\033[35m[Function]";
- } else {
- str += object;
- }
-
- str += "\033[0m";
-
- return str;
-}
-
-function prettyPrint(/* */) {
- var args = arguments;
- for(var i = 0, l = args.length; i < l; i++) {
- console.log(pp(args[i]))
- }
-}
-
-var print = prettyPrint;
-`
diff --git a/ethereum/main.go b/ethereum/main.go
deleted file mode 100644
index 1531871cb..000000000
--- a/ethereum/main.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package main
-
-import (
- "github.com/ethereum/eth-go/ethlog"
- "github.com/ethereum/go-ethereum/utils"
- "runtime"
-)
-
-var logger = ethlog.NewLogger("CLI")
-
-func main() {
- runtime.GOMAXPROCS(runtime.NumCPU())
-
- utils.HandleInterrupt()
-
- // precedence: code-internal flag default < config file < environment variables < command line
- Init() // parsing command line
- utils.InitConfig(ConfigFile, Datadir, Identifier, "ETH")
-
- utils.InitDataDir(Datadir)
-
- utils.InitLogging(Datadir, LogFile, LogLevel, DebugFile)
-
- db := utils.NewDatabase()
-
- keyManager := utils.NewKeyManager(KeyStore, Datadir, db)
-
- // create, import, export keys
- utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive)
-
- ethereum := utils.NewEthereum(db, keyManager, UseUPnP, OutboundPort, MaxPeer)
-
- if ShowGenesis {
- utils.ShowGenesis(ethereum)
- }
-
- if StartMining {
- utils.StartMining(ethereum)
- }
-
- // better reworked as cases
- if StartJsConsole {
- InitJsConsole(ethereum)
- } else if len(InputFile) > 0 {
- ExecJsFile(ethereum, InputFile)
- }
-
- if StartRpc {
- utils.StartRpc(ethereum, RpcPort)
- }
-
- utils.StartEthereum(ethereum, UseSeed)
-
- // this blocks the thread
- ethereum.WaitForShutdown()
- ethlog.Flush()
-}
diff --git a/ethereum/repl.go b/ethereum/repl.go
deleted file mode 100644
index 34380a06f..000000000
--- a/ethereum/repl.go
+++ /dev/null
@@ -1,153 +0,0 @@
-package main
-
-import (
- "bufio"
- "fmt"
- "github.com/ethereum/eth-go"
- "github.com/ethereum/eth-go/ethpub"
- "github.com/ethereum/eth-go/ethutil"
- "github.com/obscuren/otto"
- "io"
- "os"
- "path"
-)
-
-type Repl interface {
- Start()
- Stop()
-}
-
-type JSRepl struct {
- re *JSRE
-
- prompt string
-
- history *os.File
-
- running bool
-}
-
-func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
- hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm)
- if err != nil {
- panic(err)
- }
-
- return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist}
-}
-
-func (self *JSRepl) Start() {
- if !self.running {
- self.running = true
- logger.Infoln("init JS Console")
- reader := bufio.NewReader(self.history)
- for {
- line, err := reader.ReadString('\n')
- if err != nil && err == io.EOF {
- break
- } else if err != nil {
- fmt.Println("error reading history", err)
- break
- }
-
- addHistory(line[:len(line)-1])
- }
- self.read()
- }
-}
-
-func (self *JSRepl) Stop() {
- if self.running {
- self.running = false
- self.re.Stop()
- logger.Infoln("exit JS Console")
- self.history.Close()
- }
-}
-
-func (self *JSRepl) parseInput(code string) {
- defer func() {
- if r := recover(); r != nil {
- fmt.Println("[native] error", r)
- }
- }()
-
- value, err := self.re.Run(code)
- if err != nil {
- fmt.Println(err)
- return
- }
-
- self.PrintValue(value)
-}
-
-// The JSEthereum object attempts to wrap the PEthereum object and returns
-// meaningful javascript objects
-type JSBlock struct {
- *ethpub.PBlock
- eth *JSEthereum
-}
-
-func (self *JSBlock) GetTransaction(hash string) otto.Value {
- return self.eth.toVal(self.PBlock.GetTransaction(hash))
-}
-
-type JSEthereum struct {
- *ethpub.PEthereum
- vm *otto.Otto
-}
-
-func (self *JSEthereum) GetBlock(hash string) otto.Value {
- return self.toVal(&JSBlock{self.PEthereum.GetBlock(hash), self})
-}
-
-func (self *JSEthereum) GetPeers() otto.Value {
- return self.toVal(self.PEthereum.GetPeers())
-}
-
-func (self *JSEthereum) GetKey() otto.Value {
- return self.toVal(self.PEthereum.GetKey())
-}
-
-func (self *JSEthereum) GetStateObject(addr string) otto.Value {
- return self.toVal(self.PEthereum.GetStateObject(addr))
-}
-
-func (self *JSEthereum) GetStateKeyVals(addr string) otto.Value {
- return self.toVal(self.PEthereum.GetStateObject(addr).StateKeyVal(false))
-}
-
-func (self *JSEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) otto.Value {
- r, err := self.PEthereum.Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr)
- if err != nil {
- fmt.Println(err)
-
- return otto.UndefinedValue()
- }
-
- return self.toVal(r)
-}
-
-func (self *JSEthereum) Create(key, valueStr, gasStr, gasPriceStr, scriptStr string) otto.Value {
- r, err := self.PEthereum.Create(key, valueStr, gasStr, gasPriceStr, scriptStr)
-
- if err != nil {
- fmt.Println(err)
-
- return otto.UndefinedValue()
- }
-
- return self.toVal(r)
-}
-
-func (self *JSEthereum) toVal(v interface{}) otto.Value {
- result, err := self.vm.ToValue(v)
-
- if err != nil {
- fmt.Println("Value unknown:", err)
-
- return otto.UndefinedValue()
- }
-
- return result
-}
diff --git a/ethereum/repl_darwin.go b/ethereum/repl_darwin.go
deleted file mode 100644
index 62b40059a..000000000
--- a/ethereum/repl_darwin.go
+++ /dev/null
@@ -1,123 +0,0 @@
-package main
-
-// #cgo darwin CFLAGS: -I/usr/local/opt/readline/include
-// #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib
-// #cgo LDFLAGS: -lreadline
-// #include <stdio.h>
-// #include <stdlib.h>
-// #include <readline/readline.h>
-// #include <readline/history.h>
-import "C"
-import (
- "os"
- "os/signal"
- "strings"
- "syscall"
- "unsafe"
-)
-
-func initReadLine() {
- C.rl_catch_sigwinch = 0
- C.rl_catch_signals = 0
- c := make(chan os.Signal, 1)
- signal.Notify(c, syscall.SIGWINCH)
- signal.Notify(c, os.Interrupt)
- go func() {
- for sig := range c {
- switch sig {
- case syscall.SIGWINCH:
- C.rl_resize_terminal()
-
- case os.Interrupt:
- C.rl_cleanup_after_signal()
- default:
-
- }
- }
- }()
-}
-
-func readLine(prompt *string) *string {
- var p *C.char
-
- //readline allows an empty prompt(NULL)
- if prompt != nil {
- p = C.CString(*prompt)
- }
-
- ret := C.readline(p)
-
- if p != nil {
- C.free(unsafe.Pointer(p))
- }
-
- if ret == nil {
- return nil
- } //EOF
-
- s := C.GoString(ret)
- C.free(unsafe.Pointer(ret))
- return &s
-}
-
-func addHistory(s string) {
- p := C.CString(s)
- C.add_history(p)
- C.free(unsafe.Pointer(p))
-}
-
-var indentCount = 0
-var str = ""
-
-func (self *JSRepl) setIndent() {
- open := strings.Count(str, "{")
- open += strings.Count(str, "(")
- closed := strings.Count(str, "}")
- closed += strings.Count(str, ")")
- indentCount = open - closed
- if indentCount <= 0 {
- self.prompt = "> "
- } else {
- self.prompt = strings.Join(make([]string, indentCount*2), "..")
- self.prompt += " "
- }
-}
-
-func (self *JSRepl) read() {
- initReadLine()
-L:
- for {
- switch result := readLine(&self.prompt); true {
- case result == nil:
- break L
-
- case *result != "":
- str += *result + "\n"
-
- self.setIndent()
-
- if indentCount <= 0 {
- if *result == "exit" {
- self.Stop()
- break L
- }
-
- hist := str[:len(str)-1]
- addHistory(hist) //allow user to recall this line
- self.history.WriteString(str)
-
- self.parseInput(str)
-
- str = ""
- }
- }
- }
-}
-
-func (self *JSRepl) PrintValue(v interface{}) {
- method, _ := self.re.vm.Get("prettyPrint")
- v, err := self.re.vm.ToValue(v)
- if err == nil {
- method.Call(method, v)
- }
-}
diff --git a/ethereum/repl_linux.go b/ethereum/repl_linux.go
deleted file mode 120000
index 276f135d7..000000000
--- a/ethereum/repl_linux.go
+++ /dev/null
@@ -1 +0,0 @@
-repl_darwin.go \ No newline at end of file
diff --git a/ethereum/repl_windows.go b/ethereum/repl_windows.go
deleted file mode 100644
index 9d4787772..000000000
--- a/ethereum/repl_windows.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package main
-
-import (
- "bufio"
- "fmt"
- "os"
-)
-
-func (self *JSRepl) read() {
- reader := bufio.NewReader(os.Stdin)
- for {
- fmt.Printf(self.prompt)
- str, _, err := reader.ReadLine()
- if err != nil {
- fmt.Println("Error reading input", err)
- } else {
- self.parseInput(string(str))
- }
- }
-}
-
-func (self *JSRepl) PrintValue(value otto.Value) {
- fmt.Println(value)
-}