diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-20 18:48:34 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-20 18:48:34 +0800 |
commit | a05adb11288a1ea9dc6e38a952ab89fa5eb7f794 (patch) | |
tree | 8aac4ed24ebc12906d23e0adf02506af98ae6acf /ethereum/repl.go | |
parent | dfc3cb441bed85728914f5575a86c9fcb1f61211 (diff) | |
download | go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar.gz go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar.bz2 go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar.lz go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar.xz go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.tar.zst go-tangerine-a05adb11288a1ea9dc6e38a952ab89fa5eb7f794.zip |
Refactored file structure
Diffstat (limited to 'ethereum/repl.go')
-rw-r--r-- | ethereum/repl.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/ethereum/repl.go b/ethereum/repl.go new file mode 100644 index 000000000..c0b63c0a5 --- /dev/null +++ b/ethereum/repl.go @@ -0,0 +1,97 @@ +package main + +import ( + "fmt" + "github.com/ethereum/eth-go" + "github.com/ethereum/eth-go/ethpub" + "github.com/robertkrimen/otto" +) + +type Repl interface { + Start() + Stop() +} + +type JSRepl struct { + re *JSRE + + prompt string +} + +func NewJSRepl(ethereum *eth.Ethereum) *JSRepl { + return &JSRepl{re: NewJSRE(ethereum), prompt: "> "} +} + +func (self *JSRepl) Start() { + self.read() +} + +func (self *JSRepl) Stop() { + self.re.Stop() +} + +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 JSEthereum struct { + *ethpub.PEthereum + vm *otto.Otto +} + +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) 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, 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 *JSEthereum) toVal(v interface{}) otto.Value { + result, err := self.vm.ToValue(v) + + if err != nil { + fmt.Println(err) + + return otto.UndefinedValue() + } + + return result +} |