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 source realm

Package crowdfund is an accounting-only port of the classic Solidity Kickstarter-style crowdfunding contract to a gno...

Readme View source

Crowdfund

⚠️ Experimental — generated with no human supervision by the daily MCP pipeline (Solidity→Gno port). Not audited. See r/moul/x/daily.


A gno.land realm port of the classic Solidity Kickstarter-style crowdfunding contract. It keeps the same lifecycle — launch a campaign with a goal and a deadline, let backers pledge and unpledge, then either let the creator claim on success or let backers refund on failure — but models everything as plain uint64 accounting (no real coin transfer), the idiomatic Gno equivalent of the Solidity mapping(address => uint) balances.

Deadlines use runtime.ChainHeight() (block height) instead of block.timestamp, msg.sender becomes unsafe.PreviousRealm().Address(), require becomes panic, and campaigns live in an ordered avl.Tree so Render lists them deterministically with a ▓░ progress bar.

Transactions

  • Launch(goal uint64, durationBlocks int) int — create a campaign (returns id); deadline = current height + duration.
  • Pledge(id int, amount uint64) — back a campaign before its deadline.
  • Unpledge(id int, amount uint64) — withdraw part/all of your pledge before the deadline.
  • Claim(id int) — creator claims funds after the deadline if pledged >= goal.
  • Refund(id int) — backer reclaims their pledge after the deadline if the goal was missed.

Example

Launch(1000, 100)      // campaign #1, goal 1000, ends 100 blocks from now -> returns 1
Pledge(1, 400)         // back campaign #1 with 400
Pledge(1, 700)         // total now 1100 (>= goal)
Unpledge(1, 100)       // change of mind: total back to 1000
// ... after block height passes the deadline ...
Claim(1)               // creator claims 1000 (goal met)

Read-only Render("") shows every campaign with its progress bar, goal, pledged total, deadline block and state (Active / Funded / Funded (claimed) / Failed).


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

Dependency graph:

gno.land/r/moul/x/daily/crowdfund/v0 dependency graph

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.

Overview

Package crowdfund is an accounting-only port of the classic Solidity Kickstarter-style crowdfunding contract to a gno.land realm.

A creator Launches a campaign with a funding goal and a duration (in blocks). Backers Pledge (and may Unpledge before the deadline). After the deadline the creator can Claim if the goal was met, otherwise backers can Refund.

No real coin moves: pledges are tracked as plain uint64 accounting, exactly like the mapping(address => uint) balances of the Solidity original.

Functions 6

func Claim

crossing Action
1func Claim(cur realm, id int)
source

Claim lets the creator take the funds if the goal was met after the deadline.

func Launch

crossing Action
1func Launch(cur realm, goal uint64, durationBlocks int) int
source

Launch creates a new campaign owned by the caller and returns its id.

func Pledge

crossing Action
1func Pledge(cur realm, id int, amount uint64)
source

Pledge backs campaign id with amount (before the deadline).

func Refund

crossing Action
1func Refund(cur realm, id int)
source

Refund returns the caller's pledge if the campaign failed after the deadline.

func Render

1func Render(path string) string
source

Render shows all campaigns with a progress bar, goal, pledged and state.

func Unpledge

crossing Action
1func Unpledge(cur realm, id int, amount uint64)
source

Unpledge withdraws amount from the caller's pledge (before the deadline).

Types 1

type Campaign

struct
1type Campaign struct {
2	ID       int
3	Creator  address
4	Goal     uint64
5	Deadline int64     // block height after which the campaign is closed
6	Pledged  uint64    // running total pledged
7	Claimed  bool      // creator already claimed the funds
8	pledges  *avl.Tree // backer address (string) -> pledged uint64
9}
source

Campaign holds the state of a single crowdfunding campaign.

Imports 5

Source Files 3