diff options
author | obscuren <geffobscura@gmail.com> | 2014-05-15 03:34:21 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-05-15 03:34:21 +0800 |
commit | 942f552c620471602326c1ded54095c1cf41ed76 (patch) | |
tree | cbc1f21a967bb522afad6c891afb4c4628f16ab4 /ethereal | |
parent | 809b4ae0f68da7a6904208662dc316cd669184fe (diff) | |
parent | a73ae8727d38391c6975a9fa149043e6c69a2f30 (diff) | |
download | go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar.gz go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar.bz2 go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar.lz go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar.xz go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.tar.zst go-tangerine-942f552c620471602326c1ded54095c1cf41ed76.zip |
Merge branch 'release/poc5-rc6'poc5-rc6
Diffstat (limited to 'ethereal')
-rw-r--r-- | ethereal/assets/muted/index.html | 1 | ||||
-rw-r--r-- | ethereal/assets/qml/newTransaction/_new_contract.qml | 6 | ||||
-rw-r--r-- | ethereal/assets/qml/newTransaction/_simple_send.qml | 3 | ||||
-rw-r--r-- | ethereal/assets/samplecoin/samplecoin.html | 4 | ||||
-rw-r--r-- | ethereal/ethereum.go | 28 | ||||
-rw-r--r-- | ethereal/ui/gui.go | 91 | ||||
-rw-r--r-- | ethereal/ui/library.go | 13 | ||||
-rw-r--r-- | ethereal/ui/ui_lib.go | 2 |
8 files changed, 70 insertions, 78 deletions
diff --git a/ethereal/assets/muted/index.html b/ethereal/assets/muted/index.html index 84584e373..14949b5ac 100644 --- a/ethereal/assets/muted/index.html +++ b/ethereal/assets/muted/index.html @@ -46,6 +46,7 @@ .CodeMirror { height: 70%; + font-size: 14pt; } </style> </head> diff --git a/ethereal/assets/qml/newTransaction/_new_contract.qml b/ethereal/assets/qml/newTransaction/_new_contract.qml index f8f3d53a0..e3c7229eb 100644 --- a/ethereal/assets/qml/newTransaction/_new_contract.qml +++ b/ethereal/assets/qml/newTransaction/_new_contract.qml @@ -61,7 +61,7 @@ Component { id: txValue width: 200 placeholderText: "Amount" - validator: IntValidator { } + validator: RegExpValidator { regExp: /\d*/ } onTextChanged: { contractFormReady() } @@ -69,7 +69,7 @@ Component { TextField { id: txGas width: 200 - validator: IntValidator { } + validator: RegExpValidator { regExp: /\d*/ } placeholderText: "Gas" onTextChanged: { contractFormReady() @@ -79,7 +79,7 @@ Component { id: txGasPrice width: 200 placeholderText: "Gas price" - validator: IntValidator { } + validator: RegExpValidator { regExp: /\d*/ } onTextChanged: { contractFormReady() } diff --git a/ethereal/assets/qml/newTransaction/_simple_send.qml b/ethereal/assets/qml/newTransaction/_simple_send.qml index 12420c15a..cd1ef55b6 100644 --- a/ethereal/assets/qml/newTransaction/_simple_send.qml +++ b/ethereal/assets/qml/newTransaction/_simple_send.qml @@ -56,9 +56,10 @@ Component { } TextField { id: txSimpleValue + width: 200 placeholderText: "Amount" anchors.rightMargin: 5 - validator: IntValidator { } + validator: RegExpValidator { regExp: /\d*/ } onTextChanged: { checkFormState() } } Button { diff --git a/ethereal/assets/samplecoin/samplecoin.html b/ethereal/assets/samplecoin/samplecoin.html index 384936780..3f8eacc00 100644 --- a/ethereal/assets/samplecoin/samplecoin.html +++ b/ethereal/assets/samplecoin/samplecoin.html @@ -9,7 +9,7 @@ <script type="text/javascript"> -var jefcoinAddr = "b7cb72c47ec4f31751d0d628b5a33fd6671bbba0" +var jefcoinAddr = "681fd48ffa236549fbcd16bdf9f98bb541a7f742" var mAddr = "" function createTransaction() { @@ -23,8 +23,6 @@ function createTransaction() { } function init() { - eth.set({width: 500}); - eth.getKey(function(sec) { mAddr = sec; eth.getSecretToAddress(sec, function(addr) { diff --git a/ethereal/ethereum.go b/ethereal/ethereum.go index 15a454bdf..98fab18e3 100644 --- a/ethereal/ethereum.go +++ b/ethereal/ethereum.go @@ -4,8 +4,6 @@ import ( "fmt" "github.com/ethereum/eth-go" "github.com/ethereum/eth-go/ethchain" - "github.com/ethereum/eth-go/ethpub" - "github.com/ethereum/eth-go/ethrpc" "github.com/ethereum/eth-go/ethutil" "github.com/ethereum/go-ethereum/ethereal/ui" "github.com/ethereum/go-ethereum/utils" @@ -89,8 +87,19 @@ func main() { } if ExportKey { - key := ethutil.Config.Db.GetKeys()[0] - fmt.Printf("%x\n", key.PrivateKey) + keyPair := ethutil.GetKeyRing().Get(0) + fmt.Printf(` +Generating new address and keypair. +Please keep your keys somewhere save. + +++++++++++++++++ KeyRing +++++++++++++++++++ +addr: %x +prvk: %x +pubk: %x +++++++++++++++++++++++++++++++++++++++++++++ +save these words so you can restore your account later: %s +`, keyPair.Address(), keyPair.PrivateKey, keyPair.PublicKey) + os.Exit(0) } @@ -99,13 +108,12 @@ func main() { os.Exit(0) } + if StartMining { + utils.DoMining(ethereum) + } + if StartRpc { - ethereum.RpcServer, err = ethrpc.NewJsonRpcServer(ethpub.NewPEthereum(ethereum), RpcPort) - if err != nil { - log.Println("Could not start RPC interface:", err) - } else { - go ethereum.RpcServer.Start() - } + utils.DoRpc(ethereum, RpcPort) } log.Printf("Starting Ethereum GUI v%s\n", ethutil.Config.Ver) diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 7f84272d6..aa0364998 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -42,15 +42,11 @@ func New(ethereum *eth.Ethereum) *Gui { panic(err) } - data, _ := ethutil.Config.Db.Get([]byte("KeyRing")) // On first run we won't have any keys yet, so this would crash. // Therefor we check if we are ready to actually start this process var addr []byte - if len(data) > 0 { - key := ethutil.Config.Db.GetKeys()[0] - addr = key.Address() - - //ethereum.StateManager().WatchAddr(addr) + if ethutil.GetKeyRing().Len() != 0 { + addr = ethutil.GetKeyRing().Get(0).Address() } pub := ethpub.NewPEthereum(ethereum) @@ -59,6 +55,8 @@ func New(ethereum *eth.Ethereum) *Gui { } func (gui *Gui) Start(assetPath string) { + const version = "0.5.0 RC6" + defer gui.txDb.Close() // Register ethereum functions @@ -68,7 +66,7 @@ func (gui *Gui) Start(assetPath string) { Init: func(p *ethpub.PTx, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" }, }}) - ethutil.Config.SetClientString(fmt.Sprintf("/Ethereal v%s", "0.5.0 RC4")) + ethutil.Config.SetClientString(fmt.Sprintf("/Ethereal v%s", version)) ethutil.Config.Log.Infoln("[GUI] Starting GUI") // Create a new QML engine gui.engine = qml.NewEngine() @@ -81,43 +79,6 @@ func (gui *Gui) Start(assetPath string) { // Load the main QML interface data, _ := ethutil.Config.Db.Get([]byte("KeyRing")) - /* - var err error - var component qml.Object - firstRun := len(data) == 0 - - if firstRun { - component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/first_run.qml")) - } else { - component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/wallet.qml")) - } - if err != nil { - ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'") - - panic(err) - } - - gui.win = component.CreateWindow(nil) - uiLib.win = gui.win - db := &Debugger{gui.win, make(chan bool)} - gui.lib.Db = db - uiLib.Db = db - - // Add the ui as a log system so we can log directly to the UGI - ethutil.Config.Log.AddLogSystem(gui) - - // Loads previous blocks - if firstRun == false { - go gui.setInitialBlockChain() - go gui.readPreviousTransactions() - go gui.update() - } - - gui.win.Show() - gui.win.Wait() - - gui.eth.Stop() - */ var win *qml.Window var err error @@ -199,8 +160,29 @@ func (gui *Gui) processBlock(block *ethchain.Block) { gui.win.Root().Call("addBlock", ethpub.NewPBlock(block)) } +func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) { + var str string + if unconfirmedFunds != nil { + pos := "+" + if unconfirmedFunds.Cmp(big.NewInt(0)) >= 0 { + pos = "-" + } + val := ethutil.CurrencyToString(new(big.Int).Abs(ethutil.BigCopy(unconfirmedFunds))) + str = fmt.Sprintf("%v (%s %v)", ethutil.CurrencyToString(amount), pos, val) + } else { + str = fmt.Sprintf("%v", ethutil.CurrencyToString(amount)) + } + + gui.win.Root().Call("setWalletValue", str) +} + // Simple go routine function that updates the list of peers in the GUI func (gui *Gui) update() { + blockChan := make(chan ethutil.React, 1) + reactor := gui.eth.Reactor() + + reactor.Subscribe("newBlock", blockChan) + txChan := make(chan ethchain.TxMsg, 1) gui.eth.TxPool().Subscribe(txChan) @@ -211,6 +193,12 @@ func (gui *Gui) update() { for { select { + case b := <-blockChan: + block := b.Resource.(*ethchain.Block) + if bytes.Compare(block.Coinbase, gui.addr) == 0 { + gui.setWalletValue(gui.eth.StateManager().ProcState().GetAccount(gui.addr).Amount, nil) + } + case txMsg := <-txChan: tx := txMsg.Tx @@ -232,14 +220,7 @@ func (gui *Gui) update() { unconfirmedFunds.Add(unconfirmedFunds, tx.Value) } - pos := "+" - if unconfirmedFunds.Cmp(big.NewInt(0)) >= 0 { - pos = "-" - } - val := ethutil.CurrencyToString(new(big.Int).Abs(ethutil.BigCopy(unconfirmedFunds))) - str := fmt.Sprintf("%v (%s %v)", ethutil.CurrencyToString(object.Amount), pos, val) - - gui.win.Root().Call("setWalletValue", str) + gui.setWalletValue(object.Amount, unconfirmedFunds) } else { object := state.GetAccount(gui.addr) if bytes.Compare(tx.Sender(), gui.addr) == 0 { @@ -248,7 +229,7 @@ func (gui *Gui) update() { object.AddAmount(tx.Value) } - gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(object.Amount))) + gui.setWalletValue(object.Amount, nil) state.SetStateObject(object) } @@ -274,13 +255,13 @@ func (gui *Gui) Printf(format string, v ...interface{}) { } func (gui *Gui) Transact(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) { - keyPair := ethutil.Config.Db.GetKeys()[0] + keyPair := ethutil.GetKeyRing().Get(0) return gui.pub.Transact(ethutil.Hex(keyPair.PrivateKey), recipient, value, gas, gasPrice, data) } func (gui *Gui) Create(recipient, value, gas, gasPrice, data string) (*ethpub.PReceipt, error) { - keyPair := ethutil.Config.Db.GetKeys()[0] + keyPair := ethutil.GetKeyRing().Get(0) mainInput, initInput := mutan.PreParse(data) diff --git a/ethereal/ui/library.go b/ethereal/ui/library.go index c889efb45..267108195 100644 --- a/ethereal/ui/library.go +++ b/ethereal/ui/library.go @@ -34,10 +34,13 @@ func (lib *EthLib) ImportAndSetPrivKey(privKey string) bool { } func (lib *EthLib) CreateAndSetPrivKey() (string, string, string, string) { - pub, prv := secp256k1.GenerateKeyPair() - pair := ðutil.Key{PrivateKey: prv, PublicKey: pub} - ethutil.Config.Db.Put([]byte("KeyRing"), pair.RlpEncode()) - mne := ethutil.MnemonicEncode(ethutil.Hex(prv)) + _, prv := secp256k1.GenerateKeyPair() + keyPair, err := ethutil.GetKeyRing().NewKeyPair(prv) + if err != nil { + panic(err) + } + + mne := ethutil.MnemonicEncode(ethutil.Hex(keyPair.PrivateKey)) mnemonicString := strings.Join(mne, " ") - return mnemonicString, fmt.Sprintf("%x", pair.Address()), fmt.Sprintf("%x", prv), fmt.Sprintf("%x", pub) + return mnemonicString, fmt.Sprintf("%x", keyPair.Address()), ethutil.Hex(keyPair.PrivateKey), ethutil.Hex(keyPair.PublicKey) } diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go index 6736e79ae..0c43f1675 100644 --- a/ethereal/ui/ui_lib.go +++ b/ethereal/ui/ui_lib.go @@ -138,7 +138,7 @@ func (ui *UiLib) DebugTx(recipient, valueStr, gasStr, gasPriceStr, data string) callerTx := ethchain.NewContractCreationTx(ethutil.Big(valueStr), ethutil.Big(gasStr), ethutil.Big(gasPriceStr), callerScript, nil) // Contract addr as test address - keyPair := ethutil.Config.Db.GetKeys()[0] + keyPair := ethutil.GetKeyRing().Get(0) account := ui.eth.StateManager().TransState().GetStateObject(keyPair.Address()) c := ethchain.MakeContract(callerTx, state) callerClosure := ethchain.NewClosure(account, c, c.Script(), state, ethutil.Big(gasStr), ethutil.Big(gasPriceStr)) |