Open olasunkanmi-SE opened 1 month ago
Proxy Contract
MembershipManager
implementation contract MembershipManager Contract
(Implementation)Membership Creation
Membership Renewal
Event Signup
Attendance Rewards
ERC721Factory
upon event attendance SBT Contract
MembershipManager
to mint a SBT token/ renew the expiry timestampERC721Factory Contract
MembershipManager Contract
ERC721Implementation Contract
ERC20Token Contract
See image below for simplistic architecture:
@isabelle-pundix @olasunkanmi-SE we should finish the design and start working on the code. I think one of you can make a final design, then separate the tasks.
Here is the create new membership contract workflow.
Create Membership
struct Membership {
string name,
uint256 duration,
uint256 maxSupply,
uint256 price
}
The membership contract should be able to
@halink0803 @isabelle-pundix @jshekhawat @anshugarg401
@halink0803 @jshekhawat @olasunkanmi-SE @olasunkanmiraymond @anshugarg401 here's the implementation overview we discussed today! (@jshekhawat feel free to add on architecture diagram of multisig contract).
as discussed, here's the workload split: @halink0803: Event Management contract @jshekhawat: ERC721 & Multisig contract @olasunkanmi-SE, @anshugarg401 and myself: Membership Manager
Timelines: Smart contract + Foundry test cases: 19 Nov (due on 21st Nov)
The Membership Manager Contract has a dependency on ERC721 & Multisig contract. How soon can we get this done @jshekhawat cc @halink0803 @anshugarg401 @isabelle-pundix
I will do it today, but realistically it doesn't have a dependency, you would be coding against the interface of ERC721. When you would be initializing the constructor you would dynamically be setting the address. like this:
IERC721 _membershipProvider = IERC721(_address);
and you can code against the interface:
https://docs.openzeppelin.com/contracts/3.x/api/token/erc721#IERC721Metadata
Please make sure that the token metadata would be in this format in json, that you should upload somewhere:
{
"title": "Asset Metadata",
"type": "object",
"properties": {
"tier": {
"type": "string",
"description": "membership tier"
},
"expiry": {
"type": "string",
"description": "membership expiry time"
},
}
}
}
After uploading you should call the method with this signature:
function safeMint(address to, uint256 tokenId, string memory uri)
public
onlyOwner
{
_safeMint(to, tokenId);
_setTokenURI(tokenId, uri);
}
Also, the multisig is not a contract but an address and you will interact with it in the same manner as an EOA. Underneath that address will run gnosis safe for which I have already asked for your addresses:
Tiered Membership DApp
Overview
Tiered Membership DApp is a decentralized application that allows organizations to create and manage tiered membership programs using blockchain technology. The application leverages smart contracts to handle membership creation, event management, attendance tracking, and loyalty rewards.
Features
User Stories
As an Oracle (System Initializer)
As an Admin
As a User
Technical Specifications
Business Rules
Further functionality
Staking.