void BeginBlock()
        {
            mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Getting {0} block", mMiningTarget.mName));
            WorkBlock work = mUpstream.GetWorkBlock();

            if (work != null)
            {
                mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Got {0} block: {1}", mMiningTarget.mName, work.ToString()));

                // Put the current block in the previous list
                if (mBlock != null)
                {
                    mPrevBlocks[mPrevBlockIndex++] = mBlock;
                    if (mPrevBlockIndex >= mPrevBlocks.Length)
                    {
                        mPrevBlockIndex = 0;
                    }
                }

                mBlock            = work;
                mBlock.mAlgorithm = mMiningTarget.mPOWAlgorithm;
            }
            else
            {
                mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("GetWork failed"));
            }
        }
        public override WorkBlock GetWorkBlock()
        {
            WorkBlock work = null;

            JObject obj = null;

            try
            {
                // Get block from bitcoin
                BitnetClient bc = new BitnetClient("http://" + mURL + ":" + mPort);
                bc.Credentials = new NetworkCredential(mUser, mPass);
                mBlockCount    = bc.GetBlockCount();
                obj            = bc.GetWork();
                mNewBlockReady = false;
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed to get work!");
                Console.WriteLine(e.Message);
            }

            if (obj != null)
            {
                work = new WorkBlock(obj);
            }
            return(work);
        }
Exemple #3
0
        public override WorkBlock GetWorkBlock()
        {
            WorkBlock work = null;

            JObject obj = null;
            try
            {
                // Get block from bitcoin
                BitnetClient bc = new BitnetClient("http://" + mURL + ":" + mPort);
                bc.Credentials = new NetworkCredential(mUser, mPass);
                mBlockCount = bc.GetBlockCount();
                obj = bc.GetWork();
                mNewBlockReady = false;
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed to get work!");
                Console.WriteLine(e.Message);
            }

            if (obj != null)
            {
                work = new WorkBlock(obj);
            }
            return work;
        }
Exemple #4
0
        public override bool SubmitWork(WorkBlock work, uint solution)
        {
            JobInfo ji = (JobInfo)work;

            // {"params": ["slush.miner1", "bf", "00000001", "504e86ed", "b2957c02"], "id": 4, "method": "mining.submit"}
            // Values in particular order: worker_name (previously authorized!), job_id, extranonce2, ntime, nonce.
            string[] parms = new string[5];
            parms[0] = mUser;
            parms[1] = ji.mJobID;
            parms[2] = ji.mExtraNonce2;
            parms[3] = ji.mTimeStr;
            parms[4] = Utils.UIntToHexString(solution);

            mSubmitString = String.Format("Submit Job({0}), Time({1}), Solution({2})", parms[1], parms[3], parms[4]) + "\n" + ji.strData + "\n" + ji.strTarget;
            Console.WriteLine(mSubmitString);
            mLog.WriteLine(mSubmitString);


            mAwaitingSubmitResult = true;
            SendRPC("mining.submit", parms);
            while (mAwaitingSubmitResult)
            {
                Thread.Sleep(50);
            }
            return(mSubmitResult);
        }
Exemple #5
0
        public Client(TcpClient tcp, ClientManager manager)
        {
            mTheMan = manager;
            mClient = tcp;
            mClient.NoDelay = true;
            mState = State.New;
            mType = Type.Unknown;

            mHashesDone = 0;
            mTotalHashesDone = 0;
            mCurrentBlock = null;
            mHashrate = 0;

            mLastSeen = DateTime.Now;
        }
Exemple #6
0
        public Client(TcpClient tcp, ClientManager manager)
        {
            mTheMan         = manager;
            mClient         = tcp;
            mClient.NoDelay = true;
            mState          = State.New;
            mType           = Type.Unknown;

            mHashesDone      = 0;
            mTotalHashesDone = 0;
            mCurrentBlock    = null;
            mHashrate        = 0;

            mLastSeen = DateTime.Now;
        }
        public void WorkComplete(Client solver, bool solutionFound, uint solution)
        {
            mEventLog.RecordClientWork(solver);
            WorkBlock block = solver.mCurrentBlock;

            block.mHashMan.FinishBlock(solver.mHashBlock);
            solver.mHashBlock = null;

            if (solutionFound && mBlock == block)
            {
                mBlocksSubmitted++;
                bool success = mUpstream.SubmitWork(block, solution);
                //if (!success)
                //    success = mUpstream.SubmitWork(block, (uint)IPAddress.HostToNetworkOrder((int)solution));

                // Start a new block
                if (success)
                {
                    // Send email notification about this found solution

                    /*
                     * TimeSpan span = DateTime.Now - block.mHashMan.mStartTime;
                     * string hashrate = string.Format("{0:N}", block.mHashMan.mHashesDone / span.TotalSeconds);
                     * string body = "Found solution for " + block.mCurrency + " block: \n" + block.ToString() + "\n\n";
                     * body += "Solution string: " + data + "\n";
                     * body += "Block Accepted: " + success.ToString() + "\n";
                     * body += "Hashes Done: " + block.mHashMan.mHashesDone + "\n";
                     * body += "Time Spent: " + span.ToString() + "\n";
                     * body += "Hashrate: " + hashrate + "\n";
                     * body += "Clients: " + mClients.Count + "\n";
                     * body += "\n\n";
                     * //mMailer.SendEmail(body);
                     */
                    //mMailer.SendEmail("Block Accepted");

                    string data = block.GetSolutionString(solution);
                    mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Work accepted! solution: {0}, dataString: {1}", solution, data));

                    BeginBlock();
                    mBlocksAccepted++;
                }
                else
                {
                    string data = block.GetSolutionString(solution);
                    mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Work not accepted. solution: {0}, dataString: {1}", solution, data));
                }
            }
        }
Exemple #8
0
        public override bool SubmitWork(WorkBlock work, uint solution)
        {
            // Submit this solution to bitcoin
            string data = work.GetSolutionString(solution);
            Console.WriteLine("Trying solution: " + data);
            BitnetClient bc = new BitnetClient("http://" + mURL + ":" + mPort);
            bc.Credentials = new NetworkCredential(mUser, mPass);
            bool success = bc.GetWork(data);
            if (!success)
            {
                data = work.GetSolutionString((uint)IPAddress.HostToNetworkOrder((int)solution));
                success = bc.GetWork(data);
            }

            return success;
        }
        public override bool SubmitWork(WorkBlock work, uint solution)
        {
            // Submit this solution to bitcoin
            string data = work.GetSolutionString(solution);

            Console.WriteLine("Trying solution: " + data);
            BitnetClient bc = new BitnetClient("http://" + mURL + ":" + mPort);

            bc.Credentials = new NetworkCredential(mUser, mPass);
            bool success = bc.GetWork(data);

            if (!success)
            {
                data    = work.GetSolutionString((uint)IPAddress.HostToNetworkOrder((int)solution));
                success = bc.GetWork(data);
            }

            return(success);
        }
Exemple #10
0
        public void SendWork(HashManager.HashBlock hashBlock, WorkBlock block)
        {
            mHashBlock = hashBlock;

            MemoryStream stream = new MemoryStream();
            BinaryWriter bw     = new BinaryWriter(stream);

            bw.Write((byte)3);
            bw.Write(hashBlock.Start);
            bw.Write(hashBlock.Count);
            bw.Write((int)block.mAlgorithm);
            bw.Write(block.target);
            bw.Write(block.data);

            SendPacket(stream.ToArray());
            bw.Close();

            mCurrentBlock = block;
            mState        = State.Busy;
            mWorkSent     = DateTime.Now;
        }
Exemple #11
0
 public abstract bool SubmitWork(WorkBlock work, uint solution);
Exemple #12
0
        public override bool SubmitWork(WorkBlock work, uint solution)
        {
            JobInfo ji = (JobInfo)work;
            // {"params": ["slush.miner1", "bf", "00000001", "504e86ed", "b2957c02"], "id": 4, "method": "mining.submit"}
            // Values in particular order: worker_name (previously authorized!), job_id, extranonce2, ntime, nonce.
            string[] parms = new string[5];
            parms[0] = mUser;
            parms[1] = ji.mJobID;
            parms[2] = ji.mExtraNonce2;
            parms[3] = ji.mTimeStr;
            parms[4] = Utils.UIntToHexString(solution);

            mSubmitString = String.Format("Submit Job({0}), Time({1}), Solution({2})", parms[1], parms[3], parms[4]) + "\n" + ji.strData + "\n" + ji.strTarget;
            Console.WriteLine(mSubmitString);
            mLog.WriteLine(mSubmitString);

            mAwaitingSubmitResult = true;
            SendRPC("mining.submit", parms);
            while (mAwaitingSubmitResult)
            {
                Thread.Sleep(50);
            }
            return mSubmitResult;
        }
Exemple #13
0
        public void SendWork(HashManager.HashBlock hashBlock, WorkBlock block)
        {
            mHashBlock = hashBlock;

            MemoryStream stream = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(stream);
            bw.Write((byte)3);
            bw.Write(hashBlock.Start);
            bw.Write(hashBlock.Count);
            bw.Write((int)block.mAlgorithm);
            bw.Write(block.target);
            bw.Write(block.data);

            SendPacket(stream.ToArray());
            bw.Close();

            mCurrentBlock = block;
            mState = State.Busy;
            mWorkSent = DateTime.Now;
        }
 abstract public bool SubmitWork(WorkBlock work, uint solution);
Exemple #15
0
        void BeginBlock()
        {
            mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Getting {0} block", mMiningTarget.mName));
            WorkBlock work = mUpstream.GetWorkBlock();
            if (work != null)
            {
                mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("Got {0} block: {1}", mMiningTarget.mName, work.ToString()));

                // Put the current block in the previous list
                if (mBlock != null)
                {
                    mPrevBlocks[mPrevBlockIndex++] = mBlock;
                    if (mPrevBlockIndex >= mPrevBlocks.Length)
                        mPrevBlockIndex = 0;
                }

                mBlock = work;
                mBlock.mAlgorithm = mMiningTarget.mPOWAlgorithm;
            }
            else
            {
                mEventLog.RecordEvent(EventLog.EventType.Upstream, string.Format("GetWork failed"));
            }
        }