public void Ban(IPAddress address, TimeSpan duration) { Contract.RequiresNonNull(address, nameof(address)); Contract.Requires <ArgumentException>(duration.TotalMilliseconds > 0, $"{nameof(duration)} must not be empty"); // don't ban loopback if (address.Equals(IPAddress.Loopback) || address.Equals(IPAddress.IPv6Loopback)) { return; } cache.Set(address.ToString(), string.Empty, duration); }
protected async Task PersistPaymentsAsync(Balance[] balances, string[] transactionConfirmations) { Contract.RequiresNonNull(balances); Contract.RequiresNonNull(transactionConfirmations); Contract.Requires <ArgumentException>(balances.Length > 0); Contract.Requires <ArgumentException>(balances.Length == transactionConfirmations.Length); var coin = poolConfig.Template.As <CoinTemplate>(); try { await faultPolicy.ExecuteAsync(async() => { await cf.RunTx(async(con, tx) => { for (var i = 0; i < balances.Length; i++) { var balance = balances[i]; var transactionConfirmation = transactionConfirmations[i]; if (!string.IsNullOrEmpty(transactionConfirmation) && poolConfig.RewardRecipients.All(x => x.Address != balance.Address)) { // record payment var payment = new Payment { PoolId = poolConfig.Id, Coin = coin.Symbol, Address = balance.Address, Amount = balance.Amount, Created = clock.Now, TransactionConfirmationData = transactionConfirmation }; await paymentRepo.InsertAsync(con, tx, payment); } // reset balance logger.Info(() => $"[{LogCategory}] Resetting balance of {balance.Address}"); await balanceRepo.AddAmountAsync(con, tx, poolConfig.Id, balance.Address, -balance.Amount, "Balance reset after payment"); } }); }); } catch (Exception ex) { logger.Error(ex, () => $"[{LogCategory}] Failed to persist the following payments: " + $"{JsonConvert.SerializeObject(balances.Where(x => x.Amount > 0).ToDictionary(x => x.Address, x => x.Amount))}"); throw; } }
public RpcClient(DaemonEndpointConfig endPoint, JsonSerializerSettings serializerSettings, IMessageBus messageBus, string poolId) { Contract.RequiresNonNull(serializerSettings, nameof(serializerSettings)); Contract.RequiresNonNull(messageBus, nameof(messageBus)); Contract.Requires <ArgumentException>(!string.IsNullOrEmpty(poolId), $"{nameof(poolId)} must not be empty"); config = endPoint; this.serializerSettings = serializerSettings; this.messageBus = messageBus; this.poolId = poolId; serializer = new JsonSerializer { ContractResolver = serializerSettings.ContractResolver ! }; }
public CryptonoteJob(GetBlockTemplateResponse blockTemplate, byte[] instanceId, string jobId, CryptonoteCoinTemplate coin, PoolConfig poolConfig, ClusterConfig clusterConfig, string prevHash, string randomXRealm) { Contract.RequiresNonNull(blockTemplate); Contract.RequiresNonNull(poolConfig); Contract.RequiresNonNull(clusterConfig); Contract.RequiresNonNull(instanceId); Contract.Requires <ArgumentException>(!string.IsNullOrEmpty(jobId)); BlockTemplate = blockTemplate; PrepareBlobTemplate(instanceId); PrevHash = prevHash; RandomXRealm = randomXRealm; hashFunc = hashFuncs[coin.Hash]; }