Web3.shh

Web applications can communicate with an Ethereum node to the web3.shh module, a JavaScript special application programming interface (API) library that is a component of the web3.js library. Its main purpose is to use the Whisper protocol to give the Ethereum network decentralized peer-to-peer messaging capabilities.
Purpose and Core Concept
- Communication between DApps (Decentralized Applications) is made easier by web3.shh.
- It provides a communication layer known as “dark communication” or “completely dark operations” that puts privacy and untraceability first. This indicates that during peer-to-peer transmission, no metadata is leaked.
- This is important since simple message exchanges between nodes typically do not require a consensus mechanism, and although blockchain itself can be used for communication, it is costly. An alternative that is impervious to censorship is Whisper.
The Whisper Protocol Explained
- Unlike standard communication protocols that maximise bandwidth and minimise delay, Whisper is designed with the core goal of eliminating metadata leakage, even at a significant cost in terms of bandwidth and latency.
- This message system has routing privacy and a multi-distributed hash table (DHT).
- Whisper encrypts messages and hides the routing of such messages.
- Whisper messages have a Time to Live (TTL) since they are ephemeral.
- It functions on the basis of two fundamental ideas: envelopes and messages. An envelope, which contains the encrypted message datagram, is an example of an unencrypted data format that a node can understand. A nonce (used for Proof-of-Work to measure peer efforts), encrypted message data (the payload), original TTL, absolute time to expiration, and cryptographically secure subjects are all included in an envelope.
- It exchanges messages between nodes via the DEVp2p wire protocol.
- It is intended for situations where real-time communication is not absolutely necessary and for modest data transfers.
Connectivity to the Ethereum Network
- The creation of Whisper and Swarm (for decentralized storage) adds to a fully decentralized ecosystem in which Swarm offers storage, Whisper manages messaging, and Ethereum (more especially, the Ethereum Virtual Machine, or EVM) provides compute services.
- It is very desired that the entire ecosystem not just the core computation be decentralized.
Structure and Features of the API (web3.shh Modules)
Many sub-modules and auxiliary functions for working with the Whisper protocol are included in the web3.shh module. These consist of:
- SetProvider(): Modifies the module’s provider.
- Providers(): Lists the providers that are currently available.
- GivenProvider(): Provides the browser’s current native provider.
- CurrentProvider(): Gives back null or the current set provider.
- BatchRequest(): Generates and runs requests in batches.
- Extend(): Permits web3 modules to be extended.
- GetId(): Retrieves the network ID as of right now.
- IsListening(): Checks if a node is listening for peers.
- GetPeerCount(): Total connected peers.
- GETVersion() returns the Whisper version.
- DeleteSymKey(): Gets rid of the symmetric key linked to a specified ID.
- Post(): Sends a message to the network using Whisper.
- Subscribing to the incoming Whisper message is done with subscribe().
- ClearSubscriptions(): Disables the Whisper node subscription.
- A new filter is created inside a node using the newMessageFilter() function.
- DeleteMessageFilter(): Removes a node’s message filter.
- GetFilterMessages(): Returns messages that fit the new filter criteria and were received since the last time this function was used.
Interaction with Geth:
- Use the –shh option to enable Whisper, which Geth currently supports, when running the Ethereum client.
- It connects with Geth via RPC or IPC, which frequently use JSON-RPC. RPC can operate across several computers (unless localhost is given), whereas IPC operates locally over an IPC pipe (geth.ipc, for example).
- Complementing the computational (EVM) and storage (Swarm) components of the Ethereum ecosystem, web3.shh and its underlying Whisper protocol essentially fill the demand for a really private and untraceable messaging layer within the decentralised web.
- The web3.bzz module: The Web3.js JavaScript library includes the web3.bzz module, commonly known as web3-bzz, which is used to communicate with the Swarm protocol in the Ethereum environment.
Swarm and web3.bzz’s Objective and Role
- Dispersed Storage Ethereum’s decentralized storage platform, Swarm, is mainly used for static data. In contrast to conventional centralized storage services, it functions as a distributed, peer-to-peer storage network where files are addressed by the hash of their content.
- Foundation for Web 3.0 The Ethereum Web3 stack is designed to support Swarm as a native base layer service. It is intended to give Ethereum Web 3.0 a distributed storage layer that is fault-tolerant and immune to DDOS attacks. Swarm contributes to the creation of a serverless, completely decentralized architecture for Web 3.0, along with Whisper (for communication) and the Ethereum Virtual Machine (EVM) (for computing services).
- Protocol (bzz): The Swarm network makes use of a protocol designated bzz, which is utilised by each Swarm node to perform different tasks inside the protocol.
- Engaging with Swarm with web3.bzz: In most cases, a “manifest” file is needed to access content stored on Swarm. By providing paths and matching content hashes, this file serves as metadata for URL-based content retrieval and characterises a group of documents.
Applications can communicate with Swarm to a number of API sub-modules and services offered by the web3.bzz module:
- SetProvider: Enables the web3.bzz module’s provider to be changed.
- GivenProvider: From a web browser that supports Ethereum, returns the native current provider.
- CurrentProvider: Gives either NULL or the URL of the current provider.
- Upload: Makes it easier to upload raw data, files, or folders to the Swarm network.
- Download: Makes it possible to download files and directories from Swarm, either as a buffer or straight to a disc.
- Pick: Launches a file picker function to help with file selection right in the browser.
- Net: Provides access to Ethereum node network properties; this feature is also present in web3.eth.net and web3.shh.net.