diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-16 04:15:14 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-16 04:15:14 +0800 |
commit | 0a03484188dc23707b343bb512ec341afc744a2e (patch) | |
tree | fec35421e4d74c1fe09fc7e7a6e031b01a8345ce /ethereum | |
parent | cbce882f5e35300016055cde81eeccb3ae052671 (diff) | |
download | go-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.go | 11 | ||||
-rw-r--r-- | ethereum/javascript_console.go | 60 |
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 } |