diff --git a/eth/main.cpp b/eth/main.cpp index 6308c6cfb..b8f703c7a 100644 --- a/eth/main.cpp +++ b/eth/main.cpp @@ -113,7 +113,7 @@ void help() << " -c,--client-name Add a name to your client's version string (default: blank)." << endl << " -d,--db-path Load database from path (default: ~/.ethereum " << endl << " /Etherum or Library/Application Support/Ethereum)." << endl - << " -D,--initdag Initialize DAG for mining and exit." << endl + << " -D,--initdag Initialize DAG for mining on given block and exit." << endl << " -e,--ether-price Set the ether price in the reference unit e.g. ยข (Default: 30.679)." << endl << " -f,--force-mining Mine even when there are no transaction to mine (Default: off)" << endl << " -h,--help Show this help message and exit." << endl @@ -200,9 +200,11 @@ enum class NodeMode Full }; +static const unsigned NoDAGInit = (unsigned)-3; + int main(int argc, char** argv) { - bool initDAG = false; + unsigned initDAG = NoDAGInit; string listenIP; unsigned short listenPort = 30303; string publicIP; @@ -307,8 +309,24 @@ int main(int argc, char** argv) structuredLogging = true; else if ((arg == "-d" || arg == "--path" || arg == "--db-path") && i + 1 < argc) dbPath = argv[++i]; - else if (arg == "-D" || arg == "--initdag") - initDAG = true; + else if ((arg == "-D" || arg == "--initdag") && i + 1 < argc) + { + string m = boost::to_lower_copy(string(argv[++i])); + if (m == "next") + initDAG = PendingBlock; + else if (m == "this") + initDAG = LatestBlock; + else + try + { + blockFees = stol(m); + } + catch (...) + { + cerr << "Bad " << arg << " option: " << m << endl; + return -1; + } + } else if ((arg == "-B" || arg == "--block-fees") && i + 1 < argc) { try @@ -317,7 +335,7 @@ int main(int argc, char** argv) } catch (...) { - cerr << "Bad " << arg << " option: " << argv[++i] << endl; + cerr << "Bad " << arg << " option: " << argv[i] << endl; return -1; } } @@ -329,7 +347,7 @@ int main(int argc, char** argv) } catch (...) { - cerr << "Bad " << arg << " option: " << argv[++i] << endl; + cerr << "Bad " << arg << " option: " << argv[i] << endl; return -1; } } @@ -442,10 +460,14 @@ int main(int argc, char** argv) miners ); - if (initDAG) + if (initDAG != NoDAGInit) { - cout << "Initializing DAG. (This will take awhile)" << endl; - Ethasher::get()->full(web3.ethereum()->blockChain().info()); + BlockInfo bi; + bi.number = (initDAG == LatestBlock || initDAG == PendingBlock) ? + web3.ethereum()->blockChain().number() + (initDAG == PendingBlock ? 30000 : 0) : + initDAG; + cout << "Initializing DAG for epoch beginning #" << (bi.number / 30000 * 30000) << " (seedhash " << bi.seedHash() << "). This will take a while." << endl; + Ethasher::get()->full(bi); return 0; }