Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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;
        }
    }
Ejemplo n.º 3
0
    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 !
        };
    }
Ejemplo n.º 4
0
    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];
    }