Open michelleellen opened 1 year ago
Hey there!
I'm zΓ΄Γma, core team lead @ Teritori. We're building an open source Web3 resilient OS for humans & organizations, soon available on desktop & mobile, with an all-in-one decentralized experience.
First bi-weekly call to start grant collaboration, share status and upcoming works. Participants: @zivkovicmilos @michelleellen @zxxma + 5 teritori core team members (will be added here soon).
Current state:
GnoDAO Deployer: Allowing to deploy DAOs on Gnoland, providing various DAO templates, in a great & simple UX this will allow user to facilitate all specific DAO creations, etc.
Gno Moderation Module: Allowing to add a decentralized moderation feature on various social network cases (starting from /boards, to social feeds, forums, etc). This module will be a more specific one, since dedicated to a social feature context, and can be even used by a DAO that have been deployed in the GnoDAO Deployer.
π₯· JK Gopher started to build a first GnoDAO standard version v0.1 WIP: Working on Tally endpoint, and after that:
π₯· Norman: WIP:
π₯· Yo1110: WIP: Studying state of gno /boards & /users Next:
π₯· Omniwired: WIP: Experiment and get knowledge asap on Gno status & /realms Next:
π₯· zΓ΄Γma: Lead + Research WIP: Research on Decentralized Governances
π₯· Ferryman Marketing WIP: Preparing marketing operations
π Research & Documentation: π GnoDAO v0.1 Specs: https://hackmd.io/xmicUqNDQyKFptjxyAWq7g?view π Schema Moderation DAO v0.1: π Feed Moderation Pattern v0.1: https://bafkreifd3eryxvlpi4g4xqde32v4x7oxewiy23zqblm4ssbu5ycrqt5kla.ipfs.nftstorage.link/ π User Profile Moderation Pattern v0.1: https://bafkreigzxvgsjopqzjgvrnzwqz5fjvrca7knyruk7jvpflatsyjogfwpsy.ipfs.nftstorage.link/ π GnoDAOs repo: https://github.com/TERITORI/gnodaos π Research around Decentralized Social Feed Algorithm Design: https://hackmd.io/mVc8J-LcSi6aNLyhx1f6wA?view
examples:
/r/demo/users
in Teritori dApp@hthieu1110 added /r/demo/users
as "name service provider" in our dApp which means: in a lot or places where you would have seen a gno address previously, you now see the /r/demo/users
name
We decided to suffix the gno names in our ui with .gno
to differentiate them (will be especially useful when we add multi-chain name search)
I started porting the DA0-DA0 contracts to gno, they probably have vulnerabilities and are no-where complete, but we can create proposals and vote on them
https://test3.gno.land/p/demo/grc/grc4_group https://test3.gno.land/p/demo/daodao/interfaces https://test3.gno.land/p/demo/daodao/core https://test3.gno.land/p/demo/daodao/voting_grc4 https://test3.gno.land/p/demo/daodao/proposal_single https://test3.gno.land/p/demo/markdown_utils
https://test3.gno.land/r/demo/foo_dao_2
You can also see the DAO in the Teritori dApp
Gno's eval query mechanism seems very powerful :), but the output is hard to handle for now
I have trouble signing transactions with Adena so no web interactions yet
We are building first bricks to be able to build decentralized moderation We're building 2 different DAO standards:
/users & /boards & social feed Integration
This two bricks are mandatory to be able to build a the 'ModerationDAO' module and experiment it asap.
π₯· Norman:
DAO-DAO contracts port, currently implemented: https://test3.gno.land/r/demo/foo_dao_2
basic /r/demo/users indexing and search (for friendly members update ui)
π₯· Gopher:
π₯· Yo1110:
π₯· Omniwired (Juan):
func RelayCall(fn func()) { if whitelistedAddr { fn() }}
if the target function is checking for std.CurrentRealm()
amino.Register(struct{})
; then you can call it from another package; it's similar to dynamic package injectionstd.TestSetTime()
std.TestSetOrigCaller(...)
:link: Previous call report here: https://github.com/gnolang/hackerspace/issues/7
gno.land/r/demo/groups
PrevRealm().Addr()
instead GetOrigCaller()
for authgno.land/r/demo/boards
PrevRealm().Addr()
instead GetOrigCaller()
for auth<boardName>/flags
render path that shows the most flagged posts for this boardgno.land/r/demo/groups
fork instead of custom group packagegno.land/r/demo/groups
: add/remove membersThe gno code is here https://github.com/TERITORI/gno/pull/3, this is still at exploration stage so it's unsafe and will probably change a lot The ui code is here https://github.com/TERITORI/teritori-dapp/pull/629
:question: Associated questions:
encoding/json
? This issue seem to indicate that there is a way:question: Associated questions:
No official limitation.
:link: https://github.com/TERITORI/gno/pull/1
:question: Associated questions:
const tx = await doTx();
const result = await tx.wait();
# This does not work
func GetPost(pid PostID) Post {
postPointer := getPostPointer(pid)
return &postPointer
}
const admin = std.Address("xxx")
func Test(t *testing.T) {
std.TestSetOrigCaller(admin)
std.TestSetOrigSend(std.Coins{{"ugnot", 200000000}}, nil)
users.Register("", "social_feeds_admin", "")
...
in `users.Register`, the check `std.GetCallerAt(2)` is not `admin`, so not the value of `std.GetOrigCaller` here but its value is `std.GetCallerAt(1)`
---
#### :computer: Omniwired:
- I have successfully set up and tested the first contracts (realms) on Gno.
- I have updated the "awesome gno" documentation and added an onbloc tutorial. Made PR.
- Identified some "quests" for future devs to do when onboarding them to GNOLand and PathWar.
- Started front end and models for the Pathwar challenges, leaderboard, tournaments. On-going.
---
#### Out of current scope:
#### :computer: Dadidou (Extra - Preparing future milestone: Multisig Interface)
- Worked on Multisig feature (for Cosmos chains only on v0.1)
- Mainly Bug fixing
- Full report here: https://hackmd.io/Ki4zuxWNSICmfZt3lqG4GA
---
### Side Notes:
- setup a dedicated Marketing call for
- Gnoland automated Goodies Shop idea
- Prepare EthCC connexions
- setup a dedicated Work session on Pathwar/Game of Realms
- maybe @ parisian hostel
- Publish a blogpost about Moderation DAO concept
ποΈ Previous Report: https://hackmd.io/@zxxma/report-sept-28
TLDR; We completed the Moderation DAO v0.1 Module Milestone during september, and now focus on upcoming milestone.
Gno DAO Deployer v0.1 β¦ ββββββββββ 100% βοΈ Gno Moderation Module v0.1 : β¦ ββββββββββ 100% βοΈ Gno Social Feed Integration v0.1 : β¦ ββββββββββ 100% βοΈ Gno Documentation v0.1 : ... ββββββββββ 100% βοΈ Public Articles presenting Modules : ββββββββββ 100% βοΈ
π feat: teritori contracts #1154 - PR Link: https://github.com/gnolang/gno/pull/1154 Available on π https://app.teritori.com (select Gno Teritori Testnet)
Moderation DAO: https://github.com/gnolang/gno/blob/7d9aa49394b5049eacc57effe8b14a556f92e087/examples/gno.land/r/demo/teritori/MODERATION_DAO.md
DAO Deployer Tutorial: https://github.com/gnolang/gno/blob/7d9aa49394b5049eacc57effe8b14a556f92e087/examples/gno.land/r/demo/teritori/DAO_TUTORIAL.md
Teritori Demo Readme: https://github.com/gnolang/gno/blob/7d9aa49394b5049eacc57effe8b14a556f92e087/examples/gno.land/r/demo/teritori/README.md
π Updated the documentation & tutorials with the faucet and published them on Teritori Gitbook:
Onchain task management contracts The aim of this module is to enable an organization to manage projects securely and transparently. Through modular Gno contracts, and a Kanban like interface, this tool will ensure visibility in the monitoring of decentralized projects. Use cases identified to date are:
π§ Status: User Interface design v0.1 : β¦ ββββββββββ 95% π» π https://github.com/TERITORI/gno/pull/5 (Escrow PR)
this module will allow to solve a conflict between buyer and seller using a dedicated DAO. This module will randomly select people to judge the conflict situation without any major conflict of interest. Users randomly selected in the Justice DAO will vote to find the fairest solution to the conflict.
π§ Status: We spent around +1 month to start exploring VRF and Justice DAO specs, and then we spent 1 month starting a POC.
Current state:
The team will continue to identify useful tools for developers, to facilitate the onboarding of future developers within the Gno ecosystem. For example, the list of interesting topics we'd like to continue contributing to:
We use the october month to : 1. review everything related to previous modules 2. bug fixing 3. prepare the next milestone plan.
https://github.com/TERITORI/gno/pull/5 (Escrow PR) https://github.com/TERITORI/gno/pull/2 (Gnodaos PR) https://github.com/TERITORI/gno/pull/10 (VRF + Justice DAO PR)
Latest VRF codebase :link: https://github.com/TERITORI/gno/tree/escrow_justice_update/examples/gno.land/r/demo/teritori/vrf
PR :link: https://github.com/TERITORI/gno/pull/11/files
For VRF 0.1 for Gnoland, we use following mechanism.
VRF can be used by offchain users to request random data or by other realms to get TRUE random value on their operations.
The initial use case is on Justice DAO to determine random members to get voting power on the DAO to resolve conflict between service providers and customers when there are issues between them.
VRF utilize two structs, Config
for feeders administration, and Request
to manage the state of random requests by id.
type Config struct {
vrfAdmin string
feeders []string
}
type Request struct {
id uint64
requesterAddress string
requesterRealm string
requiredFeedersCount uint64
fulfilledCount uint64
randomWords []byte
fulfillers []string
}
After realm deployment, VRF admin is set by using SetVRFAdmin
endpoint.
By VRF admin, feeders are set by using SetFeeders
endpoint.
Feeders can be modified by VRF admin at any time.
Note: The random data that's already feed by feeder can not be cancelled by VRF admin.
RequestRandomWords
endpointFulfillRandomWords
endpointRandomValueFromWordsWithIndex
or RandomValueFromWords
based on the required number of random valuesOn VRF 0.1, one request is designed for one time use. There might be a possibility where a realm continuously requires random numbers based on interval. And requesting it everytime would require bad UX.
To get better trust on VRF, the owner of the VRF will need to be a DAO realm.
There should be a software that the feeders run and the versions should be managed, the version should be compatible with the VRF realm. The software should fetch the bytes from verifiable source to avoid manipulation.
It can count the number of requests fulfilled for up-time calculation. And it would be good to add sort of verifiers to ensure that the random data sent is accurate.
It would be good to add sort of mechanism for rewards distribution to random data feeders.
VRF 0.1 is assuming the owner set the data feeders directly, it would be good to let feeders to send request through realm with social profiles, and get it approved by DAO to join as random data feeder.
Random data feeders can maintain their profile.
Escrow system realms & Onchain project manager
PR: https://github.com/TERITORI/gno/pull/11
We just deployed a kind of "soundcloud like" v1 on the gnosocial feed here (in the Music Feed Tab on top) : https://app.teritori.com/feed?network=gno-teritori
So in this v0.1, users can now :
In next versions, we would like to allow:
Please feel free to test, give feed back, ask for features, no idea is dumb!
(ex: in v3 or v4, we plan to create a world map to be able to listen music by countries... an browse "the teritori" to discover random artists)
If you need some testnet tokens for GnoTeritori testnet, you just have to go on the home of the dApp (on GnoTeritori Testnet only) and you'll find a direct button for faucet. Feel free to ask for help here, we'll airdrop you! Later, we'll also probably invite you in the Moderation DAO, to grow the moderation committee!
Today we had a brainstorm about worxdao bootstrap with gh0st and mikecito, here is the final document, everything is still wip and at early brainstorm/exploration stage, feedbacks are very welcome!!
type WorxDistrib struct {
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 struct {
// ???
}
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 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 realm?
Our current focus is on developing a proof of concept (POC) realm that allows linking a GitHub account with an on-chain address. This realm aims to enable users to associate their GitHub identity with an on-chain address.
Linking GitHub Account with On-Chain Address
Blockers and Solutions
Demo
Aggregate Worx Distribution
Related PRs
GnoVM
Machine.String
(PR #2145).Gno lint
DAO SDK
Project Manager Since we have already a lot in review, before opening a PR on the Gno repo, we're taking time to:
Machine.String
: This pull request is currently in review discussions with Morgan (PR #2145).ValueDeclr
, ImportDecl
, TypeDecl
: The issue has been resolved and closed (Issue #2220).ValueDeclr
, ImportDecl
, TypeDecl
: The fix has been successfully merged (PR #2221).Gno lint
DAO SDK (still waiting for review) PR: #1925
rework social feed contract (cosmwasm and gnolang)
gno contract: r/demo/teritori/social_feeds
on this branch
teritori contract: https://github.com/TERITORI/teritori-contracts/tree/master/contracts/social-feed
re-deploy contracts and gnolang realm on portal loop
index social feed on gno (currently it's direct contract queries for gno)
Project manager :
Teritori Realms
gno transpile
, gno lint
, gno test
, gnopls
), we are making patches to explore various way to properly support external repos with multiple packages/realms, we will open issues/PRs with promising patterns in the coming weeks
First workarounds:
GnoVM
Still Waiting Reviews:
Machine.String
. Currently under review: PR #2145.Gno lint
Teritori Node Updates:
Test 4 Deployed social_feeds realm on test4 UI: https://app.teritori.com/feed?network=gno-test4 Gnoweb: https://test4.gno.land/r/teritori/social_feeds:teritori
GnoVM
Updates:
Pending PRs:
Gno Lint
Pending PRs:
Gno CI
Updates:
Blockers:
In the background, we are also working on :
GnoVM
Updates:
Pending PRs:
Gno Lint
Pending PRs:
Teritori DAPP: Social Feed Map allowing to browse a gno social feed by exploring a world map UI. Geolocation is optional, and the address is chosen manually by the user, not automatically by device localization, to protect users while allowing them to view the community in a region, or have fun colonizing an area in groups of gnomees.
Updates:
Updates:
Updates:
Updates:
Machine.String
. PR #2145.Pending PRs:
Updates:
Updates:
Pending PRs:
r/github
: Extract raw GitHub metrics and feed them into an oracle.
r/notablecontributions
.r/profiles
only.r/boards
(e.g., posts, likes, and upvotes).r/boards
interactions.cd contribs/gnopls && go install . && cd ../gnopackagesdriver && go install .
Context: Team switched into a 'task force mode' until mainnet launch, to join core forces. Bandwidth is currently managed with 95% on gno core contributions focus and 5% on Teritori OS alpha products development, until the next phasis, and will remain flexible depending on top gnoland mainnet priorities.
PR Created:
PR Merged:
Issue Created:
Discussions:
Misc - UX Research & Proof-of-Contrib Experimentation: www.gnolove.world v0.2 is live π οΈ Gnolove Changelog v1.1:
wip: v1.2
Additional:
Burping Gal here. As an Cosmos supporter and Atom staker, we're saluting Jae's vision and looking forward to contributing and eventually building a smart contract platform on Gno.land.
Welcome Teritori team to the Gno.land hackerspace. The place to introduce yourself and document your journey in Gno.land as contributors and builders of the Gno.land Moderation DAO.