aboutsummaryrefslogtreecommitdiffstats
path: root/ethereum
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-16 04:15:14 +0800
committerobscuren <geffobscura@gmail.com>2014-05-16 04:15:14 +0800
commit0a03484188dc23707b343bb512ec341afc744a2e (patch)
treefec35421e4d74c1fe09fc7e7a6e031b01a8345ce /ethereum
parentcbce882f5e35300016055cde81eeccb3ae052671 (diff)
downloadgo-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar.gz
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar.bz2
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar.lz
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar.xz
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.tar.zst
go-tangerine-0a03484188dc23707b343bb512ec341afc744a2e.zip
Implemented JavaScript console
Diffstat (limited to 'ethereum')
-rw-r--r--ethereum/ethereum.go11
-rw-r--r--ethereum/javascript_console.go60
2 files changed, 53 insertions, 18 deletions
diff --git a/ethereum/ethereum.go b/ethereum/ethereum.go
index 8b42c2a2c..128e11139 100644
--- a/ethereum/ethereum.go
+++ b/ethereum/ethereum.go
@@ -52,7 +52,12 @@ func main() {
var logSys *log.Logger
flags := log.LstdFlags
- ethutil.ReadConfig(DataDir)
+ if StartJsConsole {
+ ethutil.ReadConfig(DataDir, ethutil.LogFile)
+ } else {
+ ethutil.ReadConfig(DataDir, ethutil.LogFile|ethutil.LogStd)
+ }
+
logger := ethutil.Config.Log
if LogFile != "" {
@@ -145,9 +150,7 @@ save these words so you can restore your account later: %s
console := NewConsole(ethereum)
go console.Start()
- }
-
- if StartExp {
+ } else if StartJsConsole {
c := NewJSConsole(ethereum)
go c.Start()
diff --git a/ethereum/javascript_console.go b/ethereum/javascript_console.go
index a6449af8f..9adf51bcc 100644
--- a/ethereum/javascript_console.go
+++ b/ethereum/javascript_console.go
@@ -21,7 +21,7 @@ func NewJSConsole(ethereum *eth.Ethereum) *JSConsole {
func (self *JSConsole) Start() {
self.initBindings()
- fmt.Println("Eth JS Console")
+ fmt.Println("Eth JavaScript console")
reader := bufio.NewReader(os.Stdin)
for {
fmt.Printf("eth >>> ")
@@ -29,16 +29,18 @@ func (self *JSConsole) Start() {
if err != nil {
fmt.Println("Error reading input", err)
} else {
- if string(str) == "quit" {
- return
- }
-
self.ParseInput(string(str))
}
}
}
func (self *JSConsole) ParseInput(code string) {
+ defer func() {
+ if r := recover(); r != nil {
+ fmt.Println("[native] error", r)
+ }
+ }()
+
value, err := self.vm.Run(code)
if err != nil {
fmt.Println(err)
@@ -48,29 +50,59 @@ func (self *JSConsole) ParseInput(code string) {
fmt.Println(value)
}
-type OtherStruct struct {
- Test string
+func (self *JSConsole) initBindings() {
+ t := &JSWrapper{self.lib, self.vm}
+
+ self.vm.Set("eth", t)
}
+// The JS wrapper attempts to wrap the PEthereum object and returns
+// proper javascript objects
type JSWrapper struct {
- pub *ethpub.PEthereum
- vm *otto.Otto
+ *ethpub.PEthereum
+ vm *otto.Otto
}
func (self *JSWrapper) GetKey() otto.Value {
- result, err := self.vm.ToValue(self.pub.GetKey())
+ return self.toVal(self.PEthereum.GetKey())
+}
+
+func (self *JSWrapper) GetStateObject(addr string) otto.Value {
+ return self.toVal(self.PEthereum.GetStateObject(addr))
+}
+
+func (self *JSWrapper) 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 result
+ return self.toVal(r)
+}
+func (self *JSWrapper) Create(key, valueStr, gasStr, gasPriceStr, initStr, bodyStr string) otto.Value {
+ r, err := self.PEthereum.Create(key, valueStr, gasStr, gasPriceStr, initStr, bodyStr)
+
+ if err != nil {
+ fmt.Println(err)
+
+ return otto.UndefinedValue()
+ }
+
+ return self.toVal(r)
}
-func (self *JSConsole) initBindings() {
- t := &JSWrapper{self.lib, self.vm}
+// Wrapper function
+func (self *JSWrapper) toVal(v interface{}) otto.Value {
+ result, err := self.vm.ToValue(v)
- self.vm.Set("eth", t)
+ if err != nil {
+ fmt.Println(err)
+
+ return otto.UndefinedValue()
+ }
+
+ return result
}