GitHub - saurabhchalke/EtherTale: EtherTale is an interactive story generation app

3 min read Original article ↗

EtherTale: Weave Stories Together, Forever 🌿📖🔗

EtherTale is an innovative, decentralized storytelling platform that combines the power of AI-generated narratives with the security and transparency of the Minimal Anti-Collusion Infrastructure (MACI) voting system. With EtherTale, users can collaboratively create immersive, branching storylines by voting on the direction of the tale at each decision point.

App Demo

This project was built as part of ETHTaipei 2024.

Features ✨

  • 🤖 AI-generated story content using advanced language models
  • 🔒 Secure and transparent voting with the MACI protocol
  • 🌿 Immersive, branching narratives that evolve based on community choices
  • 🎨 Sleek, cyberpunk-inspired user interface
  • ⚡️ Real-time updates and seamless user experience

How It Works 🛠️

  1. 🚀 Users join an EtherTale story and are presented with an AI-generated story snippet.
  2. 🤔 At key decision points, users vote on the direction they want the story to take using the MACI protocol.
  3. 🗳️ Votes are securely tallied, ensuring privacy and preventing collusion.
  4. 🔮 The winning choice is revealed, and the AI continues the story based on the community's decision.
  5. 🔄 The process repeats, with users shaping the story at each junction until the tale reaches its conclusion.

Technologies Used 💻

  • 🐍 Python: Backend server and AI integration
  • 🗳️ MACI: Secure and private voting system
  • ⚛️ React: Frontend user interface
  • 🌐 Next.js: Server-side rendering and routing
  • 💅 Styled Components: CSS-in-JS styling
  • 🔌 WebSocket: Real-time communication between server and client

Deployed Contracts 📜

Linea Goerli 🐸

Contract Address
ConstantInitialVoiceCreditProxy 0xf759BC89a53e6acBe7ef39f9967e8e14D96dfcC8
EASGatekeeper 0xAfB0022Fc954C85ea32b6A524890B00Ba92B8E96
Verifier 0x795Ce95De964969dF4fb02078a043c9B77CD8Ed7
TopupCredit 0x080Fa17461B4E54928d96C0D886c5d82fa582bE6
PoseidonT3 0xaCCeb6bb3c0d61A3B306E3E61BFE7c6715Dbc5d3
PoseidonT4 0xd58358eA5767B03Cd99D2Ac08daE20CB72be9178
PoseidonT5 0x17309f62f095E4FD2F07c6A115016A9681594BEe
PoseidonT6 0x005bDF0616f13C527cEEbC80c054726eaE485dB1
PollFactory 0x1E1aC74953333b7D8c2ab58941F3C951a15e9EfE
MessageProcessorFactory 0xF7A3DAB440df254fe9f191261916FbCcD7DfD3a1
TallyFactory 0xeF43f4F485FEC0E3581A2f229B013AC9729F4E11
SubsidyFactory 0x3300DDD60490A6Bc22b518c8fd15120AFEA0F6Cc
MACI 0xaF23A87F8f80Ac749D5E31a5841DdF98FFf328af
AccQueueQuinaryBlankSl 0x262cF27F30DaA414b745cA2586E36Fb40F53F1F4
VkRegistry 0x7f276F7ca903F89dD4Ee8506B175DD29D62656D5
Poll-poll-0 0x54f8B8bAF790a557C69E10405DddA25e044e33dd
MessageProcessor-poll-0 0x829444F141f81c453061b4dC4c7AA79f34710e61
Tally-poll-0 0x8E6E3C1e3E0540d792227967062c41e6AA70B2C6
AccQueueQuinaryMaci-poll-0 0xBbCf760baE5699f8315c13Eaf2d469F97313a812

Deployer Address: 0xD936c886BA94BB0b004500E7EDa710194797787B

Optimism Sepolia

Contract Address
ConstantInitialVoiceCreditProxy 0x8564703aAF7d6a1fA75C4eA85f6a78d19C65FEce
EASGatekeeper 0x41F39d16213E6D1191f4F8E4Dd779ED94e279c58
Verifier 0xe1F59Ef5A149bD407276b9eF73faDFD8E296Ef82
TopupCredit 0xa59dC994ac375170F4a7C3aDc1a0728579bf83ab
PoseidonT3 0x138D4c9d0f4977048dFacFF7CC95C11Ba6938af4
PoseidonT4 0xDABA4823068b53c2bf22D946F9BC197485FE416A
PoseidonT5 0x8af0d48c5ED6B3bCF6Fc9C7e5EDEB204b1486DeF
PoseidonT6 0x227486426a5719E6eE60AEB6c3a793f687c6c096
PollFactory 0xdD0B4d556943241D742ae37443b5aac7Cf582666
MessageProcessorFactory 0x3C2766241D7E3576747A740CaC3eB496d2a509da
TallyFactory 0x203205441624b07bDe4dAf62dC6212Faa04E465b
SubsidyFactory 0xe30621eFE2578D732063C73ac296a456DAa84FF9
MACI 0xEfc5F426C0032AcEfcf6B215d4Aa8bC248759AF4
AccQueueQuinaryBlankSl 0x28C5f7C9954920BA0e8B7eB67826113555ec4a42
VkRegistry 0x2940aCd26116195ffE683fE80B6883FF34E11ec1
Poll-poll-0 0xB08821111DF97b3Be566faCb70780618b64F57cf
MessageProcessor-poll-0 0x53c469e055B425B9FE7f7df4aaf09d3EEcBa7f06
Tally-poll-0 0xECd201d0BaCE1D75964A67Cbb3c2A01F43cA8329
AccQueueQuinaryMaci-poll-0 0x770440302f7A04fA14EEFda8D0B38D9081aEd73D

Deployer Address: 0xD936c886BA94BB0b004500E7EDa710194797787B

Getting Started 🏁

Clone the repository

git clone https://github.com/saurabhchalke/ethertale.git

Install dependencies

Set up the backend server

cd server
pip install -r requirements.txt

Start the backend server

Start the frontend server

Open your browser and navigate to http://localhost:3000 to start weaving stories with EtherTale!

Contributing 🤝

We welcome contributions from the community! If you'd like to contribute to EtherTale, please follow these steps:

  1. Fork the repository
  2. Create a new branch for your feature or bug fix
  3. Make your changes and commit them with descriptive messages
  4. Push your changes to your forked repository
  5. Submit a pull request to the main EtherTale repository

License 📜

EtherTale is released under the MIT License.

Acknowledgements 🙏

We would like to thank the following projects and resources that made EtherTale possible:

  • MACI - Minimal Anti-Collusion Infrastructure
  • OpenAI - AI language models
  • Next.js - React framework for server-side rendering and routing
  • Styled Components - CSS-in-JS library

Let's weave stories together, forever! 🌿📖🔗