Pietralberto Mazza 89df461623 Update client sdk (#207)
* Add bitcoin networks

* Refactor client

* Refactor explorer

* Refactor store

* Refactor wallet

* Refactor sdk client

* Refactor wasm & Update examples

* Move common util funcs to internal/utils

* Move to constants for service types

* Add unit tests

* Parallelize tests

* Lint

* Add job to gh action

* go mod tidy

* Fixes

* Fixes

* Fix compose file

* Fixes

* Fixes after review:
* Drop factory pattern
* Drop password from ark client methods
* Make singlekey wallet manage store and wallet store instead of defining WalletStore as extension of Store
* Move constants to arksdk module
* Drop config and expect directory store and wallet as ark client factory args

* Fix

* Add constants for bitcoin/liquid explorer

* Fix test

* Fix wasm

* Rename client.Client to client.ASPClient

* Rename store.Store to store.ConfigStore

* Rename wallet.Wallet to wallet.WalletService

* Renamings

* Lint

* Fixes

* Move everything to internal/utils & move ComputeVtxoTaprootScript to common

* Go mod tidy
2024-07-30 16:08:23 +02:00
2024-07-30 16:08:23 +02:00
2024-07-30 16:08:23 +02:00
2024-07-30 16:08:23 +02:00
2024-07-30 16:08:23 +02:00
2024-03-05 14:25:53 +01:00
2024-06-03 19:29:56 +02:00
2024-07-20 13:25:25 +02:00

Ark

Welcome to the Ark monorepo.

og image github

In this repository you can find:

  • server always-on daemon that serves as the Ark Service Provider (ASP)
  • client single-key wallet as command-line interface (CLI) to interact with the ASP

Refer to the README in each directory for more information about development.

Build and Run with Docker

Run locally with Docker on Liquid Testnet. It uses docker-compose to build the arkd docker image from server and run the it as container, together with the oceand container.

Prerequisites

Setup the Ocean wallet

Start oceand in Liquid Testnet:

docker compose up -d oceand

Setup oceand:

alias ocean='docker exec oceand ocean'
ocean config init --no-tls
ocean wallet create --password <password>
ocean wallet unlock --password <password>

Run arkd connected to Ocean

Start the ASP

docker compose up -d arkd

Note: On startup arkd will create an account ark on oceand.

Get an address from Ocean to add funds to the ASP:

ocean account derive --account-name ark

Fund the resulting address with Liquid testnet faucet.

Check the balance of the ark account:

ocean account --account-name=ark balance

Ark client

Inside the arkd container is shipped the ark CLI. You can submit payment to the ASP using the ark CLI.

alias ark='docker exec -it arkd ark'
ark init --password <password> --ark-url localhost:8080

This will add a state.json file to the following directory:

  • POSIX (Linux/BSD): ~/.Ark-cli
  • Mac OS: $HOME/Library/Application Support/Ark-cli
  • Windows: %LOCALAPPDATA%\Ark-cli
  • Plan 9: $home/Ark-cli

Note: you can use a different datadir by exporting the env var ARK_WALLET_DATADIR like:

export ARK_WALLET_DATADIR=path/to/custom
ark init --password <password> --ark-url localhost:8080 --network testnet

Add funds to the ark wallet:

ark receive
{
  "offchain_address": <address starting with "tark1q...">,
  "onchain_address": <address starting with "tex1q...">
}

Fund the onchain_address with https://liquidtestnet.com/faucet.

Onboard the ark:

ark onboard --amount 21000

After confirmation, ark wallet will be funded and ready to spend offchain.

In another tab, setup another ark wallet with:

export ARK_WALLET_DATADIR=./datadir
alias ark2=$(pwd)/build/ark-<os>-<arch>
ark2 init --password <password> --ark-url localhost:8080 --network testnet

Note: ark2 should always run in the second tab.

Make payments

You can now make ark payments between the 2 ark wallets:

ark2 receive
{
  "offchain_address": <address starting with "tark1q...">,
  "onchain_address": <address starting with "tex1q...">,
  "relays": ["localhost:8080"]
}
ark send --to <ark2 offchain address> --amount 2100

Both balances should reflect the payment:

ark balance
{
  "offchain_balance": 18900,
  "onchain_balance": 0
}
  ark2 balance
{
  "offchain_balance": 2100,
  "onchain_balance": 0
}

Exiting

User ark can leave the ark collaboratively (i.e. ASP needs to collaborate):

ark redeem --address <onchain_address> --amount 12100

In the case of the ASP is not responding, you can leave the ark unilaterally (--amount is not necessary since --force will redeem all funds):

ark redeem --force

Help

You can see all available commands with help:

ark help
Description
No description provided
Readme MIT 13 MiB
Languages
Go 97.9%
HTML 1.1%
Makefile 0.5%
Shell 0.3%
Dockerfile 0.2%