Skip to content

Latest commit

 

History

History
101 lines (77 loc) · 5.36 KB

README.md

File metadata and controls

101 lines (77 loc) · 5.36 KB

Token Ocean

Token Ocean 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 Raretoshi.

The plan is to separate out any Raretoshi-specific features from the core platform functionality so that anyone can adapt the platform to host their own Liquid-based NFT site but that's currently a work in progress

Features

  • 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

Back-end

3rd-party APIs:

Installation pre-requisites

Setup local development environment

pnpm install
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/

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 https://vscode.dev

 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

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>