Welcome to the Elastos Blog
Read it here first

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
Name | Description |
amount | Deposit 2000ELA to your account to lock address starting with D |
fee | Transaction Fees |
nodepublickey | The public key to operate the supernode |
nickname | The nick name of the supernode |
url | The url of the supernode |
location | The location of the supernode |
netaddress | The net address of the supernode |
stakeuntail | Block height of supernode stake time(current block height + lock time(count in blocks),7200 * 3 <= local time) |
rpcurl | Access 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 |
amount | Pledge amount |
fee | Transaction Fees |
stakepool | The address of the pledge pool, the default is STAKEPooLXXXXXXXXXXXXXXXXXXXpP1PQ2 |
rpcurl | Access 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
Name | Description |
fee | Transaction Fees |
candidates | The ownerpublickey public key of the Supernode, and the listproducers interface obtains all Supernode information |
votes | Amount of votes |
stakeuntils | Staking time (current block height + lock time(count in blocks),7200 * 3 <= local time,and stakeuntils <= Register the Supernode stakeuntil parameter value) |
votetype | Voting type, voting DPOS2.0 super node defaults to 4 |
rpcurl | Access 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
Name | Description |
fee | Transaction Fees |
referkeys | Voting unique identifier, record voting information |
candidates | The ownerpublickey public key of the Supernode, and the listproducers interface obtains all Supernode information |
votes | Amount of votes |
stakeuntils | Staking time (current block height + lock time(count in blocks),7200 * 3 <= local time,and stakeuntils <= Register the supernode stakeuntil parameter value) |
votetype | Voting type, voting DPoS 2.0 Supernode defaults to 4 |
rpcurl | Access 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
Name | Description |
amount | tokens of staking rights,refund amount = staking amount – vote amount |
to | Staking rights token to account address |
fee | Transaction Fees |
rpcurl | Access 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
Name | Description |
fee | Transaction Fees |
nodepublickey | The public key to operate the supernode |
nickname | The nick name of the supernode |
url | The url of the supernode |
location | The location of the supernode |
netaddress | The net address of the supernode |
stakeuntail | Block height of supernode stake time(current block height + lock time(count in blocks),7200 * 3 <= local time) |
rpcurl | Access 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 |
amount | Pledge amount |
to | The address of the reward amount to the account |
fee | Transaction Fees |
rpcurl | Access 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.
Didn’t find what you’re
looking for?
Check out our dedicated technical resources