# Getting Started with Vivid Labs

Documents, walkthroughs and guides on how to get started with The VIVID Platform.

## Top Vivid Labs Documents

[Launch an NFT Marketplace with VIVID Open](/tutorials/getting-started-with-vivid-open-open-source-nft-marketplace)

[VIVID NFT App for Shopify Walkthrough](/vivid-nft-shop-app-getting-started)

[Become a Worker - Worker Hub Walkthrough](/worker-hub/worker-hub-walkthrough)

[Stake VID Tokens](/staking-vid-token/delegated-staking)


# Getting Started with VIVID Open - Open Source NFT Marketplace

Video NFT Open Source Platform

This document describes installers and instructions for using Vivid Open NFT marketplace with Filecoin storage along with an Ethereum VM compliant blockchains.

The installer is based on docker-compose scripts that use Vivid Open marketplace backend, marketplace-UI in the form of docker containers. It also contains instructions for installing video-nft smart-contracts and wyvern-exchange smart-contracts on an Ethereum-VM compliant blockchain.

Filecoin storage can be accessed through third party Filecoin storage access providers such as nft.storage or Textile Hub.

### Prerequisites

* **Hardware**: Marketplace docker images can be used with any container orchestration platforms such as Kubernetes that allow multi-machine clusters for application scalability. We use docker-compose for testing the containers on 16-Core/32GB GCP instances.
* **Docker Engine and docker-compose**: Prepare your machine by installing Docker Engine and docker-compose: Refer <https://docs.docker.com/engine/install/> and <https://docs.docker.com/compose/install/> for installation instructions.
* **Filecoin storage access**: VideoCoin NFTs are stored on Filecoin Storage Blockchain. The following storage access providers are used to access the Filecoin. These providers also pin the NFTs to be accessible through the IPFS file system/gateways. The installer needs the API keys from one of these providers.
  * *NFT.Storage*: Refer <https://nft.storage/> for subscription to the service
  * *Textile Hub*: Refer <https://www.textile.io/> for subscription to the service.
* **Blockchain**: Select a Ethereum VM complaint blockchain and install the VideoCoin-NFT and Wyvern Exchange Contracts. Following are some examples:
  * *Ethereum Mainnet*
  * *Polygon-Matic*
  * Ethereum Testnets Rinkeby, Ropsten etc. for testing
* **Blockchain Access**: VideoCoin-NFT Marketplace accesses the Blockchain through Json-RPC. Marketplace can be connected either to your own node connected to Blockchain or your can use one of the providers. Following are some providers:
  * *Infura*: Refer <https://infura.io/> for subscription to the service.
  * *Quicknode*: Refer <https://www.quicknode.com/> for subscription to the service.

### Marketplace component repos and Docker Images

* Marketplace:
  * docker image: registry.videocoin.net/nft/marketplace:beta2
  * git repo: <https://github.com/videocoin/marketplace>
* Marketplace-UI:
  * docker image: registry.videocoin.net/nft/marketplace-ui:beta
  * git repo: [https://github.com/videocoin/nft-app-ext](#prerequisites)
* VideoCoin-NFT Contract:
  * git repo: <https://github.com/videocoin/videocoin-nft>
* Wyvern Exchange contract
  * git repo: <https://github.com/videocoin/wyvern-ethereum>

### Quick start

#### Checkout the repo, get the submodules.

```
git clone https://github.com/videocoin/videocoin-nft-installer.git
git submodule update --init --recursive
```

#### Install the VideoCoin-NFT and Wyvern Contracts

Follow the instructions in the repos to install the contracts on the selected blockchain. The instructions in the repos use truffle tool to deploy the contracts. Alternately you can use etg\_Brownie tool to deploy the contracts. We documented the contract deployment using eth\_Browinie in .

#### Marketplace environment variables

Modify the marketplace\_env.list in the repo with deployed addresses. The following environment variables are used to supply the following:

* Deployed contract addresses of VideoCoin NFT and Wyvern Exchange contracts
* Filecoin storage provider API keys
* Blockchain access provider API keys
* GCP Bucket and credentials for storage backup on GCP
* Connectivity to Postgres DB

marketplace\_env.list:

```
ERC721_CONTRACT_ADDRESS=<VideoCoin NFT contract address>
ERC721_CONTRACT_KEY=<Contract owner address. It should be in the following form  
'{"address": "xxxxxxxxxxxx", "crypto": {"cipher": "aes-128-ctr", "cipherparams": {"iv": "xxxxxxxxxxxxxxxxx"}, "ciphertext": "xxxxxxxxxxxxxxxxxxxxxxxx", "kdf": "scrypt", "kdfparams": {"dklen": 32, "n": 262144, "r": 1, "p": 8, "salt": "xxxxxxxxxxxxxxx"}, "mac": "xxxxxxxxxxxxx"}, "id": "xxxxxxxxxxxxx", "version": 3}'>

ERC721_CONTRACT_KEY_PASS=<Password for ERC721_CONTRACT_KEY>

BLOCKCHAIN_SCAN_FROM=<block number of blockchain where contract activity started>
BLOCKCHAIN_URL=<Json-RPC End point for blockchain access>
BLOCKCHAIN_ID=<Blockchain ID>

DBURI="host=postgres port=5432 dbname=marketplace sslmode=disable"

NFTSTORAGE_API_KEY=<NFT Storage API key>
STORAGE_BACKEND=nftstorage


GCP_BUCKET=<GCP Bucket>
GOOGLE_APPLICATION_CREDENTIALS=<GCP Bucket access credentials json file path>
```

Note: GOOGLE\_APPLICATION\_CREDENTIALS refers to a path in the docker container. Look at the marketplace volumes attribute in docker-compose.yaml to map the credentials from the host file.

If you are using Textile Hub Filecoin storage, provide the following instead of NFTSTORAGE\_API\_KEY and STORAGE\_BACKEND=nftstorage

```
MARKETPLACE_TEXTILE_AUTH_KEY=""
MARKETPLACE_TEXTILE_AUTH_SECRET=""
MARKETPLACE_TEXTILE_THREAD_ID=""
MARKETPLACE_TEXTILE_BUCKET_ROOT_KEY=""
STORAGE_BACKEND=textile
```

#### Marketplace UI environment variables

Modify the marketplace-UI(nft-app\_env.list) in the repo with deployed addresses. The following environment variables are used to supply the following:

* installed contract addresses
* Blockchain access provider
* Marketplace Server URL

nft-app\_env.list:

```
REACT_APP_TOKEN_ADDRESS=<VideoCoin NFT contract address>

REACT_APP_WYVERN_EXCHANGE=<WyvernExchange contract address>
REACT_APP_WYVERN_PROXY_REGISTRY=<WyvernProxyRegistry contract address>
REACT_APP_WYVERN_ATOMICIZER=<WyvernAtomicizer contract address>
REACT_APP_WYVERN_TOKEN_TRANSFER_PROXY=<WyvernTokenTransferProxy>
REACT_APP_NETWORKS=<Blockchain NetworkID>

REACT_APP_CUSTOM_FEE_RECIPIENT=<Protocol fee recipient address>
REACT_APP_CUSTOM_PROVIDER_URL=<Json-RPC for blockchain access>

REACT_APP_API_BASE_CUSTOM='<market place ip address>:8088'
REACT_APP_SITE_HOST_CUSTOM=
```

\*Note: The addresses used in the above file should contain only lower-case. Convert \[A-F] in the addresses to \[a-f]

#### Start Marketplace

You can start marketplace using the docker-compose cli

```
docker-compose up marketplace nft-app
```

### Open the browser and launch the aft-app.

```
http://<hosting-server-ip-address:8080>
```

### Overview of VideoNFT Marketplace Components

* Marketplace-UI(Frontend)
* Marketplace(API Backend)
* Postgres(Database for user-info)
* Blockchain, Ethereum Mainnet or other EVM Compliant blockchains
* VideoCoin-NFT Contract
* Wyvern Exchange Contracts
* Filecoin Storage and providers

![](/files/qmGFn5tbEWIsQiMmuMcj)


# Vivid NFT Shop App - Getting Started

Vivid Labs Shopify App

This step-by-step guide on how to install the VIVID NFT app on your Shopify store, how to create a new NFT product, minting and buying an NFT, and actions for NFT owners.


# Step 1: Install the VIVID NFT Shopify App

Step 1: Install the VIVID NFT App

Find the VIVID NFT App in the Shopify app store and install. The app automatically configures itself post install and there are no additional steps involved.

Last modified 2mo ago


# Step 2: Create NFT Products

The VIVID NFT app can be found in the **Apps** tab on your store’s admin page.

In the VIVID NFT app, you will see the **NFT Products** screen. This is where you’ll mint new NFTs from a collection template we provide. You can create a new template and add NFTs as well as update the files in a template NFT you made previously. You can create as many templates as your billing tier allows.&#x20;

<div align="left"><figure><img src="/files/EfXdrg6H2sKIq533x4IK" alt="Apps are on the left side of admin screen, below other admin tools like Orders and Sales Channels. ."><figcaption></figcaption></figure></div>

<figure><img src="/files/6lYhYoz4p92XvkMRE2Gs" alt=""><figcaption></figcaption></figure>

***Note:** From your store's admin main page you can navigate to the NFT creation page by clicking **Apps** tab > **VIVID NFT** app in Installed apps > **Create New NFT** button.*

The first step  is to create a Collection.

In the **NFT Products** page, enter fields for the name and description of the NFT product. This name and description entered here are part of the NFT and recorded in its metadata.

After you have selected "Create a new collection" from the drop down menu, and given it a name in the field below, you will then want to select the Token type. Select Single Edition if you want a one-of-one NFT, or Multiple Editions if you want more than one edition of the NFT. &#x20;

<figure><img src="/files/5qKNkKwfWAPA90u5b5Zs" alt=""><figcaption></figcaption></figure>

Name **Your NFT** and give it a description.

<figure><img src="/files/3QTkd6ePsUETluDdHWK1" alt=""><figcaption></figcaption></figure>

Now add the media files of your choice in the **Media** content section by dropping files or clicking the **Add files** button. Vivid Labs minting technology supports minting one or *multiple* files for each NFT you mint. And, you can add files to your NFT after minting.&#x20;

***Note:** The file formats accepted are: ai, bmp, eps, flv, gif, jpg, m4v, mov, mp4, mpg, png, webm, webp, wmv.*

<figure><img src="/files/fa7UJvE68xvmkXYqQ4oU" alt="This is where you upload your files to mint an NFT."><figcaption></figcaption></figure>

You will see the media being uploaded live.

<figure><img src="/files/jiwOgIebII7W0v1YxsyE" alt="Media upload in progress."><figcaption></figcaption></figure>

By dragging your files in the **Media** section to the left side of the section, you can control  what images represent the cover image. The **Cover image** is the file that represents your NFT that customers will see on your storefront. Many NFT creators use a colorful image to represent their NFT.

<figure><img src="/files/2ngDviT0nS4KuYNDC7QT" alt="Full screen shot of Create a new NFT with Cover image on the right"><figcaption></figcaption></figure>

Now that you have made your selections about the name, token type, symbol and selected your files, the next step is to input **Media Details.**

<figure><img src="/files/4DI3lUYhbqfkW6XTLSym" alt=""><figcaption></figcaption></figure>

***Note**: Merchants can mint up to 10,000 editions of their NFTs. This will consume data in your pricing tier.*&#x20;

After the files are done uploading, and you have added a price and number of editions, click the **Save** button that will appear at the top of the screen.

<figure><img src="/files/ag4C3MZdZR7GeplxCFxy" alt=""><figcaption></figcaption></figure>

***Note:** Creating the product may take a few minutes depending on the content’s file size. The NFT is in the Shopify database at this point.*

After you click save, follow these prompts:

<figure><img src="/files/0EekUZmLR8Ivu37mdYTr" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/DvUpWV7iYrEN27L97Rr6" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/tlKIlp5JRHoe75y2RBVt" alt=""><figcaption></figcaption></figure>

***Note:** This section is the editable information for your product within the store and can be edited for merchandising or commercial reasons. However, changing information here does not affect the name and description that was originally entered when creating the NFT and is now minted and stored for the NFT on the blockchain. This is where you can add files to your NFTs after they have been minted.*

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2F6K77nOJ08oztjg7jtWUg%2F4?alt=media)

To add this product to your online store for others to buy, change the **Product status** from **Draft** to **Active**. Then **Manage** next to **Sales channels and apps** to change the sales channel to **Online Store.**

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FHFQdn83vSEawHXanMVyJ%2F5?alt=media)

Now click the **Save** button on the product page.

The NFT product is now available to buy in your store.


# Step 3: How to Edit an NFT

From the store’s admin page, click the **Product** tab. Here you will see all the digital and physical products you have created.

Click on one of your digital products.

<figure><img src="/files/r7678pdO3IRLSPn9LGCy" alt="All Products page"><figcaption></figcaption></figure>

***Note**: On the Products page, you can edit the NFT’s name, description, product status add files and change the order of the media assets. **To add files to previously created NFT template collections, contact us at*****&#x20;<info@vividlabs.com>.**

To update **Media**, click the **Add** button to select files to add to your NFT. Drag and drop the content to change the order.

<figure><img src="/files/SsQuaw3dw5Ht34Uudahy" alt="Edit a digital products attributes"><figcaption></figcaption></figure>

<figure><img src="/files/hxOPh1LAPZN12622i3Lf" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/jQm04KxEtZpELySIJYZx" alt=""><figcaption></figcaption></figure>

Use the **Save** button to update the NFT.


# Step 4: Buying and Minting the NFT on the Blockchain

This article describes how your customers will purchase NFTs from your storefront.&#x20;

To experience the buying process as they do, navigate to your online store.Here you’ll find the purchasable NFT product you’ve just created. To test, you will want to create an NFT with a price of $0. Follow the instructions to [Create NFT Products](https://docs.vividlabs.com/vivid-nft-shop-app-getting-started/step-2-create-nft-products) and set the price to $0.

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2F968Wr0goiNHnVdxgnnXz%2F0?alt=media)

Select that product to go to the NFT product page. Purchase the NFT by clicking **Buy it now.**

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FWeCx3Tmu2b0QNYL1hkD5%2F1?alt=media)

Continue through the payment process and complete your order.

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2F20cMg3n733G8UOJjr5zI%2F2?alt=media)

Now that the purchase has been made, the buyer will receive an order confirmation email. The next step will be to fulfill the order to mint and deliver the NFT.

### &#x20;<a href="#fulfill-and-mint-nft" id="fulfill-and-mint-nft"></a>

Navigate to your store’s admin page. Click **Orders** on the left side of the screen.&#x20;

![](/files/7dSj9wONe9euKlgrXSrM)

Select the new order from the list of orders and complete delivery by clicking the **Unfulfilled** button.

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FSySi0S1BqnCrnbGKbYwC%2F3?alt=media)

Click the **Fulfill item** button to fulfill the order.&#x20;

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FNXm2mQ5nkb5PFupXWQfn%2F4?alt=media)

After that the order is fulfilled, the NFT is minted and can be tracked on the blockchain explorer and the buyer will receive an email with the links to access their private NFT product and information.

***Note:** Once the blockchain has recorded the transaction for creating the NFT, the transaction hash will be recorded on your order page as shown below. Since blockchain transactions take up to a minute to confirm, you can refresh the page about 2 minutes later to see the transaction.*

<figure><img src="/files/6dM0QDlvT3MwGQfCHgQz" alt="Order fulfilled"><figcaption></figcaption></figure>


# Step 5: Product Delivery - Custom Email Templates

Step 5: Product Delivery - email communications to customer

At this point, the buyer will receive emails with a link to their order confirmation and a link to view their NFT.

<figure><img src="/files/3pHKhR5lWKc12LgJSr8Y" alt="Email sent to customer to view their NFT"><figcaption></figcaption></figure>

"View your NFT" email sent to your customer after they purchase their NFT. At the time of purchase the NFT is then minted.&#x20;

<figure><img src="/files/tuSJYMmikrz9z1otcgrI" alt=""><figcaption></figcaption></figure>

**How to edit Vivid Labs Shopify App email template**

The "View your NFT" email contains custom variables to support your storefront. These emails contain links to several domains. "View your NFT" takes your customer to a Vivid Labs landing page that contains the minted, multi or single asset NFT. "Visit our store" links to your storefront, and "Mint transaction ID" links to the blockchain explorer that tracks the transaction path of the minted NFT. This is a public site and follows the standards of most blockchains of transparency and access.&#x20;

To edit this page, click Apps > Vivid NFT > Settings

<div align="left"><figure><img src="/files/U9qGqe71FGHdDd7QZMKa" alt=""><figcaption></figcaption></figure></div>

Then click the check mark next to Preview Email Template.&#x20;

<figure><img src="/files/G9nrWybbwgCb18q4JG7y" alt=""><figcaption></figcaption></figure>

*Note: Clicking here will reveal the HTML code to customize the email template. **Mistakes happen, so we highly recommended that you back up and save the code provided here.***&#x20;

We have provided custom variables like {{ store\_name }} that automatically knows the name of your store, your store front domain and other variables.&#x20;

<figure><img src="/files/ZUHmQP3x3MTTHCXm3RG5" alt=""><figcaption></figcaption></figure>

After unchecking "Preview Email Template" you will see all the HTML and CSS code that supports emails sent to customers. Make your changes, click Save, then click the box next to "Preveiw Email Template" to see the results.&#x20;

<figure><img src="/files/B8MoisvSLnvYSHDGbmuj" alt=""><figcaption></figcaption></figure>


# Step 6: Removing the VIVID NFT App from your Store

Step 7: Removing the VIVID NFT App from your Store

From your store’s admin page, navigate to the apps page. Here you will see the VIVID NFT app in the Installed apps section. Click **Delete** to remove the app.

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FDDykx8pg64lOC5x9wdMV%2F0?alt=media)

In the **Delete VIVID NFT?** popup window, click **Delete** to confirm, and remove the app from your store.

![](https://1797821614-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F98mHum0RG2IJe4V2k6w3%2Fuploads%2FFNeima1wHHUrGeBz6jUK%2F1?alt=media)

Last modified 2mo ago


# VideoCoin Block Explorer

## Intro to VideoCoin Block Explorer

A **block explorer** is a tool that people use to view all cryptocurrency transactions that are occurring on the blockchain network. The block explorer tracks and catalogs all current and past transactions. This gives the user information on the blockchain's hash rate. This also tells us the rate of transaction growth as a means of determining the network's effectiveness and reach. Many major cryptocurrencies have their own version of the block explorer.

## Where Can I find the VideoCoin Block Explorer?

<https://explorer.videocoin.network/>

## What am I looking at?

This is the main page of the Block explorer, Dashboard. In this view we can see latest blocks and transactions. On the left we have a navigation bar, we can go back to the dashboard if we are somewhere else in the explorer, go to the blocks view section and to the transaction view section.

![](/files/-LuI3Cd6VeW1DWWVIVwJ)

### Blocks View

All the latest mined blocks are shown here. We can see the block number, the block hash, how many transactions are in a block, wattage needed to mine the block and overall block size.

![](/files/-LuI4wM2UcekkIq9e6Ks)

### Block View

In this view, we have all the information that are on the blocks view with addition to the Extra Data.

Below you can see link to the transactions that are inside the block and go straight to transactions.

![](/files/-LuI5NqTQYUL4w_1bBug)

### Transactions View

All the latest transactions are shown here. We can see the type of the transaction, how long ago it was made, transaction hash, from address and to address. Last field represent how many videocoins were sent.

![](/files/-LuI5Fty95XT7g2yB3Ln)

### Transaction View

We see all the info as in the general transactions view with additions of nonce, wattage and input.

![](/files/-LuI5w1agZM8KmGdxU1Y)

### Account view

Account view represents general information about the account address. We can learn here how much VID certain address has, all transactions generated from that address alongside with all the events (Stream events).

![](/files/-LuI60ZbC4J9EmuMm0ao)

###


# How to use Ledger device with VideoCoin

Ledger Nano S and VideoCoin Ledger desktop wallet will give access to your assets in VideoCoin’s Network while securing your private key.

![](https://lh4.googleusercontent.com/QgwWEwe254Bne0VkwA736Vqk4UjInxFgFFg2GsT9gJPdWc1Y2ph_WfdHRAHp6VyIS0E18AeNrTJMJA9Pv7kRhVVIBjo7ygzqvLEf_VL1CojLJSWEy6pdNKZBWJcET394Xptl5uow)

### **Requirements:**

* A computer with at least macOS 10.9, Windows 8 (64-bit) or Linux Ubuntu 16.10 (64-bit).
* An internet connection and an available USB port.
* A ready to use [Ledger Live](https://support.ledger.com/hc/en-us/articles/360006395553) application.
* Ledger Nano S device [initialized](https://support.ledger.com/hc/en-us/articles/360006395233).

### Install the VideoCoin App on Ledger Nano S

1. Open the Manager in Ledger Live.
2. Connect and unlock your Ledger Nano S.
3. If asked, allow the manager on your device by pressing the right button.
4. Find VideoCoin in the app catalog.
5. Click the Install button of the app.
6. An installation window appears.
7. Your device will display Processing.
8. The app installation is confirmed.

### **Desktop wallet setup**

1. Download the VideoCoin wallet.
2. Install or unzip the downloaded file.

### **Accessing your wallet**

1. Open the Ledger Live app.
2. Connect and unlock your Ledger Nano S.
3. A list of VideoCoin address will be shown:

* If this your first account, only one address will be available.
* Another address will be made available on the list when the previous address is activated.
* To activate the address, you need to receive VID from another account/exchange.

4\. Once you click “Open wallet”, you will be required to confirm the address in your Ledger device. After verifying that the address on the screen matches the one in your device, use the right button to confirm.

5\. The dashboard will load your wallet informatio&#x6E;**.**

### **Support**

If you encounter any issue with your Ledger device and the VideoCoin wallet, please contact us in our Telegram group. <br>


# Worker Hub Walkthrough

This guide will show you how to setup a worker on the VideoCoin Worker Hub.

{% hint style="info" %}
**This app is an early alpha release, use at your own risk.**
{% endhint %}

### Visit the [Download Hub](https://videocoin.network/download-hub) to find the latest version of the VideoCoin Worker Hub.

### Click [here ](https://www.youtube.com/watch?v=cQ0D7z7Wcj0\&feature=youtu.be)to watch a video on how to set up a worker on the Worker Hub.&#x20;

## Step 1: Client ID Registration&#x20;

Install and launch the Worker Hub desktop app.&#x20;

You will be directed to create or login to a [VideoCoin Network Console account](https://console.videocoin.network/sign-up?role=miner) on your web browser.

![](/files/-MGowH8YV-PBdBq9gBU0)

Once logged in to VideoCoin Console, you will need to [create a new worker](https://console.videocoin.network/dashboard/workers), click "New Worker" in the Workers section

![](/files/-MGoxPMyqOabEutNcc-K)

Click on the newly set up worker and copy the Client ID

![](/files/-MGoxx16E_eAucNUfk9G)

![](/files/-MGoy-8C-RCWUGdiyNPP)

Return to the **Worker App**, click 'Continue'. Now paste your Client ID, and continue to complete Client ID Registration.

![](/files/-MGoylMZpfBE5njBmAs9)

## Step 2: Infura Account Setup

![](/files/-MGozOBrkhwcCubbvb5f)

Create a free account on [Infura.io](https://infura.io/register)

![](/files/-MGozd0ZT1YPmXlv97dh)

In the 'Ethereum' tab, click 'Create a New Project'

![](/files/-MGozr8S0z1rQVjGrdy3)

In the settings of your project, copy the 'Project ID' in the 'KEYS' section.

![](/files/-MGp-KbVZEhj6m9JA0gx)

Return to the **Worker App**, click continue. Now paste your Infura Project ID, and click continue to complete this step.

![](/files/-MGp29Gw3PxHCttbroUf)

## Step 3: Setup Wallet

In the **Worker App**, click 'Setup Walle' in the Worker Status section

![](/files/-MGp2ZRec7gyBMaNa401)

Click "Add" to setup a wallet

![](/files/-MGp2tpIfvjNnyP_0qrR)

Create a new wallet or use an existing wallet

![](/files/-MGp2wLM4RjanKB6PYeB)

## Step 4: Stake Your Worker

Now it's time to stake tokens to your worker

Your wallet will need to be funded with at least the minimum staking amount of VID tokens and a small amount of ETH to cover gas fees

In the Staking menu, enter the number or percentage tokens you'd like to stake. The minimum staking amount will be shown in this section for your reference.&#x20;

Click "Stake Tokens"

![](/files/-MGyL5hQ-Vxu7DgoWh60)

The transfer may take a few moments. You will be indicated with a green status when the stake operation is complete.

![](/files/-MGyKGIwU-o-vhPPiYBN)

You can also see your transactions and status in the Details tab.

![](/files/-MGyKOMIx0KbWwMPYPC2)

## Step 5: Start Your Worker

Navigate to the Worker section. Your Worker Status will say "Ready To Start"&#x20;

Select the number of cores you'd like to use. Click Start Worker.

![](/files/-MGyK3kL7xJLrN4zZwNy)

Wait a moment as the worker setup. The process is complete when the Worker Status shows "Worker Running".

That's it! Your worker is now live on the VideoCoin Network&#x20;

![](/files/-MGyKUqgHk1r248PtRtc)

You can visit the [VideoCoin Block Explorer](https://explorer.videocoin.network/workers) to view your worker.&#x20;

![](/files/-MGyKptjJksJLlmDP8DM)

Click on your worker in the Block Explorer to get additional details.

![](/files/-MGyJPrXct1l2SwHx1xE)


# Update to Newest Version of Worker Hub Alpha

This guide will show you how to update your Worker Hub Alpha version 0.1.0 to version 1.0.1.

This is a manual update for users using Alpha version 0.1.0.&#x20;

&#x20;This process will not be required for Worker Hub versions 1.0.1 or newer. Worker Hub version 1.0.1 and newer will allow for auto-updates.&#x20;

## Update for macOS Users

While running the Worker Hub, click the mini VideoCoin icon on the top menu bar.

Click the Click "Check Updates" in the drop-down menu

![](/files/-MJmqcjKa1b6TpkSOgSf)

You will be prompted to confirm app update in the Worker App

You're Worker App will restart with the new version. &#x20;

## Update for Windows Users

Visit the [Download Hub](https://videocoin.network/download-hub) to install a new binary.&#x20;

![](/files/-MJmrX1YuWlBsPIEtmu-)

Click the Window Button to install the latest version of the Worker Hub

Follow on-screen prompts to install the latest version of the Download Hub. Versions 1.0.1 and newer will not need to go through this process, auto-updates can be enabled directly from the Worker Hub


# Setting up a VID Worker

How to set up a VideoCoin worker

VID Workers accept video workloads from the VideoCoin Network, processes and submits it back to the network. This worker is availabe as a convenient Docker Image that can run on any platform.

{% hint style="info" %}
Platform specific binaries are available for NVidia Jetson and Raspberry Pi, you can learn more about those here
{% endhint %}

### Create an account on VideoCoin Network Console

You can sign up here [https://console.videocoin.network/sign-up](https://studio.videocoin.network/sign-up)

### Navigate to the worker tab

Login and click on the worker section

![](/files/-M8DKlsmExB9YUx4yK5O)

### Add a New Worker

Click on "New Worker" and a automatically named worker is created for you, along with a unique worker ID

![](/files/-M8DKqlUEw_4sToH6XnU)

Click through on the worker name and you can now see the client ID

![](/files/-M8DKwm2XaCAPKaS-j4R)

Save this client ID

### Get the VideoCoin Worker Docker image

You can find the Docker image [here](https://hub.docker.com/r/videocoinnetwork/worker).

![](/files/-M12LaUOtQu5Ty_VCGjJ)

```
docker pull videocoinnetwork/worker
```

### Create a Configuration File

```
KEY={"address":"799d259411ed9355e403e91398c0855bb5272117","crypto":{"cipher":"aes-128-ctr","ciphertext":"84810fe84b4fbc24228884a6a08119472e14f7afb0944ee57141ab52c2c6f815","cipherparams":{"iv":"77feb1d4fb24ee317dfbf90d9e785e6e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c20e7612270c99bcfae8938801832134315c16a8563f2d544f7cd86a9e3b472f"},"mac":"2d4f061e9494b2dd4f555892e28f4aae49a289250e05fdd087333747c395da6f"},"id":"6b639617-620c-4d9b-a68b-eae68cd2870a","version":3}
SECRET=741839f346d6e8126ae38ee76a96fd12
CLIENT_ID=<Your_Client_ID>
```

KEY here is the contents of your VideoCoin Wallet Keyfile.&#x20;

SECRET is the password for the keyfile.

Save it into a file called vars.env

{% hint style="info" %}
Your keyfile and secret are used locally on the worker to sign transactions.
{% endhint %}

### Generating a Key and triggering the bridge

VideoCoin Wallet is compatible with Ethereum, so you can use a standard wallet create tool like

```
ethkey generate
```

Once you have the key, you'll need VID on the native VideoCoin Blockchain.&#x20;

You can use your publisher wallet to send in ERC20, which is automatically bridged to a native VID.

Once the native VID is bridged and available, you can move it into your Worker address using the VideoCoin Bridge tool. Since the bridge tool is going to be public at the Everest Release,  you can send an email to <support@videocoin.io> to get your transaction processed.

### Run the worker

```
docker run --rm --env-file vars.env videocoinnetwork/worker:latest
```

Thats it! Your worker will now be waiting to receive work


# VID Pool Software

Software for sharing transcoder rewards with delegators.

### Background

VideoCoin Network workers get rewarded for the work they do. The amount of work they will get is related to the amount of VID tokens staked to the workers, including staked tokens from delegators. In order to incentivize delegators workers have to share payouts with them.

The Software in this repository is meant to share rewards with delegators and should be run by transcoder periodically.

### Install

Use `docker pull registry.videocoin.net/vidpool/vidpool:latest`.

### Build

To build use:

```
make build
```

You will get a binary for the current platform.

Or build a docker image with:

```
make vendor
make image
```

### Configuration

Config example:

```
{
    "DataDir": "/tmp/vidpooldata/",
    "KeyFile": "worker-key.json",
    "Password": "",
    "StreamManagerAddress": "0xee714E6f2686929AE33614aAA332D67EaC9f5ede",
    "StakingManagerAddress": "0xe535420fD393C202c5F47aAfDc210fF36f697584",
    "WorkerChainURL": "https://symphony.dev.videocoin.net/",
    "PaymentsChainURL": "https://rpc.tst.publicmint.io:8545/",
    "LogLevel": "debug",
    "PaymentURLSpec": "https://explorer.tst.publicmint.io/tx/%s/token_transfers"
    "Auth": {
        "ClientID": "69cf5e81-5301-414f-9cd9-a39bbe06c0ff",
        "AuthURL": "d.dev.videocoin.network:5008"
    }
}
```

**DataDir**

Application will need to store small amount of the persistent data, for transactions recovery and latest processed block.

**KeyFile**

Key in ethereum v3 format, encrypted with **Password**. It will be used for transactions on **PaymentsChain**.

Path must be absolute or relative to configuration file.

**StreamManagerAddress**

Used as a source for rewards.

**StakingManagerAddress**

Used as a source for delegation shares and transcoder reward.

**BlockContractAddress**

Application needs to store last processed block in a safe place. By default we will store this block in a file inside **DataDir**, but there is also an option to deploy a contract on videocoin blockchain and use it for storage.

To deploy:

```
./build/vidpool -c _assets/config.json deploy
```

Output:

```
Contract address: 0x6B14dfF51a349d3Eb430f48A783EBaA83153dbeB
```

If BlockContractAddress is defined application will be using a specified contract, otherwise, it will fall back to a file.

**WorkerChainURL**

ETH blockchain with StreamManager and StakingManager, in practice VideoCoin blockchain.

**PaymentsChainURL**

ETH blockchain where a worker has funds, in practice PublicMint blockchain.

**Auth**

**ClientID** is the one worker received in the VideoCoin console.

### Setup

Check out the dedicated guide for worker setup at [Setup](https://docs.videocoin.network/videocoin-pool-software/worker-setup-vidpool).

### Usage

**Public Mint integration**

To share payments with delegators you can use:

```
./build/vidpool -c _assets/config.json payout --dry-run
```

With `--dry-run` option transactions will be created but they won't be sent to blockchain To send transactions - remove `--dry-run` option.

User can specify `--csv=<file to path>` flag, in such case detailed information will be saved into csv file. If the file already exists - the file will be truncated, if doesn't exist - file will be created.

**Ethereum mainnet integration**

Since v0.2.0 release we support paying out to stakers flat percent over the period of time. For example, 8% over a year.

To learn more about the inner structure of such payments see [flat-payments](https://docs.videocoin.network/videocoin-pool-software/vidpool-flat-payments-percentage-based-payment-engine).

To make payments, setup configuration, and run:

```
vidpool flat --config <your config>
```

To see amounts before making payments use:

```
vidpool flat --config <your config> --dry-run --csv out.csv
```

### License


# VidPool - Flat Payments: Percentage-based payment engine

Unlike the main implementation that makes payments based on worker activity (processed chunks), this payment engine pays rewards based on flat percent.

### Design

**Unit of time**

Payment will be made per time span from the time delegation was made. For example, if a delegation was made 10 days ago, we will pay for 10 days. The caller of this application will have to provide the rate to the engine, and the engine will calculate per block rate based on the time passed.

Example:

| Param               | Value          |
| ------------------- | -------------- |
| Rate                | 0.1 per month  |
| Time span           | 10 days        |
| Total rate per span | .033 = \~0.1/3 |

**Shares**

After we got rate per block we need to convert this rate to coins, this needs to be done in a way that reflects changes in delegation ratios that were made during this time.

For the start we need to obtain the state of the delegations at the starting block, we do it either by traversing Locked/Unlocked events of the StakingManager or by recovering snapshot (as an optimization).

Delegation state will be stored in the following struct:

```
type DelegationState struct {
     // Start is a block when this delegation state became valid.
     // If there was a previous DelegationState then current Start is equal
     // to previous End+1
     Start *big.Int
     // End is the last block when this delegation was valid.
     End *big.Int
     // Amount is a total amount of all delegations.
     Amount *big.Int
     // List of delegation for each delegator.
     Delegations []Delegation
}

type Delegation struct {
     Address common.Address
     Amount *big.Int
}
```

Delegation state is completed when the start and end are both not nil. The end may become not nil either if this is the last block in the span for which we are running payments workflow, or if delegation state changed.

Next, we need to iterate over all delegation states and accumulate payments. For each delegation in the delegation state, we get the share.

Example:

* Delegation state: Start: 10 End: 12 Amount: 100 Delegations:
  * Address: 0x01 Amount: 40
  * Address: 0x02 Amount: 60

| Param                      | Value                                       |
| -------------------------- | ------------------------------------------- |
| Time between End and Start | 2 month                                     |
| Montly rate                | 0.1                                         |
| Rate per delegation state  | (End - Start)\*0.1 = (12 - 10) \* 0.1 = 0.2 |
| Tokens amount              | 0.2 \* Staked amount                        |
| Tokens for 0x01            | 0.2 \* 40 = 8                               |
| Tokens for 0x02            | 0.2 \* 60 = 12                              |

**Transactions**

Transactions will be made on mainnet, using the transfer method of the ERC20 interface. The application will provide crash-recovery by dumping transactions on disk before sending them to the network. Once the application confirmed that transactions were mined those transactions will be removed from disk.

If the application fails in the process or interrupted by the user, the next start application will recover pending transactions and check the state on the blockchain. If they are not found application will resend them, otherwise remove transactions from recovery-log.

### How to use

**Setup**

See the [configuration file](https://github.com/videocoin/vidpool/blob/master/_assets/erc20.json). `EscrowAddress` and `TokenAddress` are the same that we are using in other applications.

Worker account must have ether on goerli network and ERC20 tokens if it will be used for real transactions.

Use `Rate` struct to adjust payment rate to the required value, `Unit` is a unit of time, can be one of the month, year, day, or hour.

```
"Rate": {
  "Decimal": 0.1,
  "Unit": "month"
}
```

**Stake**

Use any convenient method to delegate some tokens to the worker. I am using `seth` in the following way:

```
erc20=0xc35550282b2a7F2148dD4513c70f9dAA1AFA277C
escrow=0x6bB9DF55B2c7DE181DB2F953B3f5e15baC7e1523
worker=0xa919396182bd6c536456abe056420308d53bdcc5
amount=$(seth --to-wei 100 ether)

seth send $erc20 "increaseApproval(address,uint256)" $escrow $amount
seth send $escrow "transfer(address,uint256)" $worker $amount
```

**Payments**

Once something is staked application will be able to discover that stake and make correct payments.

```
./build/vidpool -c _assets/erc20.json flat

+--------------------------------------------+---------------------------------------------------------------------------------------------------+------------------+
| DELEGATOR                                  | TRANSACTION URL                                                                                   | AMOUNT           |
+--------------------------------------------+---------------------------------------------------------------------------------------------------+------------------+
| 0x218431C2e6B7A8d6aF5eF18F3Ad63B23c614889F | https://goerli.etherscan.io/tx/0x0ea28b977604c88ed2ea7a72eab3027e285fd7d563376bf765da354ad1f75cff | 2392313546420000 |
+--------------------------------------------+-----------------------------
```


# Worker Setup - VidPool

### Configuration

TODO provide a centralized place for production configuration.

Below is the example of the configuration file.

```
{
    "DataDir": "/state/",
    "KeyFile": "<PROVIDE PATH TO THE WORKER KEY>",
    "Password": "<PASSWORD FOR WORKER KEY>",
    "StreamManagerAddress": "0xee714E6f2686929AE33614aAA332D67EaC9f5ede",
    "StakingManagerAddress": "0xe535420fD393C202c5F47aAfDc210fF36f697584",
    "WorkerChainURL": "https://symphony.dev.videocoin.net/",
    "PaymentsChainURL": "https://rpc.tst.publicmint.io:8545/",
    "LogLevel": "debug",
    "PaymentURLSpec": "https://explorer.tst.publicmint.io/tx/%s/token_transfers",
    "Auth": {
        "ClientID": "<PROVIDE CLIENT ID FROM VIDEOCOIN CONSOLE>",
        "AuthURL": "d.dev.videocoin.network:5008"
    }
}
```

### Image

Pull image using:

```
docker pull registry.videocoin.net/vidpool/vidpool:latest
```

### Persistent state

The application requires directory for persisting state for the safety and correctness of the application. Make sure to mount a directory from your local machine to docker instance, such as:

In the example below I created a directory `/var/vidstate` on my local machine. You can also put a config as `config.json` inside this directory, and application will pick it up.

```
docker run -ti -v /var/vidstate:/state -w /state registry.videocoin.net/vidpool/vidpool payout
```

### Execution safety

VideoCoin pool software keeps track of the executed payouts. It does it by tracking last processed block. In the default configuration last processed block is stored on your file system. If it will be lost - manual intervention will be required to avoid processing same rewards twice.

In order to make it more robust you can deploy a simple smart contract on VideoCoin blockchain, the sole responsibility of this contract is to keep last processed block.

```
docker run -ti -v /tmp/vidconf:/state -w /state registry.videocoin.net/vidpool/vidpool deploy
```

After the contract is deployed, please update configuration parameter `BlockContractAddress`.


# Delegated Staking

Delegate VID Tokens to Secure VideoCoin Network and get rewarded

{% hint style="danger" %}
This method is now deprecated and not supported. Refer Staking App (<https://staking.videocoin.network>) for more details
{% endhint %}

VID Token holders can actively participate in securing the VideoCoin network by delegating portion of their tokens to transcode workers. The transcoding work is distributed to workers in proportion to the total stake on each worker. The total stake of a worker includes the self stake and delegated stake by one or more delegators. The delegated stake can be withdrawn. However the VID tokens are transferred to the holder's account after expiry of the unbonding time which is currently set at 21 days.

Delegators will be rewarded by distributing portion of the rewards earned by the worker. Please refer the document  [reward distribution](/staking-vid-token/reward-distribution) for the details.<br>

Delegation and withdraw can be performed through a command line tool called staker that is currently supported on Linux platforms. Follow the below steps:

* Download the command line tool *staker* (Contact VideoCoin support for the download link)
* Setup a configuration file in the format of Ethereum key store file that contains private key and public key (password protected)
* Run the delegate or withdraw commands as shown in the following sections.

## Setup

The staker tool needs to communicate with the Ethereum mainnet to access VID tokens.\
You can use a free or paid subscription from Infura to access Ethereum through  web interace. Please visit the Infura website ([https://infura.io/product)](https://infura.io/product) and obtain a your ID and make it available to the staker tool using an environment variable as follows.

```
export ETH_RPC_URL=https://mainnet.infura.io/v3/<Your Project ID>
```

Prepare an Ethereum key file that contains your private key in encrypted form. Following is a sample key file

```
{
   "address":"958636174482ee1f5e42276c72541dd3f7e5b185",
   "crypto":{
      "cipher":"aes-128-ctr",
      "ciphertext":"92458a6b9dbbacdecd45089f55d89dbb15b794d03c109f7658f133eb4472b510",
      "cipherparams":{
         "iv":"628bc4e04581d75c6ba3fe808a02caf6"
      },
      "kdf":"scrypt",
      "kdfparams":{
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"0e853c5a885e1623c35e7692684888dac52bf893fa87ef83c4da167b5150b738"
      },
      "mac":"fb658200cce411e1b67ec07fe1dad56d22995a5009eab5c0449eb5dba49718de"
   },
   "id":"49ef8948-44bc-43c3-ba5d-f7e9bd386314",
   "version":3
}
```

## Delegation Process <a href="#delegation-process" id="delegation-process"></a>

Currently the delegation is a two step process. First step is to move the erc-20 VID tokens form Ethereum main net to VideoCoin network. The second step is to stake native VID on the worker that you choose.\
&#x20;\
Use the following command to transfer VID tokens from Ethereum main net to VideoCoin network:

```
$ videocoin fund amount -k <key file> -s <password>
```

Use the following command to delegate VID to a worker:

```
$ staker delegate add worker.PuK amount -k <key file> -s <password>ParameDescription
```

| Parameter  | Description                                         |
| ---------- | --------------------------------------------------- |
| worker.PuK | Address of worker for which delegation is requested |
| amount     | Amount of VID  to be delegated                      |

If the worker is not registered with the VideoCoin, the command fails. VideoCoin explorer can be used to obtain the list of workers registered with the VideoCoin Network

## Withdraw Process <a href="#withdraw-process" id="withdraw-process"></a>

Use the following command to withdraw stake from a worker:

```bash
$ staker delegate withdraw worker.PuK -k <key file> -s <password>
```

| Parameter  | Description                                                 |
| ---------- | ----------------------------------------------------------- |
| worker.PuK | Address of worker from which delegator is withdrawing stake |

{% hint style="info" %}
The withdrawn stake is deposited to delegators account only after expiry of unbonding period
{% endhint %}

Use the following command to complete pending unbonding requests that are initialted in the previous step:

```
$ staker withdraw complete -k <key file> -s <password>
```

Use the following command to transfer VID from VideoCoin network ERC-20 VID tokens on Ethereum main net:

```
$ staker withdraw <amount> -k <key file> -s <password>
```

| Parameter | Description                                                                            |
| --------- | -------------------------------------------------------------------------------------- |
| amount    | Amount of VID  to be transferred from VideoCoin network to erc-20 on  Ethereum Mainnet |


# Worker Self Staking

Tutorial on using VideoCoin staker tool

VideoCoin workers can participate in transcode mining by self staking a minimum amount of their tokens. The transcoding work is distributed to workers in proportion to the total stake on each worker. The total stake of a worker includes the self stake and delegated stake by one or more delegators. The self stake can be withdrawn. However the VID tokens are transferred to the holder's account after expiry of the unbonding time which is currently set at 21 days. <br>

Staking and withdraw can be performed through a command line tool that is currently supported on Linux platforms. Follow the below steps:

* Download the command line tool *staker* (Contact VideoCoin support for the download link)
* Sets up a configuration file in the format of Ethereum key store file that contains private key and public key (password protected).&#x20;
* Run the self stake or withdraw commands as shown in the following sections.

## Setup

The staker tool needs to communicate with the Ethereum mainnet to access VID tokens.\
You can use a free or paid subscription from Infura to access Ethereum through  web interace. Please visit the Infura website (<https://infura.io/product>) and obtain a your ID and make it available to the staker tool using an environment variable as follows.

```
export ETH_RPC_URL=https://mainnet.infura.io/v3/<Your Project ID>
```

Prepare an Ethereum key file that contains your private key in encrypted form. Following is a sample key file

```
{'address': 'fd41a83c713bd0d612c0ca0fd078ec6cc5d37cfb',
 'crypto': {'cipher': 'aes-128-ctr',
            'cipherparams': {'iv': '47db6518e4ecc7e8c5800722f173e214'},
            'ciphertext': '2d09d0c77a4a00cfb59fe5cbe0cf867c32b04e725ccacca52e96d3c1bb70a067',
            'kdf': 'scrypt',
            'kdfparams': {'dklen': 32,
                          'n': 4096,
                          'p': 6,
                          'r': 8,
                          'salt': '2f1790fe23a3a1957b75d73f1be8d4814129e512b9e9956687774b4471c3be7f'},
            'mac': '008c38f40bdb4c0d5faaa30f9e55c4798974447fdd9c7f8535914e323c2268d8'},
 'id': '23f7b36d-ff7b-4a9d-954e-06ed3fa7a1fa',
 'version': 3}

```

## Self Staking Process <a href="#delegation-process" id="delegation-process"></a>

Before using the staker tool to self-stake the VID tokens, first step is to move  erc-20 VID tokens form Ethereum main net to VideoCoin network. Then you can stake VID tokens as as described below.\
&#x20;\
Use the following command to transfer VID tokens from Ethereum main net to VideoCoin network to use as transaction fee/gas:

```
$ staker fund <amount> -k <key file> -s <password>
```

| Option | Description                        |
| ------ | ---------------------------------- |
| amount | VID token amount to be transferred |

Use the following command to self stake VID tokens:

```
$ staker stake add <amount> -k <key file> -s <password>
```

| Option | Description                     |
| ------ | ------------------------------- |
| amount | Amount of VID  for self staking |

### Example usage of the commands

Transfer VID tokens from Ethereum main net to VideoCoin network

```
$ staker fund 100 -k worker-0.json -s ""
```

Self stake VID

```
$ staker stake add 333000 -k worker-0.json -s ""
```

## Withdraw Process <a href="#withdraw-process" id="withdraw-process"></a>

Currently withdraw is two step process. The fist step is issue a withdraw request(unbonding request). The second step is wait for unbonding period to elapse and issue a command to complete withdraw. Then native VID from VideoCoin network and trnasfer to ERC-20 VID tokens on Ethereum main net.&#x20;

Use the following command to issue withdraw request:

```bash
$ staker stake withdraw <amount> -k <key file> -s <password>
```

| Option | Description                   |
| ------ | ----------------------------- |
| amount | Amount of stake  to  withdraw |

{% hint style="info" %}
The withdrawn stake is deposited to worker's account only after expiry of unbonding period
{% endhint %}

Use the following command to complete pending unbonding request that transfer staked tokens to native VID:

```
$ staker stake withdraw complete -k <key file> -s <password>
```

Use the following command to check the staking balance

```
$ staker stake  -k <key file>
```

Transfer native VID from VideoCoin network  to ERC-20 VID tokens on Ethereum main net.

```
staker withdraw <amount> -k <key file> -s <password>
```

| Option |   | Description                                                                  |
| ------ | - | ---------------------------------------------------------------------------- |
| amount |   | Amount of VID  to be transferred to Ethereum main net from VideoCoin network |


# Staking with the Genesis Staking Program

## **Step 1: Connecting your Wallet to the VideoCoin Staking Page**

Visit [staking.videocoin.network](http://staking.videocoin.network)

Click “Install MetaMask Extension” and add the MetaMask extension to your browser

![](https://lh6.googleusercontent.com/iVztPJtvnA_66yGwT3CuslzB-Fjf0pc6fIaDiAuz0xwjaES3qRLA-MzKiyNtXtplp2jaZ4yu3FdCf4XyTnEOttEsxmTnoFySYLNYWQY86qQNr_o2KeJY4AIsk0-VrVpu07zEQo56)

Follow the prompts to download and add the MetaMask extension to your browser. If you need help adding the extension, [follow these steps from the MetaMask support page](https://metamask.zendesk.com/hc/en-us/articles/360015489531-Getting-Started-With-MetaMask-Part-1-)

*Note: If you already use MetaMask you can choose to use your existing wallet or create a new one*

## **Step 2: Add VID as a Custom Token to your MetaMask Wallet**

![](https://lh3.googleusercontent.com/MMdaiJwRYOoLTzbKHKle5Y7ku4MqBwePK_fxIkk72WktANF2hsfUina-D1x6PUTGf7szr2CTki5aKJtFAHcjddaY9lIgP4luTSejv9ecyy-kDZMQBZjHtRsXoTCL3aMTJYsP0jyE)

Open the MetaMask browser extension

In the MetaMask menu, click “Add Token”&#x20;

Click “Custom Token” tab

Add the following VideoCoin “Custom Token” information:&#x20;

* Custom Token Address: **0x2c9023bbc572ff8dc1228c7858a280046ea8c9e5**
* Token Symbol: VID
* Decimal:18

## **Step 3: Connect and Finalize Setup**

Return to staking.videocoin.network and reload the page.

Click Connect when you are prompted to connect your MetaMask Account.

You have completed setting up your account and are now ready to stake in the Genesis Pool

*Note: Be sure to add VID tokens to your wallet as well as a small amount of ETH to cover GAS, we recommend .00001 ETH*&#x20;

## **Staking Tokens with the Genesis Worker Pool**&#x20;

From the main page at [staking.videocoin.network](http://staking.videocoin.network), select the Genesis Staking Pool from the list of “Available Worker Pool Nodes”

![](/files/-MAgXoQKGwOmIYosYpJy)

Add the number of VID token you’d like to stake

![](/files/-MAgXvc1GpK2kdvDk0yK)

Click Stake Tokens and confirm your transaction

![](/files/-MAgYI5HBmkLZB29mrFi)

And you’re done! After the transaction has been confirmed, you will be officially staking with the Genesis Worker Pools

## **Unstaking Tokens**<br>

To unstake tokens select the Genesis Worker Pool, click the “Unstake” button<br>

![](/files/-MAgVaZV3bZk8q_JecRF)

Select the number of tokens you’d like to unstake, then click “Unstake Tokens”

If you have questions visit the Worker section of the [VideoCoin Forums page](https://forum.videocoin.network/c/Workers/7)<br>


# Reward Distribution

Tutorial on using vidpool tool

On VideoCoin network workers are paid for work they perform. Amount of work that each worker gets is proportional to the amount of stake that the worker holds on system, including stake from delegators. In order to incentivize delegators workers have to share payouts with them.

A worker, while registering with the VideoCoin network, advertises the percentage of payouts that it will share with delegators. The calculated rewards are distributed proportional to the delegated stake. Self stake is also used for the calculation and the worker will distribute the reward related to self-stake to it self.&#x20;

The rewards from worker's payout are accumulated and distributed to delegators by running the VideoCoin Pool tool(vidpool) periodically by the worker.

The VideoCoin Pool tool (vidpool) tool is available as a docker image. Use the following command to pull the image.

```
docker pull registry.videocoin.net/vidpool/vidpool:latest
```

Prepare a configuration file required by the vidpool. A sample file is shown below. The values for the keys either obtained from VideoCoin support team or generated by the user as indicated in the table.

```
{
    "DataDir": "/tmp/vidpooldata/",
    "KeyFile": "worker-key.json",
    "Password": "",
    "StreamManagerAddress": "0xee714E6f2686929AE33614aAA332D67EaC9f5ede",
    "StakingManagerAddress": "0xe535420fD393C202c5F47aAfDc210fF36f697584",
    "WorkerChainURL": "https://symphony.dev.videocoin.net/",
    "PaymentsChainURL": "https://rpc.tst.publicmint.io:8545/",
    "LogLevel": "debug",
    "PaymentURLSpec": "https://explorer.tst.publicmint.io/tx/%s/token_transfers"
    "Auth": {
        "ClientID": "69cf5e81-5301-414f-9cd9-a39bbe06c0ff",
        "AuthURL": "d.dev.videocoin.network:5008"
    }
}
```

| Key                   | Description                                                                                                                                                                                                                                                                                                                                                               |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| DataDir               | Application will need to store small amount of the persistent data, for transactions recovery and latest processed block.                                                                                                                                                                                                                                                 |
| KeyFile               | Key in Ethereum v3 format, encrypted with password. It will be used for transactions on PaymentsChain. Path must be absolute or relative to configuration file.                                                                                                                                                                                                           |
| StreamManagerAddress  | Used as a source for rewards. Obtain it from VideoCoin support site                                                                                                                                                                                                                                                                                                       |
| StakingManagerAddress | Used as a source for delegation shares,  Obtain it from VideoCoin support site                                                                                                                                                                                                                                                                                            |
| BlockContractAddress  | <p>Application needs to store last processed block in a safe place. By default we will store this block in a file inside DataDir, but there is also an option to deploy a contract on VideoCoin blockchain and use it for storage. If you want to store the last processed block number on blockchain, run the following command:</p><p>vidpool -c config.json deploy</p> |
| WorkerChainURL        | This URL gives access to VideoCoin blockchain. Obtain it from VideoCoin support site                                                                                                                                                                                                                                                                                      |
| PaymentsChainURL      | This URL gives access to PublicMint blockchain. Obtain it from VideoCoin support site                                                                                                                                                                                                                                                                                     |
| ClientID              | ClientID can be obtained from VideoCoin console while creating a worker.                                                                                                                                                                                                                                                                                                  |
| AuthURL               | d.dev.videocoin.network:5008. Obtain it from VideoCoin support site                                                                                                                                                                                                                                                                                                       |

The vidpool tool can be run to distribute the rewards accumulated until the current mined block using the following command. The worker can optionally specify a block number until which the accumulated rewards calculated for distribution. The "from" block number i.e. starting block number for calculating reward accumulation is obtained from the persistant storage specified by either from a file stored in DataDir or contract located at BlockContractAddress on the VideoCoin blockchain.

```
vidpool -c <config file> payout [--dry-run] [--to block]
```

| Option  | Description                                                                                       |
| ------- | ------------------------------------------------------------------------------------------------- |
| c       | Configuration file                                                                                |
| dry-run | Reward distribution transactions are generated for display only i.e.  won't be sent to blockchain |
| `to`    | The block until which accumulated rewards are calculated for distribution                         |

The distributed rewards will be deposited in the delegators accounts on PublicMint blockchain.\
With --dry-run option, transactions will be created but they won't be sent to blockchain.\
Following is an example output:

```
+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+--------+
| DELEGATOR                                  | TRANSACTION URL                                                                                                          | AMOUNT |
+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+--------+
| 0x262B68f6A7A1bE373fd36BDE19C9EC7fF875A81b | https://explorer.tst.publicmint.io/tx/0x8792808a086030c5cb323e7bb4b81df38f54deffac69bd8e26934812ee158054/token_transfers | 220    |
| 0x08a5077C9Be4C9e5a362f8b92B71a9a10E1d9934 | https://explorer.tst.publicmint.io/tx/0x1626c61644f656ca2b89e2baf3f9c46e9fe90bc7349203eedfaf15cb6c4018e3/token_transfers | 220    |
| 0xd4fb38060f68008e0aAcF49eC507AC9F62117C6C | https://explorer.tst.publicmint.io/tx/0xe7c14f637ad6ad21bb974637c32538a403efee89b0cc42308276975c8264af90/token_transfers | 220    |
| 0xc2cdA70eC0fE6B9f0918b6fb546124973dCb7Ad2 | https://explorer.tst.publicmint.io/tx/0xb17d1221e968a42a351450b260340b7ba9fafc54b18f3c92fc4b22764320c91d/token_transfers | 220    |
| 0x9D36BDF7B1420dDA449155dff434ce44D539E4f8 | https://explorer.tst.publicmint.io/tx/0xfdf477010a8c70be3f62b144a6503d98de3ed7d4031790101a2f248940e67c96/token_transfers | 220    |
+--------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+--------+
```


# FAQ

Overview: Vivid Labs / VIVID Platform / VID Token

What is Vivid Labs?

Vivid Labs is the producer of VIVID, the next-generation NFT publishing platform that allows anyone to create, manage, and sell advanced NFTs. Powered by the VID token, VIVID enables new use cases and business models evolving NFTs into complete media experiences. Vivid Labs’ website is found at [www.VividLabs.com](http://www.VividLabs.com).

Why is Vivid Labs important?

NFTs are exploding and their business potential is unlimited. NFTs gained enormous traction in 2021, merging the digital art market with blockchain technology. Since early in the year, NFTs have taken hold in numerous other industries, led by gaming, sports, and music, but rapidly exploding into virtually every commercial sector. It’s clear that NFTs are headed towards mainstream adoption, with people ranging from famous artists to celebrities, to retail brands large and small, to small-scale creators promoting and utilizing this technology on a massive scale.

With the VIVID publishing platform, Vivid Labs is introducing a decentralized SaaS solution to enable all businesses to easily set up NFT marketplaces that mint and sell advanced, multimedia NFTs, and are compatible with all major chains and marketplaces.

VIVID is the technology platform the industry has been waiting for to rocket the business of NFTs to the next level.

Who is on the team behind Vivid Labs?

The Vivid Labs team of media, cloud, and blockchain experts has been centrally involved in the development of video, cloud, network and content applications, platforms and services for some of the biggest names in the media and technology industries, including Intel, Cloudera, Disney-ABC, Paramount, Technicolor, Fox, Sony, NBCUniversal, DIRECTV, and AT\&T.

Most notably, Vivid Labs was founded and is led by famed entrepreneur Halsey Minor, a technology visionary behind some of the greatest successes in enterprise computing, anticipating “what’s next” in enterprise architecture and technology adoption. His companies have created over $270 Billion in cumulative value, and he’s built a NASDAQ 100 company from scratch. These companies include CNET, Salesforce, Google Voice, Vignette, OpenDNS, and the crypto exchange Uphold.

What powers the VIVID Platform?

You do! The decentralized VIVID platform mints the NFTs, produces the media assets (audio, video, images) in the NFTs, and securely encodes them on its blockchain platform that is powered by the VID token. The VID token is an ERC-20 utility token using proof-of-stake optimization to determine which workers on the platform perform the work. Anyone who obtains the VaID token (available on Kucoin, Bittrex, and Uniswap) can support Worker nodes through staking, and receive rewards for doing so.

Where can I obtain the VID token?

The VID token trades on KuCoin, Bittrex, and Uniswap.

How can I stake my VID tokens and what rewards are available?

Details may be found on <https://www.stakingrewards.com/earn/videocoin/>.

Why is the VID token on the exchanges and stakingrewards.com called “VideoCoin”?

Vivid Labs began as the VideoCoin project when it first focused on building its robust and massive decentralized video processing infrastructure powered by the VID (“VideoCoin”) token. Today this infrastructure (which was called the VideoCoin Network) is the foundation of the full-stack tech solution that makes turnkey NFT publishing possible with the VIVID platform.

The project is in the midst of rebranding the former VideoCoin Network digital presence as VIVID, but even when that completes, the underlying token that powers this foundation will remain with the ticker symbol VID, and the name VideoCoin will continue to be seen on token listings next to that ticker. But be assured: the VID token now powers the VIVID platform from Vivid Labs!

What is the difference between Vivid Labs and the VIVID Platform?

Vivid Labs is the project name, and represents the company responsible for the software platform. VIVID is the product name for the platform itself, which comes in two flavors:

VIVID Open, an open-source, turnkey NFT publishing platform VIVID Pro, a paid version that implements numerous additional capabilities beyond those found in VIVID Open

The VIVID Platform In Depth

VIVID = NFTs for Everyone

VIVID is a next-generation NFT publishing platform that allows anyone to create, manage, and sell advanced NFTs. Powered by the VID token, VIVID enables new use cases and business models evolving NFTs into complete media experiences.

The VIVID platform makes it easy for anyone to rapidly create an NFT marketplace with all the core capabilities of NFTs.

VIVID removes the complexity and risk from NFT marketplaces by streamlining the basic minting of NFTs and storing them using our unique cryptographic methodology on partner NFT.Storage/IPFS/Filecoin’s robust, massively distributed storage network. This ensures the security and resiliency of NFTs minted using the VIVID platform, unlike many other NFT platforms whose tokens and underlying assets are both subject to loss or breakage using ordinary methods on often-proprietary storage platforms.

VIVID creates NFTs from any type of media, including JPEGS, video, audio and more. Its advanced decentralized video processing infrastructure handles the complex tasks of video encoding and transcoding, and cost-effectively processes video of any length and format – from TikTok videos to feature-length movies.

Further, VIVID integrates a currency-agnostic payment system (through payment provider partner Public Mint) that removes payment friction and opens NFTs to the general market by enabling transactions in cryptocurrency, or by credit card or ACH in any fiat currency.

What’s the difference between VIVID, VIVID Open, and Vivid Pro?

VIVID is the overall NFT publishing platform.

VIVID Open is the open-source version, available for free to anyone, that implements all the core functionality needed for a basic NFT marketplace. This version supports the ERC-721 token standard.

VIVID Pro is the paid version, and extends VIVID Open with many advanced features not found elsewhere, such as multi-asset NFTs that can encapsulate any media file format, a DRM approach that allows flexible DRM permissioning on an individual asset basis, as well as the ability to continuously update an NFT even after sale or resale. VIVID Pro also provides export of individual NFT assets. We call these advanced capabilities “NFT+”. VIVID Pro supports both the ERC-721 and ERC-1155 token standards.

NFT.Storage/IPFS/Filecoin integration

VIVID NFTs are stored on partner Filecoin’s NFT.Storage network, with its enormous capacity, reliability, and power to handle storage on a massive scale. This ensures that NFTs minted using the VIVID platform will have robust resiliency and longevity, unlike many NFTs currently being minted on other platforms. VIVID NFTs won’t break or vanish if the marketplace or provider disappears or shuts down.

What is NFT+?

NFT+ is Vivid Labs’ name for the powerful NFTs the VIVID platform produces. NFT+ enables several unique advanced features, transforming ordinary NFTs into rich, programmable multimedia experiences. Vivid Labs sees NFTs as going well beyond today’s notion of mere digital collectibles, where 1 NFT equals 1 asset. We reimagine NFTs as storytelling media, capable of weaving multiple elements into a compelling and ongoing narrative over time.

What are the unique features of NFT+?

Multi-format and Multi-asset NFTs created in VIVID’s NFT+ format can contain any number of media files, of any file type, together in a single NFT. So they are multi-format, and multi-asset.

Updateable NFT+ are also updateable throughout their lifespan – even if they’ve already been minted or sold, further increasing their value. For instance, a fan who purchased an artist’s music album as an NFT+ can add additional photos, video clips, and other media to the existing NFT over time, personalizing it to their own experience.

Flexible, On-chain DRM With NFT+, a creator or publisher can assign permissions to each included media asset, providing great flexibility. Assets can be fully unlocked (i.e., no purchase required to view), or conditionally locked to limit it to, say, a certain number of views of a video, or viewing over a certain “windowed” time period, or a certain number of resales. And different permissions can be assigned to each asset individually. This mimics typical DRM schemes found in other media formats, implemented on a powerful asset-by-asset basis – and it travels with the NFT+ across resales.

Resiliency VIVID uses the formidable Filecoin network to store both the NFT+ and its underlying media assets. This provides extremely robust, resilient storage to protect the NFT+ from breakage due to storage provider or marketplace unavailability, shutdown, or loss.

Multi-chain/Multi-market Compatibility The VideoCoin Network at the heart of the VIVID platform supports and is compatible with all major blockchains – Ethereum, Solana, Palm, Polygon, etc. This means that VIVID NFT+’s can be exported to marketplaces built on any of those chains, preventing lock-in. When sending to an external destination marketplace, VIVID will export whichever assets in the NFT+ are supported by the destination.

How is NFT+ different from ordinary NFTs?

With NFT+, creators and publishers can compile multiple media assets, of any type, into a single NFT. This provides a “master container” of media elements that can be extracted and exported to any external marketplace that supports those particular asset types (for example, the marketplace might handle JPEGs and MP4 videos but not 3D or PDF files).

NFT+ allows the creators to build a multi-asset narrative that combines as many elements as they want, of any media type.

For example, if a music artist wanted to publish an album, turning each individual track into an NFT would be a complicated and tedious process. And, the tracks would not be tied together in any way – each track would exist as an individual and independent NFT. But with NFT+, the artist can combine all the tracks into a single NFT, and also add cover art, liner notes, photos, “in the studio” videos, and more, to enhance the experience and its value. This is something that simply cannot be done with ordinary NFTs on any other platform. VIVID makes this complex process easy through the unique multi-format/multi-asset property of NFT+.

What are the benefits to artists/creators, brands, publishers, retailers?

VIVID’s advanced features and ease of use directly benefit artists and creators, allowing them to focus on their creative efforts, and offloading the technical aspects of NFT creation. Moreover, as a publishing platform, VIVID also simplifies the significant amount of work required to list and sell an artists’ NFT on a marketplace.

Brands, publishers, and retailers can take advantage of NFT+ in a number of ways. NFTs can be pre-loaded with a range of compelling media content available at initial sale, perhaps tied to a physical object like a sneaker or a handbag. Then, they can exploit the updateable feature of NFT+ to continue to add content over time, maintaining a precious connection with the buyer/owner and extending the value of the NFT.

Wait - how can you make an updateable NFT? Aren’t NFTs supposed to be immutable forever once minted?

VIVID’s invention of the updateable NFT+ promises to crack the NFT concept wide open. Using proprietary cryptographic methodology, our NFT+ format allows additional assets to be added throughout its lifespan. The NFT is still “immutable” in that it still retains its uniqueness, provenance, ownership, and original content, but can now have ongoing updates of new elements at any time – even after initial minting and resales.

Appendix I - Assets and Links

Visit Vivid Labs’ site.

Vivid Labs and VIVID logos, banners, and the VID token icon are here

Watch Halsey Minor’s introduction to VIVID, direct from NFT Basel in Miami.

Read the press release and more about this fantastic new platform on Vivid Labs’ Medium hub.

Learn more about the VIVID Platform’s full technology stack, available in Open and Pro versions, in this detailed downloadable.

Read the blog post detailing the release of VIVID Open platform.

Join Vivid Labs’ Discord community and follow them on Twitter.

Social Media Handles

Twitter: @VividLabsHQ Discord: Vivid Labs Official (formerly VideoCoin Network) Medium: @vividlabshq YouTube: Vivid Labs LinkedIn: Vivid Labs (formerly VideoCoin Network) Telegram: Vivid Labs Official - formerly VideoCoin Reddit: still being migrated

Appendix II: VIVID Open vs. VIVID Pro at a Glance

Appendix III: VIVID Platform Architecture


