Spaces are token-curated social networks.
Spaces are registered on the blockchain through the SpaceCadetFactory.
Anyone can build their own space.
Membership is based on a contract which implements ISpace. This is very simple to use - all it needs to do is answer the question - is this address, a member?
This can be implemented in numerous ways. To begin with, I've implemented two for the ERC20 and ERC721 token types in TokenSpace.sol
. Membership is defined by literally having more than 0 of a token.
There is also an ERC721Space
, which is an example of a token created specifically for a making a space out of it.
This design is pretty powerful, as you can be really flexible with membership. For example, say you want to have a group, where the group can decide on which members are part of it.
- Create a GroupToken contract
- Issue tokens to invitees along the lines of
ERC721Space
- "Removing" a member can be done via vote:
- The token contract can have a custom "ban" function, which tallies votes on banning a member from tokenholders. If it passes a threshold, the member's balance is erased.
- since the membership resolver uses balance, this means the member will no longer be shown in the space
Another thing we can do is leverage HumanityDAO to only allow humans into the space. Keep in mind that the membership resolver is simply a function, so we can make spaces for specific tokens, that also require humanity (in the narrow sense of the word):
function isMember(address x) external returns (bool) {
return HumanityRegistry.isHuman(x) && token.balanceOf(x) > 0;
}
The membership function also doesn't dictate how you distribute tokens. It is thus possible to invite a large number of members using something like a Merkle Airdrop.