@aimf/p2p
v0.1.1
Published
P2P Distribution Layer for AIMF using LibP2P
Maintainers
Readme
@aimf/p2p
P2P Distribution Layer for the AI-MCP Framework (AIMF).
Overview
This package provides peer-to-peer networking capabilities for distributed neural storage and data verification. It enables decentralized data replication, consensus-based verification, and peer discovery.
Features
- P2P Node: Core networking node with peer connections and messaging
- Replication Manager: Distributed data replication across peers
- Consensus Manager: Consensus-based data verification
- Discovery Manager: Peer discovery and reputation tracking
Installation
pnpm add @aimf/p2pUsage
Creating a P2P Node
import { createP2PNode } from "@aimf/p2p";
const node = createP2PNode({
maxConnections: 50,
replicationFactor: 3,
});
await node.start();
console.log("Node ID:", node.getPeerId());
console.log("Addresses:", node.getAddresses());
// Connect to a peer
await node.connectToPeer("/ip4/127.0.0.1/tcp/4001/p2p/peer-id");
// Send a message
const message = node.createMessage("ping", { timestamp: Date.now() });
await node.sendMessage("peer-id", message);
// Store data locally
node.storeBlock({
id: "block-1",
data: new Uint8Array([1, 2, 3]),
neuralHash: "hash1",
cryptoHash: "hash2",
timestamp: Date.now(),
origin: node.getPeerId(),
replicationCount: 0,
});
await node.stop();Replicating Data
import { createP2PNode, createReplicationManager } from "@aimf/p2p";
const node = createP2PNode();
await node.start();
const replication = createReplicationManager(node, {
targetReplicationFactor: 3,
minReplicationFactor: 2,
});
// Store and replicate a block
const block = {
id: "block-1",
data: new Uint8Array([1, 2, 3]),
neuralHash: "neural-hash",
cryptoHash: "crypto-hash",
timestamp: Date.now(),
origin: node.getPeerId(),
replicationCount: 0,
};
node.storeBlock(block);
const status = await replication.replicateBlock(block, "high");
console.log("Replicated to:", status.replicatedTo);
console.log("Replication factor:", replication.getReplicationFactor(block.id));Consensus Verification
import { createP2PNode, createConsensusManager } from "@aimf/p2p";
const node = createP2PNode();
await node.start();
const consensus = createConsensusManager(node, {
consensusThreshold: 0.66,
minVerifiers: 3,
});
// Request verification from peers
const result = await consensus.requestVerification(block, 0.66);
console.log("Verified:", result.verified);
console.log("Consensus level:", result.consensusLevel);
console.log("Verifying peers:", result.verifyingPeers);Peer Discovery
import { createP2PNode, createDiscoveryManager } from "@aimf/p2p";
const node = createP2PNode();
await node.start();
const discovery = createDiscoveryManager(node, {
announceInterval: 30000,
maxPeers: 50,
});
discovery.start();
// Get peer information
const activePeers = discovery.getActivePeers();
const verifiedPeers = discovery.getVerifiedPeers();
const bestPeers = discovery.findBestPeers(5);
// Update peer reputation
discovery.updateReputation("peer-id", 0.1);
discovery.stop();Event Handling
node.on("peer:connect", (peer) => {
console.log("Connected to:", peer.id);
});
node.on("peer:disconnect", (peer) => {
console.log("Disconnected from:", peer.id);
});
node.on("data:stored", (block) => {
console.log("Stored block:", block.id);
});
node.on("replication:complete", (status) => {
console.log("Replication complete:", status.blockId);
});
node.on("verification:complete", (result) => {
console.log("Verification result:", result.verified);
});API Reference
P2PNode
createP2PNode(config?)- Create a new P2P nodestart()- Start the nodestop()- Stop the nodeconnectToPeer(address)- Connect to a peerdisconnectFromPeer(peerId)- Disconnect from a peersendMessage(peerId, message)- Send a messagebroadcast(message)- Broadcast to all peersstoreBlock(block)- Store a data blockgetBlock(blockId)- Retrieve a blockon(event, handler)- Add event listener
ReplicationManager
createReplicationManager(node, config?)- Create managerreplicateBlock(block, priority?)- Replicate a blockgetReplicationFactor(blockId)- Get replication countisReplicationSatisfied(blockId)- Check if minimum replicas existgetBlockLocations(blockId)- Get peers with the block
ConsensusManager
createConsensusManager(node, config?)- Create managerrequestVerification(block, threshold?)- Request consensusverifyBlockLocally(blockId, hashes)- Verify locallygetVerificationHistory(blockId)- Get historygetStatistics()- Get verification statistics
DiscoveryManager
createDiscoveryManager(node, config?)- Create managerstart()- Start discoverystop()- Stop discoverygetKnownPeers()- Get all known peersgetActivePeers()- Get recently active peersfindBestPeers(count)- Find highest reputation peersupdateReputation(peerId, delta)- Adjust reputation
Configuration
P2PConfig
interface P2PConfig {
listenAddresses: string[]; // Addresses to listen on
bootstrapPeers: string[]; // Initial peers to connect to
enableMdns: boolean; // Enable local discovery
enableDht: boolean; // Enable DHT
dhtClientMode: boolean; // DHT client mode only
maxConnections: number; // Max peer connections
minConnections: number; // Min peer connections
connectionTimeout: number; // Connection timeout (ms)
replicationFactor: number; // Target replicas
consensusThreshold: number; // Consensus threshold (0-1)
}ReplicationConfig
interface ReplicationConfig {
targetReplicationFactor: number; // Target replicas
minReplicationFactor: number; // Minimum replicas
replicationTimeout: number; // Timeout (ms)
retryAttempts: number; // Retry count
retryDelay: number; // Retry delay (ms)
}ConsensusConfig
interface ConsensusConfig {
consensusThreshold: number; // Required consensus (0-1)
verificationTimeout: number; // Timeout (ms)
minVerifiers: number; // Minimum verifiers
maxVerifiers: number; // Maximum verifiers
}DiscoveryConfig
interface DiscoveryConfig {
announceInterval: number; // Announce interval (ms)
peerTimeout: number; // Peer timeout (ms)
maxPeers: number; // Max peers to track
minPeers: number; // Min peers to maintain
}Protocol
The P2P layer uses the /aimf/neural/1.0.0 protocol for communication.
Message types:
store- Store data blockretrieve- Retrieve data blockverify- Request verificationreplicate- Replicate dataping/pong- Connectivity checkannounce- Presence announcement
License
MIT
