Commit a6c4543c authored by obscuren's avatar obscuren

Moving over to ethpipe

parent c3621725
...@@ -4,6 +4,16 @@ window.eth = { ...@@ -4,6 +4,16 @@ window.eth = {
_callbacks: {}, _callbacks: {},
_onCallbacks: {}, _onCallbacks: {},
test: function() {
var t = undefined;
navigator.qt.onmessage = function(d) { t = d; }
for(;;) {
if(t !== undefined) {
return t
}
}
},
mutan: function(code) { mutan: function(code) {
}, },
......
...@@ -25,6 +25,10 @@ function test() { ...@@ -25,6 +25,10 @@ function test() {
eth.getEachStorageAt("9ef0f0d81e040012600b0c1abdef7c48f720f88a", function(a, b) { eth.getEachStorageAt("9ef0f0d81e040012600b0c1abdef7c48f720f88a", function(a, b) {
console.log(a,b) console.log(a,b)
}) })
eth.getBlock("f70097659f329a09642a27f11338d9269de64f1d4485786e36bfc410832148cd", function(block) {
console.log(block)
})
} }
</script> </script>
......
...@@ -28,7 +28,7 @@ Rectangle { ...@@ -28,7 +28,7 @@ Rectangle {
text: "Address" text: "Address"
} }
TextField { TextField {
text: pub.getKey().address text: eth.getKey().address
width: 500 width: 500
} }
......
...@@ -169,7 +169,7 @@ Rectangle { ...@@ -169,7 +169,7 @@ Rectangle {
onClicked: { onClicked: {
var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros; var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros;
var gasPrice = txGasPrice.text + denomModel.get(gasDenom.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]) { if(res[1]) {
txResult.text = "Your contract <b>could not</b> be sent over the network:\n<b>" txResult.text = "Your contract <b>could not</b> be sent over the network:\n<b>"
txResult.text += res[1].error() txResult.text += res[1].error()
......
...@@ -165,13 +165,13 @@ ApplicationWindow { ...@@ -165,13 +165,13 @@ ApplicationWindow {
break break
case "getBlockByNumber": case "getBlockByNumber":
var block = eth.getBlock(data.args[0]) var block = eth.getBlockByNumber(data.args[0])
postData(data._seed, block) postData(data._seed, block)
break break
case "getBlockByHash": case "getBlockByHash":
var block = eth.getBlock(data.args[0]) var block = eth.getBlockByHash(data.args[0])
postData(data._seed, block) postData(data._seed, block)
break break
...@@ -195,8 +195,8 @@ ApplicationWindow { ...@@ -195,8 +195,8 @@ ApplicationWindow {
case "getEachStorage": case "getEachStorage":
require(1); require(1);
var stateObject = eth.getStateObject(data.args[0]).stateKeyVal(true) var storage = eth.getEachStorage(data.args[0])
postData(data._seed,stateObject) postData(data._seed, storage)
break break
......
...@@ -103,14 +103,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data ...@@ -103,14 +103,7 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
} }
}() }()
data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) { data := utils.FormatTransactionData(dataStr)
slice := strings.Split(dataStr, "\n")
for _, dataItem := range slice {
d := ethutil.FormatData(dataItem)
ret = append(ret, d...)
}
return
})
var err error var err error
script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) { script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) {
......
...@@ -4,7 +4,7 @@ import ( ...@@ -4,7 +4,7 @@ import (
"encoding/json" "encoding/json"
"github.com/ethereum/eth-go/ethchain" "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/ethreact"
"github.com/ethereum/eth-go/ethstate" "github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/go-ethereum/javascript" "github.com/ethereum/go-ethereum/javascript"
...@@ -19,42 +19,36 @@ type AppContainer interface { ...@@ -19,42 +19,36 @@ type AppContainer interface {
Engine() *qml.Engine Engine() *qml.Engine
NewBlock(*ethchain.Block) NewBlock(*ethchain.Block)
ObjectChanged(*ethstate.StateObject)
StorageChanged(*ethstate.StorageState)
NewWatcher(chan bool) NewWatcher(chan bool)
Messages(ethstate.Messages, string) Messages(ethstate.Messages, string)
} }
type ExtApplication struct { type ExtApplication struct {
*ethpub.PEthereum *ethpipe.JSPipe
eth ethchain.EthManager eth ethchain.EthManager
blockChan chan ethreact.Event blockChan chan ethreact.Event
changeChan chan ethreact.Event
messageChan chan ethreact.Event messageChan chan ethreact.Event
quitChan chan bool quitChan chan bool
watcherQuitChan chan bool watcherQuitChan chan bool
filters map[string]*ethchain.Filter filters map[string]*ethchain.Filter
container AppContainer container AppContainer
lib *UiLib lib *UiLib
registeredEvents []string
} }
func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication { func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication {
app := &ExtApplication{ app := &ExtApplication{
ethpub.New(lib.eth), ethpipe.NewJSPipe(lib.eth),
lib.eth, lib.eth,
make(chan ethreact.Event, 100), make(chan ethreact.Event, 100),
make(chan ethreact.Event, 100), make(chan ethreact.Event, 100),
make(chan ethreact.Event, 100),
make(chan bool), make(chan bool),
make(chan bool), make(chan bool),
make(map[string]*ethchain.Filter), make(map[string]*ethchain.Filter),
container, container,
lib, lib,
nil,
} }
return app return app
...@@ -93,9 +87,6 @@ func (app *ExtApplication) stop() { ...@@ -93,9 +87,6 @@ func (app *ExtApplication) stop() {
// Clean up // Clean up
reactor := app.lib.eth.Reactor() reactor := app.lib.eth.Reactor()
reactor.Unsubscribe("newBlock", app.blockChan) reactor.Unsubscribe("newBlock", app.blockChan)
for _, event := range app.registeredEvents {
reactor.Unsubscribe(event, app.changeChan)
}
// Kill the main loop // Kill the main loop
app.quitChan <- true app.quitChan <- true
...@@ -103,7 +94,6 @@ func (app *ExtApplication) stop() { ...@@ -103,7 +94,6 @@ func (app *ExtApplication) stop() {
close(app.blockChan) close(app.blockChan)
close(app.quitChan) close(app.quitChan)
close(app.changeChan)
app.container.Destroy() app.container.Destroy()
} }
...@@ -118,13 +108,6 @@ out: ...@@ -118,13 +108,6 @@ out:
if block, ok := block.Resource.(*ethchain.Block); ok { if block, ok := block.Resource.(*ethchain.Block); ok {
app.container.NewBlock(block) 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: case msg := <-app.messageChan:
if messages, ok := msg.Resource.(ethstate.Messages); ok { if messages, ok := msg.Resource.(ethstate.Messages); ok {
for id, filter := range app.filters { for id, filter := range app.filters {
......
...@@ -14,7 +14,6 @@ import ( ...@@ -14,7 +14,6 @@ import (
"github.com/ethereum/eth-go/ethlog" "github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethminer" "github.com/ethereum/eth-go/ethminer"
"github.com/ethereum/eth-go/ethpipe" "github.com/ethereum/eth-go/ethpipe"
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethreact" "github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire" "github.com/ethereum/eth-go/ethwire"
...@@ -39,10 +38,11 @@ type Gui struct { ...@@ -39,10 +38,11 @@ type Gui struct {
txDb *ethdb.LDBDatabase txDb *ethdb.LDBDatabase
pub *ethpub.PEthereum
logLevel ethlog.LogLevel logLevel ethlog.LogLevel
open bool open bool
pipe *ethpipe.JSPipe
Session string Session string
clientIdentity *ethwire.SimpleClientIdentity clientIdentity *ethwire.SimpleClientIdentity
config *ethutil.ConfigManager config *ethutil.ConfigManager
...@@ -57,9 +57,9 @@ func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIden ...@@ -57,9 +57,9 @@ func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIden
panic(err) 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) { func (gui *Gui) Start(assetPath string) {
...@@ -68,13 +68,12 @@ func (gui *Gui) Start(assetPath string) { ...@@ -68,13 +68,12 @@ func (gui *Gui) Start(assetPath string) {
// Register ethereum functions // Register ethereum functions
qml.RegisterTypes("Ethereum", 1, 0, []qml.TypeSpec{{ 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 // Create a new QML engine
gui.engine = qml.NewEngine() gui.engine = qml.NewEngine()
context := gui.engine.Context() context := gui.engine.Context()
...@@ -82,7 +81,6 @@ func (gui *Gui) Start(assetPath string) { ...@@ -82,7 +81,6 @@ func (gui *Gui) Start(assetPath string) {
// Expose the eth library and the ui library to QML // Expose the eth library and the ui library to QML
context.SetVar("gui", gui) context.SetVar("gui", gui)
context.SetVar("pub", gui.pub)
context.SetVar("eth", gui.uiLib) context.SetVar("eth", gui.uiLib)
// Load the main QML interface // Load the main QML interface
...@@ -231,7 +229,7 @@ func (gui *Gui) loadAddressBook() { ...@@ -231,7 +229,7 @@ func (gui *Gui) loadAddressBook() {
view := gui.getObjectByName("infoView") view := gui.getObjectByName("infoView")
view.Call("clearAddress") view.Call("clearAddress")
nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg() nameReg := gui.pipe.World().Config().Get("NameReg")
if nameReg != nil { if nameReg != nil {
nameReg.EachStorage(func(name string, value *ethutil.Value) { nameReg.EachStorage(func(name string, value *ethutil.Value) {
if name[0] != 0 { if name[0] != 0 {
...@@ -255,7 +253,7 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) { ...@@ -255,7 +253,7 @@ func (gui *Gui) insertTransaction(window string, tx *ethchain.Transaction) {
} }
var ( var (
ptx = ethpub.NewPTx(tx) ptx = ethpipe.NewJSTx(tx)
send = nameReg.Storage(tx.Sender()) send = nameReg.Storage(tx.Sender())
rec = nameReg.Storage(tx.Recipient) rec = nameReg.Storage(tx.Recipient)
s, r string s, r string
...@@ -301,8 +299,9 @@ func (gui *Gui) readPreviousTransactions() { ...@@ -301,8 +299,9 @@ func (gui *Gui) readPreviousTransactions() {
} }
func (gui *Gui) processBlock(block *ethchain.Block, initial bool) { func (gui *Gui) processBlock(block *ethchain.Block, initial bool) {
name := ethpub.FindNameInNameReg(gui.eth.StateManager(), block.Coinbase) //name := ethpub.FindNameInNameReg(gui.eth.StateManager(), block.Coinbase)
b := ethpub.NewPBlock(block) name := strings.Trim(gui.pipe.World().Config().Get("NameReg").Storage(block.Coinbase).Str(), "\x00")
b := ethpipe.NewJSBlock(block)
b.Name = name b.Name = name
gui.getObjectByName("chainView").Call("addBlock", b, initial) gui.getObjectByName("chainView").Call("addBlock", b, initial)
...@@ -391,12 +390,12 @@ func (gui *Gui) update() { ...@@ -391,12 +390,12 @@ func (gui *Gui) update() {
if bytes.Compare(tx.Sender(), gui.address()) == 0 { if bytes.Compare(tx.Sender(), gui.address()) == 0 {
object.SubAmount(tx.Value) 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()) gui.txDb.Put(tx.Hash(), tx.RlpEncode())
} else if bytes.Compare(tx.Recipient, gui.address()) == 0 { } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
object.AddAmount(tx.Value) 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()) gui.txDb.Put(tx.Hash(), tx.RlpEncode())
} }
...@@ -442,10 +441,9 @@ func (gui *Gui) update() { ...@@ -442,10 +441,9 @@ func (gui *Gui) update() {
reactor.Subscribe("miner:start", miningChan) reactor.Subscribe("miner:start", miningChan)
reactor.Subscribe("miner:stop", miningChan) reactor.Subscribe("miner:stop", miningChan)
nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg() nameReg := gui.pipe.World().Config().Get("NameReg")
if nameReg != nil { reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
}
reactor.Subscribe("peerList", peerChan) reactor.Subscribe("peerList", peerChan)
} }
...@@ -453,7 +451,7 @@ func (gui *Gui) setPeerInfo() { ...@@ -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("setPeers", fmt.Sprintf("%d / %d", gui.eth.PeerCount(), gui.eth.MaxPeers))
gui.win.Root().Call("resetPeers") gui.win.Root().Call("resetPeers")
for _, peer := range gui.pub.GetPeers() { for _, peer := range gui.pipe.GetPeers() {
gui.win.Root().Call("addPeer", peer) gui.win.Root().Call("addPeer", peer)
} }
} }
...@@ -466,18 +464,10 @@ func (gui *Gui) address() []byte { ...@@ -466,18 +464,10 @@ func (gui *Gui) address() []byte {
return gui.eth.KeyManager().Address() return gui.eth.KeyManager().Address()
} }
func (gui *Gui) RegisterName(name string) { func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (*ethpipe.JSReceipt, error) {
name = fmt.Sprintf("\"register\"\n\"%s\"", name) 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.pipe.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
return gui.pub.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
} }
func (gui *Gui) SetCustomIdentifier(customIdentifier string) { func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
......
...@@ -125,14 +125,6 @@ func (app *HtmlApplication) NewBlock(block *ethchain.Block) { ...@@ -125,14 +125,6 @@ func (app *HtmlApplication) NewBlock(block *ethchain.Block) {
app.webView.Call("onNewBlockCb", b) 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) { func (self *HtmlApplication) Messages(messages ethstate.Messages, id string) {
var msgs []javascript.JSMessage var msgs []javascript.JSMessage
for _, m := range messages { for _, m := range messages {
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"github.com/ethereum/eth-go" "github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethpipe"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/javascript" "github.com/ethereum/go-ethereum/javascript"
"github.com/go-qml/qml" "github.com/go-qml/qml"
...@@ -18,6 +19,7 @@ type memAddr struct { ...@@ -18,6 +19,7 @@ type memAddr struct {
// UI Library that has some basic functionality exposed // UI Library that has some basic functionality exposed
type UiLib struct { type UiLib struct {
*ethpipe.JSPipe
engine *qml.Engine engine *qml.Engine
eth *eth.Ethereum eth *eth.Ethereum
connected bool connected bool
...@@ -31,7 +33,7 @@ type UiLib struct { ...@@ -31,7 +33,7 @@ type UiLib struct {
} }
func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib { 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) { func (self *UiLib) ImportTx(rlpTx string) {
......
...@@ -128,37 +128,7 @@ func (self *JSEthereum) toVal(v interface{}) otto.Value { ...@@ -128,37 +128,7 @@ func (self *JSEthereum) toVal(v interface{}) otto.Value {
} }
func (self *JSEthereum) Messages(object map[string]interface{}) otto.Value { func (self *JSEthereum) Messages(object map[string]interface{}) otto.Value {
filter := ethchain.NewFilter(self.ethereum) filter := ethchain.NewFilterFromMap(object, 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))
}
messages := filter.Find() messages := filter.Find()
var msgs []JSMessage var msgs []JSMessage
......
...@@ -8,6 +8,7 @@ import ( ...@@ -8,6 +8,7 @@ import (
"os/signal" "os/signal"
"path" "path"
"path/filepath" "path/filepath"
"regexp"
"runtime" "runtime"
"time" "time"
...@@ -267,6 +268,19 @@ func StartMining(ethereum *eth.Ethereum) bool { ...@@ -267,6 +268,19 @@ func StartMining(ethereum *eth.Ethereum) bool {
return false 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 { func StopMining(ethereum *eth.Ethereum) bool {
if ethereum.Mining && miner != nil { if ethereum.Mining && miner != nil {
miner.Stop() miner.Stop()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment