Elements vs Liquid
Elements is an open-source blockchain platform developed and maintained by Blockstream. Elements was launched shortly after the publication of the first sidechain whitepaper in 2014. It is a codebase fork of Bitcoin Core and extends Bitcoin with new functionality while remaining closely aligned with upstream Bitcoin Core development.
Liquid is one production instance of Elements. More specifically, Liquid is a production Bitcoin sidechain running Elements Core with Liquid's specific chain parameters, consensus configuration and active federation parameters.
In other words, Elements is the blockchain platform. Liquid is a production network built with it.
Elements Core
Elements Core is the node implementation used to run Elements-based blockchains.
Like Bitcoin Core, it offers:
- a peer-to-peer node.
- block and transaction validation.
- a UTXO-based ledger.
- a wallet and JSON-RPC interface.
- command-line and graphical clients.
The main binaries (executables) retain the Elements name:
| Executable | Purpose |
|---|---|
elementsd | Full-node daemon |
elements-cli | Command-line JSON-RPC client |
elements-qt | Graphical node and wallet |
The Elements Project site provides the primary technical reference for configuring and operating Elements Core. You can follow code tutorials using these executables to demonstrate asset issuance, Confidential Transactions, chain configuration and other features.
Run the Liquid Network with Elements Core
Liquid is one network configuration supported by Elements Core.
For example, running:
elementsd -chain=liquidv1starts an Elements node configured to synchronize with the Liquid Network.
Liquid defines the production network around that software, including (but not limited to):
- the
liquidv1chain and network parameters. - Bitcoin mainnet as the parent chain for the two-way peg.
- LBTC as the Bitcoin-pegged asset used on Liquid.
- the active federation and block-signing configuration.
- Liquid-specific consensus and policy parameters.
- the production peer-to-peer network and chain history.
These properties describe Liquid, not Elements.
One platform, many blockchains
Elements Core can run custom standalone blockchains and sidechains with independently configured network and consensus parameters, as well as built-in and preconfigured testing environments, such as Elements regtest and Liquid testnet.
| Environment | -chain= | Purpose |
|---|---|---|
| Liquid mainnet | liquidv1 | Production Liquid Network |
| Liquid testnet | liquidtestnet | Shared Liquid testing environment |
| Elements regtest | elementsregtest | Local development and controlled testing |
| Custom Elements blockchain | <custom-name> | Your standalone blockchain or sidechain |
Examples of configurable parameters
A custom Elements blockchain can define its own consensus and network configuration rather than inheriting Liquid's production settings. For example:
| Parameter | What it controls |
|---|---|
signblockscript | The script that must be satisfied for a block to be valid, allowing a network to define its own block-signing policy and signer threshold. |
fedpegscript | The federation script controlling the bitcoin held by a two-way peg. |
peginconfirmationdepth | The number of parent-chain confirmations required before a peg-in can be claimed. |
policyasset | The asset used as the network's policy asset, including for transaction fees. |
initialfreecoins | Whether the chain begins with an initial supply of its policy asset rather than requiring assets to enter through a peg. |
con_blocksubsidy | The block subsidy issued when new blocks are created. |
A custom chain could be started with settings such as:
elementsd -chain=mychain \
-signblockscript=<block-signing-script> \
-peginconfirmationdepth=20Elements and Bitcoin
Elements is intentionally aligned with its upstream codebase.
This allows Elements to inherit Bitcoin Core's bug fixes, security improvements, optimizations, and other extensively reviewed code. As a result, Elements has historically maintained roughly 80% codebase overlap with Bitcoin Core, although the exact percentage varies by release.
This close relationship is very obvious to node operators and developers. Elements Core retains many Bitcoin Core conventions, command-line options, data structures, and JSON-RPC methods.
E.g., both implementations use the -chain= option to select the blockchain configuration to run.
flowchart LR
BM["Bitcoin mainnet<br/><code>main</code>"]
BT["Bitcoin testnet<br/><code>testnet4</code>"]
BS["Bitcoin Signet<br/><code>signet</code>"]
BR["Bitcoin Regtest<br/><code>regtest</code>"]
BFORK["-chain="]
BFORK@{ shape: text }
BM --- BFORK
BT --- BFORK
BS --- BFORK
BR --- BFORK
subgraph BITCOIN["Bitcoin"]
BC["Bitcoin Core"]
end
BFORK --- BITCOIN
subgraph ELEMENTS["Elements"]
EC["Elements Core"]
end
BITCOIN <--> ELEMENTS
EFORK["-chain="]
EFORK@{ shape: text }
ELEMENTS --- EFORK
EFORK --- LM["Liquid mainnet<br/><code>liquidv1</code>"]
EFORK --- LT["Liquid testnet<br/><code>liquidtestnet</code>"]
EFORK --- ER["Elements regtest<br/><code>elementsregtest</code>"]
EFORK --- CC["Custom Elements blockchain<br/><code><custom-name></code>"]
style BITCOIN fill:#FFF4E6,stroke:#F7931A,stroke-width:2px,color:#3A2A17
style BC fill:#FFFFFF,stroke:#F7931A,stroke-width:1px,color:#3A2A17
style BFORK fill:#F7931A,stroke:#F7931A,color:#FFFFFF
style BM fill:#FFF4E6,stroke:#F7931A,stroke-width:1.5px,color:#3A2A17
style BT fill:#FFF4E6,stroke:#F7931A,stroke-width:1.5px,color:#3A2A17
style BS fill:#FFF4E6,stroke:#F7931A,stroke-width:1.5px,color:#3A2A17
style BR fill:#FFF4E6,stroke:#F7931A,stroke-width:1.5px,color:#3A2A17
style ELEMENTS fill:#F1F3FC,stroke:#6C8ADD,stroke-width:2px,color:#2F3C6D
style EC fill:#FFFFFF,stroke:#42539D,stroke-width:1px,color:#2F3C6D
style EFORK fill:#6C8ADD,stroke:#6C8ADD,color:#FFFFFF
style LM fill:#F4FAFA,stroke:#14909C,stroke-width:1.5px,color:#0D1437
style LT fill:#F4FAFA,stroke:#14909C,stroke-width:1.5px,color:#0D1437
style ER fill:#F1F3FC,stroke:#6C8ADD,stroke-width:1.5px,color:#2F3C6D
style CC fill:#EEF6FD,stroke:#4B8FC8,stroke-width:1.5px,color:#173B5E
Many familiar Bitcoin Core RPCs are also available in Elements Core. Four commonly used are:
| RPC | Purpose |
|---|---|
getblockchaininfo | Returns the node's current blockchain state, including chain, block height, synchronization status, and consensus-related information. |
getrawtransaction | Retrieves a transaction by txid, optionally returning a decoded JSON representation of its inputs, outputs, and other transaction data. |
sendrawtransaction | Submits a signed raw transaction to the node for validation and relay to the network. |
listunspent | Returns UTXOs available to a wallet, including Liquid-specific asset and value information where available. |
For the complete list of JSON-RPC methods available in Elements Core, see the Elements RPC reference on the Elements Project site. The reference is organized by RPC category and the corresponding Elements release.
Note: Maintaining Bitcoin Core parity is an ongoing engineering process rather than a one-time fork. Upstream Bitcoin Core releases are periodically merged into Elements, with conflicts resolved and Elements-specific behavior retested before release. Learn more about Elements development and Liquid upgrades on the ELIPs repository.
Related Documentation
Updated about 5 hours ago