* 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
Ark
Welcome to the Ark monorepo.
In this repository you can find:
serveralways-on daemon that serves as the Ark Service Provider (ASP)clientsingle-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