A response layer.
Not a rating system.

The public record, its real constraints, and the distinction between a reaction and a claim about content.

A key. A wallet.
A fixed response.

The contract stores one uint8 reaction for each non-zero bytes32 content key and wallet. Values one through six are valid reactions. Zero represents no current reaction and is reached through remove—not react.

Useful, Clear, Insightful, Curious, Support and Concern are interface labels for those fixed values. The contract does not define a ranking, score, weight or financial meaning for them.

The storage model · diagram, not live activity
CallerOne wallet
ReferencePublic content key
Stored togetherOne current reaction

Changing the response replaces this choice.

Illustrative replacement: Useful → Concern

Old reaction tally −1New reaction tally +1
Other wallets’ choices stay unchanged. These are transition rules, not live counts.

The interface can derive SHA-256 from a canonical public HTTPS URL locally, or accept a public key directly. It does not retrieve an article. Any known link can be hashed again, so a key is not confidentiality.

One current choice.
History stays public.

react(content,reaction) reads the caller’s previous choice. A changed choice decrements the old count and increments the new one. Repeating the same choice is rejected. remove(content) only affects the sending wallet and rejects when no reaction exists.

No invented version protection.

This contract has no expected-version argument. The frontend rechecks the reviewed previous reaction before submission, but cannot promise an atomic lock against another pending transaction by the same wallet. A mismatched receipt is reported for inspection, not claimed as the reviewed result.

The Reacted event records exact content key, author, previous reaction and new reaction. A removal’s new reaction is zero. Frontend confirmation checks those parameters, contract log address and receipt status/hash/from/to.

Wallet responses.
Not verified people.

One person may control several wallets, and a wallet may be automated. Counts are not unique-human measurements, identity proof, reputation, truth assessment, content quality or governance results.

There is no moderation or removal of someone else’s reaction, no privileged administrator, payments, token, reward, custody or article integration.

Choose public references.

Content keys, author wallets, reaction choices and transactions would be public on a deployed network. Replacing or removing changes current state but does not erase history. Avoid credentials, private links and sensitive context.

The practice mode is in-memory, clearly labelled, and resets on refresh. Its role names and tallies are not blockchain output.

Locally prepared.
Not deployed.

This project includes the original dedicated Solidity source and local compilation/tests, plus an independent frontend adapter. Default configuration has no network or address and disables reads/writes.

A future deployed review must verify runtime code, account/chain and current reaction, estimate gas with buffer, display a bounded maximum fee and check balance. The review expires after sixty seconds. Input, role, mode and connection changes invalidate old asynchronous results.

Public deployment requires separate authorization, a controlled signer and verified parameters. Local tests are not a security audit or proof of a real wallet transaction. A changed contract needs a new address and an explicit migration; no proxy is assumed.

Practice a reactionRead privacy