示例#1
0
        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;
        }
示例#2
0
        protected override void PostChainIdentifyConfigure()
        {
            ChainConfig = coin.GetNetwork(networkType);
            solver      = EquihashSolverFactory.GetSolver(ctx, ChainConfig.Solver);

            base.PostChainIdentifyConfigure();
        }
示例#3
0
        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);
        }