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