diff --git a/ethereal/assets/ext/ethereum.js b/ethereal/assets/ext/ethereum.js
index 03b25179b..fb8bd23a7 100644
--- a/ethereal/assets/ext/ethereum.js
+++ b/ethereal/assets/ext/ethereum.js
@@ -4,6 +4,16 @@ window.eth = {
_callbacks: {},
_onCallbacks: {},
+ test: function() {
+ var t = undefined;
+ navigator.qt.onmessage = function(d) { t = d; }
+ for(;;) {
+ if(t !== undefined) {
+ return t
+ }
+ }
+ },
+
mutan: function(code) {
},
diff --git a/ethereal/assets/ext/test.html b/ethereal/assets/ext/test.html
index 0d6b710fa..980001f90 100644
--- a/ethereal/assets/ext/test.html
+++ b/ethereal/assets/ext/test.html
@@ -25,6 +25,10 @@ function test() {
eth.getEachStorageAt("9ef0f0d81e040012600b0c1abdef7c48f720f88a", function(a, b) {
console.log(a,b)
})
+
+ eth.getBlock("f70097659f329a09642a27f11338d9269de64f1d4485786e36bfc410832148cd", function(block) {
+ console.log(block)
+ })
}
diff --git a/ethereal/assets/qml/views/info.qml b/ethereal/assets/qml/views/info.qml
index fcddd46e2..3335a306a 100644
--- a/ethereal/assets/qml/views/info.qml
+++ b/ethereal/assets/qml/views/info.qml
@@ -28,7 +28,7 @@ Rectangle {
text: "Address"
}
TextField {
- text: pub.getKey().address
+ text: eth.getKey().address
width: 500
}
diff --git a/ethereal/assets/qml/views/transaction.qml b/ethereal/assets/qml/views/transaction.qml
index 80e1670f8..ac38ebe0c 100644
--- a/ethereal/assets/qml/views/transaction.qml
+++ b/ethereal/assets/qml/views/transaction.qml
@@ -169,7 +169,7 @@ Rectangle {
onClicked: {
var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros;
var gasPrice = txGasPrice.text + denomModel.get(gasDenom.currentIndex).zeros;
- var res = gui.create(txFuelRecipient.text, value, txGas.text, gasPrice, codeView.text)
+ var res = gui.transact(txFuelRecipient.text, value, txGas.text, gasPrice, codeView.text)
if(res[1]) {
txResult.text = "Your contract could not be sent over the network:\n"
txResult.text += res[1].error()
diff --git a/ethereal/assets/qml/webapp.qml b/ethereal/assets/qml/webapp.qml
index 5faf50e91..ac48e32a1 100644
--- a/ethereal/assets/qml/webapp.qml
+++ b/ethereal/assets/qml/webapp.qml
@@ -165,13 +165,13 @@ ApplicationWindow {
break
case "getBlockByNumber":
- var block = eth.getBlock(data.args[0])
+ var block = eth.getBlockByNumber(data.args[0])
postData(data._seed, block)
break
case "getBlockByHash":
- var block = eth.getBlock(data.args[0])
+ var block = eth.getBlockByHash(data.args[0])
postData(data._seed, block)
break
@@ -195,8 +195,8 @@ ApplicationWindow {
case "getEachStorage":
require(1);
- var stateObject = eth.getStateObject(data.args[0]).stateKeyVal(true)
- postData(data._seed,stateObject)
+ var storage = eth.getEachStorage(data.args[0])
+ postData(data._seed, storage)
break
diff --git a/ethereal/debugger.go b/ethereal/debugger.go
index 1cf5e0b66..56f0b47fc 100644
--- a/ethereal/debugger.go
+++ b/ethereal/debugger.go
@@ -103,14 +103,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
}
}()
- data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) {
- slice := strings.Split(dataStr, "\n")
- for _, dataItem := range slice {
- d := ethutil.FormatData(dataItem)
- ret = append(ret, d...)
- }
- return
- })
+ data := utils.FormatTransactionData(dataStr)
var err error
script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) {
diff --git a/ethereal/ext_app.go b/ethereal/ext_app.go
index 37e9676ff..ad826eaa6 100644
--- a/ethereal/ext_app.go
+++ b/ethereal/ext_app.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"github.com/ethereum/eth-go/ethchain"
- "github.com/ethereum/eth-go/ethpub"
+ "github.com/ethereum/eth-go/ethpipe"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/go-ethereum/javascript"
@@ -19,42 +19,36 @@ type AppContainer interface {
Engine() *qml.Engine
NewBlock(*ethchain.Block)
- ObjectChanged(*ethstate.StateObject)
- StorageChanged(*ethstate.StorageState)
NewWatcher(chan bool)
Messages(ethstate.Messages, string)
}
type ExtApplication struct {
- *ethpub.PEthereum
+ *ethpipe.JSPipe
eth ethchain.EthManager
blockChan chan ethreact.Event
- changeChan chan ethreact.Event
messageChan chan ethreact.Event
quitChan chan bool
watcherQuitChan chan bool
filters map[string]*ethchain.Filter
- container AppContainer
- lib *UiLib
- registeredEvents []string
+ container AppContainer
+ lib *UiLib
}
func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication {
app := &ExtApplication{
- ethpub.New(lib.eth),
+ ethpipe.NewJSPipe(lib.eth),
lib.eth,
make(chan ethreact.Event, 100),
make(chan ethreact.Event, 100),
- make(chan ethreact.Event, 100),
make(chan bool),
make(chan bool),
make(map[string]*ethchain.Filter),
container,
lib,
- nil,
}
return app
@@ -93,9 +87,6 @@ func (app *ExtApplication) stop() {
// Clean up
reactor := app.lib.eth.Reactor()
reactor.Unsubscribe("newBlock", app.blockChan)
- for _, event := range app.registeredEvents {
- reactor.Unsubscribe(event, app.changeChan)
- }
// Kill the main loop
app.quitChan <- true
@@ -103,7 +94,6 @@ func (app *ExtApplication) stop() {
close(app.blockChan)
close(app.quitChan)
- close(app.changeChan)
app.container.Destroy()
}
@@ -118,13 +108,6 @@ out:
if block, ok := block.Resource.(*ethchain.Block); ok {
app.container.NewBlock(block)
}
- case object := <-app.changeChan:
- if stateObject, ok := object.Resource.(*ethstate.StateObject); ok {
- app.container.ObjectChanged(stateObject)
- } else if storageObject, ok := object.Resource.(*ethstate.StorageState); ok {
- app.container.StorageChanged(storageObject)
- }
-
case msg := <-app.messageChan:
if messages, ok := msg.Resource.(ethstate.Messages); ok {
for id, filter := range app.filters {
diff --git a/ethereal/gui.go b/ethereal/gui.go
index c0584936d..5cc305977 100644
--- a/ethereal/gui.go
+++ b/ethereal/gui.go
@@ -14,7 +14,6 @@ import (
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethminer"
"github.com/ethereum/eth-go/ethpipe"
- "github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire"
@@ -39,10 +38,11 @@ type Gui struct {
txDb *ethdb.LDBDatabase
- pub *ethpub.PEthereum
logLevel ethlog.LogLevel
open bool
+ pipe *ethpipe.JSPipe
+
Session string
clientIdentity *ethwire.SimpleClientIdentity
config *ethutil.ConfigManager
@@ -57,9 +57,9 @@ func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIden
panic(err)
}
- pub := ethpub.New(ethereum)
+ pipe := ethpipe.NewJSPipe(ethereum)
- return &Gui{eth: ethereum, txDb: db, pub: pub, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config}
+ return &Gui{eth: ethereum, txDb: db, pipe: pipe, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config}
}
func (gui *Gui) Start(assetPath string) {
@@ -68,13 +68,12 @@ func (gui *Gui) Start(assetPath string) {
// Register ethereum functions
qml.RegisterTypes("Ethereum", 1, 0, []qml.TypeSpec{{
- Init: func(p *ethpub.PBlock, obj qml.Object) { p.Number = 0; p.Hash = "" },
+ Init: func(p *ethpipe.JSBlock, obj qml.Object) { p.Number = 0; p.Hash = "" },
}, {
- Init: func(p *ethpub.PTx, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" },
+ Init: func(p *ethpipe.JSTransaction, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" },
}, {
- Init: func(p *ethpub.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
+ Init: func(p *ethpipe.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
}})
-
// Create a new QML engine
gui.engine = qml.NewEngine()
context := gui.engine.Context()
@@ -82,7 +81,6 @@ func (gui *Gui) Start(assetPath string) {
// Expose the eth library and the ui library to QML
context.SetVar("gui", gui)
- context.SetVar("pub", gui.pub)
context.SetVar("eth", gui.uiLib)
// Load the main QML interface
@@ -231,7 +229,7 @@ func (gui *Gui) loadAddressBook() {
view := gui.getObjectByName("infoView")
view.Call("clearAddress")
- nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg()
+ nameReg := gui.pipe.World().Config().Get("NameReg")
if nameReg != nil {
nameReg.EachStorage(func(name string, value *ethutil.Value) {
if name[0] != 0 {
@@ -255,7 +253,7 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
}
var (
- ptx = ethpub.NewPTx(tx)
+ ptx = ethpipe.NewJSTx(tx)
send = nameReg.Storage(tx.Sender())
rec = nameReg.Storage(tx.Recipient)
s, r string
@@ -301,8 +299,9 @@ func (gui *Gui) readPreviousTransactions() {
}
func (gui *Gui) processBlock(block *ethchain.Block, initial bool) {
- name := ethpub.FindNameInNameReg(gui.eth.StateManager(), block.Coinbase)
- b := ethpub.NewPBlock(block)
+ //name := ethpub.FindNameInNameReg(gui.eth.StateManager(), block.Coinbase)
+ name := strings.Trim(gui.pipe.World().Config().Get("NameReg").Storage(block.Coinbase).Str(), "\x00")
+ b := ethpipe.NewJSBlock(block)
b.Name = name
gui.getObjectByName("chainView").Call("addBlock", b, initial)
@@ -391,12 +390,12 @@ func (gui *Gui) update() {
if bytes.Compare(tx.Sender(), gui.address()) == 0 {
object.SubAmount(tx.Value)
- gui.getObjectByName("transactionView").Call("addTx", ethpub.NewPTx(tx), "send")
+ gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
gui.txDb.Put(tx.Hash(), tx.RlpEncode())
} else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
object.AddAmount(tx.Value)
- gui.getObjectByName("transactionView").Call("addTx", ethpub.NewPTx(tx), "recv")
+ gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
gui.txDb.Put(tx.Hash(), tx.RlpEncode())
}
@@ -442,10 +441,9 @@ func (gui *Gui) update() {
reactor.Subscribe("miner:start", miningChan)
reactor.Subscribe("miner:stop", miningChan)
- nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg()
- if nameReg != nil {
- reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
- }
+ nameReg := gui.pipe.World().Config().Get("NameReg")
+ reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
+
reactor.Subscribe("peerList", peerChan)
}
@@ -453,7 +451,7 @@ func (gui *Gui) setPeerInfo() {
gui.win.Root().Call("setPeers", fmt.Sprintf("%d / %d", gui.eth.PeerCount(), gui.eth.MaxPeers))
gui.win.Root().Call("resetPeers")
- for _, peer := range gui.pub.GetPeers() {
+ for _, peer := range gui.pipe.GetPeers() {
gui.win.Root().Call("addPeer", peer)
}
}
@@ -466,18 +464,10 @@ func (gui *Gui) address() []byte {
return gui.eth.KeyManager().Address()
}
-func (gui *Gui) RegisterName(name string) {
- name = fmt.Sprintf("\"register\"\n\"%s\"", name)
+func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (*ethpipe.JSReceipt, error) {
+ data := ethutil.Bytes2Hex(utils.FormatTransactionData(d))
- gui.pub.Transact(gui.privateKey(), "NameReg", "", "10000", "10000000000000", name)
-}
-
-func (gui *Gui) Transact(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) {
- return gui.pub.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
-}
-
-func (gui *Gui) Create(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) {
- return gui.pub.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
+ return gui.pipe.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
}
func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
diff --git a/ethereal/html_container.go b/ethereal/html_container.go
index 7deee487d..bbf77402e 100644
--- a/ethereal/html_container.go
+++ b/ethereal/html_container.go
@@ -125,14 +125,6 @@ func (app *HtmlApplication) NewBlock(block *ethchain.Block) {
app.webView.Call("onNewBlockCb", b)
}
-func (app *HtmlApplication) ObjectChanged(stateObject *ethstate.StateObject) {
- app.webView.Call("onObjectChangeCb", ethpub.NewPStateObject(stateObject))
-}
-
-func (app *HtmlApplication) StorageChanged(storageObject *ethstate.StorageState) {
- app.webView.Call("onStorageChangeCb", ethpub.NewPStorageState(storageObject))
-}
-
func (self *HtmlApplication) Messages(messages ethstate.Messages, id string) {
var msgs []javascript.JSMessage
for _, m := range messages {
diff --git a/ethereal/ui_lib.go b/ethereal/ui_lib.go
index f900fcaee..c48a06547 100644
--- a/ethereal/ui_lib.go
+++ b/ethereal/ui_lib.go
@@ -6,6 +6,7 @@ import (
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethpipe"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/javascript"
"github.com/go-qml/qml"
@@ -18,6 +19,7 @@ type memAddr struct {
// UI Library that has some basic functionality exposed
type UiLib struct {
+ *ethpipe.JSPipe
engine *qml.Engine
eth *eth.Ethereum
connected bool
@@ -31,7 +33,7 @@ type UiLib struct {
}
func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
- return &UiLib{engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth)}
+ return &UiLib{JSPipe: ethpipe.NewJSPipe(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth)}
}
func (self *UiLib) ImportTx(rlpTx string) {
diff --git a/javascript/types.go b/javascript/types.go
index fb1e54ae7..375e7b24c 100644
--- a/javascript/types.go
+++ b/javascript/types.go
@@ -128,37 +128,7 @@ func (self *JSEthereum) toVal(v interface{}) otto.Value {
}
func (self *JSEthereum) Messages(object map[string]interface{}) otto.Value {
- filter := ethchain.NewFilter(self.ethereum)
-
- if object["earliest"] != nil {
- earliest := object["earliest"]
- if e, ok := earliest.(string); ok {
- filter.SetEarliestBlock(ethutil.Hex2Bytes(e))
- } else {
- filter.SetEarliestBlock(earliest)
- }
- }
-
- if object["latest"] != nil {
- latest := object["latest"]
- if l, ok := latest.(string); ok {
- filter.SetLatestBlock(ethutil.Hex2Bytes(l))
- } else {
- filter.SetLatestBlock(latest)
- }
- }
- if object["to"] != nil {
- filter.AddTo(ethutil.Hex2Bytes(object["to"].(string)))
- }
- if object["from"] != nil {
- filter.AddFrom(ethutil.Hex2Bytes(object["from"].(string)))
- }
- if object["max"] != nil {
- filter.SetMax(object["max"].(int))
- }
- if object["skip"] != nil {
- filter.SetSkip(object["skip"].(int))
- }
+ filter := ethchain.NewFilterFromMap(object, self.ethereum)
messages := filter.Find()
var msgs []JSMessage
diff --git a/utils/cmd.go b/utils/cmd.go
index d34348ad8..58e3eed1e 100644
--- a/utils/cmd.go
+++ b/utils/cmd.go
@@ -8,6 +8,7 @@ import (
"os/signal"
"path"
"path/filepath"
+ "regexp"
"runtime"
"time"
@@ -267,6 +268,19 @@ func StartMining(ethereum *eth.Ethereum) bool {
return false
}
+func FormatTransactionData(data string) []byte {
+ d := ethutil.StringToByteFunc(data, func(s string) (ret []byte) {
+ slice := regexp.MustCompile("\\n|\\s").Split(s, 1000000000)
+ for _, dataItem := range slice {
+ d := ethutil.FormatData(dataItem)
+ ret = append(ret, d...)
+ }
+ return
+ })
+
+ return d
+}
+
func StopMining(ethereum *eth.Ethereum) bool {
if ethereum.Mining && miner != nil {
miner.Stop()