Send Assets in Frame

While the feedback we receive for Frame includes lots of interesting ideas for new features, by far the most frequent feature request we’ve gotten over the past few months is the ability to send currency and tokens to other accounts. Time and again, our reply (or the reply from members of our awesome community) was that you need to use a third-party dapp to craft transactions. Well that’s a thing of the past: Frame beta.12 ships with the ability to send native currency and ERC-20 tokens from any of your accounts on any of your connected chains.

Launch the send dapp from the top of your account view

The first thing you’ll notice is this launches a new window within Frame. This was a very conscious choice and we’re planning a series of posts to both explain the rationale for this and expand on our vision for the future of Frame. For now the main thing to understand is that to send assets in Frame... you still need a dapp! The only difference is that this dapp was written by the Frame Labs team and comes bundled with the application.

Send assets on any connected chain!

How to Use It

The dapp itself is simple and hopefully intuitive enough that most of the features don’t warrant an explanation, but let’s go over some of finer points that may be less obvious:

  1. First you’ll notice that the “chain selection” control, nearly ubiquitous in dapps, is gone! That's because this dapp works on all chains that you’re connected to at the same time. There's no need to select a chain, switch chains or even the concept of being “on a chain” at all — everything is in one place.
  2. When you first open the dapp, you’ll see a list of all of your assets — that is, the native currencies of all of the chains you’re connected to as well as any ERC-20 tokens on those chains. These assets are based on the token lists used by Frame and any custom tokens you’ve chosen to track. Use the search filter to quickly filter assets by name, symbol or chain.
  3. You can navigate using only your keyboard. Use Enter to submit any information, ↑ / ↓ to scroll the list of  tokens and Ctrl + ← / → (Win/Linux) or Command + ← / → (macOS) to navigate through panels. If you prefer using the mouse you can also navigate using the buttons at the bottom-right corner of the window.
  4. Once you submit you will be able to change gas settings or look at contract data in Frame just the same as with any other transaction.

A Parallel Chain Experience

We wanted to use this opportunity not only to deliver an oft-requested feature but to offer some fresh ideas for how to address some of the UX issues that we see in the current web3 landscape.

Specifically — and most relevant to this post — is the fact that today most decentralized applications maintain the concept of being "on a chain". In order to interact with different chains, the user needs to switch back and forth and is sometimes prompted to do so repeatedly to accomplish basic tasks. This experience is tedious, annoying and rapidly making less and less sense in an environment with an expanding web of interconnected sidechains and Layer 2 solutions.

Chain routing in Frame!

To remedy this, we added infrastructure to Frame to allow it to work across all connected chains in parallel.  We also added a few wallet-level features in order to allow dapp developers to easily integrate with Frame:

  • A wallet_getChains RPC method to return all of the user's available chains.
  • A chainsChanged event that works similarly to the events outlined in existing specifications such as EIP-1193. This event should be emitted whenever the chains available to the dapp change. In Frame this will be whenever the user adds a chain, removes a chain, turns off a connection, or a connection goes down for some reason.
  • A new top-level JSON RPC payload parameter chainId that can be used to allow requests to target a specific chain. The entire payload might now look something like:
    "id": 1,
    "jsonrpc": "2.0",
    "method": "eth_sendTransaction",
    "chainId": "0x89",
    "params": [ ... ]

We're now exposing this parallel chain interface so that developers can build dapps where users aren't restricted to taking action on one chain at a time. Once a connected dapp has the list of available chains it can use that information to create seamless multi-chain experiences -- such as implementing chain-specific features or routing outgoing requests to a desired chain — all without the user needing to switch back and forth. The send dapp is built on top of these concepts and showcases how dapps can feel smoother and more “native” if we build them from the ground up with web3 UX in mind.

This change and a few others that are still being worked on will form the basis of an upcoming Ethereum Improvement Proposal. The send dapp will be exhibit A in why these new standards are valuable and how they can be leveraged by developers to provide a richer and more web3-native experience.

We’ll be following up with more on what we see for the future of Frame and web3, as well as said EIP with additional details and a formalization of some of these ideas. In the meantime give the Frame send dapp a spin and come find us on Twitter or Discord to let us know what you think!

Want to get involved in one of the most exciting projects in web3? We’re hiring!