Denom
untyped stringValue
"ugnot"
Path
untyped stringValue
"gno.land/r/moul/grant/v0"
Link
untyped stringValue
"/r/moul/grant/v0"
Owner
.uverse.addressOwner is the founding and, for now, only member. Hardcoded rather than taken from the deployer: inside a plain \`func Test(t \*testing.T)\` the gno test runner reports OriginCaller() as the EMPTY address, so a board seeded from it is empty in every test and something else on chain. That divergence is exactly where an authorization bug hides, so the address is written down.
Value
<gnolang.StringValue>
program
*v0.Program- OID
- 069c90…5cb5:26
program details
init.5
func()- OID
- 069c90…5cb5:4
init.5 details
reset
func()reset installs a fresh, empty board. Also called by the tests: realm globals persist for a whole test binary and examples run after every Test, so a pinned Render has to start from a known state.
- OID
- 069c90…5cb5:6
reset details
Address
func() .uverse.address- OID
- 069c90…5cb5:7
Address details
Balance
func() int64Balance is what the treasury actually holds.
- OID
- 069c90…5cb5:8
Balance details
Committed
func() int64Committed is what approved grants can still claim, Available is the balance minus that, and it can go negative. See the library for why.
- OID
- 069c90…5cb5:9
Committed details
Available
func() int64- OID
- 069c90…5cb5:10
Available details
Raised
func() int64Raised is everything donated through Fund, Disbursed everything paid out.
- OID
- 069c90…5cb5:11
Raised details
Disbursed
func() int64- OID
- 069c90…5cb5:12
Disbursed details
Members
func() [].uverse.address- OID
- 069c90…5cb5:13
Members details
Requests
func() intRequests is how many requests have ever been filed.
- OID
- 069c90…5cb5:14
Requests details
Fund
func()Fund credits the ugnot sent with the call to the treasury and puts the donor on the record. Coins sent to the realm address directly still land in the treasury; they just do not get a name next to them.
- OID
- 069c90…5cb5:15
Fund details
Apply
func(title string, body string, milestones string) intApply files a grant request for the caller. milestones reads "title:amount,title:amount", amounts in ugnot, paid in the order given. Returns the request id.
- OID
- 069c90…5cb5:16
Apply details
ApplyFor
func(beneficiary string, reason string, title string, body string, milestones string) intApplyFor files a grant request whose tranches pay beneficiary rather than the caller, with a reason for the detour that goes on the request page. This is the call that makes the board usable at all for the case it exists to serve. An account with nothing in it cannot pay the gas to ask for its first coins, so without someone else filing on its behalf the people who most need a small grant are exactly the people who cannot ask for one. Either address may then submit the proofs, and neither may vote.
- OID
- 069c90…5cb5:17
ApplyFor details
file
func(applicant .uverse.address, beneficiary .uverse.address, reason string, title string, body string, milestones string) int- OID
- 069c90…5cb5:18
file details
ProposeMember
func(addr string, add bool, body string) intProposeMember asks the board to add or remove a member. Members only.
- OID
- 069c90…5cb5:19
ProposeMember details
Retract
func(id int)Retract pulls the caller's own request before it is decided.
- OID
- 069c90…5cb5:20
Retract details
Vote
func(id int, approve bool, reason string)Vote records a member's ballot. The reason is stored and rendered next to the vote: it is the only part of a decision that tells an applicant what to do about it.
- OID
- 069c90…5cb5:21
Vote details
SubmitProof
func(id int, milestone int, kind string, ref string, note string)SubmitProof offers evidence for the next milestone of an approved grant. kind is "url", "hash" or "text"; ref is the link, digest or statement.
- OID
- 069c90…5cb5:22
SubmitProof details
Review
func(id int, milestone int, accept bool, reason string)Review records a member's verdict on the proof under review. The verdict that carries also pays the tranche, in this same transaction. A verdict the treasury cannot cover is refused outright and changes nothing.
- OID
- 069c90…5cb5:23
Review details
intro
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"A small, personal grant board. moul funds it out of his own pocket, and it\nexists mainly so the coding agents working on his repos, and the people he\nalready works with, can ask for money against work they can prove they did: a\nrequest, a milestone, a link"...
notofficial
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"**This is not a faucet and it is not an official grant program.** It is one\nperson's money, sent by hand, mostly to people he already knows, and it is also\na proof of concept for the library underneath. There is no entitlement, no queue\nand no service leve"...
scope
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"**One member, and the page says so.** A majority of a one-member board is one\nsignature, so today this is moul deciding in public rather than a DAO deciding.\nWhat makes it worth reading is the record: every ballot carries its reason,\nevery proof stays up i"...
forothers
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"**You can ask for someone else.** `ApplyFor` takes the address the money goes\nto and a reason for the detour, and prints both on the request. That is not a\nconvenience: an account with nothing in it cannot pay the gas to ask for its\nfirst coins, so on a bo"...
agents
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"**For agents.** A gno.land account session scoped to this path lets an agent\n`Apply` and `SubmitProof` under its own address, so its track record here is\nits own and not its operator's. A session cannot be given a board seat by\nscoping alone: voting is mem"...
footer
untyped stringThe board's whole front page is these three strings plus the library's Renderer. Nothing about the layout lives here, which is the test of whether the split worked: a second board is another file this size.
Value
"Built on [p/moul/grants/v0](/p/moul/grants/v0), which holds every rule, every\ntally and this page's markdown, and has no idea coins exist."
Render
func(path string) stringRender serves the board at "", one request at "request/\<id>", and the money trail at "ledger".
- OID
- 069c90…5cb5:24