Demoing the first Ark transactions on bitcoin mainnet

We invited some notable bitcoiners and early contributors to the Ark protocol to join us on this adventure. Among the group were Stephan Livera, Marty Bent, John Carvallo, Vivek4real, Jonas Nick, Robin Linus, and Super Testnet.

Demoing the first Ark transactions on bitcoin mainnet

On Friday, September 20st, 2024, we gathered for a video conference with one goal: make some of the first Ark payments on bitcoin mainnet.

A brief intro to the Ark demo

We invited some notable bitcoiners and early contributors to the Ark protocol to join us on this adventure. Among the group were Stephan Livera, Marty Bent, John Carvallo, Vivek4real, Jonas Nick, Robin Linus, and Super Testnet.

Steven Roose, our CEO at Second, kicked things off with a short intro:

Nothing we’re doing today is faked. But, just so you know, I’m obviously sweating because the software is still experimental and fragile. To the developers: please stick to the script—no one needs to break things… at least not yet. You’ll get your chance after the call!

Over the past few months, we’ve implemented an ASP (Ark Service Provider) and a command-line wallet called bark. It’s a terminal-only experience for now, but that didn’t stop anyone. Our guests created their first wallets and received some sats to start testing.

In-round payments

With everyone set up, it was time to run the first round. In the Ark protocol, the ASP automatically triggers rounds at regular intervals (e.g., every hour), but for this test we had to manually trigger the round.

Each round results in a single on-chain transaction. We had seven guests on the call, each adding their transaction to the round. But, importantly, we only had to pay the on-chain fee for a single small transaction. Efficiency is beautiful.

To make an in-round payment, our participants used the command:

$ bark send-round <vtxo-pubkey> <amount_sat>

When they saw Waiting for round… appear in their logs, they knew they were ready. Steven then manually triggered the round.

The Ark demo's first round transaction

Success! Our transaction (txid 32cea70…baad051) was broadcast to the mempool and confirmed in block 862149. The payments were smooth, and everyone verified their balances had been updated.

This is the most amazing feeling I’ve had since the Lightning Network came out.
—Super Testnet

Out-of-round payments (arkoor)

Our ASP also supports out-of-round payments, otherwise known as arkoor. Unlike traditional Ark payments, these don’t require waiting for a round. Everyone made an arkoor transaction with:

$ bark send <vtxo-pubkey> <amount>

Arkoor payments are much simpler and faster than a typical Lightning payment and they completed almost instantly. With Ark, you only need a single round-trip between client and server. In contrast, Lightning payments get routed through multiple hops, with handshakes at each step to update channel states.

Insanely fast!
—Marty Bent

That said, there are trade-offs. The security model for arkoor payments is different. The recipient needs to trust that the payer and the ASP aren’t colluding to double-spend. If that feels risky, the recipient can cycle their arkoor transaction into an in-round transaction during the next round.

Lightning payments

We still had one trick up our sleeve. Even though we were demoing Ark, we knew we had to show off how it works with Lightning. After all, Lightning has become the go-to mechanism for bitcoin payments. With Ark, you’re not stranded on an isolated island. You can easily send payments to any Lightning wallet, with the ASP acting as the Lightning "gateway".

Participants made transfers to their own Lightning wallets. Payments were delivered seamlessly in seconds. The swap from Ark to Lightning is handled atomically, so at no point did any user have to take on any counterparty risk.

Getting a bitcoin balance off Ark

Ark offers two ways to get your sats back on-chain: offboarding and unilateral exits.

Offboarding

The cheapest option is to offboard, which requires collaboration with the ASP and the user needs to waiting for a round. You can initiate an offboard with the simple command:

$ bark offboard-all

You can see this round transaction from the demo has an extra output that represents an offboard. I won’t mention who did the offboard to protect their on-chain privacy!

Unilateral exit

If the ASP refuses to cooperate or is unavailable for whatever reason, a user can choose to unilateral exit. Unilateral exits are bit more involved than offboarding and are more expensive due to multiple on-chain fees, but it gets the job done.

We had two adventurous (and patient!) participants initiate unilateral exits during the demo. Here's an example of one of the exit transactions.

A unilateral exit transaction, "peeling off" branches of the transaction tree

Can I try it myself?

Right now, the software is experimental, and we've disabled our mainnet ASP. But if you want to give Ark a spin, you can do it on regtest. You can find the code on Codeberg and follow the guide to get started.