/// <param name="ct"></param> /// <inheritdoc /> protected override async Task SetupJobManager(CancellationToken ct) { manager = ctx.Resolve <EquihashJobManager>( new TypedParameter(typeof(IExtraNonceProvider), new EquihashExtraNonceProvider())); manager.Configure(poolConfig, clusterConfig); await manager.StartAsync(ct); if (poolConfig.EnableInternalStratum == true) { disposables.Add(manager.Jobs .Select(x => Observable.FromAsync(() => OnNewJobAsync(x))) .Concat() .Subscribe(_ => { }, ex => { logger.Debug(ex, nameof(OnNewJobAsync)); })); // we need work before opening the gates await manager.Jobs.Take(1).ToTask(ct); } else { // keep updating NetworkStats disposables.Add(manager.Jobs.Subscribe()); } hashrateDivisor = (double)new BigRational(manager.ChainConfig.Diff1BValue, EquihashConstants.ZCashDiff1b); }
protected override async Task SetupJobManager(CancellationToken ct) { manager = ctx.Resolve <EquihashJobManager>( new TypedParameter(typeof(IExtraNonceProvider), new EquihashExtraNonceProvider(poolConfig.Id, clusterConfig.InstanceId))); manager.Configure(poolConfig, clusterConfig); await manager.StartAsync(ct); if (poolConfig.EnableInternalStratum == true) { disposables.Add(manager.Jobs .Select(job => Observable.FromAsync(() => Guard(() => OnNewJobAsync(job), ex => logger.Debug(() => $"{nameof(OnNewJobAsync)}: {ex.Message}")))) .Concat() .Subscribe(_ => { }, ex => { logger.Debug(ex, nameof(OnNewJobAsync)); })); // start with initial blocktemplate await manager.Jobs.Take(1).ToTask(ct); } else { // keep updating NetworkStats disposables.Add(manager.Jobs.Subscribe()); } hashrateDivisor = (double)new BigRational(manager.ChainConfig.Diff1BValue, EquihashConstants.ZCashDiff1b); }