PathrockNetwork Gno Explorer
HomeBlocksTransactionsRealmsPackagesValidatorsAnalytics

PathrockNetwork Gno Explorer — an independent explorer for Gno.land Mainnet (gnoland-1), operated by PathrockNetwork. Not an official Gno.land service.

gnowebarchive RPC

gno.land/r/gov/dao/memberstore/v0

Realm
Open in gnoweb ↗

Overview

Kind
Realm (renderable)
Name
v0
Namespace
gov / dao / memberstore
Files
8 (gnomod.toml)
Exported functions
10
Module
gno.land/r/gov/dao/memberstore/v0
gno
0.9

Files (8)

  • gnomod.tomltoml
  • memberstore.gnogno
  • prop_requests.gnogno
  • rendercharts.gnogno
  • rendermembers.gnogno
  • types.gnogno
  • memberstore_test.gno
gno
  • z0_filetest.gnogno
  • memberstore_test.gnogno
    1package memberstore23import (4	"strconv"5	"testing"67	"gno.land/p/nt/urequire/v0"8

    Functions

    • Get(int, rlm 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}) struct{BPTree *gno.land/p/nt/bptree/v0.BPTree}

    • GetTier(name string) (struct{BasePower float64; InvitationPoints int; MaxSize func(gno.land/r/gov/dao/memberstore/v0.MembersByTier, gno.land/r/gov/dao/memberstore/v0.TiersByName) int; MinSize func(gno.land/r/gov/dao/memberstore/v0.MembersByTier, gno.land/r/gov/dao/memberstore/v0.TiersByName) int; PowerHandler func(gno.land/r/gov/dao/memberstore/v0.MembersByTier, gno.land/r/gov/dao/memberstore/v0.TiersByName) float64}, bool)

    • GetTierPower(tierName string, members struct{BPTree *gno.land/p/nt/bptree/v0.BPTree}) float64

    • IterateTiers(fn func(string, gno.land/r/gov/dao/memberstore/v0.Tier) bool)

    • NewChangeTiersRequest(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}, tiers map[string]gno.land/r/gov/dao/memberstore/v0.Tier) struct{title string; description string; executor gno.land/r/gov/dao.Executor; filter gno.land/r/gov/dao.Filter}

    • NewMember(invitationPoints int) *gno.land/r/gov/dao/memberstore/v0.Member

    • NewMembersByTier() struct{BPTree *gno.land/p/nt/bptree/v0.BPTree}

    • Render(path string) string

    • RenderCharts(members struct{BPTree *gno.land/p/nt/bptree/v0.BPTree}) string

    • RenderMembers(path string, members struct{BPTree *gno.land/p/nt/bptree/v0.BPTree}) string

    Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.

    Rendered

    RenderedRawgnoweb ↗

    vm/qrender output, sanitized (docs/render-security.md) and displayed in an empty-sandbox iframe — scripts, forms and popups cannot run. Links stay inert in-preview; right-click to open.

    )
    9
    10func TestPower(t *testing.T) {
    11 ms := NewMembersByTier()
    12 addMembers(ms, 100, T1)
    13 addMembers(ms, 100, T2)
    14 addMembers(ms, 100, T3)
    15
    16 tiers.Iterate("", "", func(key string, value interface{}) bool {
    17 po := value.(Tier).PowerHandler(ms, tiers)
    18 if key == T1 && po != 3.0 {
    19 t.Fatal("wrong value for T1")
    20 }
    21 if key == T2 && po != 2.0 {
    22 t.Fatal("wrong value for T2")
    23 }
    24 if key == T3 && po != 1.0 {
    25 t.Fatal("wrong value for T3")
    26 }
    27
    28 return false
    29 })
    30
    31 ms = NewMembersByTier()
    32 addMembers(ms, 100, T1)
    33 addMembers(ms, 50, T2)
    34 addMembers(ms, 10, T3)
    35
    36 tiers.Iterate("", "", func(key string, value interface{}) bool {
    37 po := value.(Tier).PowerHandler(ms, tiers)
    38 if key == T1 && po != 3.0 {
    39 t.Fatal("wrong value for T1")
    40 }
    41 if key == T2 && po != 2.0 {
    42 t.Fatal("wrong value for T2")
    43 }
    44 if key == T3 && po != 1.0 {
    45 t.Fatal("wrong value for T3")
    46 }
    47
    48 return false
    49 })
    50
    51 ms = NewMembersByTier()
    52 addMembers(ms, 100, T1)
    53 addMembers(ms, 200, T2)
    54 addMembers(ms, 100, T3)
    55
    56 tiers.Iterate("", "", func(key string, value interface{}) bool {
    57 po := value.(Tier).PowerHandler(ms, tiers)
    58 if key == T1 && po != 3.0 {
    59 t.Fatal("wrong value for T1")
    60 }
    61 if key == T2 && po != 1.0 {
    62 t.Fatal("wrong value for T2")
    63 }
    64 if key == T3 && po != 1.0 {
    65 t.Fatal("wrong value for T3")
    66 }
    67
    68 return false
    69 })
    70
    71 ms = NewMembersByTier()
    72 addMembers(ms, 100, T1)
    73 addMembers(ms, 200, T2)
    74 addMembers(ms, 1000, T3)
    75
    76 tiers.Iterate("", "", func(key string, value interface{}) bool {
    77 po := value.(Tier).PowerHandler(ms, tiers)
    78 if key == T1 && po != 3.0 {
    79 t.Fatal("wrong value for T1")
    80 }
    81 if key == T2 && po != 1.0 {
    82 t.Fatal("wrong value for T2")
    83 }
    84 if key == T3 && po != 0.1 {
    85 t.Fatal("wrong value for T3")
    86 }
    87
    88 return false
    89 })
    90}
    91
    92func TestCreateMembers(t *testing.T) {
    93 ms := NewMembersByTier()
    94 println("adding members...")
    95 addMembers(ms, 10, "T1")
    96 println("added T1")
    97 addMembers(ms, 100, "T2")
    98 println("added T2")
    99 addMembers(ms, 1000, "T3")
    100 println("added T3")
    101
    102 m, tier := ms.GetMember(address("11T3"))
    103 urequire.Equal(t, "T3", tier)
    104
    105 m, tier = ms.GetMember(address("2000T1"))
    106 urequire.Equal(t, "", tier)
    107 if m != nil {
    108 t.Fatal("member must be nil if not found")
    109 }
    110
    111 tier = ms.RemoveMember(address("1T1"))
    112 urequire.Equal(t, "T1", tier)
    113}
    114
    115func addMembers(ms MembersByTier, c int, tier string) {
    116 // mt := avl.NewTree() XXX
    117 ms.SetTier(tier)
    118 for i := 0; i < c; i++ {
    119 addr := address(strconv.Itoa(i) + tier)
    120 if err := ms.SetMember(tier, addr, &Member{}); err != nil {
    121 panic(err.Error())
    122 }
    123 }
    124}
    125
    126func TestRenderMembersToleratesMalformedPath(t *testing.T) {
    127 ms := NewMembersByTier()
    128 addMembers(ms, 3, T1)
    129 // A control byte makes url.Parse reject the path; RenderMembers must
    130 // degrade to the first page rather than nil-deref / panic (Render is an
    131 // unauthenticated, read-only path).
    132 out := RenderMembers("?\x01", ms)
    133 urequire.True(t, len(out) > 0, "malformed path must render, not panic")
    134}
    135