mirror of
https://github.com/GOSTSec/poolserver
synced 2025-02-06 12:04:29 +00:00
Merge branch 'master' into peercoin
This commit is contained in:
commit
18508749da
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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…
x
Reference in New Issue
Block a user