Moving over to ethpipe
This commit is contained in:
parent
c362172567
commit
a6c4543c57
@ -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() {
|
|||||||
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 {
|
|||||||
text: "Address"
|
text: "Address"
|
||||||
}
|
}
|
||||||
TextField {
|
TextField {
|
||||||
text: pub.getKey().address
|
text: eth.getKey().address
|
||||||
width: 500
|
width: 500
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 {
|
|||||||
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 {
|
|||||||
|
|
||||||
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
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
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 (
|
|||||||
"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 {
|
|||||||
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() {
|
|||||||
// 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() {
|
|||||||
|
|
||||||
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:
|
|||||||
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 (
|
|||||||
"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 {
|
|||||||
|
|
||||||
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
|
|||||||
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) {
|
|||||||
|
|
||||||
// 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) {
|
|||||||
|
|
||||||
// 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() {
|
|||||||
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) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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() {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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 {
|
|||||||
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)
|
return gui.pipe.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
|
func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
|
||||||
|
@ -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 (
|
|||||||
|
|
||||||
"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 {
|
|||||||
|
|
||||||
// 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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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
|
||||||
|
14
utils/cmd.go
14
utils/cmd.go
@ -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 {
|
|||||||
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()
|
||||||
|
Loading…
Reference in New Issue
Block a user