3.2 KiB
3.2 KiB
gsio-node
A Rust-based Socket.IO server that serves as a node in the GSIO-Net distributed ledger system.
Overview
The gsio-node component is a Socket.IO server that:
- Maintains a distributed ledger with cryptographic verification
- Handles real-time communication with clients
- Participates in a peer-to-peer network with other nodes
- Provides APIs for adding and retrieving ledger entries
Features
- Socket.IO Server: Provides real-time bidirectional communication
- Distributed Ledger: Maintains a chain of cryptographically linked entries
- P2P Networking: Communicates with other nodes to synchronize the ledger
- Node Discovery: Automatically discovers and connects to other nodes
- Consensus Mechanism: Ensures all nodes converge to the same ledger state
Installation
Prerequisites
- Rust (latest stable version)
- Cargo (comes with Rust)
Building
# Clone the repository (if you haven't already)
git clone <repository-url>
cd gsio-net
# Build the gsio-node component
cd crates/gsio-node
cargo build
Usage
Running the Server
# Run in development mode
cargo run
# Run in release mode
cargo run --release
The server will start on port 3000 by default.
API Endpoints
The gsio-node server provides the following Socket.IO events:
Client Events (Namespace: "/")
Event | Description | Parameters | Response Event |
---|---|---|---|
add_ledger_entry |
Add a new entry to the ledger | JSON data to store | ledger_entry_added |
get_ledger |
Get all entries in the ledger | None | ledger_entries |
get_known_nodes |
Get all known nodes in the network | None | known_nodes |
ping |
Simple ping to check connection | Any data | pong |
message |
Send a message to the server | Any data | message-back |
message-with-ack |
Send a message with acknowledgement | Any data | Acknowledgement with same data |
P2P Events (Namespace: "/p2p")
Event | Description | Parameters | Response Event |
---|---|---|---|
p2p_message |
Send a message to other nodes | P2P message object | Varies based on message type |
Examples
Adding a Ledger Entry
// Using Socket.IO client
socket.emit("add_ledger_entry", {
message: "Hello, ledger!",
timestamp: new Date().toISOString()
});
// Handle the response
socket.on("ledger_entry_added", (entry) => {
console.log("Entry added:", entry);
});
Getting Ledger Entries
// Using Socket.IO client
socket.emit("get_ledger");
// Handle the response
socket.on("ledger_entries", (entries) => {
console.log("Ledger entries:", entries);
});
Getting Known Nodes
// Using Socket.IO client
socket.emit("get_known_nodes");
// Handle the response
socket.on("known_nodes", (data) => {
console.log("Known nodes:", data.nodes);
});
Architecture
The gsio-node component consists of the following modules:
- main.rs: Entry point and Socket.IO server setup
- ledger.rs: Implementation of the distributed ledger
- p2p.rs: Implementation of peer-to-peer communication
Testing
# Run tests
cargo test
License
[Add license information here]