Beispiel #1
0
    public void CalculateHashSlow()
    {
        var buf = new byte[32];

        // light-mode
        RandomARQ.CreateSeed(realm, seedHex);

        RandomARQ.CalculateHash("xmr", seedHex, input1, buf);
        var result = buf.ToHexString();

        Assert.Equal(hashExpected1, result);

        Array.Clear(buf, 0, buf.Length);

        // second invocation should give the same result
        RandomARQ.CalculateHash("xmr", seedHex, input1, buf);
        result = buf.ToHexString();
        Assert.Equal(hashExpected1, result);

        RandomARQ.CalculateHash("xmr", seedHex, input2, buf);
        result = buf.ToHexString();
        Assert.Equal(hashExpected2, result);

        RandomARQ.DeleteSeed(realm, seedHex);
    }
Beispiel #2
0
    public void CalculateHashFast()
    {
        var buf = new byte[32];

        // fast-mode
        RandomARQ.CreateSeed(realm, seedHex, null, RandomX.randomx_flags.RANDOMX_FLAG_FULL_MEM);

        RandomARQ.CalculateHash("xmr", seedHex, input1, buf);
        var result = buf.ToHexString();

        Assert.Equal(hashExpected1, result);

        Array.Clear(buf, 0, buf.Length);

        // second invocation should give the same result
        RandomARQ.CalculateHash("xmr", seedHex, input1, buf);
        result = buf.ToHexString();
        Assert.Equal(hashExpected1, result);

        RandomARQ.CalculateHash("xmr", seedHex, input2, buf);
        result = buf.ToHexString();
        Assert.Equal(hashExpected2, result);

        RandomARQ.DeleteSeed(realm, seedHex);
    }
Beispiel #3
0
    public void CreateAndDeleteSeed()
    {
        // creation
        RandomARQ.CreateSeed(realm, seedHex);
        Assert.True(RandomARQ.realms.ContainsKey(realm));
        Assert.True(RandomARQ.realms[realm].ContainsKey(seedHex));

        // accessing the created seed should work
        Assert.NotNull(RandomARQ.GetSeed(realm, seedHex));

        // creating the same realm and key twice should not result in duplicates
        RandomARQ.CreateSeed(realm, seedHex);
        Assert.Equal(RandomARQ.realms.Count, 1);
        Assert.Equal(RandomARQ.realms[realm].Count, 1);

        // deletion
        RandomARQ.DeleteSeed(realm, seedHex);
        Assert.False(RandomARQ.realms[realm].ContainsKey(seedHex));
    }
    private void UpdateHashParams(GetBlockTemplateResponse blockTemplate)
    {
        switch (coin.Hash)
        {
        case CryptonightHashType.RandomX:
        {
            // detect seed hash change
            if (currentSeedHash != blockTemplate.SeedHash)
            {
                logger.Info(() => $"Detected new seed hash {blockTemplate.SeedHash} starting @ height {blockTemplate.Height}");

                if (poolConfig.EnableInternalStratum == true)
                {
                    RandomX.WithLock(() =>
                        {
                            // delete old seed
                            if (currentSeedHash != null)
                            {
                                RandomX.DeleteSeed(randomXRealm, currentSeedHash);
                            }

                            // activate new one
                            currentSeedHash = blockTemplate.SeedHash;
                            RandomX.CreateSeed(randomXRealm, currentSeedHash, randomXFlagsOverride, randomXFlagsAdd, extraPoolConfig.RandomXVMCount);
                        });
                }

                else
                {
                    currentSeedHash = blockTemplate.SeedHash;
                }
            }

            break;
        }

        case CryptonightHashType.RandomARQ:
        {
            // detect seed hash change
            if (currentSeedHash != blockTemplate.SeedHash)
            {
                logger.Info(() => $"Detected new seed hash {blockTemplate.SeedHash} starting @ height {blockTemplate.Height}");

                if (poolConfig.EnableInternalStratum == true)
                {
                    RandomARQ.WithLock(() =>
                        {
                            // delete old seed
                            if (currentSeedHash != null)
                            {
                                RandomARQ.DeleteSeed(randomXRealm, currentSeedHash);
                            }

                            // activate new one
                            currentSeedHash = blockTemplate.SeedHash;
                            RandomARQ.CreateSeed(randomXRealm, currentSeedHash, randomXFlagsOverride, randomXFlagsAdd, extraPoolConfig.RandomXVMCount);
                        });
                }

                else
                {
                    currentSeedHash = blockTemplate.SeedHash;
                }
            }

            break;
        }
        }
    }