
The goal of Axiom is to provide a completely anonymous, decentralized, and censorship-resistant social media platform. To make this possible, the architecture is strictly divided for the protocol and the clients. This repository defines the protocol and the smart contract and a standardized data structure on an Ethereum Layer 2 network.
42161https://arb1.arbitrum.io/rpc (or any custom Alchemy/Infura endpoint)0xc11CFf8111e8b1F055eba095Efb679a38Abe6b63(Note: Axiom uses a UUPS Upgradeable Proxy architecture. All client interactions must always be directed towards this Proxy address, never the underlying implementation contract).
Clients should never attempt to read protocol posts directly from the smart contract state variables (as preserving gas is a priority, content is not stored in state). Instead, clients must index the blockchain events.
To publish data to the Protocol, clients must submit an on-chain transaction calling the publishAxiom function on the Proxy contract.
The goal of Axiom is to provide a completely anonymous, decentralized, and censorship-resistant social media platform.
To make this possible, the architecture is strictly divided: the foundation (the protocol) and the clients (the software). This repository defines that foundation—a smart contract and a standardized data structure on an Ethereum Layer 2 network.
The protocol establishes the foundation of the platform:
Axiom is designed to enable true freedom of speech for users in countries where communication is restricted. The protocol distinguishes between three security levels. It assumes that users know which security level is appropriate for their specific situation.
For all levels, Onion Routing (e.g., Tor) is strictly mandatory. Communicating with commercial RPC providers (like Infura or Alchemy) leaks the sender's IP address in plaintext. To close potentially life-threatening OPSEC vulnerabilities for dissidents, clients are required to route transactions to the RPC nodes exclusively through the Tor network.
For messages on Level 3, all clients must strictly adhere to the following cryptographic standards to ensure interoperability and avoid compromising security.
Axiom utilizes a hybrid payload delivery (ABI Split). To prevent the smart contract from having to unpack expensive data formats, the data is separated prior to transmission:
uint8 _level) and the initialization vector (bytes _iv) are passed as direct parameters to the smart contract, as it requires them to enforce its security rules.Axiom uses single letters as keys to save bytes. The author (msg.sender) and timestamp (block.timestamp) are omitted, as the smart contract extracts these values in a tamper-proof manner anyway.
t (Type): Integer. The type of action.c (Content): String/Bytes. The text, name, or ciphertext.h (Hashtags/Tags): Array. Optional. Used for categorization (subchannels).m (Message Hint): Bytes (length of 2). Level 3 only. A 2-byte HMAC hash used for fuzzy bucketing.r (Reply-To): Bytes. Optional. The transaction hash of a referenced post.t Field)0 = Profile Update (Links the wallet address to a readable name in field c)1 = Post (Standard message)2 = Reply (r requires the hash of the original post)3 = Like (r requires the hash of the post)4 = Unlike (Reverts Type 3)5 = Retweet / Repost (r requires the hash of the post)6 = Un-Retweet (Reverts Type 5)h Field)c). For external observers, the tags are therefore completely invisible (Dark Routing).m Field)Because tags are encrypted on Level 3, clients theoretically have to attempt to decrypt every single message (Trial Decryption). To prevent CPU overloads, Axiom uses Message Hints:
HMAC-SHA256(AES_Key, IV) and places the first 2 bytes as field m into the CBOR payload.