ARK Messenger Tutorial — Part One
Tags: Typescript, Development, Open Source, Blockchain, Bitcoin

Welcome everyone to our series of tutorials based on the ARK Messenger Proof-of-Concept (PoC). By the end of this series, you will be able to set up your own autonomous and private messaging application. This tutorial was created in-part with documentation provided by Delegate Lemii as part of his ARK Messenger Proof-of-Concept which was funded by the ARK Grants Program.

In order to make the development process as simple as possible, we will be breaking down these tutorials into three major sections:

Part One

Set up a development environment

Create and deploy a bridgechain locally with a custom network configuration

Part Two

Develop the custom transaction

Test a custom transaction with the local bridgechain

Develop the client

Part Three

Deploy a bridgechain

Launch the client application

How Does ARK Messenger Work?

Before we dive in, it would be beneficial to understand how the ARK Messenger works!

The ARK Messenger is comprised of two major components: (1) the client; and (2) the bridgechain.

The client is the front-end application that you interact with as a user. It handles all user input and processes all incoming and outgoing data to the network.

The bridgechain is the blockchain component of the application. It acts as a decentralized database

If you would like to review the code for both components, they are listed below for your convenience:

The ARK Messenger application works with channels. A channel can consist of any number of participants. When a user creates a new channel, a new channel ID and password is generated. The password can then be shared with other users so that they can join the channel and send messages.

Messages sent to the channel are encrypted and decrypted using the channel’s password as the seed. All sensitive data is handled by the user’s local client and no unencrypted data is ever broadcasted. ARK Messenger runs on its own bridgechain with a customized network and node configuration. It also makes use of a custom transaction built with the Generic Transaction Interface (GTI) to handle the processing of the chat messages.

Try out ARK Messenger at https://ARKmessenger.io

Now that we have a foundation of what the ARK Messenger is, we are ready to start building. Let us review how to set up a development environment.

Setting up a development environment

The documentation on Learn ARK is an ideal way for developers to go through the processes for setting up a development environment. We recommend Linux (*.deb based) operating system as the default environment. We officially recommend and support Ubuntu operating system.

You can also set up your development environment using a Docker on macOS/Linux Docker or a Docker on Windows.

Step 1: User setup

Once you have your environment up and running using the links above, we can create a new user ark and add this user to the sudoers group (allowing root execution if needed).

If you are running on a fresh cloud box/vps, like for example DigitalOcean, then create a user with the following commands below:

sudo adduser ark

sudo usermod -aG sudo ark # login as ark user

sudo su ark

Step 2: Install Git Source Control System

As the most popular version control software in existence, Git is a staple of many developer workflows, and ARK is no exception. Downloading Git will allow you to clone the latest version of ARK Core. Download it by entering the following command:

sudo apt-get install -y git curl apt-transport-https update-notifier

Step 3: Install Node.js Runtime

As ARK Core is written exclusively in Node.js, the server-side framework for JavaScript and Typescript, installing Node.js is a necessity for core development. The code below installs Node.js from the source.



(echo "deb sudo wget --quiet -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -(echo "deb https://deb.nodesource.com/node_12.x $(lsb_release -s -c) main" | sudo tee /etc/apt/sources.list.d/nodesource.list) sudo apt-get update sudo apt-get install nodejs -y

Step 4: Install Yarn Package Manager

Yarn is a package manager that seeks to build upon the foundation of Node’s npm. Although yarn is not a strict requirement, in many cases it works faster and more elegantly than npm. Most ARK developers use yarn, and as such, you will see yarn commands often used throughout our documentation.

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -(echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list) sudo apt-get update sudo apt-get install -y yarn

Step 5: Install Dependencies

Dependencies are needed for core to be compiled, run and controlled while living inside your Linux based environment. The command below installs some of those needed dependencies that are used by core or related scripts.

sudo apt-get install build-essential libcairo2-dev pkg-config libtool autoconf automake python libpq-dev jq -y

Step 6: Clone The Core Repository

Let’s clone our core repository and run the initial yarn setup command. We will also check out the latest develop branch.

yarn setup command leverages Lerna to clean, bootstrap and build the core packages (including transpiling typescript). For more information look into Core's package.json file in the root folder.



cd core

git checkout develop git clone https://github.com/arkecosystem/core cd coregit checkout develop #run Lerna to clean, bootstrap and build the core packages

yarn setup

Step 7: Setting Up The Development Database

ARK Core stores all the blockchain data in a PostgreSQL database. You have two options on how to set up your development database.

Follow Step 7.1 if you are working locally on your developer computer and have docker environment in place, otherwise follow Step 7.2 (for example if you are running on a cloud based Ubuntu instance or prefer native database install).

Step 7.1 Database Setup Using Docker

If you are already using Docker and have docker-compose installed, then you can generate docker files from the command line, with the yarn docker ark command where ark is the name of the network for which you want to generate docker files. For now, let's stick with ark as the default name of the network.

Executing the command yarn docker ark in the root folder of the previously cloned repository, like this:

cd core #root folder of the cloned repository

yarn docker ark

will generate the following docker files inside our core/docker folder (see folder tree below):

#core/docker tree in the cloned repository folder

├── development

│ ├── devnet

│ │ ├── Dockerfile

│ │ ├── docker-compose.yml

│ │ ├── entrypoint.sh

│ │ ├── purge_all.sh

│ │ └── restore.sh

│ ├── mainnet

│ │ └── docker-compose.yml

│ ├── testnet #this is the folder where we will start our PostgreSQL testned DB

│ │ ├── Dockerfile

│ │ ├── docker-compose.yml

│ │ ├── entrypoint.sh

│ │ ├── purge_all.sh

│ │ └── restore.sh

│ └── unitnet

│ ├── docker-compose.yml

│ └── purge.sh

└── production

...

To start the PostgreSQL docker container we must go into the corresponding folder and run the docker-compose command. For testnet we need to run the following:

cd core/docker/development/testnet

docker-compose up postgres #postgres is the name of the PostgreSQL container

The docker-compose up postgres will start PostgresSQL container and expose it to our core via standard PostgreSQL port 5432.

Step 7.2 Installing Postgres Database System-Wide

If you don’t want to install and run Docker on your local computer you can still install the PostgreSQL database natively on your running operating system. For *.deb based Linux systems the commands are the following:

sudo apt-get install postgresql postgresql-contrib -y sudo -i -u postgres psql -c "CREATE USER ark WITH PASSWORD 'password' CREATEDB;" sudo -i -u postgres psql -c "CREATE DATABASE ark_testnet WITH OWNER ark;" sudo -i -u postgres psql -c "CREATE DATABASE ark_devnet WITH OWNER ark;"

The commands above install the PostgreSQL database locally and create databases for running testnet and devnet networks with user ark as the database owner. If you have skipped the Step 1: User setup, you have to change ark user to your development username, usually, the logged-in username.

Run Above Commands Together In One Setup Script

While the above steps are helpful for getting acquainted with ARK Core, some developers may opt to run the above commands together in one setup script. First, create user ARK with a default password password . This will make it easier for us to work with default settings.

#!/usr/bin/env bash

sudo adduser ark

sudo usermod -aG sudo ark # login as ark user

sudo su - ark

After creating and logging under ark user, you can execute the following script to install development tools and dependencies from Technology Stack. If your default user isn't ark , you should copy and modify the script source below (database section).

bash https://raw.githubusercontent.com/learn-ark/bash-helper-scripts/master/dev-setup.sh

Create and deploy a bridgechain locally with a custom network configuration

For the last part of this tutorial, we will be creating and deploying a bridgechain with a custom network configuration.

To accomplish this, we will be using the documentation found at the ARK Deployer Hub. Once you have followed the steps outlined there, you will have successfully created and deployed your bridgechain.

By using a bridgechain, a lot of options to customize the network will open up. Here’s a summary of some of the parameters that ARK Messenger uses:

Ticker: Պ

Token: MSN

Block time: 4 seconds

Forgers: 11

p2p port: 11002

API port: 11003

Webhook port: 11004

But most importantly, a bridgechain allows you to run a network with your own custom transactions.

Next Steps

Our next tutorial will cover the development of a custom transaction, testing that transaction on our bridgechain, and developing the client which will serve as the front-end application.

If you become stuck at any point make sure to consult our documents on the Learn ARK hub. In addition, our team and developers are active on Slack so do not hesitate to reach out to us!