Skip to content

Commit faa5f75

Browse files
authored
Add an interface to override services from the network class (#438)
1 parent 729ec43 commit faa5f75

7 files changed

Lines changed: 57 additions & 0 deletions

File tree

src/Blockcore/Builder/FullNodeBuilder.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ private IServiceCollection BuildServices()
258258
featureRegistration.BuildFeature(this.Services);
259259
}
260260

261+
this.Network.FullNodeBuilderServiceOverride?.OverrideServices(this);
262+
261263
return this.Services;
262264
}
263265

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using Blockcore.Builder.Feature;
3+
using Blockcore.Configuration;
4+
using Blockcore.Networks;
5+
using Blockcore.Persistence;
6+
using Microsoft.Extensions.DependencyInjection;
7+
8+
namespace Blockcore.Builder
9+
{
10+
/// <summary>
11+
/// Allow specific network implementation to override services.
12+
/// </summary>
13+
public interface IFullNodeBuilderServiceOverride
14+
{
15+
/// <summary>
16+
/// Intercept the builder to override services.
17+
/// </summary>
18+
void OverrideServices(IFullNodeBuilder builder);
19+
}
20+
}

src/Blockcore/Networks/Network.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO;
44
using System.Linq;
55
using System.Threading;
6+
using Blockcore.Builder;
67
using Blockcore.Consensus;
78
using Blockcore.Consensus.BlockInfo;
89
using Blockcore.Consensus.Checkpoints;
@@ -276,6 +277,11 @@ public byte[] MagicBytes
276277
/// </summary>
277278
public IStandardScriptsRegistry StandardScriptsRegistry { get; protected set; }
278279

280+
/// <summary>
281+
/// Allow the DI to override services.
282+
/// </summary>
283+
public IFullNodeBuilderServiceOverride FullNodeBuilderServiceOverride { get; protected set; }
284+
279285
/// <summary>
280286
/// Mines a new genesis block, to use with a new network.
281287
/// Typically, 3 such genesis blocks need to be created when bootstrapping a new coin: for Main, Test and Reg networks.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Blockcore.Builder;
2+
using Blockcore.Features.Miner.Interfaces;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using Microsoft.Extensions.DependencyInjection.Extensions;
5+
6+
namespace Blockcore.Networks.Strax.Staking
7+
{
8+
/// <summary>
9+
/// Full node builder allows constructing a full node using specific components.
10+
/// </summary>
11+
public class MiningServiceOverride : IFullNodeBuilderServiceOverride
12+
{
13+
public void OverrideServices(IFullNodeBuilder builder)
14+
{
15+
var replace = ServiceDescriptor.Singleton<IPosMinting, StraxMinting>();
16+
17+
builder.Services.Replace(replace);
18+
}
19+
}
20+
}

src/Networks/Blockcore.Networks.Strax/StraxMain.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using Blockcore.Networks.Strax.Deployments;
1313
using Blockcore.Networks.Strax.Federation;
1414
using Blockcore.Networks.Strax.Policies;
15+
using Blockcore.Networks.Strax.Staking;
1516
using Blockcore.P2P;
1617

1718
namespace Blockcore.Networks.Strax
@@ -189,6 +190,8 @@ public StraxMain()
189190

190191
this.StandardScriptsRegistry = new StraxStandardScriptsRegistry();
191192

193+
this.FullNodeBuilderServiceOverride = new MiningServiceOverride();
194+
192195
Assert(this.DefaultBanTimeSeconds <= this.Consensus.MaxReorgLength * this.Consensus.TargetSpacing.TotalSeconds / 2);
193196

194197
Assert(this.Consensus.HashGenesisBlock == uint256.Parse("0xebe158d09325c470276619ebc5f7f87c98c0ed4b211c46a17a6457655811d082"));

src/Networks/Blockcore.Networks.Strax/StraxRegTest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using Blockcore.Networks.Strax.Federation;
1515
using Blockcore.Networks.Strax.Policies;
1616
using Blockcore.P2P;
17+
using Blockcore.Networks.Strax.Staking;
1718

1819
namespace Blockcore.Networks.Strax
1920
{
@@ -174,6 +175,8 @@ public StraxRegTest()
174175

175176
this.StandardScriptsRegistry = new StraxStandardScriptsRegistry();
176177

178+
this.FullNodeBuilderServiceOverride = new MiningServiceOverride();
179+
177180
Assert(this.DefaultBanTimeSeconds <= this.Consensus.MaxReorgLength * this.Consensus.TargetSpacing.TotalSeconds / 2);
178181

179182
Assert(this.Consensus.HashGenesisBlock == uint256.Parse("0x77283cca51b83fe3bda9ce8966248613036b0dc55a707ce76ca7b79aaa9962e4"));

src/Networks/Blockcore.Networks.Strax/StraxTest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using Blockcore.Networks.Strax.Federation;
1515
using Blockcore.Networks.Strax.Policies;
1616
using Blockcore.P2P;
17+
using Blockcore.Networks.Strax.Staking;
1718

1819
namespace Blockcore.Networks.Strax
1920
{
@@ -178,6 +179,8 @@ public StraxTest()
178179

179180
this.StandardScriptsRegistry = new StraxStandardScriptsRegistry();
180181

182+
this.FullNodeBuilderServiceOverride = new MiningServiceOverride();
183+
181184
Assert(this.DefaultBanTimeSeconds <= this.Consensus.MaxReorgLength * this.Consensus.TargetSpacing.TotalSeconds / 2);
182185

183186
Assert(this.Consensus.HashGenesisBlock == uint256.Parse("0x0000db68ff9e74fbaf7654bab4fa702c237318428fa9186055c243ddde6354ca"));

0 commit comments

Comments
 (0)