# bolt.observer

Product documentation for bolt.observer

Welcome to home of [bolt.observer](https://bolt.observer/) documentation. Here you can find descriptions of our products and how they work, what features they offer and how to use them.

{% content-ref url="/pages/j9pauHCF25YBR3Tb59Ea" %}
[Reachability](/readme/reachability)
{% endcontent-ref %}

{% content-ref url="/pages/PuUAinRuqYfjMlBQioCL" %}
[LiquidOps](/readme/liquidops)
{% endcontent-ref %}

{% content-ref url="/pages/C7Jw0VXpSVuh8DWx6PU3" %}
[Explorer](/readme/explorer)
{% endcontent-ref %}

{% content-ref url="/pages/ajX5jTFXavH9FCPAmGh3" %}
[Integration configuration](/readme/integrations)
{% endcontent-ref %}

{% content-ref url="/pages/cZFickJvDC41fgp2h08v" %}
[Guides](/readme/guides)
{% endcontent-ref %}


# LiquidOps

LiquidOps is a comprehensive tool designed to streamline liquidity management in your Lightning Network node. By periodically retrieving data from your node, LiquidOps offers configurable alerting on your balances and channel status, empowering you to make informed decisions about your node's liquidity. With its user-friendly workflows, LiquidOps simplifies node and liquidity management by providing a solution to automate manual tasks at scale.

Features available for LND and core-lightning:

* alerting on liquidity events
  * node level inbound or outbound capacity alerts&#x20;
  * channel specific configurable inbound or outbound capacity alerts &#x20;
* alerting on channel status (active/inactive)
* alerting on channel closing or opening
  * node level alerting on new opened channels or closed channels&#x20;
  * channel specific alerts for closing&#x20;
* alerting on node sync to chain or graph
  * channel specific alerts for closing
  * Task automation with workflows
* Liquidity management with auto-swaps
  * Auto swap-in : restore outbound liquidity with swap-in(s)
  * Auto swap-out : restore inbound liquidity with swap-out(s)

{% content-ref url="/pages/lSt71gnplvnmsVNBh3fR" %}
[Getting started](/readme/liquidops/getting-started)
{% endcontent-ref %}

{% content-ref url="/pages/jhr2cYABOD0oU5lOyUaF" %}
[Setup LiquidOps](/readme/liquidops/setup-liquidops)
{% endcontent-ref %}

{% content-ref url="/pages/mIURpZZ91m8teONINqdL" %}
[Node and liquidity automation](/readme/liquidops/node-and-liquidity-automation)
{% endcontent-ref %}

###


# Getting started

Let's start by adding a node. To do this, go to your node page and click on the "+ New Node" button as shown in the image below.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FYBRWdK41WcwURKAtWiy2%2FLiquidOps_Add%20node.png?alt=media&amp;token=aa52f539-522d-45c9-b82a-2c8d069ac329" alt=""><figcaption></figcaption></figure>

Once you have identified the node based on its pubkey or alias, click on the "Add node" button. However, if you are adding private nodes (i.e., nodes without announced channels), you'll need to use the pubkey to add them. Here's a snapshot of the process:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Frm3ZDgpStY0uZv5m1HGm%2FLiquidOps_addNode2.png?alt=media&amp;token=ac67be9c-b14b-4616-9011-64415cceb655" alt=""><figcaption></figcaption></figure>

It's worth noting that the dashboard displayed below only showcases public data collected from the gossip network, such as public channels, total capacity, PubKey, addresses, and so on. To access private data and leverage advanced functionalities, we strongly recommend [setting up LiquidOps.](#user-content-fn-1)[^1] This will allow you to unlock a host of additional features and insights.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F41UWb0C8KYkXH2K1viON%2FAddnode3.png?alt=media&amp;token=77277946-cc7d-43f2-84cf-3decce99cb66" alt=""><figcaption></figcaption></figure>

Once you've added your first node, you can either continue adding more nodes or start creating workflows.

[^1]:


# Setup LiquidOps

## Data input

We have two ways to obtain needed data from your node to facilitate alerting, depending on your preferences and risk models

### Api based - pull

{% content-ref url="/pages/UQoa5SUKA1pwaFNkUwvi" %}
[Api based - pull](/readme/liquidops/setup-liquidops/guide)
{% endcontent-ref %}

### Api based - push

{% content-ref url="/pages/1X4DXS3V5FOcocCATStX" %}
[Agent based - push](/readme/liquidops/setup-liquidops/agent-based-push)
{% endcontent-ref %}

## Data privacy

bolt.observer is a SaaS platform and as that it means that data will be shared with us. If you are using our [agent](https://www.notion.so/o/UMc3RSpXY254Qe0hTzM4/s/mGGbJoPTvKkAmLqqpdCK/~/changes/22/readme/liquidops/agent-based-push) then you are in complete control what and how much are you sharing with us. You can specifiy which specific channels and how precise the data you share with us will be. Data you share with us as part of our LiquidOps product belongs to you and is used exclusively for your needs.

Our agent is open source so you can review what is being done. For more detailed overview of how agent works please refer to its [repository](https://github.com/bolt-observer/agent).


# Api based - pull

#### Prerequisites

* API reachable from our IP addresses:&#x20;
  * **34.170.53.37 - New**
  * **34.70.20.229 - New**
  * ~~3.233.3.134~~- Old. IP is not valid from June 1st, 2023.
  * ~~54.173.247.208~~ - Old. IP is not valid from June 1st, 2023.

You need to have those IPs whitelisted. For LND we support both gRPC (usually on TCP port 10009) and REST API (usually running on TCP port 8080), so either of them should be enough (we prefer gRPC though). For CoreLightning we use `commando` so only lightning port (TCP 9735) should be reachable from our IPs (usually is is open for everyone already since else nobody can open a channel with your node).

### Enroll your node

Click on the button “Enroll in Liquidops” to initiate the configuration

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FBfiKx7cc6lj1IFptYKeV%2Fnode-view.png?alt=media&amp;token=bff6f724-6d45-40cc-bc1b-0a87cd9a1aa8" alt=""><figcaption></figcaption></figure>

In the next step you can choose how you want to enroll your node:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fgit-blob-b869758bc196793b1be2ab155bdc70e01016075c%2Fliquidops-menu.png?alt=media" alt=""><figcaption></figcaption></figure>

Click "Continue" for either "CoreLightning Node" or "LND Node".

In the next step you have to enter node connection details

### LND

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fgit-blob-45b581534d27ff9e7fd41bfe9258d38e9e571982%2Fmacaroon-config.png?alt=media" alt=""><figcaption></figcaption></figure>

On LND nodes, macaroon files can be found under `~/.lnd/data/chain/bitcoin/mainnet`.

By default, the **readonly.macaroon** file is binary. We will convert it into an hexadecimal format with the command xxd.

`cd ~/.lnd/data/chain/bitcoin/mainnet`

`xxd -p -c 10000 readonly.macaroon`

The command returns an hexadecimal string.

`0201036c6e640224030a10f1c3ac8f073a46b6474e24b780a96c3f1201301a0c0a04696e666f12047265616400022974696d652d6265666f726540283032322d30382d30385430383a31303a30342e38383933303336335a00020e69706164647220312e322e332e34000006201495fe7fe048b47ff26abd66a56393869aec2dcb249594ebea44d398f58f26ec`

Copy the hexadecimal string returned by the command and paste in into the macaroon field:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FG0Fjju3VnvYXzCEXcin7%2Fmacaroon.png?alt=media&amp;token=e99a03fb-4e2f-4da1-9600-0ab6deecb089" alt=""><figcaption></figcaption></figure>

`Then do the same with certificate which we first need to convert to base64`

```
cd ~/.lnd
base64 -w 10000 tls.cert
```

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FmEj4eK83RYsOCeIgQdKu%2Fcertificate.png?alt=media&amp;token=983bbbf1-44c5-4b45-8cc3-acc68fd2213a" alt=""><figcaption></figcaption></figure>

Now you need to configure the api endpoint

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FLh0E6dYjdxv7GE2BZa6m%2Faddress.png?alt=media&amp;token=ca8a25d5-aac1-4428-9b36-519054938e88" alt=""><figcaption></figcaption></figure>

If all the information inserted was correct you now press "**save macaroon**" button and you will see Liquidops enabled for your node

### CoreLightning

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fgit-blob-5b9855d389261e389e388504c2b6657cbda6f8c3%2Frune-config.png?alt=media" alt=""><figcaption></figcaption></figure>

For CLN you just need node address and a read-only rune. Rune can be obtained using `lightning-cli commando-rune restrictions=readonly` on your CLN node and copying `rune` field. Note that doing this will automatically enable `commando` plugin.

An example rune looks like this:

`KUhZzNlECC7pYsz3QVbF1TqjIUYi3oyESTI7n60hLMs9MA==`

Copy your value to Rune input and press **save rune** button.

### Liquidops enabled

After saving the data you should see:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FNFquLkK40DyxDVpigrmp%2Fnode-enabled.png?alt=media&amp;token=9b8ff2d4-673b-4841-ae6c-c809a8fb2a54" alt=""><figcaption></figcaption></figure>

and the data being pulled from your node briefly and extra options unlocked to create new alerts under **Manage alerts**


# Agent based - push

Our push based system is based on our open source agent <https://github.com/bolt-observer/agent>

Agent is a program that essentially interfaces between your node and our platform, gathering data from your node's api and converting it to a compatible format for our platform to ingest it.&#x20;

Interacting with our platform through agent gives you the most control over data, sampling rates and security as we don't need any access to your node, you only ship relevant data to us. You can filter specific channels, add entroy to data you share with us and review the code that is running so you know exactly what its doing.

Agent is considered a reference implementation of how interaction with our platform can be done, API is fairly simple and you can integrate it directly into your tooling if you want to, we do not however at this time provide support for custom integrations (this will change in the future, reach out to us if you'd like to do that at this time).


# Node and liquidity automation

## Overview

Managing a Lightning Network node can be time-consuming, requiring manual tasks to be performed regularly. Workflows simplify node and liquidity management by providing a solution to automate tasks based on predefined triggers and actions without the need for coding skills. This documentation page provides an overview of Lightning Network node automation, including how it works and examples of workflows using triggers and actions.

### How Lightning Network Node Automation works

Triggers and actions are the two main components of a workflow, which are orchestrated as follows:

> `⚠️ WHEN`**`TRIGGER`**`becomes active, THEN perform`` `**`ACTION`**

## Create Workflows

Users can easily create workflows using a simple interface to select triggers and actions or choose from predefined templates (*coming soon*). Once a workflow is created, it can be easily activated, deactivated, or edited. Users can also monitor the status and performance of their workflows, and track triggered events for troubleshooting purposes, providing a seamless and user-friendly experience in managing their Lightning Network node automation.

### Setup a new workflow

Prerequisites: Default workflows with notifications are provided as a basic feature. However, to access more advanced workflows with liquidity management, LiquidOps needs to be enabled. Refer to “Setup LiquidOps” section for more details.

To set up a new workflow, click on the “New Workflow +” button on your node page:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FOqrbldVZB2Yf9gOZMXnn%2FWorkflow1.png?alt=media&amp;token=bb120ad5-b1d6-4a9d-a27a-bb2ce5e36561" alt=""><figcaption><p>Workflow creation LiquidOps</p></figcaption></figure>

Let's take a look at an example. Say you want to receive an email notification whenever the inbound balance of a particular channel falls below 10% of its total capacity, which equates to 100,000 sats for a 1 million sat channel. In this scenario, you would simply set up the appropriate rules, and you'll be notified via email as soon as the threshold is breached.

### Step 1: Choose your node or channel

To get started, you'll need to select the node and channel(s) that you wish to work with. To do this, click on the channel radio button and choose the channel or group of channels from the drop-down menu.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FAo0IN9vUSXhe0HsUKe6d%2FWorkflow2.png?alt=media&amp;token=2d742e09-2244-4f9f-bf5b-201673b98db0" alt=""><figcaption><p>Workflow creation LiquidOps</p></figcaption></figure>

Note: Both public 🌎 and private 🔒 channels are shown in the dashboard, and both can be selected as possible targets for a workflow.

### Step 2: Choose and configure your trigger

The next step is to choose one trigger from the list of available options. For more information on the different triggers, refer to the relevant section in the documentation. To set up your workflow, select the "Channel Balance" trigger and then configure the rules by choosing the liquidity type and entering the threshold value (as a percentage). For example, if you want to be notified whenever the inbound liquidity falls below 10%, set the appropriate trigger, and you'll be alerted whenever the threshold is breached.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FPpCNNvJXuSXbi6iQoOJE%2FWorkflow3.png?alt=media&amp;token=b0bf8941-37af-4a8a-aa14-60c9cadba09d" alt=""><figcaption><p>Workflow creation LiquidOps</p></figcaption></figure>

### Step 3: Choose and setup your action

Choose the action for your workflow and configure it according to your requirements. In our example, we want to receive an alert by email if that trigger becomes active.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F7wIDwOb3QF9gAKj8fC4F%2FWorkflow4.png?alt=media&amp;token=064f0107-8b52-4b34-a17f-bfba394cf02c" alt=""><figcaption><p>Workflow creation LiquidOps</p></figcaption></figure>

### Step 4: Name your workflow and save

Give your workflow a name and save the settings to finalize the setup process.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F601351SUEgaQU7rD1uBF%2FWorkflow5.png?alt=media&amp;token=ca4dac92-071c-4da3-9836-38c953307954" alt=""><figcaption><p>Workflow creation LiquidOps</p></figcaption></figure>

## Manage workflows

Workflows can be enabled or disabled directly from the Workflows page by switching toggle.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F3z8UTaRgDKzYgc1LFljC%2Fmanage_wf1.png?alt=media&amp;token=a1f744cb-f754-47af-8ee2-88dd180cff87" alt=""><figcaption></figcaption></figure>

Click on Edit if you want to bring modifications to your existing workflow.


# Integrations

This is a description of the features of triggers and actions.

Integrations refer to the connections between applications or services and LiquidOps, allowing them to work together and automate tasks. These integrations enable users to create automated workflows that perform specific actions when certain conditions are met.

{% content-ref url="/pages/aqL4IuazlqtwJcPqwilp" %}
[Triggers](/readme/liquidops/integrations/triggers)
{% endcontent-ref %}

{% content-ref url="/pages/Lfk64JZG1AbLhgISKMIX" %}
[Actions](/readme/liquidops/integrations/actions)
{% endcontent-ref %}


# Triggers

**TCP**Basic tcp check to see if your node is reachable on port 9735 over internet. Supports ipv4 and ipv6.Triggers are events or conditions that initiate a workflow. They can be based on various parameters, such as network events (e.g., connectivity, channel openings or closings, synchronization with the chain) or liquidity events (e.g., node balance, channel balance, and on-chain funds). The user sets up triggers and defines the conditions under which a workflow should be executed.

### Reachability checks

You can use any combination of checks for your node,limited only by connectivity options you have - ipv4, ipv6, tor.

{% content-ref url="/pages/TTuGCKGOCfIzMb53fte4" %}
[TCP connectivity](/readme/liquidops/integrations/triggers/tcp-connectivity)
{% endcontent-ref %}

{% content-ref url="/pages/UKnhKJvMtqq1vMb3WeBz" %}
[Tor connectivity](/readme/liquidops/integrations/triggers/tor-connectivity)
{% endcontent-ref %}

{% content-ref url="/pages/De5jJf8IskwsOKB3GdIR" %}
[Lightning Connectivity](/readme/liquidops/integrations/triggers/lightning-connectivity)
{% endcontent-ref %}

### Node checks

{% content-ref url="/pages/ZIc4D1t8utZkB8D41kGq" %}
[Sync to graph](/readme/liquidops/integrations/triggers/sync-to-graph)
{% endcontent-ref %}

{% content-ref url="/pages/GRMHVetR61nb5dH96K4H" %}
[Sync to chain](/readme/liquidops/integrations/triggers/sync-to-chain)
{% endcontent-ref %}

### Liquidity checks

{% content-ref url="/pages/KbtcIcbeW72qBRsyzSPt" %}
[Channel balance](/readme/liquidops/integrations/triggers/channel-balance)
{% endcontent-ref %}

{% content-ref url="/pages/vHoRPfgbB3RctU3dqF4H" %}
[Node balance](/readme/liquidops/integrations/triggers/node-balance)
{% endcontent-ref %}

{% content-ref url="/pages/oCUivtrpRYx8706VScwx" %}
[Onchain balance](/readme/liquidops/integrations/triggers/onchain-balance)
{% endcontent-ref %}

{% content-ref url="/pages/Fhl5WH41bNYukDbevH7e" %}
[Channel open](/readme/liquidops/integrations/triggers/channel-open)
{% endcontent-ref %}

{% content-ref url="/pages/5J8r9EOiNJDNKQsgPENl" %}
[Channel close](/readme/liquidops/integrations/triggers/channel-close)
{% endcontent-ref %}

{% content-ref url="/pages/xvrSezH7a0rzpkhoGPvO" %}
[Inactivity](/readme/liquidops/integrations/triggers/inactivity)
{% endcontent-ref %}


# TCP connectivity

### Requirements

### Description

Basic tcp check to see if your node is reachable on port 9735 over internet. Supports ipv4 and ipv6.


# Tor connectivity

### Requirements

Node with Tor connection

### Description

Basic tcp check to see if your node is reachable on port 9735 over Tor network.


# Lightning Connectivity

### Requirements

Public node + 100 sats of inbound liquidity

### Description

We send a small probe over lightning network to see if your node responds. Checks are run on multiple nodes positioned in different parts of the network to ensure connectivity and prevent false positive alerts.


# Sync to chain

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaroon.

### Description

This alert is designed to notify you when your node is not synchronized with the Bitcoin blockchain. This can happen when your node loses connectivity to the chain, which in turn prevents your lightning node from updating on-chain information.

The consequences of this issue are twofold. First, your node may not be able to open channels, which can affect your lightning network operations. Second, and more concerning, is the possibility that someone may have cheated on you without your notice. Typically, lightning nodes would send out penalty transactions as a remediation in such cases, but due to the bug, this couldn't happen. This means that if you didn't use a separate watchtower and didn't upgrade your lnd version in time, your channel partners could potentially steal BTC from you by publishing old states.


# Sync to graph

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaroons.

### Description

This alert detects when your node is not synchronized to graph.


# Onchain balance

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaron.

### Description

The Onchain Balance feature allows you to detect when the total sum of unspent transaction outputs (UTXOs) on your node exceeds a certain threshold. Unconfirmed transctions are also counted. You can set up alerts to receive notifications you when your on-chain funds reach a specific level.

Onchain balance level is defined in satoshis as illustrated in the following picture:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FDaNZRQJHYmlO7UoMC0ZP%2FScreenshot%20from%202023-04-25%2018-49-13.png?alt=media&amp;token=207e0ef8-4a9e-4fd2-bc05-304953e99d57" alt=""><figcaption></figcaption></figure>


# Channel balance

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaroons.

### Description

Channel balance checks perform constant monitoring of your channels´ liquidity and report when the liquidity falls below a certain level. The liquidity is the available balance that can be sent across the channel in one direction as reminded here below (source [lnbook](https://github.com/lnbook/lnbook))

`Liquidity(NodeA) = balance(NodeA) - channel_reserve(NodeA) - pending_HTLCs(NodeA)`

The channel i*nbound liquidity* is the amount of bitcoin that a node can receive through that channel.

The channel o*utbound liquidity* is the amount of bitcoin that a node can send through that channel.&#x20;

Note: We make a difference between the inbound/outbound liquidity at a channel level and at a node level. The inbound/outbound liquidity of a node will be the sum of inbound/outbound liquidity of all its channels and can be monitored with [Node balance](/readme/liquidops/integrations/triggers/node-balance) trigger.

The channel balance trigger can be configured by selecting 2 parameters :

Liquidity type: Inbound or Outbound

Threshold: expressed in %


# Node balance

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaroon.

### Description

This trigger gets activated if the node balance level falls below the threshold defined. Threshold can be defined either for inbound or outbound liquidity and is alwas expressed in sats.&#x20;


# Channel open

### Requirements

Public node

### Description

The channel open trigger actively monitors and detects the creation of new channels between your node and a peer. It provides alerts for both outbound channels initiated from your node and inbound channels opened to your node.


# Channel close

### Requirements

Public node

### Description

The channel close trigger identifies when one of your existing channels is closed. This check is designed to detect events such as mutual close and force close, providing you with timely alerts.


# Inactivity

### Requirements

To use this feature, you need to have LiquidOps enabled with [agent](https://docs.bolt.observer/readme/liquidops/agent-based-push) version 0.2.0 or higher or enrolled with macaroon.

### Description

If a channel or node becomes inactive, the inactivity trigger will be activated.&#x20;


# Actions

Actions are tasks that are performed automatically when a trigger is activated. They can include various tasks, such as sending notifications, refilling inbound and outbound liquidity with submarine swaps.

Each workflow offers the flexibility to combine a variety of triggers and actions, enabling the creation of custom automation that assist you in achieving your goals, improving efficiency, and streamlining operations for your lightning node.

Here are some existing actions that you can use:

{% content-ref url="/pages/yYdoBDC4Zg1ufDtXMj6F" %}
[Send a notification](/readme/liquidops/integrations/actions/send-a-notification)
{% endcontent-ref %}

{% content-ref url="/pages/rVfgY6RTNSzUJdDxf9Nx" %}
[Perform Auto Swaps](/readme/liquidops/integrations/actions/perform-auto-swaps)
{% endcontent-ref %}


# Send a notification

If the conditions defined in your triggers are met, one of the possible actions is to send notifications to keep you and the rest or your team informed.

All available integrations can be found during the workflow creation process in step 2, as shown below:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FP7k9GMUuIGnys0avv91u%2FScreenshot%20from%202023-04-24%2014-13-48.png?alt=media&amp;token=b614eb90-6c10-4cec-8c65-bb944b9ea6fe" alt=""><figcaption></figcaption></figure>

If you have not yet configured any notification, please refer to the [Integration Configuration](/readme/integrations) section for further guidance."


# Perform Auto Swaps

### Purpose

The purpose of automatic submarine swaps is to keep your channels automatically balanced and ensure you can receive payments and send payments at any time.

### Introduction

Submarine swap is a special type of atomic swap between on-chain and off-chain funds. This means it does not bear counterparty risk. Either the swap will go through completely or nothing will happen. It works in a similar trustless fashion as payments on the lightning network via HTLCs (hashed time-lock contracts). In practice that means if the exchange is dishonest, your funds might get locked up a while, but you will not lose money.

In case of “regular submarine swap” you swap on-chain sats for sats on lightning that are sent to you, while “reverse submarine swap” means you pay an invoice and get sats on-chain.

There are two categories of swaps:

* Swap-out moves sats from a channel to an on-chain address by paying an invoice and receiving
* Swap-in moves sats from an on-chain address to a channel, by being pushed to your side.

### Swaps use cases

There are three common scenarios where submarine swaps can be used to address liquidity challenges in Lightning Network channels:

1. Low inbound liquidity: This occurs when you need to receive payments in Bitcoin on your Lightning Network node, but your channel does not have enough inbound liquidity for others to route payments to you. In this case, you can perform a reverse submarine swap (swap-out) pushing funds to the other side of the channel. The exchange then sends you on-chain funds, which you can use to open more channels on your node or transfer to a cold wallet.
2. Low outbound liquidity: This is the opposite of the previous scenario, where your node has funds on the other side of your Lightning Network channels, making it difficult for you to make payments through Lightning. To address this, you can make an on-chain transaction, and the exchange will pay your invoice, effectively "moving funds" back to you and refilling the channel, which is sometimes referred to as a swap-in.
3. Low channel inbound liquidity: Similar to the first scenario, but in this case, you only need to address specific channels that are important for your payment routing or have favorable fee schedules. This can also be resolved through a reverse submarine swap (swap-out) where you pay only through the specified channel(s) instead through any channel.

A submarine swap is initiated by an operator manually when the liquidity of a channel or node is too low. As illustrated below, there is always a delay between the depletion of the channel and the detection of that state, resulting in the channel being rendered unusable for a certain period of time.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FOP7R1Y93qV8J8gv4uUaK%2FGraphs%20-%20Frame%201.jpg?alt=media&amp;token=021ab9e3-7554-4d8a-b9c6-2a20fca2c082" alt=""><figcaption><p>Submarine swaps lifecycle</p></figcaption></figure>

### Auto swaps

An auto swap is a proactive action configured by a node operator in anticipation of potential liquidity issues in the future, aiming to restore liquidity to a predefined level. It is executed automatically when the specified trigger conditions are met. Unlike regular swaps that involve a fixed amount, auto swaps are designed to maintain a desired liquidity level as a reference. Auto swap can trigger multiple swaps to restore liquidity to the desired level, ensuring that the channel or node remains adequately funded. Here is an illustration of 2 auto swaps-out executed as soon as trigger is activated:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fk9HT6o086mRsej0fu34c%2FScreenshot%20from%202023-04-25%2017-28-57.png?alt=media&amp;token=fc758ee7-5106-4608-881c-7e4200f9cfb9" alt=""><figcaption><p>Illustration of auto swaps-out</p></figcaption></figure>

#### Auto swap logic

Once the workflow is created, the auto swap feature will remain in a waiting state until the trigger is activated by crossing a certain level. Once the trigger is activated, the workflow will initiate various steps based on the following logic:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FfcEyiSNK3kNLhieuJkqe%2FGraphs%20-%20Auto%20swap%20flowchart.jpg?alt=media&amp;token=d2c9fffd-b9e3-4fbc-915a-8ea087e5aea4" alt=""><figcaption><p>Auto swap flowchart</p></figcaption></figure>

#### Fees breakdown

* Bolt Observer doesn't charge any fees.
* Boltz exchange charges fees for swaps according to their fee schedule, which includes:
  * 0.2% of the amount for BTC to LN-BTC swaps
  * 0.4% of the amount for LN-BTC to BTC swaps
* Routing fees for sending funds over lightning and miner fees for on-chain transactions are also charged.
* On-chain fees (X sats/vbyte) depend on the current bitcoin network price and are estimated by Boltz to confirm transactions within a reasonable amount of time.
* For a submarine swap (BTC → LN-BTC), the fee is 170 bytes \* X sats/vbyte, in addition to the 0.2% of the amount and routing fees.
* For a reverse submarine swap (LN-BTC → BTC), there are multiple phases:
  * Lightning routing fees (max 0.1% of amount)
  * Boltz charges 153 bytes \* X sats/vbyte for the lock-up of on-chain funds
  * 138 bytes \* X sats/vbyte are needed for the transfer from the "lock contract" to your address.
* You can run bolt-agent with **`-dryrun`** to check what would be done without incurring any costs.

#### Fees control

The main limitation to consider is the fees. The `--maxfeepercentage` is set to 5% by default, which means that the agent will continue creating swaps until the total fees spent for rebalancing is below this threshold. This setting applies to a single rebalancing event, which may involve multiple swaps. If the workflow action is triggered again, such as when liquidity goes above the target and then falls below it again, another rebalancing attempt will be made with the full 5% "allowance". In the examples developed below, the 5% limit is never reached.Agent configurationAgent configuration

#### Fees calculation&#x20;

Auto-swaps can facilitate various use cases to restore inbound or outbound liquidity. Here are a fees calculation for different scenarios:&#x20;

{% content-ref url="/pages/aPi5j4cDn1zSUpocgYqr" %}
[Use case: auto swap-out for a 50M sats channel](/readme/liquidops/integrations/actions/perform-auto-swaps/use-case-auto-swap-out-for-a-50m-sats-channel)
{% endcontent-ref %}

{% content-ref url="/pages/uXWrlZoQchqiOTvI17Ff" %}
[Use case: auto swap-out for a 2M sats channel](/readme/liquidops/integrations/actions/perform-auto-swaps/use-case-auto-swap-out-for-a-2m-sats-channel)
{% endcontent-ref %}

{% content-ref url="/pages/wmgwpg3movjIx5CJznKz" %}
[Use case: auto swap-in](/readme/liquidops/integrations/actions/perform-auto-swaps/use-case-auto-swap-in)
{% endcontent-ref %}

### Agent configuration

You can easily configure the liquidity threshold on [bolt.observer](http://bolt.observer/). Once configured, the agent will calculate the amount needed to be swapped in order to reach that threshold. To execute the calculated swaps, simply run the agent with the `--action` flag. If you want to simulate the swaps without actually executing them, you can use the `--dryrun` option.

In use cases described above,

All configuration options:

```jsx
--boltzurl value           url of boltz api - empty means default - <https://boltz.exchange/api> or <https://testnet.boltz.exchange/api>
--boltzdatabase value      full path to database file (file will be created if it does not exist yet)
--boltzreferral value      boltz referral code (default: bolt-observer)
--zeroconf                 enable zeroconfirmation for swaps (default: true)
--maxfeepercentage value   maximum fee in percentage that is still acceptable (default: 5)
--maxswapsats value        maximum swap to perform in sats (default: 0)
--minswapsats value        minimum swap to perform in sats (default: 0)
--maxswapattempts value    maximum number of individual boltz swaps to bring liquidity to desired state" (default 20)
```

* `-zeroconf` option allows you to disable relying on 0-confirmation transactions in the mempool, and instead wait for the transaction to be confirmed in a block for added security.
* `--minswapsats` and `--maxswapsats` are parameters that give you control over the size of swaps. By setting these values to 0 and in such case Boltz limits are used (lower limit 50k sats, upper limit 10m sats)

Boltz plugin CLI options:

```jsx
NAME:
   bolt-agent boltz - interact with boltz plugin

USAGE:
   bolt-agent boltz command [command options] [arguments...]

COMMANDS:
   submarineswap         invoke submarine swap aka swap-in (on-chain -> off-chain)
   reversesubmarineswap  invoke reverse submarine swap aka swap-out (off-chain -> on-chain)
   generaterefund        generate refund file to be used directly on boltz exchange GUI
   dumpmnemonic          print master secret as mnemonic phrase (dangerous)
   setmnemonic           set a new secret from mnemonic phrase (dangerous)

OPTIONS:
   --help, -h  show help
```

You can manually invoke a swap like this:

```jsx
bolt-agent boltz submarineswap --sats 100000
```

ID is reported so you can continue doing a swap also if application died in the middle.

Just add `--id -1337`where -1337 is the ID reported and swap will be resumed from where it stopped before.Agent configurationAgent configuration


# Use case: auto swap-out for a 2M sats channel

Fee breakdown

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F8fInEXbWBjmwMRprEs2f%2FScreenshot%20from%202023-04-25%2017-39-05.png?alt=media&amp;token=2ec4f51e-78a1-4bb9-ac31-7f276d867a6b" alt=""><figcaption></figcaption></figure>


# Use case: auto swap-out for a 50M sats channel

Fee breakdown for a sequence of swaps.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FmVyvctWAkjRmdSDFIOhP%2FScreenshot%20from%202023-04-25%2017-41-19.png?alt=media&amp;token=31465f73-4790-4864-9be6-40ea7fc6d656" alt=""><figcaption></figcaption></figure>


# Use case: auto swap-in

Fee breakdown

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FCqhJtSXtazWPANtcmmat%2FScreenshot%20from%202023-04-25%2017-42-21.png?alt=media&amp;token=77af46fb-9339-4282-9ac4-6cbe3086c7f5" alt=""><figcaption></figcaption></figure>


# Explorer

[Explorer](https://bolt.observer/explorer) is a tool for exploring lightning network. It enables you to find nodes with various filters, anywhere channel sizes, distance (number of hops) from your node, fees etc.

Available filters:

* Fees
  * Incoming
    * Average Base Fee
    * Average Free Rate
    * Median Base Fee
    * Median Fee Rate
  * Outgoing
    * Average Base Fee
    * Average Free Rate
    * Median Base Fee
    * Median Fee Rate
* Channel capacity
  * Average Channel Capacity
  * Median Channel Capacity
  * Minimum Channel Capacity
  * Maximum Channel Capacity
* Number of Channels
* Minimum Channel Size Limit
* Maximum Channel Size Limit
* Total Capacity
* Connectivity
  * ipv4
  * ipv6
  * tor
* Hops to reference node
  * Reference node is an anchor point from which you can filter nodes by their distance from it, for example if you only want to see nodes that are further than 2 hops away.
* Latency
* Betweenness centrality
  * On the lightning network, payments can be routed through different paths and nodes. Betweenness centrality measures all shortest paths between two nodes on the network. The betweenness centrality is the number of these shortest paths that go through a given node.
* Eigenvector centrality
  * Eigenvector centrality is a relative measure of the influence of a node in the network. It is comparable to Google PageRank for nodes. Each time a node opens a channel with a peer, the eigenvector centrality score increases. The more connected your node is, the higher its score; if it connects to hubs that have themselves more connections, that will improve the score even more.
* Closeness centrality
  * Closeness centrality is the sum of all shortest paths to every other node in the graph. The more central a node is, the closer to the center of the graph, and the smaller the closeness centrality.


# Integration configuration

integrations with external services and platforms

Our platform provides various options for alert delivery:

* [Discord](/readme/integrations/discord)
* [Email](/readme/integrations/email)
* [Nostr](/readme/integrations/nostr)
* [OpsGenie](/readme/integrations/opsgenie)
* [PagerDuty](/readme/integrations/pagerduty)
* [Slack](/readme/integrations/slack)
* [Telegram](/readme/integrations/telegram)
* Mattermost


# Discord

Discord's built-in Webhooks function to get automated messages and data updates sent to a text channel in your server. More details can be found on [Discord](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks)'s support website.

### Discord configuration

Open your channel settings by clicking on the ⚙️ icon

![Untitled](https://user-images.githubusercontent.com/100695254/173592330-3f01d155-7858-4ba6-bf28-6459173ee866.png)

Click on Integrations and create a webhook

![Untitled (1)](https://user-images.githubusercontent.com/100695254/173592350-f61115ce-450d-4405-ac9c-7a03bd51c1f1.png)

If necessary, change the name of your webhook, and don't forget to save changes.

![Untitled (2)](https://user-images.githubusercontent.com/100695254/173592407-aea7c800-d4a3-444f-a6d9-d5f84c5f94cb.png)

After clicking on “Copy Webhook URL”, your webhook will be saved into your clipboard.

### Integration in bolt.observer

Paste into “Webhook URL”

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fn1UpfKS4B1o9fXORZr4t%2FDiscord.png?alt=media&amp;token=e46297e0-8a7f-41e5-a813-f0423def0cbf" alt=""><figcaption></figcaption></figure>

The new alert is now ready. To make sure the integration works properly, click and test and you will receive the following message in your channel or as a DM.

![Untitled (4)](https://user-images.githubusercontent.com/100695254/173592561-1e339324-70c7-40b7-ae17-4136479f8efc.png)


# Email

During the workflow creation, provide an email address that will receive notifications.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F3XuMe9bvLsMxQt7FN8Zv%2Femail.png?alt=media&amp;token=d442092b-64a8-44da-98b5-f2580436bf23" alt=""><figcaption></figcaption></figure>


# Nostr

### Prerequesites

Include our relay by connecting to `wss://nostr-01.bolt.observer` on your nostr client. Here is an example taken from an iris.to:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Flz0iyiSsJUXPDfM0VDwl%2Fnostr1.png?alt=media&amp;token=a6daed7a-92c3-439e-9c2b-37d556bc2439" alt=""><figcaption><p>nostr setup: Add a relay</p></figcaption></figure>

In Settings > Network, add bolt.observer relay and click **Add**. Don't forget to click on **Save relays publicly** button.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FkuOxXu8tnnlskxgyIRIa%2Fnostr2.png?alt=media&amp;token=154c0912-537b-4faf-8e46-4159a062e566" alt=""><figcaption><p>nostr setup: add a relay</p></figcaption></figure>

Lastly, make sure to follow the *bolt.observer alerts* account with the `npub1qqqqqur6gc4nmtjke9gpncntwuf32xkrwud8wq5gwjp07n6qkhasv5qkpv` pubkey.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F6XeVsR4BThr4rRzwIjVt%2FFollow%20account.png?alt=media&amp;token=14328dad-d5bd-4838-908a-e44ec4700970" alt=""><figcaption><p>nostr setup: follow account</p></figcaption></figure>

### Setup

There are two ways to create nostr notifications on bolt.observer. The first option is during the [workflow creation](#workflow-with-notification-on-nostr). Alternatively, you can also create notifications on the [Notification page](#notification-page).&#x20;

#### Option 1: Workflow with notification on nostr

When creating a workflow on bolt.observer, enter your nostr public key in npub format in the designated "Nostr Pubkey (npub)" field as shown below:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FTmDB9OC9lfxDfZkxEpkA%2Fnostr.png?alt=media&amp;token=faa0badc-a944-489d-9ee9-b7b685700580" alt=""><figcaption><p>Nostr integration</p></figcaption></figure>

Don't forget to click on **Save Workflow.**&#x20;

#### Option 2: Notification page

In the notification page, click on **Add notification**

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F4ulgy53ymfRaBVcaqlmI%2FNewIntegration%20Nostr.png?alt=media&amp;token=ff2beed6-f94f-4282-b662-e7d12f313886" alt=""><figcaption><p>Nostr notification setup</p></figcaption></figure>

Select nostr as a notification type as illustrated below:&#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FiroIbX7nKIRKlYgixTyO%2FNewIntegration%20Nostr2.png?alt=media&amp;token=ee8f4d7d-92e4-456e-88a1-a64d7a84f182" alt=""><figcaption><p>Nostr notification setup</p></figcaption></figure>

Enter your account's pubkey and click on **Save**.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FwL8Wu4sD6cm7YhcUY2TF%2FNewIntegration%20Nostr3.png?alt=media&amp;token=242113e2-4284-47f5-96db-b7387c0defcb" alt=""><figcaption></figcaption></figure>

### Test

To perform a test on your recently created nostr notification, navigate to the Notifications page and click on the Test button associated with your notification.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fgcldxxue7Hk89LXk4R1m%2Ftest.png?alt=media&amp;token=20376b6b-ccb8-4245-8d3b-35e0bb917074" alt=""><figcaption></figcaption></figure>

You will receive an alert test notification in your nostr DMs.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FpFBGzqDr2OaNxgTxsQLV%2Fimage.png?alt=media&amp;token=50ccf023-ff0a-4e3a-a431-a7658b8095f8" alt=""><figcaption></figcaption></figure>

```
```


# Opsgenie

We assume that users already have an account on Opsgenie and are familiar with the tool. If not, details information can be found on [Opsgenie support](https://support.atlassian.com/opsgenie/)

## Account configuration

Once you have logged in to your account, make sure you first create a team.

![Untitled](https://user-images.githubusercontent.com/100695254/176128120-547d8ded-9db8-41f3-a847-25de13089e42.png)

Give a name to your team, add all members’ emails and click “Add team”.

![Untitled (1)](https://user-images.githubusercontent.com/100695254/176128327-5a3e23ce-1d76-4395-924f-7c5497c7128f.png)

The team has now been created and needs to be configured.

![Untitled (2)](https://user-images.githubusercontent.com/100695254/176128500-8e9c7f39-d72d-4d56-abfd-53043bdf7317.png)

## API Integration

On the sidebar menu, click on “Integrations” and then click on the button “Add integrations”

![Untitled (3)](https://user-images.githubusercontent.com/100695254/176128940-258f7e84-f408-4e75-8aae-38335d8f73f3.png)

Search for “API” at the top and select “API” with the ⚙️ icon

![Untitled (4)](https://user-images.githubusercontent.com/100695254/176129046-c255f268-dfa5-4d2e-984c-65505f46b9d7.png)

Configure your REST API by ticking the “Read Access”, “Create and Update Access” and “Enabled” boxes. Don't forget to press the “Save Integration” button.

![Untitled (5)](https://user-images.githubusercontent.com/100695254/176129198-34a7ecb4-6175-468c-a105-1ef0d825c2fd.png)

## Alert creation

On the top menu, click on the alert and create a new alert referring to the API recently created.

![Untitled (6)](https://user-images.githubusercontent.com/100695254/176129675-30bf29bc-bbb8-4ad7-adf7-d631b9154959.png)

Make sure you reference the API recently created, in our case “LN\_Node\_team\_API”. The alert can also be configured by adding a message, a priority, and a list of responders.

![Untitled (7)](https://user-images.githubusercontent.com/100695254/176129828-c5bc3630-dea0-4059-a0ff-900c5a6f250e.png)

In the section “Alerts”, you can see a new alert created.

![Untitled (8)](https://user-images.githubusercontent.com/100695254/176129938-afbb6848-5d01-4a6a-84df-6b3095c56c5b.png)

## Integration in bolt.observer

In the “Teams” section, click on your team “LN\_node\_team”.

![Untitled (9)](https://user-images.githubusercontent.com/100695254/176130086-21f0b870-84d5-4e6d-acea-8188d3894561.png)

In the sidebar menu, click on “Integrations” and then, click on the API you recently created.

![Untitled (10)](https://user-images.githubusercontent.com/100695254/176130532-3d597ca3-f143-406b-a071-e1ab904100cc.png)

From the field “API Key”, copy the key in the clipboard.

![Untitled (11)](https://user-images.githubusercontent.com/100695254/176130666-06bbe30b-6ab3-4e31-8f96-9b25da8a435e.png)

In [bolt.observer](http://bolt.observer/), select “Opsgenie” notification type. Paste the key in the field “API Key” and select your region. Don't forget to press the “Save workflow” button.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FM234Fq8HKAOJvtzT80Ji%2FOpsgenie.png?alt=media&amp;token=09e83980-bb78-43c2-a779-749f0af3e2d2" alt=""><figcaption></figcaption></figure>


# PagerDuty

## Pagerduty configuration

Create a service

![Untitled](https://user-images.githubusercontent.com/100695254/176686749-29aa2020-f882-4f6b-b8ed-d555880b583c.png)

Fill in the name and a description then click “Next”.

![Untitled (1)](https://user-images.githubusercontent.com/100695254/176686858-1db54d23-2e94-4bec-a097-87267c3dec89.png)

Select your escalation policy based on your needs

![Untitled (2)](https://user-images.githubusercontent.com/100695254/176686956-7c2086a2-b890-4710-881e-cc23881529ae.png)

![Untitled (3)](https://user-images.githubusercontent.com/100695254/176687036-2fea82ff-97ca-4d9b-9af7-c80539302632.png)

Select the integration. In our case, select “Events API” V2 and do not forget to click on “Create service”

![Untitled (4)](https://user-images.githubusercontent.com/100695254/176687186-3c8b492b-b9af-4027-bf42-639a66ce119a.png)

The next screen will take you to the integrations settings. From the right-hand side of the page, copy the Integration Key into the clipboard.

![Untitled (5)](https://user-images.githubusercontent.com/100695254/176687354-729363ef-8965-402f-941b-7b2cffda187a.png)

## Integration in bolt.observer

Paste the key into the field “Routing Key”, select the region and save.

⚠️ Make sure you enter the same region as you one you defined in your profile on Pagerduty (us or eu)

![Untitled (6)](https://user-images.githubusercontent.com/100695254/176687576-1bcb561d-91eb-4fd3-b5e0-c144a33cbf74.png)

You can check that the integration works properly by clicking on Test. You should see the message “Alert sent” appear as shown below.

![Untitled (6)](https://user-images.githubusercontent.com/100695254/176687677-2f0f87d0-465a-4e8d-8dea-24eaec2a6718.png)


# Slack

To receive notifications on Slack, you first have to set up incoming webhooks on Slack as described [here](https://slack.com/help/articles/115005265063-Incoming-webhooks-for-Slack).

### Create a new Slack app

Select the workspace in which you prefer to receive notifications.

![Untitled](https://user-images.githubusercontent.com/100695254/173595134-53850030-10ee-4581-8b56-da46e4cf5faa.png)

In the menu “Basic Information”, select Incoming Webhooks.

![Untitled (1)](https://user-images.githubusercontent.com/100695254/173595286-ed2baf18-08da-4841-9f13-b63d1ad9a949.png)

Toggle "**Activate Incoming Webhooks**"

![Untitled (2)](https://user-images.githubusercontent.com/100695254/173595411-5409c719-bce7-40d3-8635-8a38270b2788.png)

Click on “**Add new webhook to Workspace**” and grant permission to access your Slack workspace

Note: notifications can be received either in a channel or as a direct message

![Untitled (3)](https://user-images.githubusercontent.com/100695254/173595620-d2e4ef47-5378-47df-a4d4-ee52a0a7a446.png)

![Untitled (4)](https://user-images.githubusercontent.com/100695254/173595707-a1657cd6-fecc-4d90-b1fa-39ec3088cad6.png)

Once the access is granted, you can copy the webhook URL and insert it into the Slack integration window in the workflow.&#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FPb45SJVHUv4q3iiVLypU%2FSlack.png?alt=media&amp;token=95eddf6b-0ce5-44f9-b23b-10e09f1049d2" alt=""><figcaption></figcaption></figure>

The new alert is now ready.&#x20;


# Telegram

### # Prerequesites

To receive alerts from our platform on telegram you need to create a [new bot on telegram](https://core.telegram.org/bots#6-botfather) (or use an existing one).

### # Setup

You are now invited to enter the bot\_key (token) and chat ID given during the bot creation.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FeCR79RiL71EZGGTdrQ2C%2FTelegram.png?alt=media&amp;token=8e5f51be-5de1-47ca-a30f-2d4121575209" alt=""><figcaption></figcaption></figure>

⚠️Warning: The ID required to connect to [bolt.observer](http://bolt.observer/) is the chat ID, and it shouldn't be confused with the participants' ID.

⚠️Warning: The chat id format is a string of numbers. Example: -1001674000166

⚠️Warning: Make sure you include all characters after “:”. In the example above, “-” must be included

Once your workflow is saved, it appears with other workflows that had previously been configured.


# Reachability

Reachability monitoring for your nodes. We run periodic checks and alert you if we're unable to successfully reach your node.

We can alert you on any events impacting reachability of your node and deliver that alert to you through your favorite method. List of supported integrations can be found [here](/readme/integrations).

### Reachability checks - how do they work&#x20;

You can use any combination of checks for your node,limited only by connectivity options you have - ipv4, ipv6, tor.

**Lightning**

We send a small probe over lightning network to see if your node responds. Checks are run on multiple nodes positioned in different parts of the network to ensure connectivity and prevent false positive alerts.

{% hint style="info" %}
To ensure successful checks, your node should have an inbound liquidity exceeding 100 sats and a minimum HTLC size below 100 sats.&#x20;

If you are not sure about your current inbound liquidity level, you have the option to establish workflows that will notify you when your liquidity falls below a specific threshold in [Node and liquidity automation](/readme/liquidops/node-and-liquidity-automation)
{% endhint %}

**TCP**

Basic tcp check to see if your node is reachable on port 9735 over internet. Supports ipv4 and ipv6.

**Tor**

Basic tcp check to see if your node is reachable on port 9735 over Tor network.

### Checks performance

#### Builder plan

In the free version, we conduct TCP, TOR, and Lightning Network checks at best effort, and the interval between checks can extend up to 15 minutes.

#### Pro and Business plans

In our Pro and Business plans, specifically designed to meet the needs of more demanding nodes, we offer faster checks at a 60-second interval. A quicker detection enables swifter troubleshooting leading to a better customer experience.


# Guides

Find guides, tutorials and how-tos.

{% content-ref url="/pages/4jXdclkc4OfbOOzNXHhq" %}
[Explorer: advanced search](/readme/guides/explorer-advanced-search)
{% endcontent-ref %}

{% content-ref url="/pages/nxP0BI2eNdeO0i2bOJ7j" %}
[Create a workflow with auto swaps](/readme/guides/create-a-workflow-with-auto-swaps)
{% endcontent-ref %}

{% content-ref url="/pages/WATx3DMcVmr4Fbr5d0VK" %}
[Agent configuration: auto swaps](/readme/guides/agent-configuration-auto-swaps)
{% endcontent-ref %}

{% content-ref url="/pages/uDnuYk7DaK444dpmLaf7" %}
[Setup LiquidOps on Voltage nodes (API based - pull)](/readme/guides/setup-liquidops-on-voltage-nodes-api-based-pull)
{% endcontent-ref %}

{% content-ref url="/pages/B3A4Cev9CVEDRMCiLpee" %}
[Setup LiquidOps on Voltage nodes (agent based - push)](/readme/guides/setup-liquidops-on-voltage-nodes-agent-based-push)
{% endcontent-ref %}


# Explorer: advanced search

Advanced search relies on public and proprietary data.

[Explorer](https://bolt.observer/explorer) has been designed to assist you in exploring the Lightning Network by allowing highly granular searchese. With a wide range of search criteria, it provides you with the ability to delve deep into the network and discover nodes that align with your needs.

The entire list of search criteria can be found [here](/readme/explorer).

###

### Example 1: Minimum channel size limit

In some cases, larger lightning nodes impose size limits on incoming channels. If you are interested in opening a channel with highly connected nodes, Explorer provides you with valuable information beforehand, allowing you to assess the risk of potential rejection before proceeding. This ensures that you can make an informed decision and minimize the chances of facing channel opening rejections.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FCZSQLhZeYCbzLnliADNx%2FExplorer3.png?alt=media&amp;token=ff1a593c-ef17-44f4-9d1e-7cce077bfc45" alt=""><figcaption></figcaption></figure>

#### Result

This is a screenshot of all the nodes whose minimum channel size limit is lower or equal to 1,000,000 sats. &#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FquK92WBOzxI4pouxF9GV%2FExplorer4.png?alt=media&amp;token=d5192e54-0876-4c14-93f5-ec5f58e39466" alt=""><figcaption></figcaption></figure>

### Example 2: Maximum channel size limit

The same principles apply for **Maximum channel size limit**&#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FkeadLoiil0esOHWoZUf6%2FExplorer5.png?alt=media&amp;token=1d0d0efa-87b0-4bb7-a9d0-67298d4ffd52" alt=""><figcaption></figcaption></figure>

### Example 3: Capacity, latency, position, Betweenness centrality&#x20;

Find nodes with the following criteria:&#x20;

* **capacity** > 1BTC
* **latency** < 1500 ms
* **number of hops** = exactly at 2 hops away from your node
* 50 < **Betweenness Centrality** < 500

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F0EBTaAET0jwJ4iPQ8SFe%2Fimage.png?alt=media&amp;token=1f72c2bc-5942-44f7-89b5-b04e72641991" alt=""><figcaption></figcaption></figure>

#### Results

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FHIK50bMA9qF59wJEMwWH%2FExplorer2.png?alt=media&amp;token=13077a82-6333-4a17-a9aa-6b90863f110a" alt=""><figcaption></figcaption></figure>


# Create a workflow with auto swaps

An auto swap is a proactive action configured by a node operator in anticipation of potential liquidity issues in the future, aiming to restore liquidity to a predefined level. It is executed automatically when the specified trigger conditions are met. Unlike regular swaps that involve a fixed amount, auto swaps are designed to maintain a desired liquidity level as a reference. Auto swap can trigger multiple swaps to restore liquidity to the desired level, ensuring that the channel or node remains adequately funded. For more details, refer to the [docs](https://docs.bolt.observer/readme/liquidops/integrations/actions/perform-auto-swaps) on auto swaps.

Here is a short video showing the different steps to create a workflow with an auto swap-out.&#x20;

{% embed url="<https://www.loom.com/share/c05a77bc352740a482f013e0942f01cb>" %}
Auto swap-out&#x20;
{% endembed %}


# Agent configuration: auto swaps

In this guide, we will explore how to configure the open-source agent to perform auto-swaps.

Triggers and actions are the main components of a workflow. Once a trigger is activated, the workflow executes swaps until your channel or node liquidity reaches the desired level. Refer to the flowchart below for a visual representation:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FIgdKNSmwWHZNjILYJGN1%2FGraphs%20-%20Auto%20swap%20flowchart(1).jpg?alt=media&amp;token=1d484e1e-caa9-425f-9506-172e76f85252" alt=""><figcaption><p>Auto swap flowchart</p></figcaption></figure>

In addition to defining "target" and "threshold" levels in the GUI, as shown in [Create a workflow with auto swaps](/readme/guides/create-a-workflow-with-auto-swaps), you can also set options in CLI when running the agent:

### Max and min swap amounts

* `maxswapsats` allows you to set the maximum swap amount in satoshis.
* `minswapsats` enables you to define the minimum swap amount in satoshis.

### Maximum number of attempts

To manage the number of swaps executed by your workflows, use the `maxswapattempts` parameter. This parameter sets the maximum number of swaps authorized to reach your target liquidity levels. For example, if `maxswapattempts = 10`, up to 10 consecutive swaps will be allowed.

### Fee limits

In a context of a congesetd mempool, it is quite useful to limit the cost or your operations. You can set the upper limit for the cost of a swap, including Boltz fees, off-chain fees, and on-chain fees by using `maxfeepercentage` option.&#x20;

For instance, setting `maxfeepercentage` to 1% ensures the total cost of an 8M sats swap never exceeds 80k sats.&#x20;

{% hint style="info" %}
This options is helpful when the mempool is congested and on-chain fees skyrocket.&#x20;
{% endhint %}

Here is an example of agent settings that enable auto swaps:

<figure><img src="broken://files/DAGq3ybDYkyUiUDtLfiN" alt=""><figcaption><p>Agent configuration CLI: auto swap</p></figcaption></figure>

For more details about auto swaps, please refer to the following link:&#x20;

{% content-ref url="/pages/rVfgY6RTNSzUJdDxf9Nx" %}
[Perform Auto Swaps](/readme/liquidops/integrations/actions/perform-auto-swaps)
{% endcontent-ref %}

{% embed url="<https://github.com/bolt-observer/agent/blob/main/plugins/boltz/README.md>" %}
Agent configuration for Boltz plugin
{% endembed %}

For general information on the open-source agent, you can find all the details in our [GitHub repository](https://github.com/bolt-observer/agent).&#x20;


# Setup LiquidOps on Voltage nodes (API based - pull)

This page describes the configuration process of LiquidOps with macaroons for nodes hosted on Voltage.

### Setup in Voltage

After logging into your Voltage account, navigate the left side menu and click on "Settings". Scroll down to the "Connect Settings" section&#x20;

* Ensure that gRPC is enabled.
* If you are using the IP Whitelist feature, include the following IP addresses:
  * 34.170.53.37
  * 34.70.20.229

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FtWNzwxBJZlFiO1gC6Glb%2FScreen2.png?alt=media&amp;token=c7f34edd-9bbe-497b-a5e0-f331039e30df" alt=""><figcaption><p>LiquidOps on Voltage node: <strong>Readonly Macaroon (hex)</strong> </p></figcaption></figure>

Next, navigate to the **Connect** page from the left side menu.&#x20;

In the **Application** menu, choose **Manual** option. You are invited to copy **API Endpoint**, **Readonly Macaroon (hex)** and **TLS Certificate:**

#### **API Endpoint**&#x20;

In this example, the API Endpoint is "**demo.m.voltageapp.io**". Make a note of this value.

#### **Readonly Macaroon (hex)**

&#x20;Copy the entire content of the field. In our case, the readonly macaroon starts with "0201."

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FLO4bAIMx1jzE7GC6ulxf%2FScreen4.png?alt=media&amp;token=153597b5-564f-4134-9f8e-c4756921593b" alt=""><figcaption><p>LiquidOps on Voltage node: <strong>Readonly Macaroon (hex)</strong> </p></figcaption></figure>

#### **TLS Certificate**&#x20;

Scroll down the page and locate the TLS Certificate section. Select the option to "Show base64" and make a copy of the value. In our case the TLS certificate starts with "LS0..."

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FZ8JJpe0y6Xvcxu51I4pF%2FScreen5.png?alt=media&amp;token=c2ddab5c-a32c-4ceb-be73-57fa3e3857b9" alt=""><figcaption></figcaption></figure>

### Setup in Bolt.Observer

Log into your account at [bolt.observer](https://bolt.observer/), and add your Voltage node to the **Node page** either by entering the alias or the pubkey. Read [Getting started](/readme/liquidops/getting-started) for more details on how add your first node.

{% hint style="info" %}
When adding a new node to bolt.observer, please ensure that you wait for a duration of 10 minutes after its creation in Voltage. This waiting period is necessary to allow the node to be visible on the graph and successfully added to the platform.
{% endhint %}

Then click on Go to Node as shown below

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FegS7AtOh3fRIb87K8Sh6%2FScreen7.png?alt=media&amp;token=dd25013e-a915-4dc2-b99f-67d82a92b597" alt=""><figcaption><p>Setup LiquidOps </p></figcaption></figure>

On your node page, setup LiquidOps by clicking on "Enroll in LiquidOps"

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FLgO0Ldb4q5Y7kQYmhLm7%2FScreen8.png?alt=media&amp;token=c75ff57b-f98a-4ff7-8447-63d80f3db207" alt=""><figcaption></figcaption></figure>

In the subsequent menu, click **CONTINUE** under LND Node.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FYF4HDbeoSpXKvtHqilFJ%2FScreen9.png?alt=media&amp;token=c382b9dd-9069-4864-8a57-8b60377d4c26" alt="" width="337"><figcaption></figcaption></figure>

Now, you need to provide the following values obtained earlier:

* In the field **Address,** paste the [#api-endpoint](#api-endpoint "mention")and add ":10009" in the end. In our example, he Address should have the following format demo.m.voltageapp.io:10009
* In the field **Macaroon(hex)**, paste the [#readonly-macaroon-hex](#readonly-macaroon-hex "mention")
* In the field **Certificate,** paste the [#tls-certificate](#tls-certificate "mention")
* In the field **Certificate verification type,** select the option **Allow when public key is the same.**  Voltage uses a short-lived Let's Encrypt certificate, by selecting this option you will avoid manual updates of the TLS certificate.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fvoe3lV90la6zcNB1dp7v%2FScreen10.png?alt=media&amp;token=30ba60ae-8bc5-4395-acdb-3dca8135d8f3" alt=""><figcaption></figcaption></figure>

Once macaroons are configured, you will get the confirmation that LiquidOps is enabled as follows: &#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FUS2cnDVKPuelCnxpU9aC%2FScreen11.png?alt=media&amp;token=4945d6c5-4fdd-4ec5-b185-024bb30f48b1" alt=""><figcaption></figcaption></figure>


# Setup LiquidOps on Voltage nodes (agent based - push)

This page describes the configuration process of LiquidOps with macaroons for nodes hosted on Voltage.

In order to fully leverage the capabilities of LiquidOps with a Voltage node, it is essential to utilize our open source [agent](https://github.com/bolt-observer/agent). Since Voltage does not support direct installation of bolt.observer, the recommended approach is to install the agent on a separate server, which can seamlessly operate alongside a Voltage node.

### Recommended setup

In this tutorial, we will explain how to configure our open-source agent to work with a Voltage node. Refer to the chart below for a visual representation:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FNHZNGUJpOThnWUf7keil%2Fimage.png?alt=media&amp;token=a98e679e-5420-467b-9fc7-934ada91aff7" alt=""><figcaption><p>Agent and Lightning node running on separate machines </p></figcaption></figure>

Machine 1: Voltage node

Machine 2: a secondary server  where the agent can be installed&#x20;

For the agent installation, you can find more information in [Agent based - push](/readme/liquidops/setup-liquidops/agent-based-push) and in the [repository](https://github.com/bolt-observer/agent#install).

### Voltage setup

LiquidOps provides extensive automation capabilities for a wide array of operations, including connectivity, node status notifications, and liquidity management through [auto swaps](/readme/liquidops/node-and-liquidity-automation). Liquidity management specifically requires on-chain and off-chain permissions, as well as access to addresses, invoices, and read/write permissions.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2Fk6IBuxC7rK1zee6FbC57%2FScreenshot16.png?alt=media&amp;token=c9d7a2dd-ae70-44cc-aaa7-f7fa8e84e3a1" alt=""><figcaption></figcaption></figure>

After logging into your Voltage account, navigate your "**home**" page. Scroll down the page and download the **Admin macaroon** and the **TLS certificate** onto the machine where you plan to install the agent. In this case, it would be Machine 2, as mentioned in the previous instructions[#agent-setup](#agent-setup "mention").

### Agent installation

Install the agent by following the instructions under github [repository](https://github.com/bolt-observer/agent#install).

### Agent options

Ensure the following options are properly configured in the agent:&#x20;

#### Apikey

Log into your account on bolt.observer, and from your node page and click on "**Enroll in LiquidOps**"

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FVqbvIN3ptDat8FokzcsE%2FScreenshot12.png?alt=media&amp;token=6c2877ee-1b41-4a40-a979-5baf3fd9fc98" alt=""><figcaption><p>LiquidOps setup with agent</p></figcaption></figure>

Generate an API key and copy its value.&#x20;

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2F3TSfDQcaMT3PVE0pwV4H%2FScreenshot13.png?alt=media&amp;token=7262bacd-90d8-4007-a6dc-6475b7bb6c01" alt=""><figcaption></figcaption></figure>

Add the API key as an option in your command line:

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FteACxKZnEtd6pO5G63oy%2FScreenshot14.png?alt=media&amp;token=cf40fbc7-2537-4b9b-9bef-48e420c8c89e" alt=""><figcaption></figcaption></figure>

<pre><code><strong>--apikey a3fxxxxxxxxxxxxxxxxxxxxxxxxxx
</strong></code></pre>

#### Macaroon path

Specify the path to the admin macaroon file using the following option:

<pre><code><strong>--macaroonpath /some/path/to/file.macaroon
</strong></code></pre>

#### TLS Certificate path

Specify the path to the TLS certificate file using the following option:

```
--tlscertpath /some/path/to/tls.cert
```

#### RPC server

Set the RPC server address using the following option:

```
--rpcserver demo.m.voltageapp.io:10009
```

The complete command line with all options is shown below:

{% code overflow="wrap" %}

```
bolt-agent --apikey a3fxxxxxxxxxxx --macaroonpath /some/path/to/file.macaroon --tlscertpath /some/path/to/tls.cert --rpcserver demo.m.voltageapp.io:10009
```

{% endcode %}

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FoS238dR2uEjJ0gDhWuzl%2FScreenshot17.png?alt=media&amp;token=68c8a626-1dfa-41eb-81f8-5e3eea269844" alt=""><figcaption><p>Command line agent configuration</p></figcaption></figure>

For additional options&#x20;

### Verification

Once the bolt-agent is running correctly, refresh your node page, and you should see "LiquidOps enabled" and the data source displayed in the top right corner of the page.

<figure><img src="https://1042602664-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmGGbJoPTvKkAmLqqpdCK%2Fuploads%2FqoX9fnppcnOyvyUjpOov%2FScreenshot15.png?alt=media&amp;token=616ed5bd-7d61-4cbb-8a48-4d6127d948e0" alt=""><figcaption></figcaption></figure>

From this point, you can [Create a workflow with auto swaps](/readme/guides/create-a-workflow-with-auto-swaps) and starts enjoying the benefits of LiquidOps.


