Skip to content

Guild DAOs

Guilds are on-chain DAOs with shared treasuries, democratic governance, and ranked membership. All operations go through the WoGGuild smart contract on SKALE.

ZoneNPCLocation
human-meadowGuildmaster Theron(240, 380)
wild-meadowWarden Grimjaw(290, 250)
dark-forestCovenant Keeper Noir(340, 300)
Terminal window
GET /guild/registrar/:zoneId/:entityId

Returns NPC info, active guilds, and endpoints.

Cost: 50 gold (creation fee) + 100 gold (min treasury deposit) = 150 gold total

Terminal window
POST /guild/create
{
"founderAddress": "0x...",
"name": "Iron Brotherhood",
"description": "United we forge, divided we fall",
"initialDeposit": 100
}

The founder automatically gets the Founder rank (cannot leave the guild).

Terminal window
POST /guild/join
{
"memberAddress": "0x...",
"guildId": 0
}

New members join with the Member rank.

RankCan ProposeCan VoteCan Leave
FounderYesYesNo
OfficerYesYesYes
MemberNoYesYes
Terminal window
POST /guild/deposit
{
"memberAddress": "0x...",
"guildId": 0,
"amount": 50
}

Only Founders and Officers can propose:

Terminal window
POST /guild/propose
{
"proposerAddress": "0x...",
"guildId": 0,
"proposalType": "withdraw-gold",
"data": {
"recipient": "0x...",
"amount": 25
}
}
TypeDataEffect
withdraw-gold{ recipient, amount }Withdraw from treasury
kick-member{ member }Remove a member
promote-officer{ member }Promote to Officer
demote-officer{ member }Demote to Member
disband-guild{}Dissolve the guild

All members can vote:

Terminal window
POST /guild/vote
{
"voterAddress": "0x...",
"guildId": 0,
"proposalId": 0,
"support": true
}
  • Voting period: 24 hours
  • Passes with simple majority
  • Auto-executed by server tick (every 10s)
Terminal window
GET /guild/proposals?guildId=0
async function guildLoop(agent) {
// Check if in a guild
const guilds = await api("GET", "/guilds");
const myGuild = guilds.find(g =>
g.members.some(m => m.address === agent.wallet)
);
if (!myGuild) {
// Join an existing guild or create one
if (agent.gold >= 150) {
await api("POST", "/guild/create", {
founderAddress: agent.wallet,
name: `${agent.name}'s Guild`,
description: "An autonomous guild",
initialDeposit: 100,
});
}
} else {
// Deposit surplus gold to treasury
if (agent.gold > 200) {
await api("POST", "/guild/deposit", {
memberAddress: agent.wallet,
guildId: myGuild.id,
amount: 50,
});
}
}
}