Development Updates:We are updating the Skycoin wire protocol.
This is the last thing on checklist before launch.=== Blob Replicator ===The Blob Replicator is done. Blob replicator is used for transaction replication and the emergency messaging system.
-
https://github.com/skycoin/skycoin/blob/master/src/sync/blob_replicator.goThis uses a gossip protocol to replicate data among a swarm of peers.
- A blob is a series of bytes. The id of a blob is its SHA256 hash
- On connect a peer receives a list of all the hashes of the Blobs the peer has.
- the client requests any blobs peers have that the local client doesnt have
- When a client downloads a new blob, it announces the hash of the blob, so other peers know it exists
- There is a callback function that determines if blob is valid, should be ignored or if peer sending the blob should be kicked
- Blobs are only replicated if they are "valid" and the callback function judges validity
Uses of blobs include
- emergency messaging system (criteria: blobs contain valid signature)
- transactions (criteria: transactions must be valid and meet various criteria)
Example of using Blob Replicator:
https://github.com/skycoin/skycoin/blob/master/run.go=== Request Manager ===Request manager is under development and almost done. Request Manager rate limits requests and is used to protect against DDoS and Sybil attacks.
https://github.com/skycoin/skycoin/blob/master/src/sync/request_manager.goRequest Manager
- queues up requests for data and spreads them over times
- keeps tracks of what requests are in progress
- limits requests per peer
- disconnects clients who are not responding to requests
- disconnects clients who send data that was not requested
- stores information for detecting DDoS and Sybil attack nodes
- kicks nodes that are slow, to speed up blockchain downloads
=== Hash Chain Replicator ===This is like the Blob Replicator, but used for block chain replication. This component is used for downloading the blockchain and for Obelisk.
This is last component of the wire protocol before launch.