Refactored file structure
This commit is contained in:
parent
dfc3cb441b
commit
a05adb1128
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
var jefcoinAddr = "681fd48ffa236549fbcd16bdf9f98bb541a7f742"
|
var jefcoinAddr = "739105c31705038744d190332e3a07c8fea8a9eb"
|
||||||
var mAddr = ""
|
var mAddr = ""
|
||||||
|
|
||||||
function createTransaction() {
|
function createTransaction() {
|
||||||
|
@ -9,11 +9,6 @@ import (
|
|||||||
"github.com/robertkrimen/otto"
|
"github.com/robertkrimen/otto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Repl interface {
|
|
||||||
Start()
|
|
||||||
Stop()
|
|
||||||
}
|
|
||||||
|
|
||||||
type JSRE struct {
|
type JSRE struct {
|
||||||
ethereum *eth.Ethereum
|
ethereum *eth.Ethereum
|
||||||
vm *otto.Otto
|
vm *otto.Otto
|
||||||
@ -44,22 +39,20 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
|
|||||||
go re.mainLoop()
|
go re.mainLoop()
|
||||||
|
|
||||||
re.Bind("eth", &JSEthereum{re.lib, re.vm})
|
re.Bind("eth", &JSEthereum{re.lib, re.vm})
|
||||||
t, _ := re.vm.Get("eth")
|
|
||||||
t.Object().Set("watch", func(call otto.FunctionCall) otto.Value {
|
|
||||||
addr, _ := call.Argument(0).ToString()
|
|
||||||
cb := call.Argument(1)
|
|
||||||
|
|
||||||
re.objectCb[addr] = append(re.objectCb[addr], cb)
|
re.initStdFuncs()
|
||||||
|
|
||||||
event := "object:" + string(ethutil.FromHex(addr))
|
|
||||||
ethereum.Reactor().Subscribe(event, re.changeChan)
|
|
||||||
|
|
||||||
return otto.UndefinedValue()
|
|
||||||
})
|
|
||||||
|
|
||||||
return re
|
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) Stop() {
|
func (self *JSRE) Stop() {
|
||||||
// Kill the main loop
|
// Kill the main loop
|
||||||
self.quitChan <- true
|
self.quitChan <- true
|
||||||
@ -95,94 +88,27 @@ out:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *JSRE) Bind(name string, v interface{}) {
|
func (self *JSRE) initStdFuncs() {
|
||||||
self.vm.Set(name, v)
|
t, _ := self.vm.Get("eth")
|
||||||
}
|
eth := t.Object()
|
||||||
|
eth.Set("watch", func(call otto.FunctionCall) otto.Value {
|
||||||
|
addr, _ := call.Argument(0).ToString()
|
||||||
|
cb := call.Argument(1)
|
||||||
|
|
||||||
func (self *JSRE) Run(code string) (otto.Value, error) {
|
self.objectCb[addr] = append(self.objectCb[addr], cb)
|
||||||
return self.vm.Run(code)
|
|
||||||
}
|
|
||||||
|
|
||||||
type JSRepl struct {
|
event := "object:" + string(ethutil.FromHex(addr))
|
||||||
re *JSRE
|
self.ethereum.Reactor().Subscribe(event, self.changeChan)
|
||||||
|
|
||||||
prompt string
|
return otto.UndefinedValue()
|
||||||
}
|
})
|
||||||
|
eth.Set("addPeer", func(call otto.FunctionCall) otto.Value {
|
||||||
func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
|
host, err := call.Argument(0).ToString()
|
||||||
return &JSRepl{re: NewJSRE(ethereum), prompt: "> "}
|
if err != nil {
|
||||||
}
|
return otto.FalseValue()
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
}()
|
self.ethereum.ConnectToPeer(host)
|
||||||
|
|
||||||
value, err := self.re.Run(code)
|
return otto.TrueValue()
|
||||||
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
|
|
||||||
}
|
}
|
97
ethereum/repl.go
Normal file
97
ethereum/repl.go
Normal file
@ -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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user