目前主流的区块链技术架构主要分为五层,数据层是最底层的技术,主要实现了数据存储、账户信息、交易信息等模块,数据存储主要基于Merkle树,通过区块的方式和链式结构实现,而账户和交易基于数字签名、哈希函数和非对称加密技术等多种密码学算法和技术,来保证区块链中数据的安全性。
网络层主要实现网络节点的连接和通讯,又称点对点技术,各个区块链节点通过网络进行通信。共识层是通过共识算法,让网络中的各个节点对全网所有的区块数据真实性正确性达成一致。
@Component
public class P2PServer {
@Autowired
P2PService p2pService;
public void initP2PServer(int port) {
WebSocketServer socketServer = new WebSocketServer(new InetSocketAddress(port)) {
@Override
public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) {
p2pService.getSockets().add(webSocket);
}
@Override
public void onClose(WebSocket webSocket, int i, String s, boolean b) {
p2pService.getSockets().remove(webSocket);
System.out.println("connection closed to address:" + webSocket.getRemoteSocketAddress());
}
@Override
public void onMessage(WebSocket webSocket, String msg) {币安农场游戏开发详情V:MrsFu123
//作为服务端,业务逻辑处理
p2pService.handleMessage(webSocket, msg, p2pService.getSockets());
}
@Override
public void onError(WebSocket webSocket, Exception e) {
p2pService.getSockets().remove(webSocket);
System.out.println("connection failed to address:" + webSocket.getRemoteSocketAddress());
}
@Override
public void onStart() {
}
};
socketServer.start();
System.out.println("listening websocket p2p port on: " + port);
}
}
.java
@Component
public class P2PClient {
@Autowired
P2PService p2pService;
public void connectToPeer(String addr) {
try {
final WebSocketClient socketClient = new WebSocketClient(new URI(addr)) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
//客户端发送请求,查询最新区块
p2pService.write(this, p2pService.queryLatestBlockMsg());
p2pService.getSockets().add(this);
}
@Override
public void onMessage(String msg) {
p2pService.handleMessage(this, msg, p2pService.getSockets());
}
@Override
public void onClose(int i, String msg, boolean b) {
p2pService.getSockets().remove(this);
System.out.println("connection closed");
}
@Override
public void onError(Exception e) {
p2pService.getSockets().remove(this);
System.out.println("connection failed");
}
};
socketClient.connect();
} catch (URISyntaxException e) {
System.out.println("p2p connect is error:" + e.getMessage());
}
}
}
// 查询最新的区块
public final static int QUERY_LATEST_BLOCK = 1;
// 返回最新的区块
public final static int RESPONSE_LATEST_BLOCK = 2;
// 查询整个区块链
public final static int QUERY_BLOCKCHAIN = 3;
// 返回整个区块链
public final static int RESPONSE_BLOCKCHAIN



