Seneschal FE

"Kazoku" Seneschal Front-End Specifications

Overview

The "Seneschal" Hats-Enabled MolochDAO_V3 Shaman is a tool for reducing administrative and operational overhead while distributing rewards to DAO participants and value creators. It uses Arweave and Mirror to impart deep permanence and data availability on actions taken to further the mission of DAO.

It attacks the “Agent None”, and “Too Many Cooks” problems by massively increasing the agency and autonomy of DAO participants. Seneschal allows small groups of contributors to identify, sponsor and complete things that create value for the DAO.

It also attacks the “Ops Maximalism / Lore Keeping” problem of DAOs; because it creates a permanent record of all the DAOs high agency work. We directly tie an on-chain transaction to a permanent content digest using Mirror and Arweave; and that enables us to use large language models to assist maintaining the lore keeping and operations of the DAO. This means DAOs can have a permanent, immortal artificial helper. DAOs are fluid workspaces where people come and go; and every DAO needs a permanent resident.

User Stories

There's three distinct user stories for this dApp.

"Sponsors"; who solidify commitments between the DAO and an individual participant. Participants are encouraged to propose ways of creating value for the DAO - and sponsors are the members who are trusted to interpret these proposals. "Sponsors" use their knowledge of the DAO's mission and goals to make decisions to move projects forward. They're also responsible for sponsoring good ideas, by skilled participants and the completion reflects on them. A good sponsor rejects bad value propositions, accepts good value propositions and their sponsored props have a high rate of success.

"Processors"; who are responsible for marking a commitment as complete. Completed commitments can be then be claimed by the recipients. Good processors are people with an eye for detail and are able to identify if a commitment has been fulfilled correctly. They also work with nearly finished proposal creators to put the finishing touches on the completed work. Processors will use the "Completions" tab.

"Recipients"; are anyone who is eligible and qualified to create value on behalf of the DAO. Recipients communicate with "sponsors" first; and convince them of the necessity of completing some form of value creation. After their proposal has been sponsored, they go about the business of completing and delivering that value. They then take the completed work to a "processor" to get it approved. After it's approved the recipient can claim their reward at any time in the future.

Sponsor Tab

  • Only displays if connected wallet: HATS.isWearerOfHat(Senschal.hatId())

  • Has fields for sponsoring commitments with:

    • Short description metadata

    • Upload an image metadata

    • Loot reward amount

    • Mirror Proposal URL

    • Recipient Address

  • After filling out the fields; a "Sponsor" button becomes active allowing signing of the Commitment struct and submitting it to the sponsor() function on-chain.

  • An NFT-like Box Gallery that shows the user the status of their sponsored proposal "commitments".

  • Each NFT box:

    • Displays the uploaded image

    • Displays the short description

    • Hover over: Date of sponsorship

    • Hover over: Date of deadline

    • Hover over: Recipient address or bonus points (Recipient's Discord handle)

    • If clicked will act as a link to the original Mirror URL


Completions Tab

  • Only displays if connected wallet: HATS.isWearerOfHat(Seneschal.hatId())

  • NFT-like Box Gallery virtually identical to the one above.

  • Each "Commitment" box will have a button above it that says "Process"; which will allow the user to sign the Commitment struct and submit it on-chain to the process() method.

  • If the poke() function has been called by a recipient in regards to a given "commitment" proposal; the UI should morph that NFT to indicate that the recipient would like to move into the processing phase.

  • The poke() function also requires the recipient to provide a Mirror link to the completed work - so after a "commitment" has been poked it should be link to the Mirror with the completion and delivery details.


Recipients Tab

  • Only displays if user has 1000 or more shares BAAL.lootToken().balanceOf(user) >= 1000

  • Has a box-like NFT gallery that shows a user their own commitments; that is commitments where they are listed as the "recipient".

  • If any of the user's "commitments" has been processed; and marked as completed by a "processor" hat wearer; there should be a claim button.

  • If any of the user's "commitments" are past the minimum claim delay commitment.sponsoredTime + shaman.claimDelay > block.timestamp the user is allowed to "poke" with a button.

  • Poking means "Hey this is done please check it out".

  • Poking only requires a single field for the Mirror URL of the completed commitment.

  • After the Mirror URL has been input; the poke button becomes active.

Gotchas and Details

  • claimDelay is the length of time required before a "commitment" can be processed or "poked". It's like a time lock that prevents sponsorships from being processed and claimed before the DAO has a chance to react. "Commitments" cannot be processed before the sponsoredTime + claimDelay + baal.votingPeriod() + baal.gracePeriod().

  • sponsoredTime is a member of the "Commitment" struct which records the block.timestamp at the moment a sponsor() transaction is processed. Sponsored time gets overwritten during the sponsor() function call. So it's necessary to retrieve the modified commitment from the Sponsored event for signing at the process and claim steps.

  • The "Commitment" actually changes from when it's passed into the sponsor() function because the sponsoredTime gets added to it. So when signing the "Commitment" again; make sure you use the timestamp from the original sponsor() transaction as the sponsoredTime.

  • timeFactor is a member of the "Commitment" struct which records the deadline. "Commitments" cannot be processed after the timeFactor.

    To be completed by saimano.eth by September 30th, 2023

Loading...
highlight
Collect this post to permanently own it.
Subscribe to st4rgard3n and never miss a post.