【问题标题】:Stratum connection for bitcoin pool mining用于比特币池挖矿的 Stratum 连接
【发布时间】:2017-09-20 09:12:03
【问题描述】:

我正在编写一个比特币矿工,该矿工使用地层协议在矿池中进行挖矿(请参阅文档here

stratum 协议使用 JSON-RPC 2.0 作为编码,根据 JSON-RPC 2.0 规范(规范here)我应该使用套接字来创建与池的连接。

我的问题是我似乎无法从池中收到回复。 JSON-RPC 2.0 规定,对于我发送的每个 Request 对象,我都必须收到回复。

这是我的代码:

public static void main(String[] args) 
{
    connectToPool("stratum.slushpool.com", 3333);
}    
static void connectToPool(String host, int port)
{
    try
    {
        InetAddress address = InetAddress.getByName(host);
        out.println("Atempting to connect to " + address.toString() + " on port " + port + ".");

        socket = new Socket(address, port);
        String message1 = "{\"jsonrpc\" : \"2.0\", \"id\": 1, \"method\": \"mining.subscribe\", \"params\": []}";

        PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
        BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        output.write((message1 + "\\n"));
        out.println(input.readLine());//Hangs here.
    }
    catch (IOException e) 
    {
        out.println(e.getMessage());
        out.println("Error. Can't connect to Pool.");
        System.exit(-2);
    }
}

【问题讨论】:

    标签: java json bitcoin


    【解决方案1】:

    经过数小时的修补,我找到了解决方案。 显然 JSON 字符串不应该有任何空格。所以而不是:

    String message1 = "{\"jsonrpc\" : \"2.0\", \"id\": 1, \"method\": \"mining.subscribe\", \"params\": []}";
    

    应该是:

    String message1 = "{\"id\":1,\"method\":\"mining.subscribe\",\"params\":[]}";
    

    【讨论】:

    • 修复了它。使用 output.println((message1));而是
    【解决方案2】:

    好的,伙计们..这是完整的运行代码。享受吧。

    import java.io.PrintWriter;
    import java.net.*;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    
    public class StratumSubscribe {
    
    public static void main(String[] args)
    {
    connectToPool("sha256.hk.nicehash.com", 3334);
    }
    
    static void connectToPool(String host, int port)
    {
    try
    {
        InetAddress address = InetAddress.getByName(host);
        System.out.println("Atempting to connect to " + address.toString() + " on port " + port + ".");
    
    Socket socket = new Socket(address, port);
    String message1 = "{\"id\":1,\"method\":\"mining.subscribe\",\"params\":[]}";
    
    PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    output.println((message1));
    System.out.println(input.readLine());//Hangs here.
    }
    catch (IOException e)
    {
        System.out.println(e.getMessage());
        System.out.println("Error. Can't connect to Pool.");
        System.exit(-2);
    }
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2021-05-27
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2020-08-08
      • 2016-03-21
      • 2014-06-01
      相关资源
      最近更新 更多