Realm detail
forms
gno.land/r/g1eyr3hfdcup4rr5xlcd63vc5t64a03u9kecx2v0/forms
Indexed deployment identity with independently loaded latest RPC source, functions, and Render.
Indexed deployment
Identity
- Package path
- gno.land/r/g1eyr3hfdcup4rr5xlcd63vc5t64a03u9kecx2v0/forms
- Block
- 272796
- Deployed (UTC)
- Transaction
- jB68FDPknMBKVXkS3v291at4TjfuuOhQw9oXl/+2XG8=
Latest RPC state
Source
// Package forms is a Google-Forms-shaped questionnaire realm: publish a form,
// collect responses on chain, read them back rendered — with gnoweb as the
// only UI.
//
// # How it works
//
// The realm renders each form with p/jeronimoalbi/mdform. gnoweb turns that
// markdown into a real HTML form whose submit builds a /vm.m_call to Submit,
// mapping every input to the Submit parameter of the same name. A respondent
// fills the form in a browser, signs with their wallet, and the answers land
// in realm state. No frontend, no backend, no indexer.
//
// # Slugs
//
// A form's ID is a slug chosen at creation — lowercase letters, digits and
// single hyphens, 3 to 48 characters, unique per realm. It is the URL
// segment: /r/<ns>/forms:valoper-questionnaire. Response IDs are sequential.
//
// # Field encoding
//
// Create takes four parallel, pipe-separated strings so it stays usable from
// gnokey and gnoweb without structured arguments:
//
// labels: "Name|Why gno.land?|Server type"
// kinds: "text|textarea|select"
// required: "1|1|0"
// options: "||cloud,on-prem,data-center"
//
// Kinds are text, textarea, number and select. Options are comma-separated
// and only read for select fields. A form has at most MaxFields (8) fields;
// Submit accordingly takes eight answer slots, of which the form's field
// count are read and the rest must be empty. gnoweb passes "" for any
// parameter the form does not render an input for.
//
// # Who pays
//
// Respondents pay the storage deposit for their own answers, which is the
// spam resistance. Withdraw deletes a response and the chain refunds the
// deposit to the caller — which is why only the author may withdraw: a
// deletion by the owner would refund the owner with the respondent's coins.
//
// # What is public
//
// Everything. Answers, who gave them, and when are all readable by anyone
// from realm state and from the transactions themselves. This realm is for
// information that can be public. Sealed responses would need encryption
// on the respondent's side before the transaction exists, which gnoweb
// cannot do on a realm's behalf; that is a deliberate non-goal of v1.
//
// # Routes
//
// /r/<ns>/forms index
// /r/<ns>/forms:<id> a form, fillable
// /r/<ns>/forms:<id>/responses responses, paginated
// /r/<ns>/forms:<id>/responses.csv responses as CSV in a code block
package forms
Latest RPC state
Exported functions
- Create(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, slug string, title string, description string, labels string, kinds string, required string, options string, onePerAddr bool, deadline int64) string
- CreateForm(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, slug string, title string, description string, l1 string, k1 string, r1 string, o1 string, l2 string, k2 string, r2 string, o2 string, l3 string, k3 string, r3 string, o3 string, l4 string, k4 string, r4 string, o4 string, l5 string, k5 string, r5 string, o5 string, l6 string, k6 string, r6 string, o6 string, l7 string, k7 string, r7 string, o7 string, l8 string, k8 string, r8 string, o8 string, onePerAddr string, deadline string) string
- Close(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id string)
- Reopen(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id string)
- TransferOwnership(cur interface {.seal func(); Address func() .uverse.address; IsCode func() bool; IsCurrent func() bool; IsEphemeral func() bool; IsUser func() bool; IsUserCall func() bool; IsUserRun func() bool; PkgPath func() string; Previous func() .uverse.realm; String func() string; Sub func(string) .uverse.realm; Subpath func() string}, id string, to string)
- GetForm(id string) (*gno.land/r/g1eyr3hfdcup4rr5xlcd63vc5t64a03u9kecx2v0/forms.Form, bool)
- ResponseCount(id string) int
- FormCount() int
Latest RPC state · Realm Render
Forms
Publish a form, collect responses on chain, read them back here. Respondents fill it in on this page and pay their own storage deposit; withdrawing a response refunds it.
No forms yet.
Create a form
Up to 8 fields. Blank rows are skipped. Submitting opens your wallet with the call already filled in.
From a terminal, Create takes the same thing as pipe-separated field specs — see the realm source.