Demo
Try out memento @ https://experimental.memento.supply
Why
Our mission is to empower traditional creators & brands to unlock the full potential of NFTs.
Traditional creators mostly care about three main things: (1) growing their audience, (2) engaging & reward loyal fans, (3) monetizing from new revenue streams. NFTs unlock opportunities for each of these needs; however, traditional creators have been held back by crypto complexities, high gas fees and limited UX.
Product Details
Memento enables creators to release digital collectibles for a consumer audience which can be claimed in 1 single click.
Creators can use this product to create an NFT. Once created & deployed on-chain, they can share a claim page to their fans via a link or embeddable widget. Fans can then collect the item with just an email address in 1 click.
Fans who collect the NFT will have an account abstraction wallet created for them using email as the log-in method, and they’ll receive the collectible in that wallet without having to worry about gas fees.
Creators can log into the product to see their collectors and grow their email contact list. We’re already seeing creators use this as a reward mechanism to build out their email list & engage with their audience.
Optionally, creators can enable payments for the collectible which will require a credit card payment to purchase the NFT.
Test NFT Claims
Collect a free memento: https://experimental.memento.supply/castle/memento-x-safe-on-base-1
Collect a “paid” memento w/ Stripe test info: https://experimental.memento.supply/castle/memento-x-safe-on-base-2
Test Stripe Payment Info:
Card Number: 4242 4242 4242 4242
Expiry: 12/34
CVC: any three digits (e.g. 123)
Zip: any (e.g. 10006)
Additional Context
NFT Creation
- Photo or video is uploaded on Cloudinary
- Link is returned from Cloudinary and added to a JSON file with the rest of the Memento metadata
- JSON file is uploaded to IPFS using web3.storage.
- The ERC 721 collection is created by Memento
- We have funded a 1balance account on Gelato Network
- We’ve created a Relay app on Gelato Network to allow-list NFT factories
- After the user adds all the relevant data for the Memento they want to create, we create a task with Gelato Network
Accounts
- Creators and collectors access Memento with just an email address.
- Memento app creates an externally owned account (EOA) and a smart contract account (SCA) for the creators and collectors.
- The EOA is created with web3Auth via the safe account abstraction SDK.
- The SCA is created with Safe’s AA core SDK.
- For the SCA, we use counterfactual addresses so that we don’t need to deploy unnecessarily
- The EOAs are owners of the SCA. The SCA store the Mementos (ERC-721 tokens) collected by the FAN.
- If an SCA requires deployment, we can leverage the 1Balance and Relay app created for Mementos to do a meta-transaction for the SCA deployment.
Claims
- Collectors can claim / collect Mementos with just their email.
- New users provide their email to the app and the app generates a counterfactual SCA address for them
- Gelato’s 1Balance and Relay app is setup with a MultiSend smart contract a. MultiSend is allow listed and our app stores the addresses for NFTs created
- Stripe payments are required for NFTs that are purchased instead of claimed for free.
Other
- App is setup to work on Goerli Base network
- Custom smart contracts:
- NFT Factories
- Multisend
- Safe Factory
- Gelato Network Relay app has the custom smart contracts added
Integrations
Safe Account Abstraction SDK & Web3auth
@safe-global/auth-kit
is used to create EOA accounts for users when they sign in or collect a memento with their email
Safe Contracts
- We’ve written a custom wrapper to use Safe contracts to deploy a safe but we added a few functions to easily generate the CREATE2 address
Base
- Our contracts are deployed to the Safe ecosystem
- NFT Factory contracts
- Multisend contract
- This is used to do mints (since NFT contracts will each have different addresses); we’ll prepare the transaction data and then send it over to this contract
- This contract has an allowlist (only Relay app and us are able to use it at this time; will probably add more restrictions as time passes so that our 1Balance account is not drained)
- Safe Factory contracts
Gelato
- We’ve set up a 1Balance account on Goerli so that we can leverage Gelato Relay Apps on Base Goerli. We use the Relay App to interact with NFT Factory, Multisend, and Safe Factory contracts
Stripe
- Users can accept payments for card payments for their NFT using Stripe. We use the
stripe
npm package and stripe webhooks to facilitate this- When a creator is creating a memento, they have the option to add a price
- If a price is added, the creator is prompted to setup a merchant account via stripe onboarding flow
- Once a merchant account is approved we allow creator to create a memento with a price, and we create a product record for the memento in stripe
- When collectors mint a paid memento, they’re redirected to the stripe checkout to complete their purchase
- Once the purchase is complete, the memento it collected