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); }
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); }
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; } } }