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
package cc.mrbird.febs.websocket;
import com.alibaba.fastjson.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Service;
 
import java.net.URI;
 
@Service
public class BscWebSocketService {
 
    private final String USDT_CONTRACT_ADDRESS = "0xdac17f958d2ee523a2206206994597c13d831ec7"; // USDT合约地址
    private final String YOUR_ADDRESS = "0x1234567890"; // 您的地址
 
    public void subscribeToUsdtTransfers() throws Exception {
        URI uri = new URI("wss://bsc-mainnet.nodereal.io/ws/v1/78074065950e4915aef4f12b6f357d16"); // BSC主网节点WebSocket API地址
        WebSocketClient client = new WebSocketClient(uri) {
 
            @Override
            public void onOpen(ServerHandshake handshake) {
                JSONObject payload = new JSONObject();
                payload.put("jsonrpc", "2.0");
                payload.put("method", "eth_subscribe");
                payload.put("params", new Object[]{"logs", getFilterParams()});
                send(payload.toString());
            }
 
            @Override
            public void onMessage(String message) {
                JSONObject response = new JSONObject(Boolean.parseBoolean(message));
                if (response.containsKey("params")) {
                    JSONObject result = response.getJSONObject("params").getJSONArray("result").getJSONObject(0);
                    String transactionHash = result.getString("transactionHash");
                    String from = result.getString("address");
                    String to = result.getJSONArray("topics").getString(2);
                    String value = result.getJSONArray("data").getString(0);
                    // 在这里处理收到的交易信息
                    // transactionHash: 交易哈希值
                    // from: 发送方地址
                    // to: 接收方地址
                    // value: 转账数量
                }
            }
 
            @Override
            public void onClose(int code, String reason, boolean remote) {
                System.out.println("WebSocket连接关闭: " + reason);
            }
 
            @Override
            public void onError(Exception ex) {
                System.out.println("WebSocket连接出错: " + ex.getMessage());
            }
        };
        client.connect();
    }
 
    private JSONObject getFilterParams() {
        JSONObject filterParams = new JSONObject();
        filterParams.put("address", USDT_CONTRACT_ADDRESS);
        filterParams.put("topics", new String[]{
                "0xa9059cbb000000000000000000000000" + YOUR_ADDRESS.substring(2),
                null,
                null
        });
        return filterParams;
    }
}