Inspiration

myPaymail send is a brand new application that will be integrated into our myPaymail platform (https://mypaymail.co). The inspiration for this new application comes from a user who was trying to set up a custom Paymail handle using his own domain (a service that we provide) but attempting to do so with a Gmail email address. I explained that for Paymail to work with Gmail addresses, Google would have to support the Paymail protocol. This conversation led to the realisation that to onboard new users, we would need to reach them using services that they already use. Email is one of these services, but there are more: SMS, Whatsapp, etc...

In my opinion, the biggest challenge when sending BitCoin to new users is that we always need to ask them to install something, typically an application or browser extension. Then, they need to present us with either an address or a Paymail handle. And only then we can make the payment. There are quite a few steps involved, and new users lose the interest quickly because the flow is not much better than that of existing banking apps.

Last, people prefer to be paid using currencies they are familiar with, such as EUR, USD, etc... There are solutions out there, such as USDC, but gas fees on the Ethereum network are so high that it is even worse than the current banking system. To tackle this problem, we need to solve how to send BitCoin first and then add tokens on top of it. My vision is that myPaymail send will one day support an efficient token platform on top of BSV, which will make it possible to send fiat seamlessly.

What it does

I am glad to present my first attempt to solve the issue of sending BitCoin to anyone in the world just by having access to an email address. I've managed to develop a working system where the recipient of a transaction does not need to have anything installed or know about BitCoin to receive payments.

How I built it

I started with the following requirements:

  • The recipient of the transaction only needs one thing: an email address. No wallet, browser extensions, or even knowledge about BitCoin are required to receive the payment.
  • The sender of the transaction knows how to use a BitCoin wallet (e.g. MoneyButton).
  • Avoid using logins to remove friction even more.
  • The solution needs to be non-custodial to avoid being a target of attacks that could compromise the funds.

Because there is no way to manage BitCoin without having a wallet, the approach taken is to create a temporary UTXO to hold the funds until the recipient installs a wallet. The real innovation here is to postpone installing a BitCoin wallet so that the initial friction can be removed.

In order to implement this, my solution relies on sharing five words between the sender and the recipient. As long as the recipient holds these five words, the payment can be left in the email inbox. At some point in the future, the recipient will need to install a wallet. But the motivation to install a wallet is much higher if you know that money is waiting for you.

Challenges I ran into

Programming for BitCoin is harder when multiple parties are involved as a transaction cannot be just created entirely by one party, which was the use case for myPaymail send.

The most challenging part has been designing the interactions between the parties involved: the sender, the myPaymail backend and the recipient. Another challenging aspect which has not been fully resolved yet is the fact that currently, the sender pays the extra network fees required for the recipient to unlock the funds. If we use "addresses", we know the size in advance, and there is no problem as the output script is a P2PKH. But in a world where wallets use Paymail, any output script can be returned and therefore is not known in advance. One possible solution is for our service to add network fees to the recipient's transaction if the amount paid by the sender is not enough. In the short term, this is not a problem because most wallets use P2PKH or small scripts.

Accomplishments that I'm proud of

Overall, I am very happy with the result. I believe I've simplified the user interface to the minimum that I can think of and managed to fulfil all my the initial requirements.

The beta version of the product is almost ready to be released.

What I learned

I've learnt a lot about how transactions work and how to create APIs to facilitate the interaction between parties.

This project has lead to many improvements to the myPaymail backend. In the near future, the two products will be more tightly integrated.

What's next for myPaymail send

The next step is to deploy the beta MVP and find out if the product has a real market. I have many ideas that will be implemented after release if there is a demand for the product:

  • Promote different wallets or services when the recipient redeems the payment. This will be another source of income besides the fees charged for each transaction, through affiliate links.
  • Integrate tokens. This is the priority when a candidate token platform emerges. This will include not only fiat tokens but also other items such as game collectables.
  • Add invoices, payment references, etc. to make it more useful for commerce.
  • Integrate with myPaymail and offer custom paymails to users of myPaymail send.
Share this project:

Updates