Custom Token Launchpad - zkCloudWorker

This topic is to discuss the proposal submitted by @DFST & @mazito .Please see below for the details of the proposal and discussion.

1st September, 2024
Current status: Funded
Funding Note: The funding for this proposal is approved. This proposal has a high impact on the ecosystem allowing projects to start creating communities. We acknowledge the delivery risk to be low but certainly caution all potential users of the platform to be vigilant. The team has shown great care and understanding regarding this matter. The budget is in line with the proposal.

24th August, 2024
Current status: Under Consideration.
Opened for community discussion on : 24th August,2024

1 Like

MINA Custom Token Launchpad on zkCloudWorker

Project background

Given the recent MINA release of the new custom token standard FungibleToken, and based on our own needs for zkCloudWorker, Socialcap and MinaNFT and the experience gained on building, processing and monitoring transactions on mainnet to mint, buy and sell NFTs using zkCloudWorker, we propose to build an easy to use no-code custom token launchpad.

We think that this launchpad may benefit either individuals and other groups or communities which may want to issue MINA custom tokens for engagement or other reasons, and will need to administer this tokens and its parameters and use broad range of community engagements tools as airdrops and distributions.

Proposal overview

Problem

While handling custom tokens in MINA is relatively straightforward from a developer’s perspective, it is much more challenging for non-technical users.

This presents a significant barrier for many MINA users, limiting the use and benefits of custom tokens to a small group of people.

Also, it creates a high entry barrier for experimentation:

  • Initial Setup Challenges: Setting up the necessary environment and tools to create and manage custom tokens often requires a steep learning curve. This high barrier to entry discourages users from experimenting with token creation, leading to missed opportunities for innovation.
  • Cost and Risk: For non-technical users, the perceived or real cost and risk of making mistakes when creating or managing tokens can be a deterrent. Users may fear losing funds or making irreversible errors, which could prevent them from exploring the benefits of custom tokens.

Solution

By creating a no-code custom token launchpad, we empower both non-technical and technical users to take advantage of these benefits without needing deep knowledge of MINA development. This not only broadens the adoption of MINA’s custom tokens but also fosters innovation by allowing more people to experiment with and implement their ideas.

In summary, custom tokens in the MINA ecosystem can drive greater engagement, provide economic incentives, enhance branding, and offer educational value. A no-code launchpad democratizes access to these benefits, making them available to a much wider audience within the MINA community.

For developers, we will provide an API that will allow them to integrate easily the custom tokens into their products to easily launch and manage the tokens for games, business and community applications, or even their own custom launchpads.

Solution details

We want to provide both a simple UI and a set of zkCloudWorkers that will manage the Custom token contract.

The UI will allow:

  • Login with a MINA wallet
  • Allow the owner to launch a custom token, set the total supply, symbol and other needed parameters.
  • Set permissions on administration of the custom token
  • Allow the owner to mint and transfer tokens in batches for airdrops and distributions. For individual transfers, we recommend Auro Wallet.
  • Allow the token owner to launch a token and mint the token to users
  • Allow regular users to mint or buy the whitelisted tokens by paying some amount in MINA (whitelisted tokens have to be issued, minted and sold with the help of the member of Mina Developers Alliance for the prevention of scam)
  • Have a board for the custom token with general status (total supply, minted, burnt, etc), including wallets that hold the token.
  • Use custom memo for transactions to let users understand the transactions in the explorer. Each transaction in the Mina protocol have the memo (up to 30 characters) attached to it, and we will provide the possibility to define the content of the memo depending on the type of the transactions, for example: “airdrop mint @mygame”
  • Allow the owner to add an image to the token to reflect the token branding.
  • Dashboard with all issued custom tokens including its parameters.

Developers API:

Many developers will want to issue the custom token and have simple API to manage it (mint, airdrop, distribute, transfer) without building own backend for the tx building and proving.

This platform with the help of zkCloudWorker will provide a simple API for developers that will

  • Launch a token
  • Mint a tokens to some address
  • Airdrop or distribute the tokens
  • Use custom memo for transactions to let users understand the transactions in the explorer. Each transaction in the Mina protocol have the memo (up to 30 characters) attached to it, and we will provide the possibility to define the content of the memo depending on the type of the transactions, for example: “airdrop mint @mygame”
  • Build, prove, send and monitor the transactions for the minting, transferring, buying and selling the tokens (this capability will be limited to whitelisted tokens issued with the help of the member of Mina Developers Alliance for the prevention of scam) in accordance with the logic and prices defined by the developer or the contract created by the developer.

Limited Buying and Selling transactions for some whitelisted tokens

Token Launchpad is not a DEX and the sell and buy capability will not be directly provided to users. In case the developer that uses the Token Launchpad API will choose to support the buying and selling of the tokens, zkCloudWorker will provide the capability to build, prove, send and monitor the buy/sell transactions for whitelisted tokens. Token Launchpad will not buy or sell the tokens, the party that will buy from users or sell the tokens to users will be third-party project that issued the token represented by the third-party developer - member of MDA. The prices for such transactions will be also defined by third-party project that issued the token and can be fixed or defined by some algorithm.

Token Owners rights

Regular MDA Developers Projects Endorsed by MDA Developers
Issue token Yes Yes Yes
Mint Yes Yes Yes
Airdrop Yes Yes Yes
Sell to regular users No Yes Yes
Buy from regular users No Yes Yes
Endorse other projects No Yes No

MDA developers should go through KYC to sell tokens and buy tokens.

Token Users rights

zkCloudWorker Service Usual Tokens Whitelisted Tokens
Get as airdrop Yes Yes
Mint for free Yes Yes
Buy No Yes
Sell No Yes
Transfer Yes Yes

Impact

In what way custom tokens may be useful for the broad MINA Community ?

Community Engagement and Governance:

  • Voting and Decision-Making: Custom tokens can be used to create governance systems within communities, enabling token holders to vote on important decisions. This democratizes decision-making and increases community involvement.
  • Incentivizing Participation: Tokens can be distributed to community members as rewards for contributing to discussions, creating content, or participating in events. This fosters a more engaged and active community.

For example, in Socialcap, a community could create its own token, and when a credential is approved, a certain number of these tokens can be assigned to the approved credential. This credential could then be used for voting, with the assigned tokens carrying a certain voting power.

Economic Incentives:

  • Loyalty Programs: Businesses or community groups can issue custom tokens to reward loyal customers or participants. These tokens can be redeemed for discounts, exclusive access, or other perks.
  • Fundraising and Crowdfunding: Custom tokens can be used to raise funds for projects or initiatives within the community. This allows for decentralized funding models where contributors receive tokens in exchange for their support.

Personal and Group Branding:

  • Custom Rewards: Individuals or groups can create their own tokens to represent unique achievements, memberships, or status within a community. This can enhance personal or group branding.
  • Event Tokens: Organizers of events, both virtual and physical, can issue custom tokens to attendees as proof of participation, which can be used for future access or special privileges.

Audience

All MINA users, groups, developers and projects who can benefit from an easy to use no-code custom token launchpad.

Architecture & Design

Detailed Design/Architecture:

As we will follow the standard Fungible token contract very closely the Launchpad will only set the existent contract params by providing the custom parameters for the token: token symbol, number of digits, and metadata for the Fungible token contract code and admin contract code (or several admin contracts as the case can be to start with one admin contract that allows the minting of the tokens and then to switch to another, that freeze the minting to fix the total supply).

The url will be set to the standard value (github url for the contract code), or, in the advanced case, to arweave url with JSON file containing the full metadata about the token, including the image, set of admin contracts, social media and web links and custom metadata.

As a continuation of our previous work with the zkCloudWorker, we will use the zkCloudWorker custom worker to deploy and run the contracts code, build the index for the tokens.

We already have a test implementation for the token worker in https://github.com/zkcloudworker/token-example.test

We use a dedicated FungibleTokenAdmin contract that grants permissions for administrative actions on a token: that way, when issuing a token, a user can specify their own rules for administrative actions, without changing the token contract itself. The advantage is that third party applications that only use the token in a non-privileged way can integrate against the unchanged token contract.

As to security we will use the established method of proving in the cloud and signing the serialized transaction with the wallet.

For the token statistics, we will use Blockberry API to collect the information about all token transactions and present it to the user.

TokenLaunchpad

Vision

What is your long-term vision for this project if your proposal is funded?

We view the Launchpad as a basic ecosystem tool, that will be broadly used by the MINA community to create, mint, experiment, innovate, and distribute custom tokens, something that has been already proved useful in many other blockchain ecosystems.

As a roadmap we have some ideas for future features (not included in this proposal milestones), such as:

  • Allow a short video (1 minute or less) to be linked to the token, and set a bonding curve so token price may change with views (or “likes”, or some other interaction metric).
  • Allow token trading, though this may require deep analysis and extra measures to avoid scams and rug pulls.
  • Allow delegation of token minting to some other account. For example in Socialcap, the community admin will create the custom token with his account, by may delegate to Socialcap the ability to mint a certain amount of tokens, so Socialcap can latter transfer them to the approved credentials.
  • Provide a set of different custom build FungibleTokenAdmin contracts so the owner can choose which one to use for different scenarios.
  • adding the contracts that work using some algorithms (market maker algorithm, the bonding curve algorithm, etc) to allow easy issuing and trading of the tokens.

Above features are not included into the scope of the current proposal as we intend first to release the main functionality and get the feedback of the users and then, based on this feedback, to proceed to the next stage to make sure that the development of the project is aligned with the user’s needs.

Existing Work

Previous work with the zkCloudWorker can be found in zkCloudWorker ¡ GitHub.

The use of custom tokens for credentials (WIP) can be seen in GitHub - Socialcap-app/socialcap-token-factory: Communities Custom Token Factory.

Production Timeline

We expect it to be live in Mainnet in three (3) months, as the zkCloudWorkers are already available on Mainnet, and we have some of the UI code used in zkCloudWorker readily available. We will iterate and get early users feedback to make sure that the product meets user’s needs.

Budget & milestones

This section should detail the deliverables at the end of the funding period, mid-point milestones, timeline and the budget requested. It should explain how the budget will be spent.

Deliverables

  • Frontend on minatokens.com
  • Backend that is based on zkCloudWorker
  • API for developers
  • Documentation and tutorials how to launch and manage the token

Mid-Point milestones

  • Backend part 1 (issuing and transferring the tokens, jest tests)
  • Frontend part 1 (issuing the tokens)

Final milestones

  • Frontend on minatokens.com
  • Backend that is based on zkCloudWorker
  • API for developers
  • Documentation and tutorials how to launch and manage the token

Project Timeline

  • 3 months

Budget Requested

  • 60,000 MINA

Budget Breakdown

  • UI design and development - 40% of budget
  • Backend and contracts development - 45% of budget
  • API design - 5% of budget
  • Documentation - 5% of budget
  • Video tutorials - 5% of budget

Wallet Address

  • MINA Wallet address for funding: B62qkcnSMdGjHmxRkJ2Zh3U4iLVQHM6AJc23UZbTiZvzniof9co4y2Q

Team Info

zkCloudWorker team

Mikhail Korotkikh:

  • MinaNFT project
  • zkCloudWorker project
  • Graduated from the Encode Club ZK bootcamp (Oct 2023)
  • Graduated from the Encode Club AI bootcamp (July 2024)

Mario Zito

  • Socialcap project
  • zkCloudWorker project
  • Graduated from the Encode Club ZK bootcamp (Feb 2024)

Risks & Mitigations

We see low risk in the project as the new custom token standard FungibleToken is already available, and the zkCloudWorkers are running seamlesly both in devnet and mainnet.

There are some implicit security risks as the new standard is quite new. But since custom tokens in the current proposal will have no real economic value, as they can not be traded (except for whitelisted tokens created with the help of the member of Mina Developers Alliance), this risk may be low at least in the initial phase.

But as these is quite new in MINA protocol, unexpected events may ocurr and we need to keep a vigilant eye on how workers are running, detecting intrusion intents and attacks and mitigating them when they appear. We already have monitoring tools on hand to overview operation.

Other risk is that zkCloudWorker can temporarily go out of service. Since the zkCloudWorker’s architecture is partly based on AWS S3, it can show stable operation, which makes it possible to avoid Lambda calls after the token is issued, and simple transfers can be made using Auro Wallet. Due to this, 99.9% uptime is assured for the major token operations.

For the batch mint/transfer transactions, one of the limits is the number of AccountUpdates in one transaction. We cannot overcome this limit, but we have the possibility to send many transactions being build in the same worker by amending the nonce or by using temporarily escrow accounts for holding tokens that should be distributed.

6 Likes

Hi DFST, I agree that increased activity regarding the new token standard is fundamental to continued growth of the MINA ecosystem and important for new entrants. However, I disagree to some extent with this approach of a launchpad being a significant part of that. I actually think that a launchpad that is very easy to use from a wallet has more risks than benefits associated with it. First, and most significantly, there may be an overwhelmingly large number of random tokens produced, which may have no real value or use case whatsoever, but furthermore actually could harm existing real projects by taking activity/noise away from them with duplicated tickers etc. making it more difficult for users to navigate. This launchpad also makes it easier for malicious users to exploit potential users. I also believe in general that there are too many tokens in crypto, not too little. So I guess my other argument would be that if a project needed a token enough, then it would have the resources to integrate the Mina token standard itself (along with help from o1labs/MF/community) assuming basic developer proficiencies whatever the underlying project may be. So I guess difficulties with UX regarding tokens should IMO come from the user perspective regarding the UI/UX of wallets and zkApps. What are your thoughts on these comments? Thanks in advance for taking the time to read my comment.

2 Likes

Yes, I also think that the database monitoring existing tokens is of higher importance

1 Like

Hi sMgT! You have raised a very important topic of the quality of the projects and tokens in the ecosystem and what we can do to make this quality higher and the users’ experience better. To achieve it, we need to ensure that we support the projects that create high-quality tokens and have cooperation between the ecosystem players. In our case, collaboration with other ecosystem projects will help a lot.

When designing the launchpad project, we were based on the experience of the MinaNFT project, which is almost two months on mainnet for now, and I have hundreds of e-mails and DMs with people who are using it. I can share my experience:

Most collection creators are not developers, and they want to concentrate on their product to ensure that the art, functionality, and marketing of their collections are high-level. They don’t want to spend time understanding how the protocol or NFTs work in technical detail; they want to push the button and get the result, concentrating on the core product. They ask for many many features, and I have already developed several custom pages for collections creators to meet their demand. You will soon see several amazing collections with high-quality art. Actually, the quality I see in the collections being prepared now is so high that I have decided to cancel on mainnet the MinaNFT feature that allows the creation of NFT images with AI, as AI images are mainly inferior to images prepared by collections creators. It is still available on devnet.

The other cohort of users are developers, and they understand all the details. However, they also prefer to concentrate on their product and use MinaNFT code for their NFT through integrations that I help them to do.

Many of them asking me about the new token standard and plan to launch their tokens and do some airdrops to their user base as a way to say thank you to users.

I do believe that we will have a similar experience with a custom token launchpad, and many non-technical users and developers will be willing to use a simple launchpad (with the possibility of custom features on demand; I will support them in it) and concentrate on the core product. To allow advanced metadata, we plan to use arweave off-chain storage for token metadata, allowing the rich metadata formats for the tokens. By making the life of the projects easier and allowing project owners to concentrate on core product, we will increase the number of quality projects.

We have two other groups of potential users:

  • First-time users who are trying to make something, and their token may not be of high quality. We believe that Mina has to become a world internet computer, and everyone should have access to it. Therefore, we will provide our services in this case, but we will make sure that the best tokens are most visible on our interface, and we will share all the relevant data on the number of transactions, unique tokens etc, with the projects that provide information to the Mina ecosystem users, namely ZKOK, AstroMina, MinaScan - we’re in contact with all of them, and our goal is to make the ecosystem better and show to the users all the best that is happening in the ecosystem.

  • The next group is scammers. We limit the possibilities of buing and selling the tokens only to the tokens created with the help of member Mina Developers Alliance and will monitor, block and report to BlockBerry Security all the attempts of scams. BlockBerry Security will provide the API to wallet and third-party projects, so we will be able to filter scam tokens and prevent interactions with them, clearly marking the scam tokens and the txs with them in explorers and wallets. You can check the BlockBerry Security project for more details.

We are not the only project in the ecosystem that supports the new token standard. Auro Wallet and Staketab projects (MinaScan, BlockBerry) are creating new features to support it, and we’re in contact with them and coordinating our efforts to make the user experience in the Mina ecosystem as good as we can.

I agree with you fully, and that is what we plan to do. We will also cooperate with BlockBerry Security to block from our frontend and mark all scam tokens, and prevent interactions with scam tokens by providing the relevant information to the users thru wallets and explorers with the help of BlockBerry Security API.

Speak of all,I think this is urgent to make minanft.io a brand new Ui.Such as opensea or magiceden.io.

1 Like

You will see Navigator’s proposal on it soon, we’re working on it

2 Likes

Hi sMgT.

Thanks for taking the time to read and comment. I agree with the risks involved and the need to set up cautionary measures for avoiding scams, which Mikhail already mentioned and described. However, I think that you are missing some points that make custom tokens really valuable for non-technical people, and why it is important to enable them.

There are three areas that custom tokens address which have important social implications and definite impact on empowering communities, projects, and brands, even when not ‘tradable’ (they can only be transferred to you, meaning they have no economic value or price).

  • Tokens for reputation: Tokens can be assigned by a community/project/brand to a given person as a reward or recognition of the importance or contributions made by this person to the community/project/brand. This would not be transferable (will be soulbounded in some way). The amount transferred may be related to the importance of each contribution, and the accumulated value may reflect the total Social Capital of this person in the given community/project/brand.
  • Tokens for fidelity: Point cards for rewarding loyal customers are a well-known and effective method used by brands. Custom tokens would be equivalent to ‘points’ in this particular case and can later be exchanged (not traded) for some prize or other valued customer item. Community or brand admins can leverage the power of MINA custom tokens in this way, opening new marketing/selling/building opportunities for the MINA Community.
  • Tokens for governance: Points can be assigned to a given role in a governance system, and voting for some decisions may require at least some threshold amount of the given community tokens. This opens a whole set of governance models and schemas that go beyond plain token governance, being in some ways token governance but tied to a credentialing or reputation system that assigns the ‘voting power’. This is one of the uses we are thinking of for them in Socialcap.

As you see, these are powerful use cases that go beyond a ‘proficient developer’ or team and can ignite broad use of the MINA Custom Token standard.

As a member of the Mina Developers Alliance and zkok founder I think this is a fantastic initiative. I want Mina to be known for good quality projects, to protect users and also to attract other devs to build on Mina. This has my full support!

1 Like

Hi @DFST & @mazito,
I think such a platform to handle custom tokens is a good idea—at least for the ‘mint’ and ‘manage’ functions. However, I have reservations regarding KYC-gated buy and sell.

You mention

MDA developers should go through KYC to sell tokens and buy tokens.

What does the process look like? If it’s required, why do you mention ‘should’?
Would that work on a solution such as synaps? If so, who will pay for it?
When you say ‘buy and sell’ tokens, would that be fiat or Mina coin?

Regarding the architecture

  • I’m unsure if I understand the need for a ‘set of admin contracts’. Would the token Launchpad have control over all admin contracts? Or does the token owner have control over the TokenAdmin contract for his Token?
  • How/where are the private keys of the token contract stored?
  • What is the ‘Algolia’ used for?
  • could you explain the ‘index blockchain state reconciliation script’?

Hi! Thank you for your questions! Below are the answers:

We need to go through KYC for integrations with MDA developers to ensure that the tokens are safe and that operations with the tokens comply with legal requirements.

We do not have our own requirements and will simply follow applicable legal requirements that are valid at the time of onboarding. Although they differ from country to country, most countries have adopted the legal requirements for VASP defined by the FATF. More details and complete guidance are available at Virtual Assets

In the case of Turkey, where most of the Mina protocol users and many developers, according to our statistics, are living, the legislation is developing at a fast pace. The latest updates are available at https://masak.hmb.gov.tr/kategori/duyurular, and the last guidance is issued on 26-Jul-2024: https://ms.hmb.gov.tr/uploads/sites/12/2024/07/KVHS-REHBER-2-0.pdf

For most cases, the procedure will be similar to the KYC procedure that should be followed when receiving grants from the Mina Foundation. We don’t think that we will use synaps.io, as they are focused on a one-fit-all solution starting from 1000 users. At the beginning, we will have just a few cases that will all be different, so we will be processing KYC manually.

When we refer to buying and selling tokens using our zkCloudWorker infrastructure, we refer to payments in MINA. We do not intend to use fiat currencies or do swap transactions between tokens in the first stage. As soon as the stablecoins are available on the Mina protocol, we will consider adding additional features during the next stages of the project. The stablecoins would require a different FungibleTokenAdmin contract that will have additional AML features similar to the ones used now by USDT or USDC on Ethereum and Tron networks.

The current Fungible Token architecture consists of two contracts: FungibleToken and FungibleTokenAdmin. While the code of the FungibleToken is fixed, the code of the FungibleTokenAdmin is open for customization. The FungibleTokenAdmin template provided at the Mina Foundation repo is a basic contract that allows the admin to make all the operations, including minting, pausing, and changing the FungibleTokenAdmin contract. It will not fit all the use cases, as there will be cases where the supply will be fixed, and the mint operation will be disabled, or stablecoin tokens that will implement AML logic through the FungibleTokenAdmin contract (as FungibleToken contract cannot be changed, it is impossible to do in FungibleToken code).

Therefore, we need several FungibleTokenAdmin contracts, and in some cases, different contracts can be used during the token’s lifetime by calling the setAdmin() method. For example, minting to the new users will be allowed during the first year, and then the supply will be fixed, and the mint function will be disabled.

The Custom Token Launchpad will provide users with several FungibleTokenAdmin contract templates, and we will be open to developing custom FungibleTokenAdmin contracts on request. However, we will not control or will be able to change the FungibleTokenAdmin contracts as it is the exclusive right of the token’s admin (i.e., the owner of the wallet whose address is written in the adminPublicKey state variable of the FungibleTokenAdmin contract).

There are three private keys for the token:

  • the private key of the admin, which will usually be stored in the wallet of the token issuer (for example, Auro Wallet)

  • the private key of the FungibleToken contract that can be used only to upgrade the FungibleToken in case of the protocol change as permission is set to the setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),

  • the private key of the FungibleTokenAdmin contract that can be used to update the verification key of the FungibleTokenAdmin contract depending on the permissions set.

We will not keep or will have access to those keys; it will be the user’s responsibility to keep them encrypted after the token is issued. Keeping the admin’s private key in the Auro Wallet is fully secure only in case the hardware Ledger is used to store private keys. Unfortunately, the Ledger app does not support zkApp signatures at the moment. We hope that this support will be added. If not, we can also develop in the next stage a simple CLI tool that will sign txs with an admin private key on the separate computer not connected to the internet.

On the frontend, we plan to show the information about tokens issued and statistics about the tokens. Although this information is available on the archive node and BlockBerry API in some form, fetching this information can take from a few seconds to a few minutes. Therefore, for a good user experience, we will prefetch and update this information after every tx sent by the Custom Token Launchpad and store it in the Algolia search index, which usually takes just a few ms to fetch. A similar technology is used on MinaNFT, and Algolia also powers the search on https://docs.minaprotocol.com; you can see how fast it is.

Sometimes, the information on the Algolia index can differ from the information on the chain. For example, it can happen when some transactions are replaced or changed, the node is temporarily unstable, and the current tx information cannot be fetched. Although most such cases can be handled automatically, there is always a chance that some rare error occurred that was not handled properly, or the error handling stopped after the timeout in case of prolonged node instability. Therefore, we need a script that runs through all the states for all the tokens and reconciles the information fetched with the information on the Algolia index. In case of discrepancies, the script informs about differences found and corrects the information in the index. Given the rate limit existing on the minascan nodes, the runtime for such script can easily be one hour or more. Therefore, the script is not suitable to run on the serverless architecture and should be run locally or on the always-on server. It is an internal developer’s tool, we do not expect users to run it.

1 Like

The funding for this proposal is approved. This proposal has a high impact on the ecosystem allowing projects to start creating communities. We acknowledge the delivery risk to be low but certainly caution all potential users of the platform to be vigilant. The team has shown great care and understanding regarding this matter. The budget is in line with the proposal.

The first versions of Token Issue Page and cloud worker are ready and working together to issue the token on devnet and put the token metadata in JSON format to the permanent storage on arweave.

The page is deployed to https://minatokens.com/, and the cloud worker is deployed to zkCloudWorker cloud.

The example of the transaction on devnet and screenshot:

1 Like