README.md
gno.land/p/nym-moultest123/udao
Minimal DAO interfaces, written from the outside. udao deliberately does
not expose members or votes: those are implementation details that differ per
DAO and that non-members cannot act on anyway. What it exposes is the part an
outside observer needs: which proposals exist and where they stand.
1type DAO interface {
2 Propose(prop Proposal) (uint64, error)
3 GetProposal(id uint64) (Proposal, error)
4 GetProposalStatus(id uint64) (ProposalStatus, error)
5 Execute(id uint64) error
6}
ProposalState is the lifecycle: Pending, Active, Passed, Rejected,
Executed, Expired.
Constraints
The composable half of the package. A proposal can carry constraints, and
ValidateConstraints reports whether all of them hold, returning the list of
reasons when they do not:
1func ValidateConstraints(p Proposal) (bool, []string)
That is what lets DAO behaviour be assembled from parts (a quorum constraint, a time-window constraint, a whitelist constraint) instead of baked into one implementation.
This package is interfaces plus ValidateConstraints; it has no DAO of its
own. p/moul/xdao is a (partial) implementation of it.
Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.
⚠️ Disclaimer: provided as-is, without warranty; not security-audited. Full disclaimer: DISCLAIMER.