Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

v0 state

Back to all declarations

Denom

untyped string

Value

"ugnot"

Path

untyped string

Value

"gno.land/r/moul/grant/v0"

Owner

.uverse.address

Owner 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>

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.

Open
OID
069c90…5cb5:6
reset details

Inspect func

Balance

func() int64

Balance is what the treasury actually holds.

Open
OID
069c90…5cb5:8
Balance details

Inspect func

Committed

func() int64

Committed is what approved grants can still claim, Available is the balance minus that, and it can go negative. See the library for why.

Open
OID
069c90…5cb5:9
Committed details

Inspect func

Raised

func() int64

Raised is everything donated through Fund, Disbursed everything paid out.

Open
OID
069c90…5cb5:11
Raised details

Inspect func

Requests

func() int

Requests is how many requests have ever been filed.

Open
OID
069c90…5cb5:14
Requests details

Inspect func

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.

Open
OID
069c90…5cb5:15
Fund details

Inspect func

Apply

func(title string, body string, milestones string) int

Apply 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.

Open
OID
069c90…5cb5:16
Apply details

Inspect func

ApplyFor

func(beneficiary string, reason string, title string, body string, milestones string) int

ApplyFor 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.

Open
OID
069c90…5cb5:17
ApplyFor details

Inspect func

file

func(applicant .uverse.address, beneficiary .uverse.address, reason string, title string, body string, milestones string) int
Open
OID
069c90…5cb5:18
file details

Inspect func

ProposeMember

func(addr string, add bool, body string) int

ProposeMember asks the board to add or remove a member. Members only.

Open
OID
069c90…5cb5:19
ProposeMember details

Inspect func

Retract

func(id int)

Retract pulls the caller's own request before it is decided.

Open
OID
069c90…5cb5:20
Retract details

Inspect func

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.

Open
OID
069c90…5cb5:21
Vote details

Inspect func

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.

Open
OID
069c90…5cb5:22
SubmitProof details

Inspect func

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.

Open
OID
069c90…5cb5:23
Review details

Inspect func

intro

untyped string

The 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 string

The 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 string

The 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 string

The 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 string

The 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"...

Render

func(path string) string

Render serves the board at "", one request at "request/\<id>", and the money trail at "ledger".

Open
OID
069c90…5cb5:24
Render details

Inspect func
Denom : untyped string ="ugnot"
Path : untyped string ="gno.land/r/moul/grant/v0"
Owner : .uverse.address =<gnolang.StringValue>
program : *v0.Program Inspect
init.5 : func() Inspect
reset : func() Inspect
Address : func() .uverse.address Inspect
Balance : func() int64 Inspect
Committed : func() int64 Inspect
Available : func() int64 Inspect
Raised : func() int64 Inspect
Disbursed : func() int64 Inspect
Members : func() [].uverse.address Inspect
Requests : func() int Inspect
Fund : func() Inspect
Apply : func(title string, body string, milestones string) int Inspect
ApplyFor : func(beneficiary string, reason string, title string, body string, milestones string) int Inspect
file : func(applicant .uverse.address, beneficiary .uverse.address, reason string, title string, body string, milestones string) int Inspect
ProposeMember : func(addr string, add bool, body string) int Inspect
Retract : func(id int) Inspect
Vote : func(id int, approve bool, reason string) Inspect
SubmitProof : func(id int, milestone int, kind string, ref string, note string) Inspect
Review : func(id int, milestone int, accept bool, reason string) Inspect
intro : untyped string ="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 string ="**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 string ="**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 string ="**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 string ="**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"...
Render : func(path string) string Inspect