<p>NTime is the integer timestamp in seconds.  It is one element on the block header. Each second NTime increases by one.    "NTime rolling" is a getwork parameter indicating how many seconds forward a miner can still consider this getwork valid (by incrementing NTime locally).</p>

<p>To understand how this is used lets first take a look at Bitcoin Block Header.</p>

<p>For a given set of transactions only two elements in the block header change between hash attempts.</p>

<ul>
<li>NTime - current timestamp (changes every second)</li>
<li>Nonce - 2^32 number (changes every hash)</li>
</ul>

<p>So to construct a valid header a miner must have the current value of these two rapidly changing elements.  The other elements of block header are also needed but changes occur much less frequently and trivial for the pool to handle.</p>

<p>The basic (inefficient) method to handle these two variables in a getwork request is for the pool to explicitly provide both values in every single header. The pool will provide one getwork every second.  A miner with less than 4.2GH/s however will on average find &lt; 1 nonce per getwork. As an example, a miner which can execute 100MH/s will cover the nonce range (2^32) in 40 seconds.  The pool will need to issue 40 getworks per share.  The avg # of getworks per share will depend on the speed of individual miners however a significant amount of excess communication is occuring.</p>

<p>Now both nonce range and NTime <strong>are highly predictable</strong> so a miner could simply be given a starting point and locally change both values.  Doing this significantly reduces the number of getwork requests required to cover the same number of hashes.</p>

<p>By allowing the miner to roll the NTime forward for 10 seconds the pool can cut the number of getworks from 40 to 4 seconds.</p>

<p>There is also a benefit for fast miners which are already efficient.</p>

<p>A 2 GH/s miner will find on average one nonce every 2 seconds.  With an NTime rolling value of 10 seconds.  The same getwork will enable the pool to acheive 4 nonces per getwork.</p>

<p>The NTime rolling value instructs the miner how far it can increment NTime (in seconds) before needing to request new work.  So a NTime rolling value of 4 means the miner can use this header for 4 seconds before considering it stale and likewise a value of 40 indicates to the miner it can use same header for next 40 seconds.  Pools can use increasingly large NTime values however there are diminishing returns.  A block is found on average every 600 seconds, and periodically transactions need to be included.</p>

<p>Still an optimal Ntime rolling value ensures the pool is only updating getworks when work has actually updated in a meaningful way (elements changed other than nonce or time).</p>

<p>An example:
A pool provides a 100MH miner a block header containing the current ntime, a nonce range of 0 to 2^32 (full nonce) and an NTime Rolling value of 40.  The miner would hash until the local time increments 1 second (roughly 100 million hashes) then it would increment NTime value and continue to hash for another 1 second (roughly 100 million more hashes).  Once it has incremented NTime 40 times it must request new getwork.</p>

<p>Proper use of NTime rolling improves pool efficiency by reducing number of getworks per share.  In your example I speculate that Slush looked at the pool logs and determined that some miners were requesting work "too often" indicating they were ignoring or incorrectly using NTime Rolling value.   Obviously a pool operator would want all miners to use latest protocols such as NTime rolling, and Long Polling as it allows a pool server to handle a higher throughput with same amount of hardware, bandwidth and other resources.</p>

<p>I don't have an exhaustive list but as far as I know any "relatively recent" miner supports NTime rolling (as in released in last 6 months).</p>

CC BY-SA 3.0
2012-02-10T08:58:47.153Z
From your description it appears that normally a miner must discard its getwork after a second and get new assignment, but NTime rolling allows it to use the same getwork for more than 1 second. Shouldn't it instead work in a way that would allow a miner to not only increment nonce, but also increment timestamp? That is, after going through the whole nonce range it would set timestamp to a different time within NTime Rolling and work on the previously checked nonces, as the timestamp change would make the hashes different than the ones calculated for previous timestamp?
ThePiachu
CC BY-SA 3.0
2011-10-12T02:20:04.023Z
2012-04-16T22:24:56.193Z
2012-04-16T22:24:56.193Z
DeathAndTaxes
<p>From Slush's pool's homepage:</p>

<blockquote>
  <p>Pool now supports Long polling and NTime rolling. Older miners have many problems with those new features, which can negatively affect your rewards. Please update your miners to latest version!</p>
</blockquote>

<p>What does NTime rolling and nonce range mean for me as a miner?
And what miners support it? (+versions)</p>

<mining-pools><mining-software>
What is NTime rolling/nonce range? And what miners support it?
Sean Chapman
# What is NTime rolling/nonce range? And what miners support it?

(Asked by: username_0 on 2011-10-11)

From Slush's pool's homepage:

> Pool now supports Long polling and NTime rolling. Older miners have many problems with those new features, which can negatively affect your rewards. Please update your miners to latest version!

What does NTime rolling and nonce range mean for me as a miner?
And what miners support it? (+versions)

**Tags:** mining-pools, mining-software


---

## 1 answers

### Answer by username_1 on 2011-10-12. Score: 17

NTime is the integer timestamp in seconds. It is one element on the block header. Each second NTime increases by one. "NTime rolling" is a getwork parameter indicating how many seconds forward a miner can still consider this getwork valid (by incrementing NTime locally).

To understand how this is used lets first take a look at Bitcoin Block Header.

For a given set of transactions only two elements in the block header change between hash attempts.

* NTime - current timestamp (changes every second)
* Nonce - 2^32 number (changes every hash)

So to construct a valid header a miner must have the current value of these two rapidly changing elements. The other elements of block header are also needed but changes occur much less frequently and trivial for the pool to handle.

The basic (inefficient) method to handle these two variables in a getwork request is for the pool to explicitly provide both values in every single header. The pool will provide one getwork every second. A miner with less than 4.2GH/s however will on average find < 1 nonce per getwork. As an example, a miner which can execute 100MH/s will cover the nonce range (2^32) in 40 seconds. The pool will need to issue 40 getworks per share. The avg # of getworks per share will depend on the speed of individual miners however a significant amount of excess communication is occuring.

Now both nonce range and NTime **are highly predictable** so a miner could simply be given a starting point and locally change both values. Doing this significantly reduces the number of getwork requests required to cover the same number of hashes.

By allowing the miner to roll the NTime forward for 10 seconds the pool can cut the number of getworks from 40 to 4 seconds.

There is also a benefit for fast miners which are already efficient.

A 2 GH/s miner will find on average one nonce every 2 seconds. With an NTime rolling value of 10 seconds. The same getwork will enable the pool to acheive 4 nonces per getwork.

The NTime rolling value instructs the miner how far it can increment NTime (in seconds) before needing to request new work. So a NTime rolling value of 4 means the miner can use this header for 4 seconds before considering it stale and likewise a value of 40 indicates to the miner it can use same header for next 40 seconds. Pools can use increasingly large NTime values however there are diminishing returns. A block is found on average every 600 seconds, and periodically transactions need to be included.

Still an optimal Ntime rolling value ensures the pool is only updating getworks when work has actually updated in a meaningful way (elements changed other than nonce or time).

An example:
A pool provides a 100MH miner a block header containing the current ntime, a nonce range of 0 to 2^32 (full nonce) and an NTime Rolling value of 40. The miner would hash until the local time increments 1 second (roughly 100 million hashes) then it would increment NTime value and continue to hash for another 1 second (roughly 100 million more hashes). Once it has incremented NTime 40 times it must request new getwork.

Proper use of NTime rolling improves pool efficiency by reducing number of getworks per share. In your example I speculate that Slush looked at the pool logs and determined that some miners were requesting work "too often" indicating they were ignoring or incorrectly using NTime Rolling value. Obviously a pool operator would want all miners to use latest protocols such as NTime rolling, and Long Polling as it allows a pool server to handle a higher throughput with same amount of hardware, bandwidth and other resources.

I don't have an exhaustive list but as far as I know any "relatively recent" miner supports NTime rolling (as in released in last 6 months).

> **Comments:**
> **username_2**: From your description it appears that normally a miner must discard its getwork after a second and get new assignment, but NTime rolling allows it to use the same getwork for more than 1 second. Shouldn't it instead work in a way that would allow a miner to not only increment nonce, but also increment timestamp? That is, after going through the whole nonce range it would set timestamp to a different time within NTime Rolling and work on the previously checked nonces, as the timestamp change would make the hashes different than the ones calculated for previous timestamp?  

---

