xiaoyong931011
2023-03-28 d83c9be06ca59d5d45c884e46c5a8aefa6b65123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package cc.mrbird.febs.websocket;
 
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.TimeUnit;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
 
public class BscWebSocketClient extends WebSocketClient {
 
    public BscWebSocketClient(String url) throws URISyntaxException {
        super(new URI(url));
    }
 
    @Override
    public void onOpen(ServerHandshake handshakedata) {
        System.out.println("Connected to BSC WebSocket node");
 
        // 订阅ERC-20代币转账事件
        subscribeToErc20Transfers("0x55d398326f99059ff775485246999027b3197955"); // USDT合约地址
    }
 
    @Override
    public void onMessage(String message) {
        System.out.println("Received message: " + message);
 
        // 在这里处理收到的区块链事件
        JSONObject jsonObject = new JSONObject(Boolean.parseBoolean(message));
        String method = jsonObject.getString("method");
        if (method.equals("eth_subscription")) {
            JSONArray params = jsonObject.getJSONArray("params");
            JSONObject result = params.getJSONObject(0).getJSONObject("result");
            String from = result.getString("from");
            String to = result.getString("to");
            String value = result.getString("value");
            System.out.println("Received USDT transfer from " + from + " to " + to + ", amount: " + value);
        }
    }
 
    @Override
    public void onClose(int code, String reason, boolean remote) {
        System.out.println("Disconnected from BSC WebSocket node");
    }
 
    @Override
    public void onError(Exception ex) {
        System.err.println("Error occurred: " + ex.getMessage());
    }
 
    // 订阅ERC-20代币转账事件
    private void subscribeToErc20Transfers(String contractAddress) {
        String message = "{\"id\":1,\"method\":\"eth_subscribe\",\"params\":[\"logs\",{" +
                "\"address\":\"" + contractAddress + "\"," +
                "\"topics\":[\"0x" + "a9059cbb" + "\",null,null]," +
                "\"fromBlock\":\"latest\"" +
                "}]}";
        send(message);
        System.out.println("Subscribed to ERC-20 transfer events for " + contractAddress);
    }
 
    public static void main(String[] args) throws URISyntaxException, InterruptedException {
        String url = "wss://bsc-ws-node.nariox.org:443"; // 更换为您想要连接的节点地址
        BscWebSocketClient client = new BscWebSocketClient(url);
        client.connect();
 
        // 等待连接成功
        while (!client.isOpen()) {
            System.out.println("Connecting to BSC WebSocket node...");
            TimeUnit.SECONDS.sleep(1);
        }
 
        // 连接成功后,继续运行程序
        System.out.println("Connected to BSC WebSocket node, waiting for events...");
        TimeUnit.SECONDS.sleep(60); // 等待60秒,以便收到一些事件
        client.close();
    }
 
}