Smart contract for managing community membership and roles. Also has implemented NFT Interface. When role granted to user, user obtained NFT for each role. User can customize own NFT and specify ExtraURI
Any user can create own community by call method produce of CommunityFactory contract: produce(hook, name, symbol)
20220630
Ethereum Rinkeby Testnet
CommunityFactory
Binance SmartChain TestNet
CommunityFactory
Binance SmartChain TestNet
TBD
# Old versions
There are 6 predefined roles:
role name | role index |
---|---|
relayers |
1 |
owners |
2 |
admins |
3 |
members |
4 |
alumni |
5 |
visitors |
6 |
Role relayers
is web servers X which can register new accounts in community via invite by owners/admins or some who can manage.
Roles owners
is a single role that can magage itself. means one owner can add(or remove) other owner.
Contract can be used as external storage for getting list of members.
Any user obtain NFT with tokenID = (roleid <<160)+walletaddress
Any who can manage certain role can setup tokenURI for this role by calling setRoleURI
.
Also any member can setup personal URI for his role by calling setExtraURI
.
Full methods for each contracts can be find here Community Most usable method methods will be described below:
method name | called by | description |
---|---|---|
grantRoles | Any role which manage "roles" | adding members to new "roles" |
revokeRoles | Any role which manage "roles" | removing members from "roles". Revert if any roles can not be managed by sender |
createRole | only `owners` | Creating new role |
manageRole | only `owners` | allow account with "byRole" setup "ofRole" to any another account |
getAddresses | anyone | Returns all accounts belong to "role" |
getRoles | anyone | Returns all roles which account belong to |
addressesCount | anyone | Returns number of all members belong to "role" |
invitePrepare | only "relayers" | storing signatures of invite |
inviteAccept | only "relayers" | accepting admin's invite |
inviteView | anyone | Returns tuple of invite stored at contract |
adding accounts to new roles
. Can be called any role which manage roles
. Revert if any roles can not be managed by sender
Params:
name | type | description |
---|---|---|
accounts | address[] | account's address |
roles | uint8[] | indexes of roles |
removing roles
from certain accounts. Can be called any role which manage roles
. Revert if any roles can not be managed by sender
Params:
name | type | description |
---|---|---|
accounts | address[] | accounts's address |
roles | uint8[] | indexes of roles |
Creating new role. Сan called by owners
Params:
name | type | description |
---|---|---|
role | string | name of role |
allow account with byRole
setup ofRole
to another account with default role(members
). Сan called only by owners
.
Params:
name | type | description |
---|---|---|
byRole | uint8 | index of source role |
ofRole | uint8 | index of target role |
canGrantRole | bool | if true then byRole can grant ofRole to account, overwise - disabled |
canRevokeRole | bool | if true then byRole can revoke ofRole from account, overwise - disabled |
requireRole | uint8 | target account should be in role requireRole to be able to obtain ofRole . if zero - then available to everyone |
maxAddresses | uint256 | amount of addresses that be available to grant in duration period(bucket) if zero - then no limit |
duration | uint64 | if zero - then no buckets. but if maxAddresses != 0 then it's real total maximum addresses available to grant |
Returns all accounts belong to role
Params:
name | type | description |
---|---|---|
role | uint8 | index of role. |
Returns all roles which member belong to
Params:
name | type | description |
---|---|---|
account | address | account's address. [optional] if not specified returned all roles |
Returns number of all accounts belong to role
Params:
name | type | description |
---|---|---|
role | uint8 | index of role. |
Storing signatures of invite
Params:
name | type | description |
---|---|---|
sSig | bytes | admin's signature |
rSig | bytes | recipient's signature |
Accepting admin's invite
Params:
name | type | description |
---|---|---|
p | string | admin's message which will be signed |
sSig | bytes | admin's signature |
rp | string | recipient's message which will be signed |
rSig | bytes | recipient's signature |
Returns tuple of invite stored at contract
Params:
name | type | description |
---|---|---|
sSig | bytes | admin's signature |
Return Tuple:
name | type | description |
---|---|---|
sSig | bytes | admin's signature |
rSig | bytes | recipient's signature |
gasCost | uint256 | stored gas which was spent by relayers for invitePrepare(or and inviteAccepted) |
reimbursed | ENUM(0,1,2) | ReimburseStatus (0-NONE,1-PENDING,2-DONE) |
used | bool | if true invite is already used |
exists | bool | if true invite is exist |
visit wiki