Universes
Learn how to run a universe and connect to other universes.
In the context of Taproot Assets, a universe is a service that acts as a repository for publicly minted assets. It contains knowledge of assets, mints, metadata, public transfers and their proofs. A universe is required for users to fetch data necessary to validate transfers, and may be public or private.
Anyone may run a universe, or use one or multiple universes provided by others, such as Lightning Labs.
Running a universe
Running a universe is as simple as running tapd
and amending your configuration file. You may run a universe over RPC or REST. By default, tapd
is expected to listen on gRPC TCP port 10029
and REST TCP port 8089
, so ensure this port is open on your machine if you would like others to connect to you. Being publicly reachable is not a requirement for a universe, however. Your universe may only serve resources on a private network, or be otherwise restricted.
When running tapd
as part of litd
, you may also use port 8443
or define your own port. For example, as the REST universe is also usable through a browser over HTTPS, you may configure it over port 443
or set up a proxy.
Sampletapd.conf
file:
rpclisten=0.0.0.0:10029
restlisten=0.0.0.0:8089
allow-public-uni-proof-courier=true
allow-public-stats=true
universe.public-access=rw
You can verify whether your universe is accepting proofs with the command tapcli universe federation config info
You can change the configuration from the CLI using tapcli universe federation config global --proof_type issuance --allow_insert true
and --proof_type transfer
The default universe
By default, your tapd
will connect to the default universe, for instance testnet.universe.lightning.finance:10029
for testnet, or universe.lightning.finance:10029
on mainnet.
The contents of the default universe are also available via a public REST API:
You may also make use of the UI available through Lightning Terminal
Federations
By default, your tapd instance will connect to a default universe. You can manually add additional universes to sync to and from, called a federation. You can see this federation with tapcli universe federation list
.
If you would like to add a universe to this federation, you can do this on with tapcli universe federation add --universe_host <universe_ip:port>
Similarly, you can remove universes from this federation with tapcli universe federation del --universe_host <universe_ip>:port
Syncing to a universe
By default, your tapd
will sync to universes which have configured in your local federation, and only for assets which you either hold or have created a taproot address for. You may also manually sync specific asset IDs or group keys.
tapcli universe sync --universe_host <universe_ip:port> --group_key <group key>
To configure your tapd
to regularly sync to other asset IDs or group keys, you may use the universe federation configuration. The config global
options will apply to all assets, while the config local
options will only apply to specific assets.
tapcli universe federation config global --proof_type issuance --allow_insert true
tapcli universe federation config local --proof_type transfer --allow_insert true --group_key <group key>
The Universe APIs
A Taproot Asset Universe is available over gRPC and REST on the default ports. You may run your own universe or interact with a public universe. Public universes are unauthenticated, the macaroon checks are skipped.
For instance, when making a transfer, the proofs may be pushed to one or multiple universes using the REST API. This requires the asset ID, the leaf key index and script key.
/v1/taproot-assets/universe/proofs/asset-id/{key.id.asset_id_str}/{key.leaf_key.op.hash_str}/{key.leaf_key.op.index}/{key.leaf_key.script_key_str}
A detailed list of all available fields as well as code examples can be found under the Taproot Assets Universe API documentation.
Last updated