diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-17 21:32:44 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-17 21:32:44 +0800 |
commit | c9517024237de781cdc450bca89907217e5a8cef (patch) | |
tree | 9ed398ca6ddbc019917b96a6e14988d89fbef15a /ethereum/repl/types.go | |
parent | fc8bd7229ee25e214130df98875ecc13e4650911 (diff) | |
parent | 7d64b589b4cf3f71125d5bd0f0a8f6a560e909db (diff) | |
download | go-tangerine-c9517024237de781cdc450bca89907217e5a8cef.tar.gz go-tangerine-c9517024237de781cdc450bca89907217e5a8cef.tar.zst go-tangerine-c9517024237de781cdc450bca89907217e5a8cef.zip |
Merge branch 'develop'0.5.17
Diffstat (limited to 'ethereum/repl/types.go')
-rw-r--r-- | ethereum/repl/types.go | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/ethereum/repl/types.go b/ethereum/repl/types.go new file mode 100644 index 000000000..16a18e6e5 --- /dev/null +++ b/ethereum/repl/types.go @@ -0,0 +1,95 @@ +package ethrepl + +import ( + "fmt" + "github.com/ethereum/eth-go/ethpub" + "github.com/ethereum/eth-go/ethutil" + "github.com/obscuren/otto" +) + +type JSStateObject struct { + *ethpub.PStateObject + eth *JSEthereum +} + +func (self *JSStateObject) EachStorage(call otto.FunctionCall) otto.Value { + cb := call.Argument(0) + self.PStateObject.EachStorage(func(key string, value *ethutil.Value) { + value.Decode() + + cb.Call(self.eth.toVal(self), self.eth.toVal(key), self.eth.toVal(ethutil.Bytes2Hex(value.Bytes()))) + }) + + return otto.UndefinedValue() +} + +// The JSEthereum object attempts to wrap the PEthereum object and returns +// meaningful javascript objects +type JSBlock struct { + *ethpub.PBlock + eth *JSEthereum +} + +func (self *JSBlock) GetTransaction(hash string) otto.Value { + return self.eth.toVal(self.PBlock.GetTransaction(hash)) +} + +type JSEthereum struct { + *ethpub.PEthereum + vm *otto.Otto +} + +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()) +} + +func (self *JSEthereum) GetStateObject(addr string) otto.Value { + return self.toVal(&JSStateObject{self.PEthereum.GetStateObject(addr), self}) +} + +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 { + fmt.Println(err) + + return otto.UndefinedValue() + } + + return self.toVal(r) +} + +func (self *JSEthereum) Create(key, valueStr, gasStr, gasPriceStr, scriptStr string) otto.Value { + r, err := self.PEthereum.Create(key, valueStr, gasStr, gasPriceStr, scriptStr) + + 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("Value unknown:", err) + + return otto.UndefinedValue() + } + + return result +} |