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>
Build from source ./server
and 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.
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