Browse Source

Merge branch 'master' into peercoin

peercoin
Intel 11 years ago
parent
commit
18508749da
  1. 19
      src/server/poolserver/Stratum/Client.cpp
  2. 13
      src/server/poolserver/Stratum/Job.h

19
src/server/poolserver/Stratum/Client.cpp

@ -166,9 +166,13 @@ namespace Stratum
return; return;
} }
ByteBuffer share; // Pack two 32bit ints into 64bit
share << extranonce2 << timebuf << noncebuf; ByteBuffer sharebuf;
if (!job.SubmitShare(share.Binary())) { sharebuf << noncebuf << extranonce2;
uint64 share;
sharebuf >> share;
sLog.Debug(LOG_STRATUM, "Job::SubmitShare: Nonce: %s, Extranonse: %s, Share: %u", Util::BinToASCII(noncebuf.Binary()).c_str(), Util::BinToASCII(extranonce2).c_str(), share);
if (!job.SubmitShare(share)) {
sLog.Error(LOG_STRATUM, "%s: Duplicate share", username.c_str()); sLog.Error(LOG_STRATUM, "%s: Duplicate share", username.c_str());
DataMgr::Instance()->Push(Share(_ip, username, false, "Duplicate share", Util::Date(), job.diff)); DataMgr::Instance()->Push(Share(_ip, username, false, "Duplicate share", Util::Date(), job.diff));
_shareLimiter.LogBad(); _shareLimiter.LogBad();
@ -209,7 +213,7 @@ namespace Stratum
BigInt target(Util::BinToASCII(Util::Reverse(hash)), 16); BigInt target(Util::BinToASCII(Util::Reverse(hash)), 16);
// Check if difficulty meets job diff // Check if difficulty meets job diff
if (target > job.target) { if (target > job.jobTarget) {
sLog.Error(LOG_STRATUM, "%s: Share above target", username.c_str()); sLog.Error(LOG_STRATUM, "%s: Share above target", username.c_str());
DataMgr::Instance()->Push(Share(_ip, username, false, "Share above target", Util::Date(), job.diff)); DataMgr::Instance()->Push(Share(_ip, username, false, "Share above target", Util::Date(), job.diff));
_shareLimiter.LogBad(); _shareLimiter.LogBad();
@ -225,7 +229,7 @@ namespace Stratum
} }
// Check if block meets criteria // Check if block meets criteria
if (target <= job.blockCriteria) { if (target <= job.blockTarget) {
sLog.Info(LOG_SERVER, "We have found a block candidate!"); sLog.Info(LOG_SERVER, "We have found a block candidate!");
if (_server->SubmitBlock(block)) { if (_server->SubmitBlock(block)) {
@ -317,7 +321,8 @@ namespace Stratum
Job job; Job job;
job.block = _server->GetWork(); job.block = _server->GetWork();
job.diff = _diff; job.diff = _diff;
job.target = Bitcoin::DiffToTarget(job.diff); job.jobTarget = Bitcoin::DiffToTarget(job.diff);
job.blockTarget = Bitcoin::TargetFromBits(job.block->bits);
// Serialize transaction // Serialize transaction
ByteBuffer coinbasebuf; ByteBuffer coinbasebuf;
@ -334,8 +339,6 @@ namespace Stratum
job.coinbase1 = BinaryData(coinbase.begin(), coinbase.begin() + cbsplit); job.coinbase1 = BinaryData(coinbase.begin(), coinbase.begin() + cbsplit);
job.coinbase2 = BinaryData(coinbase.begin() + cbsplit + 8, coinbase.end()); // plus extranonce size job.coinbase2 = BinaryData(coinbase.begin() + cbsplit + 8, coinbase.end()); // plus extranonce size
job.blockCriteria = Bitcoin::TargetFromBits(job.block->bits);
return job; return job;
} }

13
src/server/poolserver/Stratum/Job.h

@ -16,18 +16,17 @@ namespace Stratum
Bitcoin::BlockPtr block; Bitcoin::BlockPtr block;
BinaryData coinbase1; BinaryData coinbase1;
BinaryData coinbase2; BinaryData coinbase2;
std::set<std::string> shares; std::set<uint64> shares;
BigInt blockCriteria; BigInt blockTarget;
BigInt target; BigInt jobTarget;
// Submits share to a job // Submits share to a job
// Returns false if the same share already exists // Returns false if the same share already exists
bool SubmitShare(BinaryData share) bool SubmitShare(uint64 share)
{ {
std::string sharestr = Util::BinToASCII(Crypto::SHA256(share)); std::set<uint64>::iterator it = shares.find(share);
std::set<std::string>::iterator it = shares.find(sharestr);
if (it == shares.end()) { if (it == shares.end()) {
shares.insert(sharestr); shares.insert(share);
return true; return true;
} else } else
return false; return false;

Loading…
Cancel
Save