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;
|
}
|
}
|