internal StratumHeaderBuilder GetLatestBuilder(StratumHeaderBuilder oldBuilder)
        {
            var newJob = CurrentJob;
            if (newJob == null)
                return null;

            if (oldBuilder != null && oldBuilder.Job == newJob)
                return oldBuilder;

            var _extraNonce2 = new byte[ExtraNonce2Size];
            RNG.GetBytes(_extraNonce2);

            var builder = new StratumHeaderBuilder(newJob, ExtraNonce1, _extraNonce2.ToHexString());
            return builder;
        }
        public void SubmitShare(StratumHeaderBuilder work, string nonce)
        {
            var submitShareMessage = SimpleJson.SimpleJson.SerializeObject(
                new { @params = new string[] {
                    WorkerName,
                    work.Job.JobId,
                    work.ExtraNonce2,
                    ReverseEndian(work.NTime.ToBytes().ToHexString()),
                    nonce
                }, id = 4, method = "mining.submit" }
            ) + "\n";

            lock (outgoingShares)
            {
                outgoingShares.Add(submitShareMessage);
            }
        }