|
|
|
@ -30,13 +30,27 @@ func RegisterInterupts(s *eth.Ethereum) { |
|
|
|
|
}() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func confirm(message string) bool { |
|
|
|
|
fmt.Println(message, "Are you sure? (y/n)") |
|
|
|
|
var r string |
|
|
|
|
fmt.Scanln(&r) |
|
|
|
|
for ; ; fmt.Scanln(&r) { |
|
|
|
|
if r == "n" || r == "y" { |
|
|
|
|
break |
|
|
|
|
} else { |
|
|
|
|
fmt.Printf("Yes or no?", r) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return r == "y" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
|
Init() |
|
|
|
|
|
|
|
|
|
runtime.GOMAXPROCS(runtime.NumCPU()) |
|
|
|
|
|
|
|
|
|
// set logger
|
|
|
|
|
var logger *log.Logger |
|
|
|
|
var logSys *log.Logger |
|
|
|
|
flags := log.LstdFlags |
|
|
|
|
|
|
|
|
|
if LogFile != "" { |
|
|
|
@ -46,12 +60,13 @@ func main() { |
|
|
|
|
} |
|
|
|
|
defer logfile.Close() |
|
|
|
|
log.SetOutput(logfile) |
|
|
|
|
logger = log.New(logfile, "", flags) |
|
|
|
|
logSys = log.New(logfile, "", flags) |
|
|
|
|
} else { |
|
|
|
|
logger = log.New(os.Stdout, "", flags) |
|
|
|
|
logSys = log.New(os.Stdout, "", flags) |
|
|
|
|
} |
|
|
|
|
ethutil.ReadConfig(DataDir) |
|
|
|
|
ethutil.Config.Log.AddLogSystem(logger) |
|
|
|
|
logger := ethutil.Config.Log |
|
|
|
|
logger.AddLogSystem(logSys) |
|
|
|
|
|
|
|
|
|
ethchain.InitFees() |
|
|
|
|
ethutil.Config.Seed = UseSeed |
|
|
|
@ -64,67 +79,42 @@ func main() { |
|
|
|
|
} |
|
|
|
|
ethereum.Port = OutboundPort |
|
|
|
|
|
|
|
|
|
if GenAddr { |
|
|
|
|
fmt.Println("This action overwrites your old private key. Are you sure? (y/n)") |
|
|
|
|
|
|
|
|
|
var r string |
|
|
|
|
fmt.Scanln(&r) |
|
|
|
|
for ; ; fmt.Scanln(&r) { |
|
|
|
|
if r == "n" || r == "y" { |
|
|
|
|
break |
|
|
|
|
} else { |
|
|
|
|
fmt.Printf("Yes or no?", r) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if r == "y" { |
|
|
|
|
// bookkeeping tasks
|
|
|
|
|
switch { |
|
|
|
|
case GenAddr: |
|
|
|
|
if NonInteractive || confirm("This action overwrites your old private key.") { |
|
|
|
|
utils.CreateKeyPair(true) |
|
|
|
|
} |
|
|
|
|
os.Exit(0) |
|
|
|
|
} else { |
|
|
|
|
if len(ImportKey) > 0 { |
|
|
|
|
fmt.Println("This action overwrites your old private key. Are you sure? (y/n)") |
|
|
|
|
var r string |
|
|
|
|
fmt.Scanln(&r) |
|
|
|
|
for ; ; fmt.Scanln(&r) { |
|
|
|
|
if r == "n" || r == "y" { |
|
|
|
|
break |
|
|
|
|
} else { |
|
|
|
|
fmt.Printf("Yes or no?", r) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if r == "y" { |
|
|
|
|
mnemonic := strings.Split(ImportKey, " ") |
|
|
|
|
if len(mnemonic) == 24 { |
|
|
|
|
fmt.Println("Got mnemonic key, importing.") |
|
|
|
|
key := ethutil.MnemonicDecode(mnemonic) |
|
|
|
|
utils.ImportPrivateKey(key) |
|
|
|
|
} else if len(mnemonic) == 1 { |
|
|
|
|
fmt.Println("Got hex key, importing.") |
|
|
|
|
utils.ImportPrivateKey(ImportKey) |
|
|
|
|
} else { |
|
|
|
|
fmt.Println("Did not recognise format, exiting.") |
|
|
|
|
} |
|
|
|
|
os.Exit(0) |
|
|
|
|
case len(ImportKey) > 0: |
|
|
|
|
if NonInteractive || confirm("This action overwrites your old private key.") { |
|
|
|
|
mnemonic := strings.Split(ImportKey, " ") |
|
|
|
|
if len(mnemonic) == 24 { |
|
|
|
|
logSys.Println("Got mnemonic key, importing.") |
|
|
|
|
key := ethutil.MnemonicDecode(mnemonic) |
|
|
|
|
utils.ImportPrivateKey(key) |
|
|
|
|
} else if len(mnemonic) == 1 { |
|
|
|
|
logSys.Println("Got hex key, importing.") |
|
|
|
|
utils.ImportPrivateKey(ImportKey) |
|
|
|
|
} else { |
|
|
|
|
logSys.Println("Did not recognise format, exiting.") |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
utils.CreateKeyPair(false) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ExportKey { |
|
|
|
|
os.Exit(0) |
|
|
|
|
case len(ImportKey) == 0: |
|
|
|
|
utils.CreateKeyPair(false) |
|
|
|
|
fallthrough |
|
|
|
|
case ExportKey: |
|
|
|
|
key := ethutil.Config.Db.GetKeys()[0] |
|
|
|
|
fmt.Printf("%x\n", key.PrivateKey) |
|
|
|
|
logSys.Println(fmt.Sprintf("prvk: %x\n", key.PrivateKey)) |
|
|
|
|
os.Exit(0) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ShowGenesis { |
|
|
|
|
fmt.Println(ethereum.BlockChain().Genesis()) |
|
|
|
|
case ShowGenesis: |
|
|
|
|
logSys.Println(ethereum.BlockChain().Genesis()) |
|
|
|
|
os.Exit(0) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ethutil.Config.Log.Infoln(fmt.Sprintf("Starting Ethereum v%s", ethutil.Config.Ver)) |
|
|
|
|
// client
|
|
|
|
|
logger.Infoln(fmt.Sprintf("Starting Ethereum v%s", ethutil.Config.Ver)) |
|
|
|
|
|
|
|
|
|
// Set the max peers
|
|
|
|
|
ethereum.MaxPeers = MaxPeer |
|
|
|
@ -144,13 +134,13 @@ func main() { |
|
|
|
|
ethereum.Start() |
|
|
|
|
|
|
|
|
|
if StartMining { |
|
|
|
|
ethutil.Config.Log.Infoln("Miner started") |
|
|
|
|
logger.Infoln("Miner started") |
|
|
|
|
|
|
|
|
|
// Fake block mining. It broadcasts a new block every 5 seconds
|
|
|
|
|
go func() { |
|
|
|
|
|
|
|
|
|
if StartMining { |
|
|
|
|
ethutil.Config.Log.Infoln("Miner started") |
|
|
|
|
logger.Infoln("Miner started") |
|
|
|
|
|
|
|
|
|
go func() { |
|
|
|
|
data, _ := ethutil.Config.Db.Get([]byte("KeyRing")) |
|
|
|
|