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.
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 🛠️
- 🚀 Users join an EtherTale story and are presented with an AI-generated story snippet.
- 🤔 At key decision points, users vote on the direction they want the story to take using the MACI protocol.
- 🗳️ Votes are securely tallied, ensuring privacy and preventing collusion.
- 🔮 The winning choice is revealed, and the AI continues the story based on the community's decision.
- 🔄 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.txtStart 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:
- Fork the repository
- Create a new branch for your feature or bug fix
- Make your changes and commit them with descriptive messages
- Push your changes to your forked repository
- 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! 🌿📖🔗
