Welcome to the Ark monorepo.
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.
- Progressive Web App (PWA) as client and Ark wallet.
- Support Bitcoin with pre-signed transactions
- Support Ark out-of-round payments
- Add protected admin RPCs for
arkd
to manage rounds and treasury - Add
postgres
as database option forarkd
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.
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>
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
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:6000
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:6000 --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:6000 --network testnet
Note: ark2
should always run in the second tab.
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:6000"]
}
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
}
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
You can see all available commands with help
:
ark help