public override async Task ConfigureAsync(ClusterConfig clusterConfig, PoolConfig poolConfig) { await base.ConfigureAsync(clusterConfig, poolConfig); poolExtraConfig = poolConfig.Extra.SafeExtensionDataAs <EquihashPoolConfigExtra>(); // detect network var blockchainInfoResponse = await daemon.ExecuteCmdSingleAsync <BlockchainInfo>(logger, BitcoinCommands.GetBlockchainInfo); if (blockchainInfoResponse.Response.Chain.ToLower() == "test") { networkType = BitcoinNetworkType.Test; } else if (blockchainInfoResponse.Response.Chain.ToLower() == "regtest") { networkType = BitcoinNetworkType.RegTest; } else { networkType = BitcoinNetworkType.Main; } chainConfig = poolConfig.Template.As <EquihashCoinTemplate>().GetNetwork(networkType); // detect z_shieldcoinbase support var response = await daemon.ExecuteCmdSingleAsync <JObject>(logger, EquihashCommands.ZShieldCoinbase); supportsNativeShielding = response.Error.Code != (int)BitcoinRPCErrorCode.RPC_METHOD_NOT_FOUND; }
protected override void PostChainIdentifyConfigure() { ChainConfig = coin.GetNetwork(networkType); solver = EquihashSolverFactory.GetSolver(ctx, ChainConfig.Solver); base.PostChainIdentifyConfigure(); }
public static string EncodeTarget(double difficulty, EquihashCoinTemplate.EquihashNetworkDefinition chainConfig) { string result; var diff = BigInteger.ValueOf((long)(difficulty * 255d)); var quotient = chainConfig.Diff1Value.Divide(diff).Multiply(BigInteger.ValueOf(255)); var bytes = quotient.ToByteArray().AsSpan(); Span <byte> padded = stackalloc byte[EquihashConstants.TargetPaddingLength]; var padLength = EquihashConstants.TargetPaddingLength - bytes.Length; if (padLength > 0) { bytes.CopyTo(padded.Slice(padLength, bytes.Length)); result = padded.ToHexString(0, EquihashConstants.TargetPaddingLength); } else { result = bytes.ToHexString(0, EquihashConstants.TargetPaddingLength); } return(result); }