🕵️Become a validator
Intro
Creating a new validator helps the network to be more decentralized and resilient. On this page we will show you how to create a validator to prepare it for the staking process.
1. Prepare your keypair
Let's imagine that you have a pair of ed25519 keys that you will use to control your validator. To generate such a pair - use the tutorial here:
Let's say a key pair looks like this:
const keypair = {
pub:"3JAeBnsMedzxjCMNWQYcAXtwGVE9A5DBQyXgWBujtL9R",
prv:"MC4CAQAwBQYDK2VwBCIEIDteWfNev7NOlNmwP8Irwg5miWKoErYGV+UU5VrFgYev"
}
2. Create the transaction to call staking system smart contract
Use the Web1337 SDK to create a call to system smart contract
import Web1337 from 'web1337';
const web1337 = new Web1337({
chainID:'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
workflowVersion:0,
nodeURL: 'http://localhost:7332' // set the URL to your own node
});
const keypair = {
pub:"3JAeBnsMedzxjCMNWQYcAXtwGVE9A5DBQyXgWBujtL9R",
prv:"MC4CAQAwBQYDK2VwBCIEIDteWfNev7NOlNmwP8Irwg5miWKoErYGV+UU5VrFgYev"
};
const shardID = "shard_0";
const fee = 2;
let payload = {
contractID:'system/staking',
method:'createStakingPool',
gasLimit:0,
params:{
percentage:30,
poolURL:'http://localhost:7335', // set your own domain/ip
wssPoolURL:'ws://localhost:9335' // set your own domain/ip
},
imports:[]
};
const nonce = await web1337.getAccount(shardID,keypair.pub).then(account=>account.nonce+1);
const txType = "WVM_CALL";
let tx = web1337.createEd25519Transaction(shardID,txType,keypair.pub,keypair.prv,nonce,fee,payload);
console.log(tx);
web1337.sendTransaction(tx).then(()=>{
console.log('Sent status => ok')
console.log(`TX ID is => `,web1337.blake3(tx.sig))
}).catch(err=>console.error('Error during pool creation: ',err))
Output example:
{
v: 0,
creator: '3JAeBnsMedzxjCMNWQYcAXtwGVE9A5DBQyXgWBujtL9R',
type: 'WVM_CALL',
nonce: 1,
fee: '2000000000000000000',
payload: {
contractID: 'system/staking',
method: 'createStakingPool',
gasLimit: 0,
params: {
percentage: 30,
poolURL: 'http://localhost:7335',
wssPoolURL: 'ws://localhost:9335'
},
imports: []
},
sigType: 'D',
sig: 'T9uU7l58HEPgzcQMUObvZYxLKb28WRN2F21ec5Bt++wAJTZynUh1ofI0Pi98SMjLxOqQqmyLuFimJNaV7zCNDg=='
}
Sent status => ok
TX ID is => 731c5f2ca6e1690b447da956c1a306692232e2101e8f89e8813be5bee3c5c37e
Check the transaction status
Go to explorer, choose the filter and paste the transaction ID to searchbar

Yes, as expected the pool creation process was successful

Please note that this transaction was in a block that was in epoch 89 (see the first part of the block identifier before the colon sign)

3. Wait untill the next epoches
So as soon as 3 epochs have passed, you can go and check whether your pool has appeared in the state

Great, as you can see the pool was indeed added to the state

At the moment this pool is empty - it has:
No staked native coins(so see Default staking)
Staking points called UNO(unobtanium)(so see Multichain multiasset staking)

Also, when creating a pool, the address of the pool owner is automatically added to the list of stakers, although the initial stake values are zero

Now everything is ready to move on to the most interesting part - staking
4. How much do you need to launch a validator
Just visit the main page of explorer and check the section Network Parameters > Validator Stake Size

Also, on the validator page you can see how many coins are already staked on it

As you can see here validator has 55 000 staked coins while required minimum is 50 000. So this validator is eligible to generate blocks and take part in approvement.
5. Start staking
Go to the next sections to learn more about staking and multistaking. How to do it via user interface or via SDK - details are in the next sections ☺️
Default stakingMultichain multiasset stakingShort FAQ
Last updated
Was this helpful?