Developers - Get Started
Languages JavaScript 57.8% Svelte 31.4% PLpgSQL 5.9% EJS 4.2% CSS 0.3% Shell 0.3% Other 0.1%
Quick Start with JUNGLELABᵀᴹ
JungleLab LNFT Digital Assets is a web-based platform for issuing and transacting with non-fungible tokens on the Bitcoin Liquid Network. Blockstream is sponsoring its development and hosting an exemplary curated instance of it for use by Bitcoin artists at JungleLab.
Features
JUNGLELABᵀᴹ User accounts and profiles for artists and collectors include custom avatars, contact info and biography Users can follow other artists and collectors and like/favorite individual artworks
Artists can upload digital media files (jpg, png, gif, mp4) representing an artwork and add metadata like a title, description, and tags Selected metadata is published in the liquid asset registry so that tokens can be recognized by external wallets
Media files are added to the IPFS network upon being uploaded and are given a unique content identifier (CID) derived from the SHA256 hash of the file The CID is embedded in the Liquid token issuance transaction contract, permanently and provably linking the file to the token Artworks are listed in a searchable/sortable/filterable marketplace gallery
Artists can list an artwork for sale by setting an optional listing price, royalty rate, and/or auction period Bids and sales are conducted peer-to-peer using atomic swaps so the platform host does not need to escrow funds Listings, bids, transfers and new artwork activity are logged and presented in a site-wide feed
A web-based liquid wallet is integrated into the user's profile page and allows them to fund their accounts with L-BTC or any kind of liquid asset Wallets can be backed up and imported using a 12-word BIP mnemonic seed phrase
Built-in integration with the coinos.io API allows users to instantly convert BTC to L-BTC by depositing to an on-chain address or paying a lightning network invoice Royalties and auction holding periods are enforced through a 2-of-2 signing server that only signs off on transactions that meet certain conditions
Tech Stack Summary
Front-end
Svelte Kit reactive component framework - Tailwind CSS UI utility classes - LiquidJS for liquid wallet functionality
Back-end
Postgres/Hasura for storing relational app data - Hasura backend plus for JWT-based user auth - IPFS for media storage and hash-based content addressing - Fastify NodeJS api/app server
3rd-party APIs
Esplora for Liquid blockchain data - Liquid asset registry for token metadata - coinos BTC/LNBTC - L-BTC conversion -
Installation pre-requisites
pnpm pnpm Docker docker Hasura CLI hasura
Setup local development environment
pnpm installcd hasuracp .env.sample .envdocker run -it -v $PWD/app:/app --entrypoint pnpm asoltys/lnft-server installdocker-compose up -dhasura migrate applyhasura metadata applyhasura seeds applyhasura metadata reloadsudo cp ../static/user.png storage/QmcbyjMMT5fFtoiWRJiwV8xoiRWJpSRwC6qCFMqp7EXD4Zdocker exec -it ipfs ipfs add /export/QmcbyjMMT5fFtoiWRJiwV8xoiRWJpSRwC6qCFMqp7EXD4Zdocker restart lappcd ..pnpm dev # site is available at (http://localhost:3000/)
Setup pre-commit git hooks:
We have a pre-commit git hook for running prettier on all files to keep the formatting consistent.
git config core.hooksPath "./git_hooks"
- This will set the git config path to use this directory for hooks.
chmod +x ./git_hooks/pre-commit"
- This will give the hook the necessary permissions to run.
Setup local development with cloud tools - VS CodeSpaces
npm i -g pnpm pnpm install curl -L (https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh) | bash cd hasura cp .env.sample .env docker run -it -v $PWD/app:/app --entrypoint pnpm asoltys/lnft-server install docker-compose up -d hasura migrate apply hasura metadata apply hasura seeds apply hasura metadata reload sudo cp ../static/user.png storage/QmcbyjMMT5fFtoiWRJiwV8xoiRWJpSRwC6qCFMqp7EXD4Z docker exec -it ipfs ipfs add /export/QmcbyjMMT5fFtoiWRJiwV8xoiRWJpSRwC6qCFMqp7EXD4Z docker restart lapp cd .. pnpm dev # site is available at http://localhost:3000/ chmod +x mine.sh./mine.sh # this script will run continually to mine regtest blocks, you may want to run it in a separate terminal window or tab"
VS Code Dev
Fund a wallet with regtest coins
Get a deposit address from the wallet page or users table in the db and send an amount with this command
docker exec -it liquid elements-cli -datadir=/home/elements/.elements sendtoaddress <address> <amount>