aboutsummaryrefslogtreecommitdiffstats
path: root/ethereum
diff options
context:
space:
mode:
Diffstat (limited to 'ethereum')
-rw-r--r--ethereum/config.go22
-rw-r--r--ethereum/ethereum.go12
-rw-r--r--ethereum/javascript_runtime.go19
-rw-r--r--ethereum/repl.go10
4 files changed, 51 insertions, 12 deletions
diff --git a/ethereum/config.go b/ethereum/config.go
index 5da910f2b..a80b47a8e 100644
--- a/ethereum/config.go
+++ b/ethereum/config.go
@@ -20,33 +20,35 @@ var UseSeed bool
var ImportKey string
var ExportKey bool
var LogFile string
-var DataDir string
var NonInteractive bool
var StartJsConsole bool
var InputFile string
+var Datadir string
+
func Init() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "%s [options] [filename]:\n", os.Args[0])
flag.PrintDefaults()
}
- flag.StringVar(&Identifier, "i", "", "custom client identifier")
- flag.BoolVar(&StartMining, "m", false, "start dagger mining")
- flag.BoolVar(&ShowGenesis, "g", false, "prints genesis header and exits")
- flag.BoolVar(&StartRpc, "r", false, "start rpc server")
+ flag.StringVar(&Identifier, "id", "", "Custom client identifier")
+ 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(&StartJsConsole, "js", false, "exp")
+
+ flag.BoolVar(&StartMining, "mine", false, "start dagger mining")
flag.BoolVar(&NonInteractive, "y", false, "non-interactive mode (say yes to confirmations)")
- flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
flag.BoolVar(&UseSeed, "seed", true, "seed peers")
flag.BoolVar(&GenAddr, "genaddr", false, "create a new priv/pub key")
flag.BoolVar(&ExportKey, "export", false, "export private key")
- flag.StringVar(&OutboundPort, "p", "30303", "listening port")
flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)")
- flag.StringVar(&DataDir, "dir", ".ethereum", "ethereum data directory")
flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
- flag.IntVar(&MaxPeer, "x", 10, "maximum desired peers")
- flag.BoolVar(&StartJsConsole, "js", false, "exp")
+
+ flag.StringVar(&Datadir, "datadir", ".ethereum", "specifies the datadir to use. Takes precedence over config file.")
flag.Parse()
diff --git a/ethereum/ethereum.go b/ethereum/ethereum.go
index 34bacb7b9..179a3f462 100644
--- a/ethereum/ethereum.go
+++ b/ethereum/ethereum.go
@@ -6,10 +6,12 @@ import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
+ "github.com/rakyll/globalconf"
"io/ioutil"
"log"
"os"
"os/signal"
+ "path"
"runtime"
"strings"
)
@@ -59,7 +61,15 @@ func main() {
lt = ethutil.LogFile | ethutil.LogStd
}
- ethutil.ReadConfig(DataDir, lt, Identifier)
+ g, err := globalconf.NewWithOptions(&globalconf.Options{
+ Filename: path.Join(ethutil.ApplicationFolder(Datadir), "conf.ini"),
+ })
+ if err != nil {
+ fmt.Println(err)
+ } else {
+ g.ParseAll()
+ }
+ ethutil.ReadConfig(Datadir, lt, g, Identifier)
logger := ethutil.Config.Log
diff --git a/ethereum/javascript_runtime.go b/ethereum/javascript_runtime.go
index 93297f604..b05d39232 100644
--- a/ethereum/javascript_runtime.go
+++ b/ethereum/javascript_runtime.go
@@ -10,6 +10,7 @@ import (
"github.com/obscuren/otto"
"io/ioutil"
"os"
+ "path"
"path/filepath"
)
@@ -25,6 +26,20 @@ type JSRE struct {
objectCb map[string][]otto.Value
}
+func (jsre *JSRE) LoadExtFile(path string) {
+ result, err := ioutil.ReadFile(path)
+ if err == nil {
+ jsre.vm.Run(result)
+ } else {
+ ethutil.Config.Log.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,
@@ -39,6 +54,10 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
// 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()
diff --git a/ethereum/repl.go b/ethereum/repl.go
index 10f51675e..0208459ad 100644
--- a/ethereum/repl.go
+++ b/ethereum/repl.go
@@ -66,6 +66,10 @@ 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())
}
@@ -74,6 +78,10 @@ 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 {
@@ -101,7 +109,7 @@ func (self *JSEthereum) toVal(v interface{}) otto.Value {
result, err := self.vm.ToValue(v)
if err != nil {
- fmt.Println(err)
+ fmt.Println("Value unknown:", err)
return otto.UndefinedValue()
}