aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelig <viktor.tron@gmail.com>2014-07-31 00:02:43 +0800
committerzelig <viktor.tron@gmail.com>2014-07-31 00:02:43 +0800
commit34e937c9761f963ac4d3c9781d72ae92e54c0761 (patch)
tree9a4c78944acd6ee924eb86916f32d508de0b66a6
parent2f5c95610feb77dd714bf9295d6127bef58f31bc (diff)
parent834803f1e8ce45040045359185c8b8d75f63de2c (diff)
downloadgo-tangerine-34e937c9761f963ac4d3c9781d72ae92e54c0761.tar.gz
go-tangerine-34e937c9761f963ac4d3c9781d72ae92e54c0761.tar.zst
go-tangerine-34e937c9761f963ac4d3c9781d72ae92e54c0761.zip
merge upstream
-rw-r--r--README.md6
-rw-r--r--ethereal/assets/qml/wallet.qml38
-rw-r--r--ethereal/debugger.go42
-rw-r--r--ethereal/ext_app.go9
-rw-r--r--ethereal/gui.go31
-rw-r--r--ethereal/html_container.go18
-rw-r--r--ethereal/main.go12
-rw-r--r--ethereal/qml_container.go7
-rw-r--r--ethereal/ui_lib.go4
-rw-r--r--ethereum/main.go5
-rw-r--r--ethereum/repl/javascript_runtime.go7
-rw-r--r--utils/vm_env.go33
12 files changed, 144 insertions, 68 deletions
diff --git a/README.md b/README.md
index 29dae7341..186c979bc 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,13 @@
Ethereum
========
-[![Build Status](https://travis-ci.org/ethereum/go-ethereum.png?branch=master)](https://travis-ci.org/ethereum/go-ethereum)
+Master [![Build
+Status](http://cpt-obvious.ethercasts.com:8010/buildstatusimage?builder=go-ethereum-master-docker)](http://cpt-obvious.ethercasts.com:8010/builders/go-ethereum-master-docker/builds/-1) Develop [![Build
+Status](http://cpt-obvious.ethercasts.com:8010/buildstatusimage?builder=go-ethereum-develop-docker)](http://cpt-obvious.ethercasts.com:8010/builders/go-ethereum-develop-docker/builds/-1)
Ethereum Go Client © 2014 Jeffrey Wilcke.
-Current state: Proof of Concept 0.5.17.
+Current state: Proof of Concept 0.6.0.
For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index a79e4708c..50ff73060 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -26,6 +26,22 @@ ApplicationWindow {
shortcut: "Ctrl+o"
onTriggered: openAppDialog.open()
}
+
+ MenuSeparator {}
+
+ MenuItem {
+ text: "Import key"
+ shortcut: "Ctrl+i"
+ onTriggered: importDialog.open()
+ }
+
+ MenuItem {
+ text: "Export keys"
+ shortcut: "Ctrl+e"
+ onTriggered: exportDialog.open()
+ }
+
+ //MenuSeparator {}
}
Menu {
@@ -249,6 +265,8 @@ ApplicationWindow {
}
TextField {
text: eth.getCustomIdentifier()
+ width: 500
+ placeholderText: "Anonymous"
onTextChanged: {
eth.setCustomIdentifier(text)
}
@@ -373,9 +391,7 @@ ApplicationWindow {
//ui.open(openAppDialog.fileUrl.toString())
//ui.openHtml(Qt.resolvedUrl(ui.assetPath("test.html")))
var path = openAppDialog.fileUrl.toString()
- console.log(path)
var ext = path.split('.').pop()
- console.log(ext)
if(ext == "html" || ext == "htm") {
ui.openHtml(path)
}else if(ext == "qml"){
@@ -384,6 +400,22 @@ ApplicationWindow {
}
}
+ FileDialog {
+ id: exportDialog
+ title: "Export keys"
+ onAccepted: {
+ }
+ }
+
+ FileDialog {
+ id: importDialog
+ title: "Import key"
+ onAccepted: {
+ var path = this.fileUrl.toString()
+ ui.importKey(path)
+ }
+ }
+
statusBar: StatusBar {
height: 30
RowLayout {
@@ -658,7 +690,7 @@ ApplicationWindow {
anchors.left: aboutIcon.right
anchors.leftMargin: 10
font.pointSize: 12
- text: "<h2>Ethereal</h2><br><h3>Development</h3>Jeffrey Wilcke<br>Maran Hidskes<br>Viktor Trón<br>"
+ text: "<h2>Ethereal - Adrastea</h2><br><h3>Development</h3>Jeffrey Wilcke<br>Maran Hidskes<br>Viktor Trón<br>"
}
}
diff --git a/ethereal/debugger.go b/ethereal/debugger.go
index 17087f8ce..1cf5e0b66 100644
--- a/ethereal/debugger.go
+++ b/ethereal/debugger.go
@@ -2,12 +2,16 @@ package main
import (
"fmt"
- "github.com/ethereum/eth-go/ethchain"
- "github.com/ethereum/eth-go/ethutil"
- "github.com/go-qml/qml"
"math/big"
"strconv"
"strings"
+
+ "github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethstate"
+ "github.com/ethereum/eth-go/ethutil"
+ "github.com/ethereum/eth-go/ethvm"
+ "github.com/ethereum/go-ethereum/utils"
+ "github.com/go-qml/qml"
)
type DebuggerWindow struct {
@@ -15,10 +19,10 @@ type DebuggerWindow struct {
engine *qml.Engine
lib *UiLib
- vm *ethchain.Vm
+ vm *ethvm.Vm
Db *Debugger
- state *ethchain.State
+ state *ethstate.State
}
func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
@@ -32,7 +36,7 @@ func NewDebuggerWindow(lib *UiLib) *DebuggerWindow {
win := component.CreateWindow(nil)
- w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: &ethchain.Vm{}}
+ w := &DebuggerWindow{engine: engine, win: win, lib: lib, vm: &ethvm.Vm{}}
w.Db = NewDebugger(w)
return w
@@ -130,22 +134,16 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
state := self.lib.eth.StateManager().TransState()
account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
- contract := ethchain.NewStateObject([]byte{0})
- contract.Amount = value
+ contract := ethstate.NewStateObject([]byte{0})
+ contract.Balance = value
- callerClosure := ethchain.NewClosure(account, contract, script, state, gas, gasPrice)
+ self.SetAsm(script)
block := self.lib.eth.BlockChain().CurrentBlock
- vm := ethchain.NewVm(state, self.lib.eth.StateManager(), ethchain.RuntimeVars{
- Block: block,
- Origin: account.Address(),
- BlockNumber: block.Number,
- PrevHash: block.PrevHash,
- Coinbase: block.Coinbase,
- Time: block.Time,
- Diff: block.Difficulty,
- Value: ethutil.Big(valueStr),
- })
+
+ callerClosure := ethvm.NewClosure(account, contract, script, gas, gasPrice)
+ env := utils.NewEnv(state, block, account.Address(), value)
+ vm := ethvm.New(env)
vm.Verbose = true
vm.Dbg = self.Db
@@ -255,13 +253,13 @@ type storeVal struct {
Key, Value string
}
-func (self *Debugger) BreakHook(pc int, op ethchain.OpCode, mem *ethchain.Memory, stack *ethchain.Stack, stateObject *ethchain.StateObject) bool {
+func (self *Debugger) BreakHook(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
self.main.Logln("break on instr:", pc)
return self.halting(pc, op, mem, stack, stateObject)
}
-func (self *Debugger) StepHook(pc int, op ethchain.OpCode, mem *ethchain.Memory, stack *ethchain.Stack, stateObject *ethchain.StateObject) bool {
+func (self *Debugger) StepHook(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
return self.halting(pc, op, mem, stack, stateObject)
}
@@ -273,7 +271,7 @@ func (self *Debugger) BreakPoints() []int64 {
return self.breakPoints
}
-func (d *Debugger) halting(pc int, op ethchain.OpCode, mem *ethchain.Memory, stack *ethchain.Stack, stateObject *ethchain.StateObject) bool {
+func (d *Debugger) halting(pc int, op ethvm.OpCode, mem *ethvm.Memory, stack *ethvm.Stack, stateObject *ethstate.StateObject) bool {
d.win.Root().Call("setInstruction", pc)
d.win.Root().Call("clearMem")
d.win.Root().Call("clearStack")
diff --git a/ethereal/ext_app.go b/ethereal/ext_app.go
index ac745ae37..697630504 100644
--- a/ethereal/ext_app.go
+++ b/ethereal/ext_app.go
@@ -4,6 +4,7 @@ import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethreact"
+ "github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/eth-go/ethutil"
"github.com/go-qml/qml"
)
@@ -16,8 +17,8 @@ type AppContainer interface {
Engine() *qml.Engine
NewBlock(*ethchain.Block)
- ObjectChanged(*ethchain.StateObject)
- StorageChanged(*ethchain.StorageState)
+ ObjectChanged(*ethstate.StateObject)
+ StorageChanged(*ethstate.StorageState)
NewWatcher(chan bool)
}
@@ -107,9 +108,9 @@ out:
app.container.NewBlock(block)
}
case object := <-app.changeChan:
- if stateObject, ok := object.Resource.(*ethchain.StateObject); ok {
+ if stateObject, ok := object.Resource.(*ethstate.StateObject); ok {
app.container.ObjectChanged(stateObject)
- } else if storageObject, ok := object.Resource.(*ethchain.StorageState); ok {
+ } else if storageObject, ok := object.Resource.(*ethstate.StorageState); ok {
app.container.StorageChanged(storageObject)
}
}
diff --git a/ethereal/gui.go b/ethereal/gui.go
index 9bc11e81e..61f7b1099 100644
--- a/ethereal/gui.go
+++ b/ethereal/gui.go
@@ -3,6 +3,11 @@ package main
import (
"bytes"
"fmt"
+ "math/big"
+ "strconv"
+ "strings"
+ "time"
+
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethdb"
@@ -14,10 +19,6 @@ import (
"github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml"
- "math/big"
- "strconv"
- "strings"
- "time"
)
var logger = ethlog.NewLogger("GUI")
@@ -144,16 +145,21 @@ func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) {
win := gui.createWindow(component)
- gui.setInitialBlockChain()
- gui.loadAddressBook()
- gui.readPreviousTransactions()
- gui.setPeerInfo()
+ go func() {
+ go gui.setInitialBlockChain()
+ gui.loadAddressBook()
+ gui.setPeerInfo()
+ gui.readPreviousTransactions()
+ }()
gui.update()
return win, nil
}
+func (gui *Gui) ImportKey(filePath string) {
+}
+
func (gui *Gui) showKeyImport(context *qml.Context) (*qml.Window, error) {
context.SetVar("lib", gui)
component, err := gui.engine.LoadFile(gui.uiLib.AssetPath("qml/first_run.qml"))
@@ -295,7 +301,7 @@ func (gui *Gui) update() {
state := gui.eth.StateManager().TransState()
unconfirmedFunds := new(big.Int)
- gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Amount)))
+ gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Balance)))
gui.getObjectByName("syncProgressIndicator").Set("visible", !gui.eth.IsUpToDate())
lastBlockLabel := gui.getObjectByName("lastBlockLabel")
@@ -307,9 +313,8 @@ func (gui *Gui) update() {
block := b.Resource.(*ethchain.Block)
gui.processBlock(block, false)
if bytes.Compare(block.Coinbase, gui.address()) == 0 {
- gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Amount, nil)
+ gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance, nil)
}
-
case txMsg := <-txChan:
tx := txMsg.Resource.(*ethchain.Transaction)
@@ -328,7 +333,7 @@ func (gui *Gui) update() {
unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
}
- gui.setWalletValue(object.Amount, unconfirmedFunds)
+ gui.setWalletValue(object.Balance, unconfirmedFunds)
} else {
object := state.GetAccount(gui.address())
if bytes.Compare(tx.Sender(), gui.address()) == 0 {
@@ -337,7 +342,7 @@ func (gui *Gui) update() {
object.AddAmount(tx.Value)
}
- gui.setWalletValue(object.Amount, nil)
+ gui.setWalletValue(object.Balance, nil)
state.UpdateStateObject(object)
}
diff --git a/ethereal/html_container.go b/ethereal/html_container.go
index 04136f801..40a9f5584 100644
--- a/ethereal/html_container.go
+++ b/ethereal/html_container.go
@@ -2,16 +2,18 @@ package main
import (
"errors"
- "github.com/ethereum/eth-go/ethchain"
- "github.com/ethereum/eth-go/ethpub"
- "github.com/ethereum/eth-go/ethutil"
- "github.com/go-qml/qml"
- "github.com/howeyc/fsnotify"
"io/ioutil"
"net/url"
"os"
"path"
"path/filepath"
+
+ "github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethpub"
+ "github.com/ethereum/eth-go/ethstate"
+ "github.com/ethereum/eth-go/ethutil"
+ "github.com/go-qml/qml"
+ "github.com/howeyc/fsnotify"
)
type HtmlApplication struct {
@@ -40,7 +42,7 @@ func (app *HtmlApplication) Create() error {
return errors.New("Ethereum package not yet supported")
// TODO
- ethutil.OpenPackage(app.path)
+ //ethutil.OpenPackage(app.path)
}
win := component.CreateWindow(nil)
@@ -121,11 +123,11 @@ func (app *HtmlApplication) NewBlock(block *ethchain.Block) {
app.webView.Call("onNewBlockCb", b)
}
-func (app *HtmlApplication) ObjectChanged(stateObject *ethchain.StateObject) {
+func (app *HtmlApplication) ObjectChanged(stateObject *ethstate.StateObject) {
app.webView.Call("onObjectChangeCb", ethpub.NewPStateObject(stateObject))
}
-func (app *HtmlApplication) StorageChanged(storageObject *ethchain.StorageState) {
+func (app *HtmlApplication) StorageChanged(storageObject *ethstate.StorageState) {
app.webView.Call("onStorageChangeCb", ethpub.NewPStorageState(storageObject))
}
diff --git a/ethereal/main.go b/ethereal/main.go
index e1cd43ace..04a04536d 100644
--- a/ethereal/main.go
+++ b/ethereal/main.go
@@ -1,24 +1,24 @@
package main
import (
+ "os"
+ "runtime"
+
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml"
- "os"
- "runtime"
)
const (
ClientIdentifier = "Ethereal"
- Version = "0.5.17"
+ Version = "0.6.1"
)
func main() {
- // Leave QT on top at ALL times. Qt Needs to be initialized from the main thread
- qml.Init(nil)
-
runtime.GOMAXPROCS(runtime.NumCPU())
+ qml.Init(nil)
+
var interrupted = false
utils.RegisterInterrupt(func(os.Signal) {
interrupted = true
diff --git a/ethereal/qml_container.go b/ethereal/qml_container.go
index cb43a99bd..53ff13c2f 100644
--- a/ethereal/qml_container.go
+++ b/ethereal/qml_container.go
@@ -3,6 +3,7 @@ package main
import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethpub"
+ "github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/eth-go/ethutil"
"github.com/go-qml/qml"
"runtime"
@@ -24,7 +25,7 @@ func (app *QmlApplication) Create() error {
path := string(app.path)
// For some reason for windows we get /c:/path/to/something, windows doesn't like the first slash but is fine with the others so we are removing it
- if string(app.path[0]) == "/" && runtime.GOOS == "windows" {
+ if app.path[0] == '/' && runtime.GOOS == "windows" {
path = app.path[1:]
}
@@ -50,11 +51,11 @@ func (app *QmlApplication) NewBlock(block *ethchain.Block) {
app.win.Call("onNewBlockCb", pblock)
}
-func (app *QmlApplication) ObjectChanged(stateObject *ethchain.StateObject) {
+func (app *QmlApplication) ObjectChanged(stateObject *ethstate.StateObject) {
app.win.Call("onObjectChangeCb", ethpub.NewPStateObject(stateObject))
}
-func (app *QmlApplication) StorageChanged(storageObject *ethchain.StorageState) {
+func (app *QmlApplication) StorageChanged(storageObject *ethstate.StorageState) {
app.win.Call("onStorageChangeCb", ethpub.NewPStorageState(storageObject))
}
diff --git a/ethereal/ui_lib.go b/ethereal/ui_lib.go
index 997a3391a..6a62fa1df 100644
--- a/ethereal/ui_lib.go
+++ b/ethereal/ui_lib.go
@@ -78,8 +78,8 @@ func (ui *UiLib) AssetPath(p string) string {
func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
dbWindow := NewDebuggerWindow(self)
object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.Hex2Bytes(contractHash))
- if len(object.Script()) > 0 {
- dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Script()))
+ if len(object.Code) > 0 {
+ dbWindow.SetCode("0x" + ethutil.Bytes2Hex(object.Code))
}
dbWindow.SetData("0x" + data)
diff --git a/ethereum/main.go b/ethereum/main.go
index b670cb495..9ece8133d 100644
--- a/ethereum/main.go
+++ b/ethereum/main.go
@@ -1,15 +1,16 @@
package main
import (
+ "runtime"
+
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
- "runtime"
)
const (
ClientIdentifier = "Ethereum(G)"
- Version = "0.5.17"
+ Version = "0.6.1"
)
var logger = ethlog.NewLogger("CLI")
diff --git a/ethereum/repl/javascript_runtime.go b/ethereum/repl/javascript_runtime.go
index 091e758e1..f5aea2dd9 100644
--- a/ethereum/repl/javascript_runtime.go
+++ b/ethereum/repl/javascript_runtime.go
@@ -7,6 +7,7 @@ import (
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethreact"
+ "github.com/ethereum/eth-go/ethstate"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
"github.com/obscuren/otto"
@@ -67,7 +68,7 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE {
// Subscribe to events
reactor := ethereum.Reactor()
- reactor.Subscribe("newBlock", self.blockChan)
+ reactor.Subscribe("newBlock", re.blockChan)
re.Bind("eth", &JSEthereum{re.lib, re.vm})
@@ -122,12 +123,12 @@ out:
if _, ok := block.Resource.(*ethchain.Block); ok {
}
case object := <-self.changeChan:
- if stateObject, ok := object.Resource.(*ethchain.StateObject); ok {
+ if stateObject, ok := object.Resource.(*ethstate.StateObject); ok {
for _, cb := range self.objectCb[ethutil.Bytes2Hex(stateObject.Address())] {
val, _ := self.vm.ToValue(ethpub.NewPStateObject(stateObject))
cb.Call(cb, val)
}
- } else if storageObject, ok := object.Resource.(*ethchain.StorageState); ok {
+ } else if storageObject, ok := object.Resource.(*ethstate.StorageState); ok {
for _, cb := range self.objectCb[ethutil.Bytes2Hex(storageObject.StateAddress)+ethutil.Bytes2Hex(storageObject.Address)] {
val, _ := self.vm.ToValue(ethpub.NewPStorageState(storageObject))
cb.Call(cb, val)
diff --git a/utils/vm_env.go b/utils/vm_env.go
new file mode 100644
index 000000000..2c40dd7b8
--- /dev/null
+++ b/utils/vm_env.go
@@ -0,0 +1,33 @@
+package utils
+
+import (
+ "github.com/ethereum/eth-go/ethchain"
+ "github.com/ethereum/eth-go/ethstate"
+ "math/big"
+)
+
+type VMEnv struct {
+ state *ethstate.State
+ block *ethchain.Block
+
+ transactor []byte
+ value *big.Int
+}
+
+func NewEnv(state *ethstate.State, block *ethchain.Block, transactor []byte, value *big.Int) *VMEnv {
+ return &VMEnv{
+ state: state,
+ block: block,
+ transactor: transactor,
+ value: value,
+ }
+}
+
+func (self *VMEnv) Origin() []byte { return self.transactor }
+func (self *VMEnv) BlockNumber() *big.Int { return self.block.Number }
+func (self *VMEnv) PrevHash() []byte { return self.block.PrevHash }
+func (self *VMEnv) Coinbase() []byte { return self.block.Coinbase }
+func (self *VMEnv) Time() int64 { return self.block.Time }
+func (self *VMEnv) Difficulty() *big.Int { return self.block.Difficulty }
+func (self *VMEnv) Value() *big.Int { return self.value }
+func (self *VMEnv) State() *ethstate.State { return self.state }