"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 thesponsor()
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 theprocess()
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 thesponsoredTime
+claimDelay + baal.votingPeriod() + baal.gracePeriod()
.sponsoredTime
is a member of the "Commitment" struct which records theblock.timestamp
at the moment asponsor()
transaction is processed. Sponsored time gets overwritten during thesponsor()
function call. So it's necessary to retrieve the modified commitment from theSponsored
event for signing at theprocess
andclaim
steps.The "Commitment" actually changes from when it's passed into the
sponsor()
function because thesponsoredTime
gets added to it. So when signing the "Commitment" again; make sure you use the timestamp from the originalsponsor()
transaction as thesponsoredTime
.timeFactor
is a member of the "Commitment" struct which records the deadline. "Commitments" cannot be processed after thetimeFactor
.To be completed by saimano.eth by September 30th, 2023