DapperCollectives / BOUNTY-Batch-Token-Transfer-Tool

[Bounty Claimed by FlowJP] The Batch Token Transfer Tool allows for a user to easily set up and automate transfers to multiple Flow wallet addresses from a single Flow wallet address.
3 stars 1 forks source link

FlowJP Community Proposal: Product Requirements Document including Technical Overview #3

Open 0xys opened 2 years ago

0xys commented 2 years ago

Overview

The Batch Token Transfer Tool allows for a user to easily set up and automate transfers to multiple Flow wallet addresses from a single Flow wallet address. Useful to anyone who manages a community or works with multiple collaborators, this tool saves users the time required to initiate transfers individually to large groups of people.

Team

Architecture and Technology

User Experience

  1. Let’s start with our dapps home screen.
  2. At the center of the page is the button with which the users can connect to a third-party Flow wallet (Blocto) to our Dapps.
  3. Once any third-party wallet is connected to our dapps, the list of tokens and its balance held by the user's wallet is displayed at the center. By default, FLOW token is selected but users may select other tokens.
  4. Below the list is the expandable textbox, in which the list of recipients’ addresses and the amount is inputted in a certain format as a batch. The format validation may be implemented.
  5. Also, the validation runs to make sure the sum of the sent amount is lower than the user’s balance.
  6. If all validations passed, initially-gray Send button is now activated.
  7. Clicking Send button will open a dialog displaying the summary of the batch transfer and Approve button beneath. If approved, a connected third-party wallet is opened and a transaction is ready to be authorized and broadcasted.
  8. Listening to the chain event to see the status of the sent transaction. Once broadcasted, the user gets notified and the link to Flowscan may be displayed.
  9. During chain spork and any kinds of outage, the user gets notified that the service is unavailable.

Maintainance Plan

Past Project

We have already created the batch transfer tool to distribute bounties to the event participants.

Misc

This document is also shared in google doc: https://docs.google.com/document/d/1ZZgFD7otoFZkJv_xrvpaz4g2JMsT130NXCw-l2PRM5g/edit?usp=sharing

avcdsld commented 2 years ago
ScreenShot 2022-03-30 17 55 08

I have been a Cadence code developer since the beginning and have developed various tools for the Flow Dev Community. I believe that we can develop a better tool that satisfies the desired requirements.

zikewu commented 2 years ago

Hey @avcdsld and @0xys thanks for submitting the PRD. Your previous batch transfer tool looks awesome! Dapper Collectives' engineering team will review your PRD and get back to you in the next 1-2 weeks.

markedconfidential commented 2 years ago

Hello @avcdsld and @0xys! Thank you for your patience while we reviewed your proposal for the Batch Transfer Tool.

After careful review, the Dapper Collectives team has decided that your proposal for this bounty is compelling and we'd like to request a couple of refinements to the proposal in order to evaluate moving forward:

Front-End Engineering Support

According to your proposal, there is a single developer working on the bounty with you. They're listed as a 'crypto engineer', can you clarify whether or not they are able to also handle front-end engineering work that the project requires? Alternatively, you may choose to bring on a front-end engineer to support you.

UI Design Support from Dapper Collectives

In the spirit of collaborating with our bounty partners, we'd like to offer input on the user interface design and user experience for the the Batch Transfer Tool in order to ensure it is as accessible and easy-to-use as possible. Please confirm that this is acceptable to your team— we can decide at a later date if this input should take the form of a brief call, asynchronous notes on UI designs, or some other format.


Feel free to ask any clarifying questions about this feedback! We look forward to your response. Pending review of your response to the feedback, we will wrap up any further questions and aim to approve awarding the bounty to your team.

0xys commented 2 years ago

Thank you for giving us the feedback! Happy to hear that our proposal has been accepted and we can contribute to further development of Flow ecosystem.

Frontend dev

Maybe our job titles are misleading. @avcdsld is an experienced developer in frontend, particularly Next.js. And I (@0xys) also have a fair experience of frontend. So, we can manage the frontend development on our own with @avcdsld taking a lead.

UI Design

Definitely welcome more people engaging in brushing up UI designs, which is core to our project.

Thank you again and hope to work with you all.

markedconfidential commented 2 years ago

@0xys @avcdsld Thank you for your thoughtful responses! On behalf of the Dapper Collectives team, I'm excited to announce that we'd like to award this bounty to the FlowJP team!

With the initial milestone complete, @zikewu will be reaching out with details on next steps soon. Looking forward to collaborating together with you!

zikewu commented 2 years ago

Congrats again @0xys @avcdsld !!! Can you guys give me your email contact so I can send over the payment details?

0xys commented 2 years ago

These are our emails addresses. Please, have a look.

avcdsld commented 2 years ago

Milestone 2: Front-End Prototype

@markedconfidential @zikewu It's been a little while, but we have created a front-end prototype. It is now working on testnet.

Demo site: https://batch-token-transfer-tool.vercel.app/

We are still implementing some features such as validation, csv upload and custom token. But the rough front design is complete. We would appreciate your feedback. If you have a logo, UI design, etc. that you prefer, we can change it.

deayora commented 2 years ago

@avcdsld upon first click - it's looking amazing! the team and I are going to review this tomorrow and get back notes hopefully by end of week. Awesome work :)

markedconfidential commented 2 years ago

@avcdsld Hello hello! We've reviewed the prototype and are very happy to report that we can consider the 2nd milestone complete!

From our initial check, all of the basic product requirements are in order.

Please note that we will likely contribute updates to the front-end design before the launch of this tool, but we are not expecting your team to handle that specific work as it is out of scope for the bounty.

Next steps:

@zikewu Please coordinate with the team on details regarding payment for the 2nd milestone!

0xys commented 2 years ago

On the verge of Phase 3

Hi, @markedconfidential @zikewu Thanks and happy to hear we're moving to 3rd phase!

As we get closer to fixing the product design, I want to share one concern over how to handle custom fungible token.

Unlike Ethereum, Flow users can't just send custom token to any accounts. To send token, the receivers must have allocated in their account storage a specific "receiver module" to each receiving token type. This "receiver module" is called "vault" in Flow term. Flow token doesn't need this vault since it's native token. But, any types of user-defined fungible token require this vault module to be present in the accounts interacting with the token. Remember each type of token requires its own type of vault, so n vaults are needed if you want to have n different tokens in your account. For this Flow-specific technical reason comes the unique ceremony when people use custom token: They create a vault before receiving new token.

Finally, speaking of our batch transfer tool, how should we handle token transfers that destined to accounts who don't own the vaults for that token? We came up with the following possible solutions:

  1. Just let the transaction fail
  2. Pre-Validate and notify such receivers. And ask users to remove such receivers.
  3. For vault-less receivers, we send token to "temporary contract," from which receivers will later claim their tokens after they setup their vault. "temporary contract" is like a registry, in which claimer address and claimable token amount are recorded. It holds unclaimed token in the contract until it's claimed by registered claimer. For this scenario, we need a separate page for claimer. So, frontend will need to be changed a bit. And, someone must maintain admin key of the contract in secure and trusted manner (he can steal unclaimed fund).

I want to hear from you which one of solutions is the closest to the ideal final product?

markedconfidential commented 2 years ago

@0xys Hello! We are doing some research to determine what the best plan of action is for this challenge; thank you for highlighting it. Hoping to get back to you this week with a clear direction to move forward in.

markedconfidential commented 2 years ago

@0xys Hello! After discussing with the Dapper team, we've ascertained that the recommended best practice is to avoid the temporary contract approach and instead assume that Senders are going to be alerting Recipients that they need to instantiate the receiver module in their account before receiving funds.

In most scenarios, such as a DAO, this is likely to be a simple message to members of the group. So, for this MVP of a Batch Token Transfer tool, we're comfortable moving forward with the assumption that we're going to allow transactions to fail if the Sender tries to send tokens to an address that hasn't instantiated a receiver module.

In the future, we'll explore ways to make it easier for Receivers to instantiate vaults for common/popular/vetted tokens.

0xys commented 2 years ago

Okay, we'll take the simplest approach as suggested. Thanks for your comment!

0xys commented 2 years ago

@zikewu Please coordinate with the team on details regarding payment for the 2nd milestone!

How do we proceed to payment this time? cc @markedconfidential

deayora commented 2 years ago

@0xys apologies for the delays on milestone 2 payment. I've connected with the team and we will get on that today. Thank you!

deayora commented 2 years ago

@0xys - I have just received word that this will be paid out by end of this week.

0xys commented 2 years ago

@deayora Hey, we haven't received payment yet. How is it going?

avcdsld commented 2 years ago

@deayora @zikewu @markedconfidential Hi. Haven't received an email about payment yet, but we will continue to develop Phase 3. If we should still wait please let me know.

avcdsld commented 2 years ago

@deayora @zikewu @markedconfidential Oh.. I just noticed. Five days ago, I'v received an additional FLOW to the address where I received my previous reward. Last time I sent an invoice, but this time I did nothing. I will check to the team for details. Anyway, we will continue to develop. Let’s keep in touch 👍

0xys commented 2 years ago

@deayora @markedconfidential We noticed the payment received five days ago. Sorry for not being aware of it.

We are moving on to phase 3.

zikewu commented 2 years ago

Hi @avcdsld and @0xys ! Wanted to check if there is anything I can help facilitate or unblock. Looking forward to moving the bounty to Phase 3 soon!

zikewu commented 2 years ago

Hey @avcdsld and @0xys, any update on Phase 3? Still holding my breath here 🤓

avcdsld commented 2 years ago

@zikewu Sorry for the delay in getting back to you. 🙏

We envision the following development items for phase 3:

These should be completed in the next week or so.

Is there anything else you need?

deayora commented 2 years ago

Hi @avcdsld that sounds great :) Is there anything we can do on our side to help push phase 3 forward, let us know. Always happy to jump into a group chat or on the phone to help unblock development.

avcdsld commented 2 years ago

@deayora @zikewu cc: @0xys Hi. We have completed the following developments:

  • Validation feature (checking for address existence, token vault)
  • Mainnet/Testnet switching feature

The demo site and source code are below. Please confirm😃 You can try it on the Mainnet now.

Recently we investigated the Geeft (https://geeft.ecdao.org/) 's contract. If we just send a transaction which call this contract, we will be able to send tokens to accounts that do not have the Vault. We would like to work on this as phase 4. Let me know your thoughts.

deayora commented 2 years ago

Thank you! We will look through this week. Looking forward to it!

zikewu commented 2 years ago

Hello @avcdsld @0xys ! We are in process of reviewing the code base. Our team noticed there is no function that checks user has enough $FLOW tokens before transferring. This will create risk for users running out of $FLOW during sending process. Can you make sure the $FLOW token amount is checked before transferring?

0xys commented 2 years ago

We have balance validation code here.

And, you can attempt to send more tokens than your balance in demo site as well. screenshot bellow

image

zikewu commented 2 years ago

Thanks @avcdsld @0xys ! We reviewed the balance validation and the full code base. Happy to announce that Phase 3 for Batch Token Transfer is complete! I'll coordinate the phase 3 payment shortly. @deayora will follow up with phase 4 deployment plan. Ty for the awesome work 🙌

0xys commented 2 years ago

Plan for Phase 4

Hi, @zikewu @markedconfidential @deayora

As we finalize our project, we plan to do some miscellaneous tasks.

  1. Service description to guide how to use.
  2. Use of fancy fonts, background, logo and icons
  3. Adding languages (Chinese, Japanese?)

If you have any features that will improve our final product, please share anything with us here.

Also, we want to choose a good naming of the service, which currently is "Batch Transfer Tool" that is bit boring. We are welcome if you have nice one.

Thanks.

deayora commented 2 years ago

Hello!! Thanks for the above - super exciting!

I met with our designer on Friday and we're going to put together a very light weight frontend design (with service description) that we think will really help the ecosystem capture as much value as possible from this awesome tool. We'll send that over with some product name ideas for your thoughts/feedback by end of week!

Very excited to get this live 🔥

0xys commented 2 years ago

Awesome! Thanks for sharing the idea!

deayora commented 2 years ago

Hi @0xys and @avcdsld - Thanks for allowing us to collaborate on the design and product side. Our speciality! This is an awesome and incredible useful tool you've built - our hope is to get it into as many hands as possible - and with your amazing build and some some design tweaks, we know it can get there. Awesome to work on this together!

We've put together some work based on the requests for:

Potential Names: Raindrop and Spritz on FLOW - we thought that because this tool essentially enables a user to drip out funds on Flow, that something evoking water/rain imagery felt apropos. Feel free to use or discard! :)

Designs: I've shared the following designs with your email addresses directly.

As far as adding Japanese and/or Chinese language support/versioning, we think this would be a huge addition helping to make the tool even that more accessible. Is this something your team has the bandwidth to provide translations for? Would be great!

Please let us know if you have any further questions!

0xys commented 2 years ago

Thanks for great design!!

We'll create frontend page based on this. And as for translation, we have Chinese and Japanese collaborators who help us.

Thanks

deayora commented 2 years ago

Awesome - Sounds great 🚀

avcdsld commented 2 years ago

@deayora @zikewu Thanks for providing a great design. We have updated UI significantly. You can check out the new screens here. Feedback would be very helpful. https://batch-token-transfer-tool.vercel.app/?network=testnet

As for the remaining work, we are going to add multi languages support. We need to put a button somewhere to switch languages. Do you have a design proposal for this?

avcdsld commented 2 years ago

We have also implemented languages switching feature (still working on some translations) We would appreciate feedback on the UI.

deayora commented 2 years ago

@avcdsld it looks amazing :) I just ran through the flow on Testnet successfully.

To wrap up milestone #4:

avcdsld commented 2 years ago

@deayora Sorry for the late reply.

  • "balance after transfer shows NaN"

Thanks for reporting the bug! It has been fixed.

  • We think it would be helpful to use a vanity URL (example: www.raindroponflow.com) to get away from vercel link? Thoughts?

Yes, I totally agree with you. We have acquired the domain and the following URL is live! https://www.raindroponflow.com

  • We would love for the FlowJP team to own this, but it is your choice.

Yes, we would like to own this and also maintain the hosting environment 😄 This would provide a useful tool for the community and we would be honored to be a part of it.

We would like to give the FlowJP team credit for this amazing product in our official communications. What is the best way to tag your team (Twitter, Github, Discord) and do you have an official website and/or any new projects you're working on that you'd like us to shoutout?

Thank you, Twitter is the best way! It would be great if you could include the following:

@arandoros
@abmushi
@flowbc_jp

Discord: https://discord.com/invite/dSnagSmyds

Currently, there are no other projects in particular. Thank you! :) We are ready to go!

0xys commented 2 years ago

@deayora @zikewu Hi, how is the reviewing process going??