Persona migration to Ark Core V2.3

Stefan Neagu
personablockchain
Published in
4 min readMay 8, 2019

Persona, the zero knowledge trust protocol, unlike the rest of the identity projects that ran on Ethereum, as ERC20 token, runs on its own native blockchain, a fork of Ark.

Back in February 2018, at the genesis moment, the core version of Ark was running on V1 and so was Persona, while the V2 was under development and tests were conducted. Ark ended up deploying V2 on its network back in December 2018. In just a couple of months since then, Ark made improvements to its code base and now Ark Core reached to version 2.3.

Now, it’s time for Persona to migrate to the latest, stable version of Ark, so on Sunday, May 12nd, 17.00 CET, together with the community, we scheduled to migration to version 2.3.

The migration steps are:

1. Start a new node running Persona 2.3 in relay mode (this means that that you don’t put the secret in config file) . This step is scheduled to start on Thursday morning, May 9th. The sync will be made from 0.

2. Sunday, May 12nd, the delegates will wait for the 17.00 hours CET and when the time comes, they will change the mode of the nodes running Persona 2.3 from relay mode to forger node by adding the secret.

3. At this step, in the consensus mechanism only the V2.3 nodes will participate, the nodes running on V1 being excluded in establishing the consensus. There is a possibility for the blockchain to halt, but as more and more delegates update their nodes, the consensus will be reached and the transactions will start to be executed.

These are the necessary steps that need to be performed by the forging delegates:

It is recommended to use Ubuntu 18.04 for version 2 nodes.

1. Make sure you have a dedicated user for this install. Also enable sudo for the new user.
1.1 To create new user, as root execute:

adduser your username of choice

Adding user `your username of choice’ …
Adding new group `your username of choice’ (1001) …
Adding new user `your username of choice’ (1001) with group `your username of choice’ …
Creating home directory `/home/your username of choice’ …
Copying files from `/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for your username of choice
Enter the new value, or press ENTER for the default
Full Name []: your username of choice
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y

1.2 Enable sudo for the new user. As root execute:

usermod -aG sudo your username of choice

1.3 Disconnect from the server and connect again using the newly created user.

2. Git clone the core-control scripts.

git clone https://github.com/PersonaIam/core-control.git

Cloning into ‘core-control’…
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 603 (delta 10), reused 4 (delta 4), pack-reused 587
Receiving objects: 100% (603/603), 117.77 KiB | 0 bytes/s, done.
Resolving deltas: 100% (368/368), done.
Checking connectivity… done.

cd core-control

2.1 Install persona-core. The script will install operating system patches so it is recommended to reboot the server after this step.

./ccontrol.sh install

Installing Dependencies… Done
Securing System… Done
Installing Database… Done
Setting up Core… Done

2.2 The config files are stored under “~/.config/persona-core/mainnet” and “~/persona-core/packages/crypto/dist/networks/mainnet”.
-.config/persona-core/mainnet:
peers.json: used by the node to find other existing nodes.
plugins.js: contains constructor arguments for the different core plugins.
delegates.json: holds the secrets for the initial virtualized delegates.
.env contains environment variables.

-~/persona-core/packages/crypto/dist/networks/mainnet:
exceptions.json: lists blocks and transactions which are exempt from validation rules, usually because of historic forks and vulnerabilities.
genesisBlock.json: defines the very first block of your network, and from it, your networkhash is derived, as it is the header of the first block.
index.ts: exports these crypto definitions as a module.
milestones.json: defines networkwide configuration changes based on certain milestones; i.e. a global reward reduction when block 1000000 has been forged.
network.json: contains your network specific variables. (some may also be set from your env.process).

2.3 Start the node in relay mode.

RELAY MODE MEANS THAT THAT THE FORGING SECRET IS NOT FILLED IN.

PLEASE MAKE SURE YOU DON’T ADD THE FORGING SECRET AT THIS STEP,OTHERWISE THE NETWORK MIGHT HAVE TO SUFFER FROM HAVING V1 AND V2 NODE FORGING.

./ccontrol.sh start relay

2.4 You can check the logs.

./ccontrol.sh logs relay

cat ~/.pm2/logs/persona-relay-out.log

Your node should now start and connect with the peers set in peers.json. It will take a few hours even a day for the entire synchronization process to finalize.
All node operators, delegates and third-party services should do the same. Once enough participants are in sync, we can move to the next step.

=================STOP HERE================

DO NOT PROCEED TO STEP 3 UNTIL SUNDAY, MAY 12, 17.00-CET HOURS

========================================

3. Migrating
3.1 WARNING: Once you proceed with the following steps, v1.0 nodes will not be able to join our network, nor will you be able to downgrade the network.
By the moment we reach this step, make sure you’re in the #delegates-discussions slack channel. There is where all the migration related discussion will take place.

3.2 Once we hit the migration date/time stop your v1 node.
cd ~/persona-node
./persona.sh stop

3.3 Set the delegate 12 word secret.
cd ~/core-control
./ccontrol.sh secret set word1 word2 … word12

3.4 Start the v2 forger.
cd ~/core-control
./ccontrol.sh start forger

3.5 Check if new blocks are forged by opening the URL http://IP ADDRESS OF THE NODE:4103/api/blocks/getHeight in a web browser.

NOTE:

The migration efforts fall upon only the delegates. If you just hold Persona tokens, there is nothing that you should or have to do.

--

--