Elastos

Registering a DPoS 2.0 Supernode on Testnet – Complete Instruction Manual

With the Elastos main chain’s transition to DPoS (Delegated-Proof-of-Stake) 2.0 consensus rapidly approaching, current and prospective Supernode operators from around the ecosystem are preparing to set up their nodes, begin contributing to a new-and-improved, robust ecosystem, and of course, earn freshly distributed ELA in the form of block rewards.

In order to ease the process for current and incoming node operators alike, the Gelaxy team has provided thorough instructions detailing the process of registering a Supernode in Elastos’ DPoS 2.0 consensus on Testnet. In addition to detailed instructions, the Gelaxy team has listed a number of key resources, informative links for further reading, and direct links to relevant pages of the official Elastos Github. Now, we invite our entire community to go ahead and get started registering your very own DPoS 2.0 Supernode on Testnet!

DPoS 2.0: Testnet Supernode Registration Instruction Manual

1.0 Register DPoS 2.0 Supernode

→ DPoS 2.0 adopts a pledge mining model in order to make the network more robust. For more details please refer to Cyber Republic Proposal #74.

→ If you need Testnet ELA to register your Supernode, please send your Testnet ELA address, application amount and a brief message to: faucet@gelaxy.io.

→ For detailed RPC interface commands, please visit: GitHub API reference (JSON-RPC)

→ Users without a server do not need to register DPoS 2.0 Supernodes, but they can vote for Supernodes to obtain benefits.

1.1 Prepare ELA Account

→ Download the ela-cli binary client

→ For more detailed client commands, please visit GitHub ELA CLI Instructions

→ Testnet network exposes API: https://api-testnet.elastos.io/ela

$ mkdir ~/node
$ cd ~/node
$ curl -O https://download-beta.elastos.io/elastos-ela/elastos-ela-v0.9.0.rc4/elastos-ela-v0.9.0.rc4-linux-x86_64.tgz
$ tar xf elastos-ela-v0.9.0.rc4-linux-x86_64.tgz
$ cd elastos-ela-v0.9.0.rc4-linux-x86_64

→ Create ELA account

$ ./ela-cli wallet c

→ Successful result returned:

$ ./ela-cli wallet c
Password:
ADDRESS                                                              PUBLIC KEY                                                        
----------------------------------------------- -------------------------------------------------------------------------------------
ELsKx7nfwHeyDRNHC8VpTMq7ZmTCq2QXrz 036d127fa2acc1d1339e1886b803669bb5c02eb71fa7800ee560223ac710581233
----------------------------------------------- -------------------------------------------------------------------------------------

→ View account address and public key commands

$ ./ela-cli wallet a

→ Successful result returned:

$ ./ela-cli wallet a
Password:
ADDRESS                                                              PUBLIC KEY                                                        
----------------------------------------------- -------------------------------------------------------------------------------------
ELsKx7nfwHeyDRNHC8VpTMq7ZmTCq2QXrz 036d127fa2acc1d1339e1886b803669bb5c02eb71fa7800ee560223ac710581233
----------------------------------------------- -------------------------------------------------------------------------------------

→ View account ELA balance

$ ./ela-cli wallet b --rpcurl https://api-testnet.elastos.io/ela

Successful result returned:

$ ./ela-cli wallet b --rpcurl https://api-testnet.elastos.io/ela
INDEX ADDRESS                                                           BALANCE                     (LOCKED)
----- ----------------------------------------------- ------------------------------------
0     ELsKx7nfwHeyDRNHC8VpTMq7ZmTCq2QXrz     0                                  (0)
----- ----------------------------------------------- ------------------------------------

1.2 Register DPoS 2.0 Supernode

NameDescription
amountDeposit 2000ELA to your account to lock address starting with D
feeTransaction Fees
nodepublickeyThe public key to operate the supernode
nicknameThe nick name of the supernode
urlThe url of the supernode
locationThe location of the supernode
netaddressThe net address of the supernode
stakeuntailBlock height of supernode stake time(current block height + lock time(count in blocks),7200 * 3 <= local time)
rpcurlAccess the url of the rpc interface of the ELA node

→ 1. Create Transaction

$ ./ela-cli wallet buildtx producer register v2 --amount 3000 --fee 0.0001 --nodepublickey 036d127fa2acc1d1339e1886b803669bb5c02eb71fa7800ee560223ac710581233 --nickname test --url test.com --location 86 --netaddress 127.0.0.1 --stakeuntil 2628000 --rpcurl https://api-testnet.elastos.io/ela

The transaction is created successfully and returns to_be_signed.txn file:

Hex:  0902000100133230313836333134383831353435393435343201ee417a90b373a69f9f2bc64780a95713c82256b03bcb70f7777cc9eb8535d5010100ffffffff02b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a340420f0000000000000000002128bdd90d3841f1c4c373f78dd6b328dc2991702a00b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a3ec86a76d7ae60000000000002136c6f2ad6785cef94fab1216b776add14bd756a8000000000001002321032f4540e915134f38ba24cdc08621ad7f5b8b62db36843ae8fa9422c047a04be8ac
File:  to_be_signed.txn

→ 2. Sign the transaction that has been created successfully

$ ./ela-cli wallet signtx -f to_be_signed.txn

The signature is successful and the ready_to_send.txn file is returned:

[ 1 / 1 ] BaseTransaction was successfully signed
Hex:  0902000100133230313836333134383831353435393435343201ee417a90b373a69f9f2bc64780a95713c82256b03bcb70f7777cc9eb8535d5010100ffffffff02b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a340420f0000000000000000002128bdd90d3841f1c4c373f78dd6b328dc2991702a00b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a3ec86a76d7ae60000000000002136c6f2ad6785cef94fab1216b776add14bd756a8000000000001414036638609db104dfd3c1d89629fe8cdb538f361d98710a34c01a552b2e1f9e1bc0bef95a0b17eab1aa1475e5d4cb46d4edec38d54ea53ec49076b779cfefc73782321032f4540e915134f38ba24cdc08621ad7f5b8b62db36843ae8fa9422c047a04be8ac
File:  ready_to_send.txn

→ 3. Send the signed transaction to the Testnet network

$ ./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

→ Once the transaction is sent successfully, the transaction hash is returned:

ded1c3e69acc7cadf91b318faee25f8a911c9b59a63c9173bcec117a90742925

1.3 Pledge ELA to Obtain Staking Rights

Name Description
amountPledge amount
feeTransaction Fees
stakepoolThe address of the pledge pool, the default is STAKEPooLXXXXXXXXXXXXXXXXXXXpP1PQ2
rpcurlAccess the URL of the RPC interface of the ELA node
$ ./ela-cli wallet buildtx stake --amount 1 --fee 0.001 --stakepool STAKEPooLXXXXXXXXXXXXXXXXXXXpP1PQ2 --rpcurl https://api-testnet.elastos.io/ela
$ ./ela-cli wallet signtx --file to_be_signed.txn
$ ./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

→ After the transaction is successful, you can view the staking rights through the following command

# Generate staking address
$ ./ela-cli wallet stakeaddress ELsKx7nfwHeyDRNHC8VpTMq7ZmTCq2QXrz Sdp4gnD6v2Z7RpCgqBYDBtc7YRpbeFh9ad
# Request the getvoterights interface to view the staking rights

1.4 Vote for Supernodes

NameDescription
feeTransaction Fees
candidatesThe ownerpublickey public key of the Supernode, and the listproducers interface obtains all Supernode information
votesAmount of votes
stakeuntilsStaking time (current block height + lock time(count in blocks),7200 * 3 <= local time,and stakeuntils <= Register the Supernode stakeuntil parameter value)
votetypeVoting type, voting DPOS2.0 super node defaults to 4
rpcurlAccess the URL of the ROC interface of the ELA node
$ ./ela-cli wallet buildtx dposv2vote --fee 0.1  --candidates "036d127fa2acc1d1339e1886b803669bb5c02eb71fa7800ee560223ac710581233,02e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f" --votes "1.1,1.1" --stakeuntils "2628000,2628000" --votetype 4 --rpcurl https://api-testnet.elastos.io/ela

→ After the transaction is created successfully, the referKey will be returned

*Please be sure to save the referkey for the renewal voting transaction

Hex:  0963000104022103065bcbdd897e654bcee27afac10c7be9c9fe40e13da3e4240923d24631b06a7b80778e0600000000086b00002102e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f80778e0600000000086b00000100133238353939353533383331313235383638353501d65d6a54a707238a5253631edd4f4141a0126d64acd7b08d568d6109c464bb7b0000ffffffff01b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a3f0b9f505000000000000000021b5318aac5d36c1d8d8484dcfa3c107b8a6aea176000000000001002321022747b9663d8b6e1e469be64ebf7977f3925a4d0fea750845221d31fa9583e130ac
File:  to_be_signed.txn
candidate: 03065bcbdd897e654bcee27afac10c7be9c9fe40e13da3e4240923d24631b06a7b votes: 1.10000000 referKey: a115e83d06727c4c5daa7387c6135653148a07739197917eba46a95c82a9e419
candidate: 02e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f votes: 1.10000000 referKey: 67e5ee0040d73ce9b5612106cb10d7617923809b89b28362560420a12385d88b

→ Sign and send the transaction

$./ela-cli wallet signtx --file to_be_signed.txn
$./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

→ Staking rights must be greater than 3,000 to be eligible to become a Supernode

→ The formula to calculate the staking rights obtained by a single stake is: N = E * log(T / 720);E = the number of staked tokens, T = the pledge time of a single stake (count by blocks,7200 <= T <= 720000)

→ After voting is complete, you can check whether the dposv2votes staking rights is greater than 3,000 through the listproducers interface

→ Complete the above 4 steps to complete the DPoS 2.0 election

2.0 Other Supernode Transactions

2.1 Supernode Renewals

→ Renewal cannot update votes, only stakeuntils

NameDescription
feeTransaction Fees
referkeysVoting unique identifier, record voting information
candidatesThe ownerpublickey public key of the Supernode, and the listproducers interface obtains all Supernode information
votesAmount of votes
stakeuntilsStaking time (current block height + lock time(count in blocks),7200 * 3 <= local time,and stakeuntils <= Register the supernode stakeuntil parameter value)
votetypeVoting type, voting DPoS 2.0 Supernode defaults to 4
rpcurlAccess the URL of the RPC interface of the ELA node
$ ./ela-cli wallet buildtx dposv2voterenew --fee 0.01 --referkeys "a115e83d06727c4c5daa7387c6135653148a07739197917eba46a95c82a9e419,67e5ee0040d73ce9b5612106cb10d7617923809b89b28362560420a12385d88b" --candidates "036d127fa2acc1d1339e1886b803669bb5c02eb71fa7800ee560223ac710581233,02e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f" --votes "1.1,1.1" --stakeuntils "3828000,3828000" --rpcurl https://api-testnet.elastos.io/ela

→ After the transaction is created successfully, the referKey will be returned

*Please be sure to save the referkey for the renewal voting transaction

contents: [Content: {
                                ReferKey: a115e83d06727c4c5daa7387c6135653148a07739197917eba46a95c82a9e419
                                VotesInfo: {[3 6 91 203 221 137 126 101 75 206 226 122 250 193 12 123 233 201 254 64 225 61 163 228 36 9 35 210 70 49 176 106 123] 1.10000000 27500}}
                                 Content: {
                                ReferKey: 67e5ee0040d73ce9b5612106cb10d7617923809b89b28362560420a12385d88b
                                VotesInfo: {[2 224 249 187 17 56 231 78 89 231 93 215 86 115 35 54 20 9 39 113 63 11 200 65 101 21 236 253 88 88 64 85 95] 1.10000000 27500}}
                                ]
Hex:  09630102a115e83d06727c4c5daa7387c6135653148a07739197917eba46a95c82a9e4192103065bcbdd897e654bcee27afac10c7be9c9fe40e13da3e4240923d24631b06a7b80778e06000000006c6b000067e5ee0040d73ce9b5612106cb10d7617923809b89b28362560420a12385d88b2102e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f80778e06000000006c6b000001001335323437393531313734313132383033353131015548fe16af96ee1a4b69fa51f26667f544c32d4944bef6174aa7c110812127c60000ffffffff01b037db964a231458d2d6ffd5ea18944c4f90e63d547c5d3b9874df66a4ead0a35226233c000000000000000021b5318aac5d36c1d8d8484dcfa3c107b8a6aea176000000000001002321022747b9663d8b6e1e469be64ebf7977f3925a4d0fea750845221d31fa9583e130ac
File:  to_be_signed.txn
candidate: 03065bcbdd897e654bcee27afac10c7be9c9fe40e13da3e4240923d24631b06a7b votes: 1.10000000 referKey: 28a8042484ab4390e087a72b900d865319663021c1627a94e312fb14c0e2aad0
candidate: 02e0f9bb1138e74e59e75dd756732336140927713f0bc8416515ecfd585840555f votes: 1.10000000 referKey: fb1a64f40d7e5d06407eb2b39875506304b7fef9357f246f61364612809a0975

→ Sign and send transaction

$./ela-cli wallet signtx --file to_be_signed.txn
$./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

2.2 Refund of Staking Rights

NameDescription
amounttokens of staking rights,refund amount = staking amount – vote amount
toStaking rights token to account address
feeTransaction Fees
rpcurlAccess the URL of the RPC interface of the ELA node
$./ela-cli wallet buildtx dposv2claimreward --claimamount 1.1 --to EZfy9XGTcceptp266bYee8SWfJ6JL6y88y --rpcurl https://api-testnet.elastos.io/ela
$./ela-cli wallet signtx --file to_be_signed.txn
$./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

2.4 Update Supernode

NameDescription
feeTransaction Fees
nodepublickeyThe public key to operate the supernode
nicknameThe nick name of the supernode
urlThe url of the supernode
locationThe location of the supernode
netaddressThe net address of the supernode
stakeuntailBlock height of supernode stake time(current block height + lock time(count in blocks),7200 * 3 <= local time)
rpcurlAccess the url of the rpc interface of the ELA node
$./ela-cli wallet buildtx producer update v2 --fee 0.0001 --nodepublickey 032895050b7de1a9cf43416e6e5310f8e909249dcd9c4166159b04a343f7f141b5 --nickname test --url test.com --location 86 --netaddress 127.0.0.1 --stakeuntil 2000000 --rpcurl https://api-testnet.elastos.io/ela
$./ela-cli wallet signtx --file to_be_signed.txn
$./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

2.5 Refund Supernode Pledge

Name Description
amountPledge amount
toThe address of the reward amount to the account
feeTransaction Fees
rpcurlAccess the URL of the RPC interface of the ELA node
$./ela-cli wallet buildtx producer returndeposit --amount 1998 --fee 0.01  --rpcurl https://api-testnet.elastos.io/ela
$./ela-cli wallet signtx --file to_be_signed.txn
$./ela-cli wallet sendtx --file ready_to_send.txn --rpcurl https://api-testnet.elastos.io/ela

3.0 Deploy DPoS 2.0 Supernode to Participate in Consensus

3.1 Preparation of Server Environment

→ Ubuntu 20.04 LTS server

→ 2-core 8G memory, hard disk above 100G

→ Open ELA nodes 21338 P2P ports and 21339 DPOS direct connection ports on the whole network

3.2 Deploy Node

→ Deploy ELA node

$ mkdir ~/node
$ cd ~/node
$ curl -O https://raw.githubusercontent.com/elastos/Elastos.Node/master/build/skeleton/node.sh
$ chmod a+x node.sh
$ ./node.sh     # Set the network type, please select 2 as Testnet network
$ ./node.sh ela init
$ ./node.sh ela start
$ ./node.sh ela status

→ After the node height synchronization is complete, refer to step 2.4 to update the nodepublickey of the Supernode. The nodepublickey account directory is located in ~/node/ela/keystore.dat

For questions, comments, and inquiries concerning Elastos’ transition to DPoS 2.0, and all involved processes, please contact the Gelaxy team at:

Discord: https://discord.gg/UAyyVt3Fch

To stay up to date with the latest developments and announcements regarding the launch of Elastos’ DPoS 2.0 consensus, Supernode registrations, and more, stay tuned here on the official Elastos Info blog.