event.gno

6.91 Kb · 79 lines
 1package event
 2
 3import (
 4	zenaov1 "gno.land/p/zenao/zenao/v1"
 5	"gno.land/p/zenao/events"
 6	"gno.land/p/zenao/basedao"
 7	"gno.land/p/zenao/daokit"
 8	"gno.land/p/zenao/daocond"
 9	"gno.land/r/demo/profile"
10	"gno.land/r/zenao/eventreg"
11	"gno.land/r/zenao/social_feed"
12)
13
14var (
15	DAO      daokit.DAO
16	localDAO daokit.DAO
17
18	event  *events.Event // XXX: needed for backward compatibility with frontend queries
19	feedId string        // XXX: workaround for "unexpected zero object id" issue
20)
21
22func init() {
23	// XXX: workaround for "unexpected zero object id" issue
24	feedId = social_feed.NewFeed(cross, "main", false, feedAuth)
25}
26
27func init() {
28	conf := events.Config{
29		Organizers: []string{"gno.land/r/zenao/users/u26"},
30		Gatekeepers: []string{"gno.land/r/zenao/users/u703"},
31		Title: "🥷 Samouraï Hackathon 2025 - Hacktive Space",
32		Description: "![head-z.png](ipfs://bafybeicp5qlvtgtr3ophxphtk65pdqyjavw767mymfdmyvx4eqm2qcy5uy)\n::audio[Hacktive Space - Hackathon 25.mp3]{url=\"ipfs://bafybeibmgd4mqzvj7ktqlvyvjd6zcbnsxe3pcshpprcayb7pw2aummfabm\"}\n# 🥷 Samouraï Hackathon — Hacktive.Space Edition 2025\n\n\n\n\n\n**_•3 days of hacking, exploration and product shipping • solo hacker mode • full remote • Discord + Zenao based •_**\n\n## 💣 Challenge\n\nBuild and deliver a **functional MVP or bug-proof POC** in **3 days**.\nPeriod: **Dec 5–11** (3 active days within a flexible 5-day window).\n\n* **Kick-off**: Dec 5 — 14h00\n* **Delivery deadline**: Dec 9 — 14h00 (**GitHub** + **Zenao**)\n* **Demo time**: Dec 9 — 14h00\n* **DAO Votes Close**: Dec 12 — 14h00\n\n---\nParticipants: **Restricted to Samouraï Web3 Tech Crew only** + frenz.\nDAO Lead \u0026 Coordination: **zxxma**.\nJury: **Team + Surprise Guests/Frenz**.\n\n---\n\n## ⚡ Rules\n\n* Deliver a **live, usable MVP** in 72h.\n* Push source code to **GitHub (/samouraiworld)** and publish video+repo link on **Zenao** before the deadline.\n* **AI tools allowed** (code, design, content).\n* Web3 is **optional**, bonus only.\n* Provide a **proper README** (stack, install, usage).\n* Provide a **short demo video** on Zenao.\n* **DAO collective voting** on 4 criteria:\n\n  1. Concept \u0026 Philosophy\n  2. Long-term potential for Samouraï\n  3. Execution quality\n  4. Fire! (subjective enthusiasm)\n* **Self-evaluation** of your own project is required.\n* **Final call participation** is mandatory.\n* Bonus if aligned with **Samouraï Coop projects** (Ninjaclub, Hyperhacktive, App Studio mode, Zenao, Firemood, Media team, etc.)\n\n---\n\n## 🏆 Rewards\n\n* **1st — €2,500**\n* **2nd — €1,000**\n* **3rd — €500**\n* All validated deliveries receive a **Hackathon Explorer 2025** reward.\n\n---\n\n![hacktive-illu1.png](ipfs://bafybeiboltumuhlhumnmhog75xfiy4mqf5k7qcaaafqejcrbsgmxrigrjm)\n\n## 🎯 Objectives\n\n* Stimulate creativity, experimentation, and rapid prototyping.\n* Explore AI, new tools, and delivery-focused product building.\n* Strengthen internal hacker culture and DAO participation.\n* Dogfood **[Zenao.io](https://zenao.io)** internally, in a complete real use case.\n* Produce open-source, useful, potentially revenue-generating tools.\n* Have fun and regenerate motivation.\n\n---\n\n## ⛩️ The 3 Tracks\n\n## 1. 💡 Freestyle Track\n\nOpen theme — anything achievable in 72h.\nExamples:\n\n* Zenao ↔ Discord integrations\n* Admin automation tools\n* Job listing scrapers\n* On-chain/Off-chain collaborative editors\n* Twitter automation systems\n* AI bots for monitoring Web3 hacks\n* Simple games\n* Anything you would actually use daily\n\n---\n\n## 2. 🛡️ Security (Red Team) Track\n\nFully open red-team direction, limited only by the deadline. Possible challenges:\n\n* Stress-test suite for Gno networks (Supernova-based)\n* Validator vulnerability research\n* Realms security vulnerabilities\n* Determinism issues in GnoVM\n* Malicious realm demonstrations\n* Broader Web3 security research\n\n**Important:** For all bug hunting, DM **zxxma** *before* starting for legal protection.\n\n---\n\n## 3. 💎 EVM Track — Solidity Challenge (Beginner-Friendly)\n\nA single structured challenge with required steps:\n\n#### 1. **Create an ERC20 token**\n\nDeploy on **Base Sepolia testnet**:\n\n* Base Sepolia Network Info: [docs.base.org](https://docs.base.org/network-information/sepolia-testnet/)\n* OpenZeppelin ERC20 Reference: [OpenZeppelin ERC20](https://docs.openzeppelin.com/contracts/5.x/erc20)\n\n#### 2. **Implement a Fair Launch using a Balancer-style LBP**\n\nReference docs:\n\n* [Balancer Developer Docs](https://docs.balancer.fi/)\n* [Deploy Balancer Pools on Testnet](https://docs.balancer.fi/guides/deploy-on-testnet/)\n\n#### 3. **Deposit Fair Launch funds into a Multisig**, then into a +5% APY Vault\n\n* [Safe (Gnosis Safe)](https://safe.global/)\n\n#### 4. **Build a Minimal Front-End Dashboard** (React or Next.js)\n\nMust include:\n\n* Wallet connection (MetaMask / WalletConnect / Base Wallet)\n* ERC20 metadata display\n* Fair Launch contract state\n* LBP purchase simulation (read-only)\n* Optional: additional useful or fun components\n\nUseful libraries:\n\n* [Wagmi](https://wagmi.sh/)\n* [Viem](https://viem.sh/)\n\n### Engineering standards\n\nUse:\n\n* [Hardhat](https://hardhat.org/)\n* Tests, linting, typed data, audit-like practice\n* Open-source repository\n\n---\n\n#### 👊⛩️ Support\n\nSolo and autonomous, but do not stay blocked:\n**zôÖma provides guidance on demand** (hints, chill support, dev, UX, infra, deployment shortcuts).\nDM when necessary.\n\n---\n\n#### ❤️ Credits\nMade by **zôÖma** from \u0026 for the **Samouraï World Crew**\n[https://www.samourai.world](https://www.samourai.world)\n\n\n![hyper.png](ipfs://bafybeihqwqhxdb7kec5ruvf4erj75dikpp6nn3ehgsqg3hdrebbkqszyei)",
33		ImageURI: "ipfs://bafybeiebws5sai4u4rmskuh5zmbpaf4xjuqx4v24mg3ktg6hiobdayymny",
34		StartDate: 1764938700,
35		EndDate: 1765731600,
36		Capacity: 42,
37		Discoverable: false,
38		GetProfileString: profile.GetStringField,
39		SetProfileString: profile.SetStringField,
40		ZenaoAdminAddr: "g1djrkw9tf4px658j85cc6fhsvm50uf9s0g6kfsm",
41		Location: &zenaov1.EventLocation{
42			Address: &zenaov1.AddressVirtual{
43				Uri: "https://hacktive.space",
44			},
45		},
46		ParticipationPubkey: "AVgNkAW7Sh9dSJgUU9N_npCpgGoCa_W3dnt-fg8trLs",
47		CrossFn: crossFn,
48		SetImplemFn: setImplem,
49		FeedId: feedId,
50		PrivateVarName: "event",
51	}
52	event = events.NewEvent(&conf)
53	eventreg.Register(cross, func() *zenaov1.EventInfo { return event.Info() })
54}
55
56func Vote(_ realm, proposalID uint64, vote daocond.Vote) {
57	localDAO.Vote(proposalID, vote)
58}
59
60func Execute(_ realm, proposalID uint64) {
61	localDAO.Execute(proposalID)
62}
63
64func Render(path string) string {
65	return localDAO.Render(path)
66}
67
68func feedAuth() (string, bool) {
69	caller := event.DAOPrivate.CallerID() // XXX: this should be upgradable
70	return caller, basedao.MustGetMembersViewExtension(localDAO).IsMember(caller)
71}
72
73func crossFn(_ realm, cb func()) {
74	cb()
75}
76
77func setImplem(newLocalDAO daokit.DAO, newDAO daokit.DAO) {
78	localDAO, DAO = newLocalDAO, newDAO
79}