type WorxDistrib {
Points uint64
Rationale string
Source string
}
/* example
worxDistrib = [{
Points: 42
Rationale: "helped the new intern"
Source: "gno.land/r/supportdao"
}, {
Points: 21
Rationale: "developed X feature"
Source: "gno.land/r/evaluationdao"
}]
*/
interface WorxDistributor {
WorxPoints(addr std.Address) []WorxDistrib
WorxSum(addr std.Address) uint64
}
type Contrib {
// ???
}
interface ContribDistributor {
Contribs(addr std.Address) []Contrib
}
var admin std.Address
var worxDistributors []WorxDistributor
func WorxPoints(addr std.Address) []WorxDistrib {
all := []WorxDistrib{}
for d := range worxDistributors {
all = append(all, d.WorxPoints(addr)...)
}
return all
}
func Get(funcName string, addr std.Address) []WorxDistrib {
all := []WorxDistrib{}
for d := range worxDistributors {
all = append(all, d.(addr)...)
}
return all
}
func exampleGet() {
ret := Get("Worxpoint", addr).(WorxDistrib) ??
}
func WorxSum(addr std.Address) uint64 {
// ...
}
func RegisterWorxDistributor(wd WorxDistributor) {
if (std.PrevRealm().Addr() != admin) {
panic("nonono")
}
worxDistributors = append(worxDistributors, wd)
}
interface WorxDataProvider {
Get(dataName string, addr std.Address) any
}
var admin std.Address
var dataProviders []WorxDataProvider
func Get(dataType string, addr std.Address) []any {
all := []any{}
for d := range dataProviders {
all = append(all, d.Get(dataType, addr)...)
}
return all
}
func exampleGet() {
ret := Get("Worxsum", addr)
for r := range ret {
switch r.(type) {
case WorxSum:
// do something with worx points
}
}
}
func RegisterDataProvider(dp WorxDataProvider) {
if (std.PrevRealm().Addr() != admin) {
panic("nonono")
}
dataProviders = append(dataProviders, dp)
}
interface WorxDataProvider {
Get(dataName string, addr std.Address) any
SupportedTypes() []string
}
var admin std.Address
var dataProviders []WorxDataProvider
var dataTypeToDataProvider avl.Tree
func Get(dataType string, addr std.Address) []any {
all := []any{}
dataProviders := dataTypeToDataProvider.get(dataType)
for d := range dataProviders {
all = append(all, d.Get(dataType, addr)...)
}
return all
}
func exampleGet() {
ret := Get("Worxsum", addr)
for r := range ret {
switch r.(type) {
case WorxSum:
// do something with worx points
}
}
}
func RegisterDataProvider(dp WorxDataProvider) {
if (std.PrevRealm().Addr() != admin) {
panic("nonono")
}
for supp := range dp.SupportedTypes() {
providers := dataTypeToDataProvider.get(supp)
providers = append(providers, dp)
dataTypeToDataProvider.set(supp, providers)
}
}
gh0st: Why the name worxDAO ?
norman: worxaggregator better?
norman: should we pull r/profile data in worxdao?