Universal Transaction Signing: Seamless Dapp Scaling for Ethereum 🔐

Apr 26, 2019 · 6 min read
Loom Basechain can now verify and accept transactions signed by native Ethereum wallets.


TL;DR: Loom Network’s Basechain now has the ability to verify and accept transactions signed by native Ethereum wallets — offering the most seamless user experience possible for dapp scaling. If you are curious about why this unique set of features are only possible on Basechain — and why it is beneficial for both developers, and users — keep reading 😉

On March 31st, 2019 — Basechain validators voted in favor of its first decentralized hard fork.

This hard fork added a set of functionality that allows any Ethereum user to use Basechain dapps as seamlessly as any Ethereum dapp. Users can simply use their MetaMask account or any other native Ethereum wallet — further blending the line between Layer 1 and Layer 2.

If you are new here, you might be asking yourself…

What is Basechain? 🤔

Basechain is a production-ready, multichain interop platform that allows for faster and cheaper transactions and a greatly improved UX for dapps that need quick confirmation times.

This is not mere conjecture either — it has been live and in production since late 2018.

Basechain uses Delegated Proof of Stake (DPoS) for consensus — which means it’s ideal for dapps with a user-facing component that require fast confirmations, while also maintaining a reasonable level of decentralization.

And since tokens are transferable to and from Layer 1 — it makes it the perfect complement to Ethereum.


Dapps can issue their tokens on Ethereum — and move the more complex user-facing components to Layer 2.

But a major component in blockchains is that — you need to sign every transaction to prove your identity.

And the usefulness of a Layer 2 is limited if every user needs a separate account on that blockchain in order to use it.

For a bit of background, in case you are wondering…

How Does Transaction Signing Work? 🤔

Imagine that Vladimir wants to send $100 to Donald.

Vladimir tells the blockchain to send $100 to Donald, which will simultaneously deduct the same amount from his wallet.

The blockchain can easily read Vladimir’s instructions — but it needs to first verify that Vladimir is actually who he claims to be, and not some bad actor pretending to be him.

So Vladimir encodes his instructions using his private key (which is protected by a password known only to Vladimir) — so that anyone can cryptographically verify that these instructions actually originated from Vladimir.

After the blockchain automatically (and cryptographically) verifies these instructions, $100 is deducted from Vladimir and credited to Donald.

T̶h̶e̶n̶ ̶D̶o̶n̶a̶l̶d̶ ̶p̶r̶o̶c̶e̶e̶d̶s̶ ̶t̶o̶ ̶s̶e̶t̶ ̶u̶p̶ ̶a̶ ̶s̶h̶e̶l̶l̶ ̶c̶o̶r̶p̶o̶r̶a̶t̶i̶o̶n̶,̶ ̶a̶n̶d̶

That’s it 😉

As you might be already aware — most of the security on the modern web is protected by public key cryptography ¹ — and transaction signing on a blockchain works in a very similar fashion, with some important differences.

Let me tell you…

How Basechain Became “Multilingual” and Why it’s a Big Deal

So the technical differences of how different blockchains sign transactions vary quite a bit.

For example…

Ethereum and Bitcoin uses the elliptical curve secp256k1 ², which is good for backward compatibility.

On the other hand…

Tendermint and Basechain use Ed25519 ³, which is 10x+ faster when performing verifications.

While a forked chain technically has the same source as the chain it forked from (like Ethereum Classic from Ethereum and Bitcoin Cash from Bitcoin), they remain incompatible, because otherwise — it could allow a bad actor to steal funds by submitting the same transaction to both chains.


Congrats — now you have a decent idea on the technical (and security) reasons on why Layer 1 chains all have different methods of signing and verifying transactions.

Here’s the thing…

If our goal is to allow developers to write their code once and access users from multiple blockchains — then we need universal transaction signing.

Let me show you how we do…

Universal Transaction Signing in 3 Steps:

  1. First – Basechain has been upgraded to be “multilingual” — meaning: it now has the ability to detect how a message is signed and use the appropriate elliptic curve (and our algorithms) to derive the correct identity. Plus, validators can vote to trust additional Layer 1s.
  2. Second – Basechain contains a decentralized registry of wallet addresses that belong to the same user. So if a user can prove their identity using a Layer 1 wallet — it’s also sufficient proof on Layer 2.
  3. Finally – Basechain and loom-js has special compatibility features that allow developers to sign universal transactions without having to change a single line of code in their dapp.

That might all seem complicated. But put simply:

When we combine all of the elements above — Basechain will allow users to use ANY existing wallet compatible with ANY of our connected Layer 1s, without needing to do any extra steps.

What it feels like to use Basechain.

That’s not all.

Those same users will be able to interact with dapps gas-free — and with speed (i.e. fast AF) on Layer 2 without leaving, switching wallets, OR downloading new software.

Then after you are done — you’d simply withdraw back to Layer 1 at your convenience.

The coolest part?

  • Verification is decentralized on Basechain
  • There’s no centralized service storing your keys anywhere
  • There are no extra tokens or plugins to install
  • There’s nothing extra required by end users

Simply visit any UTS-enabled dapp on Basechain and you’ll be in business in no time.

Remember: you can just use your existing Ethereum wallets like MetaMask or any other mobile wallet 😉

This same functionality will be extended when we integrate Cosmos, EOS, and Tron — so users on those chains will be able to use their native wallets as well.

Question for you…

Are You a Developer? — Here’s How to Get Started Right Now 🏁

If you are a developer, the simplest way to get started is to use web3.

If you are an existing Basechain developer — simply change one line on your Loom Provider.

In other words…

Simply change this:

To this:

By default — the signer accepts any ethers-js signer.

Here’s how to get one for MetaMask:

If you are a new Basechain developer — be sure to import the latest loom-js into your project first 😉

Also, if you’d like to chat (in real time) with existing Loom developers — join us on Telegram.

Loom Network is the multichain interop platform for scaling high-performance dapps — already live in production, audited, and battle-tested.

Deploy your dapp to Loom’s Basechain once and reach the widest possible user base across all major blockchains today.

New to Loom? Start here.

Want to stake your LOOM tokens and help secure Basechain? Find out how.

Like what we’re doing here? Stay in the loop by signing up for our private mailing list.

Loom Network

🛸 The production-ready, multichain interop platform for serious dapp developers — http://loomx.io


Written by


Loom Network

🛸 The production-ready, multichain interop platform for serious dapp developers — http://loomx.io

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade