Back to Articles

Eth-Tweet: When Every Character Cost Gas Fees

[ View on GitHub ]

Eth-Tweet: When Every Character Cost Gas Fees

Hook

In 2015, someone built Twitter on Ethereum where each tweet cost real money and there was no way to follow anyone. It attracted 574 stars and exactly zero sustainable users.

Context

Between 2015 and 2016, when Ethereum was still in its infancy and gas prices were measured in fractions of pennies, developers rushed to prove that blockchain could replace centralized platforms. The pitch was irresistible: what if your tweets couldn't be censored by a corporate overlord? What if your content truly belonged to you, stored immutably on a distributed ledger?

Eth-tweet emerged from this experimental era as a pure implementation of blockchain ideology. Unlike modern web3 projects that compromise with off-chain storage or Layer 2 solutions, this project went all-in: every tweet, every account creation, every action was a direct Ethereum transaction. Users deployed entire Solidity smart contracts for their accounts, then populated them with 160-character messages that lived forever on the blockchain. The developers even deliberately omitted follower functionality to avoid exposing social graphs publicly. It was decentralization taken to its logical extreme, and it reveals exactly why that extreme doesn't work.

Technical Insight

Ethereum Blockchain

Deploy Account

Post Tweet

Query Tweets

Register Name

Deploy

Deploy

Lookup Address

Read/Write

Read/Write

Name -> Address

Tweet Data

Tweet Data

RPC Query

User/CLI

Geth Node

Registry Contract

Account Contract 1

Account Contract 2

Web Interface

System architecture — auto-generated

Eth-tweet's architecture centers on two contract types: a central registry and individual account contracts. When you create an account, you're not just registering a username—you're deploying a unique smart contract instance to the Ethereum mainnet. This contract becomes your permanent identity, storing your tweets as state variables and exposing functions for posting and reading.

Here's what a simplified account contract looks like:

contract AccountContract {
    address public owner;
    string public accountName;
    Tweet[] public tweets;
    
    struct Tweet {
        string message;
        uint256 timestamp;
        uint256 id;
    }
    
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }
    
    function tweet(string memory _message) public onlyOwner {
        require(bytes(_message).length <= 160);
        tweets.push(Tweet({
            message: _message,
            timestamp: block.timestamp,
            id: tweets.length
        }));
    }
    
    function getTweetCount() public view returns (uint256) {
        return tweets.length;
    }
    
    function donate() public payable {
        // Allow anyone to send ETH to the account
    }
}

The registry contract maintains a mapping of account names to contract addresses, functioning as a decentralized DNS for the platform. When you want to read someone's tweets, you query the registry for their contract address, then call the public getter functions on their account contract.

This design has fascinating implications. First, tweet deletion becomes philosophically interesting: while the owner can mark tweets as deleted in the contract state, the data remains in the blockchain's history forever. Any node with archive data can retrieve "deleted" tweets from past blocks. Second, the account contract itself can receive donations through a payable function, creating a built-in monetization mechanism that predates modern tipping systems by years.

The interaction model requires users to run a local Geth node and use the command-line interface for posting. The web frontend at ethertweet.net only provided read access by connecting to your local node via RPC. This meant the barrier to entry wasn't just technical knowledge—it was running a full Ethereum node that would sync gigabytes of blockchain data just to post a 160-character message.

The gas economics tell the real story. In 2015-2016, deploying an account contract cost roughly $0.02-$0.10, while each tweet cost $0.003-$0.02. These seem trivial, but consider that Twitter users averaged 500 million tweets per day globally in 2016. Even at the lowest gas prices, that would be $1.5 million per day in transaction fees—and that's before the gas price explosions of 2017 and beyond. By 2021 standards, deploying an account contract might cost $50-200, and each tweet $5-20 during peak congestion.

The code is written in Go for the CLI tool, which handles the Ethereum interaction through the go-ethereum client library. This was standard practice for Ethereum tooling in 2015, before JavaScript libraries like ethers.js and web3.js dominated the ecosystem. The Go implementation meant users needed to compile the tool themselves or trust pre-built binaries, adding another friction point to adoption.

Gotcha

The most obvious limitation is cost, but the deeper problem is the complete absence of social mechanics. Eth-tweet deliberately excluded followers, following, replies, and retweets to protect user privacy—if your social graph lived on the blockchain, anyone could analyze your connections. But without these features, you don't have microblogging; you have a very expensive public diary. There's no feed algorithm, no way to discover new accounts except manual browsing through the registry, and no mechanism for conversation threading.

The read-only web interface compounds the usability problem. To actually post content, you need to install and sync a full Ethereum node (which requires hundreds of gigabytes of storage and days of sync time), compile the eth-tweet Go binary, fund your wallet with ETH, and execute CLI commands. Compare this to Twitter's signup flow: enter email, choose username, start tweeting. Even technical developers would find eth-tweet's onboarding painful, and mainstream users wouldn't make it past step one. The project isn't archived or maintained, so it likely doesn't work with modern Geth versions without modifications. This is a museum piece, not a usable tool.

Verdict

Use if: You're researching the history of blockchain social media, learning Solidity contract patterns for user-generated content storage, or building a presentation about why naive blockchain implementations fail. The codebase offers clear examples of contract deployment patterns and Ethereum RPC interaction from Go. It's also valuable if you're designing a modern decentralized social platform and want to understand which mistakes to avoid—this project made them all, instructively. Skip if: You want to actually build or use a decentralized microblogging platform. Modern alternatives like Lens Protocol on Polygon or Farcaster solve the same problems with Layer 2 scalability, while federated options like Mastodon provide decentralization without blockchain overhead. If your goal is censorship resistance, IPFS content addressing with traditional databases offers better economics. Eth-tweet is a historical artifact that proves blockchain maximalism doesn't scale—learn from it, but don't repeat it.

// ADD TO YOUR README
[![Featured on Starlog](https://starlog.is/api/badge/developer-tools/yep-eth-tweet.svg)](https://starlog.is/api/badge-click/developer-tools/yep-eth-tweet)