/// <summary>
/// Returns a solved block that builds on top of this one. This exists for unit tests.
/// </summary>
internal Block CreateNextBlock(Address to, uint time)
{
var b = new Block(Params);
b.DifficultyTarget = _difficultyTarget;
b.AddCoinbaseTransaction(_emptyBytes);
// Add a transaction paying 50 coins to the "to" address.
var t = new Transaction(Params);
t.AddOutput(new TransactionOutput(Params, t, Utils.ToNanoCoins(50, 0), to));
// The input does not really need to be a valid signature, as long as it has the right general form.
var input = new TransactionInput(Params, t, Script.CreateInputScript(_emptyBytes, _emptyBytes));
// Importantly the outpoint hash cannot be zero as that's how we detect a coinbase transaction in isolation
// but it must be unique to avoid 'different' transactions looking the same.
var counter = new byte[32];
counter[0] = (byte)_txCounter++;
input.Outpoint.Hash = new Sha256Hash(counter);
t.AddInput(input);
b.AddTransaction(t);
b.PrevBlockHash = Hash;
b.TimeSeconds = time;
b.Solve();
b.VerifyHeader();
return(b);
}