Immutable comment system and react component ## name Emitter DUCE DAOHAUS universal comment emitter Decentralized universal comment emitter ## tech poster.sol daohaus sdk react comonent ## schema ``` content: value, // content of the post (markdown) version: "0.0.01", // version of the schema or maybe the post? context: "post", // root | reaction, reply (always should have parent) sender: address, // sender of post image: image || "", // external image/link created: Date.now() / 1000, // creation time id: uuid, // unique id / salt domain: TARGET.DOMAINID, // app / dao (maybe set at factory) scope?: 12 // proposal id type data tag: encodedData, // encoded tag for verification parent: "", // if reply or reaction / parent tag ``` ### notes Poster.sol has 2 string fields content and tag. Content should contain a json string with content and meta data around a post. the tag can be a unique hash created from msg.sender, uuid and doaminid. this way a content string could be verified by the tag. ### channels a factory should deploy a standard wrapper around Poster.sol (channel emmiter). this way every channel is its own contract, it could have tag generation logic, also could be used for role/token gatting, fees, relayers or other nuonces. Channel can have different meta data: title/topic/etc. Channels could have a owner (DAO) a channel would probably have a domain of a DAO or a more general app. could be scopped to more specific things ### post A post can have a context of parent or child(anything string) A root post is top level content. A child (reaction/reply) and requires a parent ### indexing: because of the channel emmiter contract indexing is scopped and in may case could be done client side. Could be a good usecase for a subgraph if multiple popular channels. because this is uses poster under the hood all data can be easily indexed, the contract wrapper allows further easy scoping ### post verification a post need to be able to be verified as coming from a signer and is unique ``` // TODO // add uuid and sender address to content and tag // this is added in the contract as well // allows to verify that the content was created by the sender // uuid is a salt for a unique hash // this does not prevent a user from submitting the same salt again // - maybe this is a feature for delete/edit, only using the most recent // const tag = `${TARGET.DOMAINID}:${uuid}:${address} ``` ## Emiiter WTF UI emiiter.wtf is a simple mico blog site a post can be made by any address a post can get a upddot or downdoot (increment totals, only one per account) a post can have a reply ipfs deploy - nobunny can take it down ### other potential actions - bookmark // easy access in future - go to external link // link out to external ref in post - share // permalink to dedicated page - go to replys // dedicated page for post and replys - tip // sender address to send a tip to (alternate dao treasury) - launch dao // launch a DAO and NFT for tips ### new channel summoner ### channel explorer ## DAOhaus emiiter react component - should tak a contract, domain and scope - install as npm package ## all on chain and no dependencies? doesn't this require signatures and cost gas? **thats the point** has no way to censor content or block spam? **thats the point** ## tips any post can recieve a tip. tips could include stable or haus. there should be a splits to eco fund, product fund and OP. there could also be a burn of haus/duce for rev share. ## updoots / tipdoots fee to OP, share to early adopters fee to DAO treasury? OP choice on withdraw ## batch actions keep a ui element on the bottom of page or something. allows users to periodically commit all changes with single signature (ups/comments/replys/etc)