Membership NFT
π Standard
π Transferable
π Network
π Symbol
π Related Pages
Member LevelsProgression & ReviewsDAOMembershipNFTVoting PowerLast updated
Last updated
function mint(address to, uint256 rank) externalfunction promote(address member, uint256 newRank) externalevent MemberPromoted(
address indexed member,
uint256 oldRank,
uint256 newRank
);function demote(address member, uint256 newRank) externalfunction burn(uint256 tokenId) externalevent MembershipBurned(
address indexed member,
uint256 rank
);function isMember(address addr) external view returns (bool)function getRank(address member) external view returns (uint256)function tokenURI(uint256 tokenId) external view returns (string memory)const isMember = await membershipNFT.isMember(userAddress);
console.log(`Is member: ${isMember}`);const rank = await membershipNFT.getRank(userAddress);
console.log(`Rank token ID: ${rank}`);
// Map to rank name
const rankNames = {
10: 'Seeker',
15: 'Apprentice',
20: 'Contributor',
// ... etc
};
console.log(`Rank: ${rankNames[rank]}`);address public founder;
address public multisigWallet;
bool public multisigEnabled;
mapping(address => uint256) public memberRank;
mapping(uint256 => bool) public validRanks;
mapping(address => bool) public whitelistedAddresses;function _update(address to, uint256 tokenId, address auth)
internal override
{
address from = _ownerOf(tokenId);
// Minting is allowed
if (from == address(0)) return super._update(to, tokenId, auth);
// Burning is allowed
if (to == address(0)) return super._update(to, tokenId, auth);
// Emergency whitelist transfers
if (whitelistedAddresses[to])
return super._update(to, tokenId, auth);
// All other transfers blocked
revert TransferNotAllowed();
}