forked from cerc-io/plugeth
Merge branch 'release/poc5-rc6'
This commit is contained in:
commit
942f552c62
@ -5,7 +5,7 @@ Ethereum
|
|||||||
|
|
||||||
Ethereum Go Client © 2014 Jeffrey Wilcke.
|
Ethereum Go Client © 2014 Jeffrey Wilcke.
|
||||||
|
|
||||||
Current state: Proof of Concept 5.0 RC3.
|
Current state: Proof of Concept 5.0 RC6.
|
||||||
|
|
||||||
For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
|
For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
|
|
||||||
.CodeMirror {
|
.CodeMirror {
|
||||||
height: 70%;
|
height: 70%;
|
||||||
|
font-size: 14pt;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
@ -61,7 +61,7 @@ Component {
|
|||||||
id: txValue
|
id: txValue
|
||||||
width: 200
|
width: 200
|
||||||
placeholderText: "Amount"
|
placeholderText: "Amount"
|
||||||
validator: IntValidator { }
|
validator: RegExpValidator { regExp: /\d*/ }
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
contractFormReady()
|
contractFormReady()
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ Component {
|
|||||||
TextField {
|
TextField {
|
||||||
id: txGas
|
id: txGas
|
||||||
width: 200
|
width: 200
|
||||||
validator: IntValidator { }
|
validator: RegExpValidator { regExp: /\d*/ }
|
||||||
placeholderText: "Gas"
|
placeholderText: "Gas"
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
contractFormReady()
|
contractFormReady()
|
||||||
@ -79,7 +79,7 @@ Component {
|
|||||||
id: txGasPrice
|
id: txGasPrice
|
||||||
width: 200
|
width: 200
|
||||||
placeholderText: "Gas price"
|
placeholderText: "Gas price"
|
||||||
validator: IntValidator { }
|
validator: RegExpValidator { regExp: /\d*/ }
|
||||||
onTextChanged: {
|
onTextChanged: {
|
||||||
contractFormReady()
|
contractFormReady()
|
||||||
}
|
}
|
||||||
|
@ -56,9 +56,10 @@ Component {
|
|||||||
}
|
}
|
||||||
TextField {
|
TextField {
|
||||||
id: txSimpleValue
|
id: txSimpleValue
|
||||||
|
width: 200
|
||||||
placeholderText: "Amount"
|
placeholderText: "Amount"
|
||||||
anchors.rightMargin: 5
|
anchors.rightMargin: 5
|
||||||
validator: IntValidator { }
|
validator: RegExpValidator { regExp: /\d*/ }
|
||||||
onTextChanged: { checkFormState() }
|
onTextChanged: { checkFormState() }
|
||||||
}
|
}
|
||||||
Button {
|
Button {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
var jefcoinAddr = "b7cb72c47ec4f31751d0d628b5a33fd6671bbba0"
|
var jefcoinAddr = "681fd48ffa236549fbcd16bdf9f98bb541a7f742"
|
||||||
var mAddr = ""
|
var mAddr = ""
|
||||||
|
|
||||||
function createTransaction() {
|
function createTransaction() {
|
||||||
@ -23,8 +23,6 @@ function createTransaction() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
eth.set({width: 500});
|
|
||||||
|
|
||||||
eth.getKey(function(sec) {
|
eth.getKey(function(sec) {
|
||||||
mAddr = sec;
|
mAddr = sec;
|
||||||
eth.getSecretToAddress(sec, function(addr) {
|
eth.getSecretToAddress(sec, function(addr) {
|
||||||
|
@ -4,8 +4,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"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/ethpub"
|
|
||||||
"github.com/ethereum/eth-go/ethrpc"
|
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/go-ethereum/ethereal/ui"
|
"github.com/ethereum/go-ethereum/ethereal/ui"
|
||||||
"github.com/ethereum/go-ethereum/utils"
|
"github.com/ethereum/go-ethereum/utils"
|
||||||
@ -89,8 +87,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ExportKey {
|
if ExportKey {
|
||||||
key := ethutil.Config.Db.GetKeys()[0]
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
fmt.Printf("%x\n", key.PrivateKey)
|
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)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,13 +108,12 @@ func main() {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if StartMining {
|
||||||
|
utils.DoMining(ethereum)
|
||||||
|
}
|
||||||
|
|
||||||
if StartRpc {
|
if StartRpc {
|
||||||
ethereum.RpcServer, err = ethrpc.NewJsonRpcServer(ethpub.NewPEthereum(ethereum), RpcPort)
|
utils.DoRpc(ethereum, RpcPort)
|
||||||
if err != nil {
|
|
||||||
log.Println("Could not start RPC interface:", err)
|
|
||||||
} else {
|
|
||||||
go ethereum.RpcServer.Start()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("Starting Ethereum GUI v%s\n", ethutil.Config.Ver)
|
log.Printf("Starting Ethereum GUI v%s\n", ethutil.Config.Ver)
|
||||||
|
@ -42,15 +42,11 @@ func New(ethereum *eth.Ethereum) *Gui {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
|
|
||||||
// On first run we won't have any keys yet, so this would crash.
|
// 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
|
// Therefor we check if we are ready to actually start this process
|
||||||
var addr []byte
|
var addr []byte
|
||||||
if len(data) > 0 {
|
if ethutil.GetKeyRing().Len() != 0 {
|
||||||
key := ethutil.Config.Db.GetKeys()[0]
|
addr = ethutil.GetKeyRing().Get(0).Address()
|
||||||
addr = key.Address()
|
|
||||||
|
|
||||||
//ethereum.StateManager().WatchAddr(addr)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub := ethpub.NewPEthereum(ethereum)
|
pub := ethpub.NewPEthereum(ethereum)
|
||||||
@ -59,6 +55,8 @@ func New(ethereum *eth.Ethereum) *Gui {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) Start(assetPath string) {
|
func (gui *Gui) Start(assetPath string) {
|
||||||
|
const version = "0.5.0 RC6"
|
||||||
|
|
||||||
defer gui.txDb.Close()
|
defer gui.txDb.Close()
|
||||||
|
|
||||||
// Register ethereum functions
|
// 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 = "" },
|
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")
|
ethutil.Config.Log.Infoln("[GUI] Starting GUI")
|
||||||
// Create a new QML engine
|
// Create a new QML engine
|
||||||
gui.engine = qml.NewEngine()
|
gui.engine = qml.NewEngine()
|
||||||
@ -81,43 +79,6 @@ func (gui *Gui) Start(assetPath string) {
|
|||||||
|
|
||||||
// Load the main QML interface
|
// Load the main QML interface
|
||||||
data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
|
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 win *qml.Window
|
||||||
var err error
|
var err error
|
||||||
@ -199,8 +160,29 @@ func (gui *Gui) processBlock(block *ethchain.Block) {
|
|||||||
gui.win.Root().Call("addBlock", ethpub.NewPBlock(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
|
// Simple go routine function that updates the list of peers in the GUI
|
||||||
func (gui *Gui) update() {
|
func (gui *Gui) update() {
|
||||||
|
blockChan := make(chan ethutil.React, 1)
|
||||||
|
reactor := gui.eth.Reactor()
|
||||||
|
|
||||||
|
reactor.Subscribe("newBlock", blockChan)
|
||||||
|
|
||||||
txChan := make(chan ethchain.TxMsg, 1)
|
txChan := make(chan ethchain.TxMsg, 1)
|
||||||
gui.eth.TxPool().Subscribe(txChan)
|
gui.eth.TxPool().Subscribe(txChan)
|
||||||
|
|
||||||
@ -211,6 +193,12 @@ func (gui *Gui) update() {
|
|||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
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:
|
case txMsg := <-txChan:
|
||||||
tx := txMsg.Tx
|
tx := txMsg.Tx
|
||||||
|
|
||||||
@ -232,14 +220,7 @@ func (gui *Gui) update() {
|
|||||||
unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
|
unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
pos := "+"
|
gui.setWalletValue(object.Amount, unconfirmedFunds)
|
||||||
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)
|
|
||||||
} else {
|
} else {
|
||||||
object := state.GetAccount(gui.addr)
|
object := state.GetAccount(gui.addr)
|
||||||
if bytes.Compare(tx.Sender(), gui.addr) == 0 {
|
if bytes.Compare(tx.Sender(), gui.addr) == 0 {
|
||||||
@ -248,7 +229,7 @@ func (gui *Gui) update() {
|
|||||||
object.AddAmount(tx.Value)
|
object.AddAmount(tx.Value)
|
||||||
}
|
}
|
||||||
|
|
||||||
gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(object.Amount)))
|
gui.setWalletValue(object.Amount, nil)
|
||||||
|
|
||||||
state.SetStateObject(object)
|
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) {
|
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)
|
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) {
|
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)
|
mainInput, initInput := mutan.PreParse(data)
|
||||||
|
|
||||||
|
@ -34,10 +34,13 @@ func (lib *EthLib) ImportAndSetPrivKey(privKey string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (lib *EthLib) CreateAndSetPrivKey() (string, string, string, string) {
|
func (lib *EthLib) CreateAndSetPrivKey() (string, string, string, string) {
|
||||||
pub, prv := secp256k1.GenerateKeyPair()
|
_, prv := secp256k1.GenerateKeyPair()
|
||||||
pair := ðutil.Key{PrivateKey: prv, PublicKey: pub}
|
keyPair, err := ethutil.GetKeyRing().NewKeyPair(prv)
|
||||||
ethutil.Config.Db.Put([]byte("KeyRing"), pair.RlpEncode())
|
if err != nil {
|
||||||
mne := ethutil.MnemonicEncode(ethutil.Hex(prv))
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mne := ethutil.MnemonicEncode(ethutil.Hex(keyPair.PrivateKey))
|
||||||
mnemonicString := strings.Join(mne, " ")
|
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)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
callerTx := ethchain.NewContractCreationTx(ethutil.Big(valueStr), ethutil.Big(gasStr), ethutil.Big(gasPriceStr), callerScript, nil)
|
||||||
|
|
||||||
// Contract addr as test address
|
// Contract addr as test address
|
||||||
keyPair := ethutil.Config.Db.GetKeys()[0]
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
account := ui.eth.StateManager().TransState().GetStateObject(keyPair.Address())
|
account := ui.eth.StateManager().TransState().GetStateObject(keyPair.Address())
|
||||||
c := ethchain.MakeContract(callerTx, state)
|
c := ethchain.MakeContract(callerTx, state)
|
||||||
callerClosure := ethchain.NewClosure(account, c, c.Script(), state, ethutil.Big(gasStr), ethutil.Big(gasPriceStr))
|
callerClosure := ethchain.NewClosure(account, c, c.Script(), state, ethutil.Big(gasStr), ethutil.Big(gasPriceStr))
|
||||||
|
@ -173,8 +173,8 @@ func (i *Console) ParseInput(input string) bool {
|
|||||||
} else {
|
} else {
|
||||||
tx := ethchain.NewTransactionMessage(recipient, ethutil.Big(tokens[2]), ethutil.Big(tokens[3]), ethutil.Big(tokens[4]), nil)
|
tx := ethchain.NewTransactionMessage(recipient, ethutil.Big(tokens[2]), ethutil.Big(tokens[3]), ethutil.Big(tokens[4]), nil)
|
||||||
|
|
||||||
key := ethutil.Config.Db.GetKeys()[0]
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
tx.Sign(key.PrivateKey)
|
tx.Sign(keyPair.PrivateKey)
|
||||||
i.ethereum.TxPool().QueueTransaction(tx)
|
i.ethereum.TxPool().QueueTransaction(tx)
|
||||||
|
|
||||||
fmt.Printf("%x\n", tx.Hash())
|
fmt.Printf("%x\n", tx.Hash())
|
||||||
@ -207,8 +207,8 @@ func (i *Console) ParseInput(input string) bool {
|
|||||||
|
|
||||||
contract := ethchain.NewContractCreationTx(ethutil.Big(tokens[0]), ethutil.Big(tokens[1]), ethutil.Big(tokens[1]), mainScript, initScript)
|
contract := ethchain.NewContractCreationTx(ethutil.Big(tokens[0]), ethutil.Big(tokens[1]), ethutil.Big(tokens[1]), mainScript, initScript)
|
||||||
|
|
||||||
key := ethutil.Config.Db.GetKeys()[0]
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
contract.Sign(key.PrivateKey)
|
contract.Sign(keyPair.PrivateKey)
|
||||||
|
|
||||||
i.ethereum.TxPool().QueueTransaction(contract)
|
i.ethereum.TxPool().QueueTransaction(contract)
|
||||||
|
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"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/ethminer"
|
|
||||||
"github.com/ethereum/eth-go/ethpub"
|
|
||||||
"github.com/ethereum/eth-go/ethrpc"
|
|
||||||
"github.com/ethereum/eth-go/ethutil"
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
"github.com/ethereum/go-ethereum/utils"
|
"github.com/ethereum/go-ethereum/utils"
|
||||||
"log"
|
"log"
|
||||||
@ -68,10 +64,9 @@ func main() {
|
|||||||
log.SetOutput(logfile)
|
log.SetOutput(logfile)
|
||||||
logSys = log.New(logfile, "", flags)
|
logSys = log.New(logfile, "", flags)
|
||||||
logger.AddLogSystem(logSys)
|
logger.AddLogSystem(logSys)
|
||||||
}
|
} else {
|
||||||
/*else {
|
|
||||||
logSys = log.New(os.Stdout, "", flags)
|
logSys = log.New(os.Stdout, "", flags)
|
||||||
}*/
|
}
|
||||||
|
|
||||||
ethchain.InitFees()
|
ethchain.InitFees()
|
||||||
|
|
||||||
@ -106,8 +101,19 @@ func main() {
|
|||||||
}
|
}
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
case ExportKey:
|
case ExportKey:
|
||||||
key := ethutil.Config.Db.GetKeys()[0]
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
logSys.Println(fmt.Sprintf("prvk: %x\n", key.PrivateKey))
|
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)
|
os.Exit(0)
|
||||||
case ShowGenesis:
|
case ShowGenesis:
|
||||||
logSys.Println(ethereum.BlockChain().Genesis())
|
logSys.Println(ethereum.BlockChain().Genesis())
|
||||||
@ -127,28 +133,7 @@ func main() {
|
|||||||
ethereum.Mining = StartMining
|
ethereum.Mining = StartMining
|
||||||
|
|
||||||
if StartMining {
|
if StartMining {
|
||||||
logger.Infoln("Miner started")
|
utils.DoMining(ethereum)
|
||||||
|
|
||||||
// Fake block mining. It broadcasts a new block every 5 seconds
|
|
||||||
go func() {
|
|
||||||
|
|
||||||
if StartMining {
|
|
||||||
logger.Infoln("Miner started")
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
|
|
||||||
keyRing := ethutil.NewValueFromBytes(data)
|
|
||||||
addr := keyRing.Get(1).Bytes()
|
|
||||||
|
|
||||||
pair, _ := ethchain.NewKeyPairFromSec(ethutil.FromHex(hex.EncodeToString(addr)))
|
|
||||||
|
|
||||||
miner := ethminer.NewDefaultMiner(pair.Address(), ethereum)
|
|
||||||
miner.Start()
|
|
||||||
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if StartConsole {
|
if StartConsole {
|
||||||
@ -162,12 +147,7 @@ func main() {
|
|||||||
go console.Start()
|
go console.Start()
|
||||||
}
|
}
|
||||||
if StartRpc {
|
if StartRpc {
|
||||||
ethereum.RpcServer, err = ethrpc.NewJsonRpcServer(ethpub.NewPEthereum(ethereum), RpcPort)
|
utils.DoRpc(ethereum, RpcPort)
|
||||||
if err != nil {
|
|
||||||
logger.Infoln("Could not start RPC interface:", err)
|
|
||||||
} else {
|
|
||||||
go ethereum.RpcServer.Start()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RegisterInterrupts(ethereum)
|
RegisterInterrupts(ethereum)
|
||||||
|
46
utils/cmd.go
Normal file
46
utils/cmd.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/ethereum/eth-go"
|
||||||
|
"github.com/ethereum/eth-go/ethminer"
|
||||||
|
"github.com/ethereum/eth-go/ethpub"
|
||||||
|
"github.com/ethereum/eth-go/ethrpc"
|
||||||
|
"github.com/ethereum/eth-go/ethutil"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DoRpc(ethereum *eth.Ethereum, RpcPort int) {
|
||||||
|
var err error
|
||||||
|
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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DoMining(ethereum *eth.Ethereum) {
|
||||||
|
// Set Mining status
|
||||||
|
ethereum.Mining = true
|
||||||
|
|
||||||
|
if ethutil.GetKeyRing().Len() == 0 {
|
||||||
|
log.Println("No address found, can't start mining")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
keyPair := ethutil.GetKeyRing().Get(0)
|
||||||
|
addr := keyPair.Address()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
// Give it some time to connect with peers
|
||||||
|
time.Sleep(3 * time.Second)
|
||||||
|
|
||||||
|
for ethereum.IsUpToDate() == false {
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
}
|
||||||
|
log.Println("Miner started")
|
||||||
|
|
||||||
|
miner := ethminer.NewDefaultMiner(addr, ethereum)
|
||||||
|
miner.Start()
|
||||||
|
}()
|
||||||
|
}
|
@ -6,6 +6,60 @@ import (
|
|||||||
"github.com/obscuren/secp256k1-go"
|
"github.com/obscuren/secp256k1-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func CreateKeyPair(force bool) {
|
||||||
|
if force {
|
||||||
|
ethutil.GetKeyRing().Reset()
|
||||||
|
fmt.Println("resetting")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ethutil.GetKeyRing().Get(0) == nil {
|
||||||
|
_, prv := secp256k1.GenerateKeyPair()
|
||||||
|
|
||||||
|
keyPair, err := ethutil.GetKeyRing().NewKeyPair(prv)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mne := ethutil.MnemonicEncode(ethutil.Hex(keyPair.PrivateKey))
|
||||||
|
|
||||||
|
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, mne)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ImportPrivateKey(sec string) {
|
||||||
|
ethutil.GetKeyRing().Reset()
|
||||||
|
|
||||||
|
keyPair, err := ethutil.GetKeyRing().NewKeyPair(ethutil.FromHex(sec))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mne := ethutil.MnemonicEncode(ethutil.Hex(keyPair.PrivateKey))
|
||||||
|
|
||||||
|
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, mne)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
func CreateKeyPair(force bool) {
|
func CreateKeyPair(force bool) {
|
||||||
data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
|
data, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
|
||||||
if len(data) == 0 || force {
|
if len(data) == 0 || force {
|
||||||
@ -28,7 +82,9 @@ save these words so you can restore your account later: %s
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
func ImportPrivateKey(prvKey string) {
|
func ImportPrivateKey(prvKey string) {
|
||||||
key := ethutil.FromHex(prvKey)
|
key := ethutil.FromHex(prvKey)
|
||||||
msg := []byte("tmp")
|
msg := []byte("tmp")
|
||||||
@ -49,3 +105,4 @@ pubk: %x
|
|||||||
|
|
||||||
`, pair.Address(), key, pub)
|
`, pair.Address(), key, pub)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user