Skip to content

Barking on signet

Signet is a bitcoin test network where coins are free and plenty. It provides a good opportunity to test Ark without risking real money.

In this tutorial you will use bark to send and receive signet coins using the Ark protocol.

Create your wallet

To ensure that bark is installed, run bark --version. Follow the installation instructions if you need to.

The first step is to create a new signet wallet. You need to tell the wallet the URL of your Ark server and where it can find chain data.

Note

Use bark --help to see what the command-line program can do. For example, when you want to create a wallet, running bark create --help will give you more info.

Esplora is the easiest chain source to configure. But you can also use your own signet node if you prefer.

Don't switch the esplora instance. We are running a version that includes package relay which will be merged in soon.

bark create --signet --asp ark.signet.2nd.dev --esplora esplora.signet.2nd.dev

This requires bitcoind v28.0 or greater. Your node must use the -txindex option.

bark create --signet --asp ark.signet.2nd.dev --bitcoind <url-to-your-bitcoin-node> --bitcoind-cookie: <path-to-your-cookie>

This requires bitcoind v28.0 or greater. Your node must use the -txindex option

bark create --signet --asp ark.signet.2nd.dev --bitcoind <url-to-your-bitcoin-node> --bitcoind-user <username> --bitcoind-pass <password>

Board the Ark and see your balance increase

Let's check your balance.

bark balance

Oh, you are broke! Let's fix that!

To receive money on Ark you need to share your VTXO pubkey which you can find using the following command.

bark vtxo-pubkey

You can get sats using our signet faucet. You will need to authenticate using your GitHub account and provide the VTXO pubkey you obtained above.

https://signet.2nd.dev/

Check your balance again to confirm you have received the funds.

bark balance

Congratulations! You have boarded the Ark. Notice that you received the balance instantly and you didn't need to pay any transaction fees.

What's a VTXO?

A traditional bitcoin wallet manages unspent transaction outputs (UTXOs). Your Ark wallet manages "virtual unspent transaction outputs" (VTXOs). A VTXO is a UTXO that could make it onchain but hasn't so far.

You can inspect your newly received VTXO.

bark vtxos

The output looks similar to:

[
  {
    "id": "686968ff18425065c6fb42ff34d4eafc71fbcd38f32884a2eef72245bae1f9aa:0",
    "amount_sat": 12345,
    "vtxo_type": "arkoor",
    "utxo": "686968ff18425065c6fb42ff34d4eafc71fbcd38f32884a2eef72245bae1f9aa:0",
    "user_pubkey": "02fcab896c628dc66b6567c69b1dcb2f4d66c97478cf93e3761cc623ea9affdb4e",
    "asp_pubkey": "03a13f76b02b22b61e25d27d61ae61ed9c778950af429492677b9d3101b0aaa618",
    "expiry_height": 238165,
    "exit_delta": 12
  },
]

The VTXO is of type arkoor which indicates the VTXO was received out-of-round. The advantage of this approach is that it works instantly and no on-chain transaction is required. However, it comes with a security trade-off. Your funds are secure as long as the Ark server and the sender don't collude. If you don't like this security model you can immediately refresh.

The VTXO has a value of 12345 sats and an id which looks like 686...9aa:0. As mentioned before, a VTXO is an output of a normal bitcoin transaction. It is output at index 0 of the transaction with id 686...9aa. However, if you look up the transaction in a block-explorer. you will not be able to find it. The transaction isn't confirmed onchain and will hopefully never be broadcast to the mempool. Ark is an off-chain protocol and if everything works out well it should never go onchain.

Your VTXO also has an expiry. Up until block-height expiry_height only the owner can claim the VTXO by exiting unilaterally. But after the expiry the Ark server could claim the funds and sweep them.

Refresh in a round

The Ark server will coordinate rounds periodically. You can participate in a round to swap your old, soon-to-expire VTXO for a brand new one.

Our signet Ark server is configured to do a round every minute. When you run the refresh command, you have to wait until the next round starts.

bark refresh --all

You can run bark vtxos again. You should see the old VTXO has disappeared and a new VTXO of type round has been created. Note that the vtxo_type is now round which has the strongest trust model.

In the current implementation users must refresh coins manually, but any production-quality wallet will handle this automatically.

Spend your money and buy a treat for Byte

A good bitcoin wallet should allow you to spend your bitcoin.

We'd like you to buy our mascot, Byte, a treat. You can order one in the store.

https://signet.2nd.dev/store

After creating an order, the shop will give you a BOLT11 invoice, which can be paid using the following command.

bark send <bolt11-invoice>

You can use bark to pay:

  • a BOLT11 invoices to pay using Lightning
  • a LNURL to pay using Lightning
  • a bitcoin address to onchain
  • a VTXO pubkey to pay within the same Ark

Receiving Lightning

It's not possible yet. But we are working hard to make this a reality.

Getting your money out, aka off-boarding

The cheapest and fastest way to get your money out of Ark is using an offboard. In this process, you can (atomically) forfeit VTXOs in return for an onchain UTXO in a round.

bark offboard --all

This is the fastest and cheapest option. However, this is only possible if the Ark server cooperates.

What if the server disappears or refuses to cooperate? You always maintain full control of your funds. You can exit your vtxos at any time using the unilateral exit procedure, even if the server is not cooperative. For more details on the unilateral exit, proceed to the advanced section.

Share your feedback

You've now completed testing the full lifecycle of transactions on Ark—we're excited to see what applications you come up with! Let us know if there's any more guides you'd like to see, and please share any feedback on the developer experience.