RippleMessenger: A blockchain-based client (part 1/2)
Source: Dev.to
Question
Based on the previous analysis of personal data rights, to what extent can an individual achieve the maximum degree of fairness and freedom in cyberspace?
Sovereignty on a Personal Computer
When using their own computer (which is also part of cyberspace), an individual is almost sovereign:
- Store any data they want.
- Read it whenever they want.
- Delete it at will.
- Generate new content (write novels, edit videos, do design work).
- Install any software they like (or even write their own).
- Turn the machine on or off, connect to the network or disconnect.
In short, when using a personal computer, the individual is the master.
Therefore: use your computer more often. When you are using your own computer, you are in control.
Maximum Realistic Power vs. Online Services
The greatest power an individual can realistically strive for when facing online services they do not control is the right for their published data not to be deleted.
To achieve this, three conditions must be met:
-
Local storage & backup
- Keep your data on your personal computer.
- Even if a network service deletes the data, you can re‑upload and re‑publish it from your local copy.
-
Open, independent, and public data format
- Publish data in a format that is openly specified and independent of any proprietary conditions.
- Example: once the TCP/IP packet standard is publicly released, any packet that conforms to the standard can be transmitted across the Internet.
- The data can exist independently of any particular system; the system merely obeys the individual’s instructions to transmit, store, or display the data.
- Consequently, any person can provide data services in cyberspace—no single provider can delete an individual’s published data across the entire network.
-
Non‑forgable and non‑repudiable data (cryptographic integrity)
- Sign the data with cryptography. A valid signature prevents forgery and ensures the signer cannot deny publishing it.
- The key pair is generated locally using open algorithms and is not authorized or managed by any third party, allowing anonymous publication (anonymity toward service providers and non‑interacting parties).
- The individual may reveal their real identity to specific parties, or not. Trust is ultimately a judgment made by each concrete person.
Apart from the two major powers described above, individuals do not need to pursue additional rights—and may even consider proactively giving up other demands.
Recommended Data Format
Based on the analysis, individuals should choose one data format to publish data in cyberspace. The format is defined below.
{
"type": "object",
"required": [
"ObjectType",
"Sequence",
"PreHash",
"Content",
"Timestamp",
"PublicKey",
"Signature"
],
"maxProperties": 10,
"properties": {
"ObjectType": { "type": "number", "const": "ObjectType.Bulletin" },
"Sequence": { "type": "number" },
"PreHash": { "type": "string" },
"Content": { "type": "string" },
"Tag": {
"type": "array",
"minItems": 1,
"items": { "type": "string" }
},
"Quote": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["Address", "Sequence", "Hash"],
"properties": {
"Address": { "type": "string" },
"Sequence": { "type": "number" },
"Hash": { "type": "string" }
}
}
},
"File": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["Name", "Ext", "Size", "Hash"],
"properties": {
"Name": { "type": "string" },
"Ext": { "type": "string" },
"Size": { "type": "number" },
"Hash": { "type": "string" }
}
}
},
"Timestamp": { "type": "number" },
"PublicKey": { "type": "string" },
"Signature": { "type": "string" }
}
}
Field Explanations
Core / Mandatory Fields (6)
| Field | Description |
|---|---|
| ObjectType | Identifies the type of this object. |
| Sequence | Sequence number of this item in the chain published by this PublicKey under this ObjectType (starts at 1, increments by 1). Forms a logical chain per account per type. |
| PreHash | Hash of the previous item in the chain; for the first item it is the fixed value 44F8764BCACFF5424D4044B784549A1B. Together with Sequence, creates a tamper‑evident chain. |
| Timestamp | Creation time of this bulletin; should be later than any referenced items. |
| PublicKey | Identifier of the publishing account. |
| Signature | Cryptographic signature over the bulletin, ensuring integrity, authenticity (tied to PublicKey), and non‑repudiation. |
Content‑Related Fields (Optional / Extensible)
| Field | Description |
|---|---|
| Content | Main text content of the bulletin, filled by the user. |
| Tag | Array of tags for later retrieval and filtering. |
| Quote | References to other bulletins (cross‑chain linking / replying), by Address + Sequence + Hash. |
| File | Metadata about attached files (name, extension, size, hash). |
Bulletin Overview
The bulletin itself does not contain file data — it only holds references via a hash, allowing the actual files to be transported separately.
Minimum Validation Rules
Any node/peer must perform the following checks before accepting or storing a bulletin:
-
Signature verification
- Use the provided PublicKey to verify the Signature.
- This confirms the integrity and authenticity of the publisher.
-
Sequence continuity
- Ensure that the current last sequence number in the chain (for this
PublicKey+ObjectType) is exactlySequence - 1.
- Ensure that the current last sequence number in the chain (for this
-
Pre‑hash validation
- Compute the hash of the previous item (
Sequence - 1). - Confirm that this computed hash matches the bulletin’s
PreHashfield. - This guarantees that the new item can be appended to the tail of the chain.
- Compute the hash of the previous item (