Intermediate

 

Core Cell in Klaytn

Welcome to our tutorial on how to deploy a Core Cell on the Klaytn blockchain network. In Klaytn, Core Cells are a fundamental building block of the network, as they are responsible for maintaining the integrity of the blockchain by validating transactions and producing blocks. In this tutorial, we will explore the process of deploying a Core Cell on the Klaytn network, including the necessary hardware and software requirements, the configuration steps, and the best practices for maintaining and securing the Core Cell. Whether you are a developer, researcher, or simply a blockchain enthusiast, this tutorial will provide valuable insights and hands-on experience in deploying a Core Cell on the Klaytn network.

Deploying a Core Cell on the Klaytn network involves several steps, including setting up the necessary hardware and software, configuring the node, and maintaining and securing it.

Firstly, the machine running the Core Cell must meet certain hardware requirements, such as having at least 8GB of RAM and 200GB of storage space. Additionally, it is recommended to use a machine with a stable and fast internet connection to ensure that the Core Cell can communicate with the rest of the network effectively.

Once the hardware is set up, the Core Cell software can be installed by following the instructions provided by the Klaytn team. The software is available for Windows, macOS, and Linux operating systems.

The next step is to configure the Core Cell by specifying the network ID, setting the node’s IP address, and configuring the ports for communication. Additionally, the Core Cell needs to be registered on the network and be elected as a block producer by the Klaytn Governance Council.

It’s important to secure the Core Cell by applying best practices like using a firewall and keeping the software and operating system up-to-date with the latest security patches. Additionally, it is recommended to monitor the Core Cell’s activity and performance regularly to ensure that it is operating effectively and securely.

In summary, deploying a Core Cell on the Klaytn network involves setting up the necessary hardware and software, configuring the node, and maintaining and securing it. It’s important to register it on the network and be elected as a block producer by the Klaytn Governance Council and to monitor its activity and performance regularly for ensuring it operates effectively and securely.

System Requirements

H/W Specification

The network performance is measured based on the worst hardware specification within the network. According to the blockchain network structure, it is only possible to be scaled up vertically (increasing hardware capacity). Hence, it is recommended that all the nodes within the network should have the best hardware having similar specifications to each other at least.

The following sections show the recommended specifications for both CNs and PNs.

Bare-metal Server

 
 

Category

 

Specification

 

Server

Intel® Server System R2312WFTZS

CPU

Intel® Xeon 6148 2.40 GHz (20-core/40-thread) * 2EA (total 40-core/80-thread)

Memory

256GB (32GB * 8)

Storage

3TB (or larger size) SSD (The preferred storage size and configuration could differ depending on the chain data size. Please consult the Klaytn Team for more information.)

 

Note that this is a recommended hardware specification for CNs and PNs, not an exact requirement. Any physical machine with similar hardware configurations would be sufficient to operate a CN or a PN.

Cloud VM

 
 

Node Type

 

Model

 

vCPU

 

Memory (GiB)

 

Storage size (GiB)

 

Storage speed (IOPS)

 

Price (Seoul region, USD/h)

 

CN

c5.18xlarge

72

144

3,000 (Minimum)

3,000 (Minimum)

3.456

PN

m5.8xlarge

32

128

3,000 (Minimum)

3,000 (Minimum)

1.888

 

This storage specification is derived from AWS EBS SSD (gp2) specification.

The information above is from https://aws.amazon.com/ec2/instance-types/ and https://aws.amazon.com/ec2/pricing/on-demand/ and may be changed by AWS.

 
 

Node Type

 

Model

 

vCPU

 

Memory (GiB)

 

Storage type (GiB)

 

Storage speed (IOPS)

 

Price (Korea Central, USD/h)

 

CN

F72s v2

72

144

P50 (4096)

7500

3.456

PN

D32s v5

32

128

P50 (4096)

7500

1.625

 

T

Testing the Core Cell

It is time to check that Core Cell is successfully installed and it is working as expected after installation.

Process Status

It is possible to check the status of CN/PN’s process using the status commands systemctl and kcnd/kpnd.

systemctl

systemctl is installed along with the RPM and the status of CN/PN can be checked as follows.

$ systemctl status kcnd.service
● kcnd.service - (null)
   Loaded: loaded (/etc/rc.d/init.d/kcnd; bad; vendor preset: disabled)
   Active: active (running) since Wed 2019-01-09 11:42:39 UTC; 1 months 4 days ago
     Docs: man:systemd-sysv-generator(8)
  Process: 29636 ExecStart=/etc/rc.d/init.d/kcnd start (code=exited, status=0/SUCCESS)
 Main PID: 29641 (kcn)
   CGroup: /system.slice/kcnd.service
           └─29641 /usr/local/bin/kcn --networkid 1000 --datadir /kcnd_home --port 32323 --srvtype fasthttp --metrics --prometheus --verbosity 3 --txpool.global...

Jan 09 11:42:39 ip-10-11-2-101.ap-northeast-2.compute.internal systemd[1]: Starting (null)...
Jan 09 11:42:39 ip-10-11-2-101.ap-northeast-2.compute.internal kcnd[29636]: Starting kcnd: [  OK  ]
Jan 09 11:42:39 ip-10-11-2-101.ap-northeast-2.compute.internal systemd[1]: Started (null).

You can check the current status such as Active: active (running) in the above example.

kcnd (kpnd)

kcnd (or kpnd) is installed along with the package and the status of CN/PN can be checked as follows.

$ kcnd status
kcnd is running

Logs

The log is stored in kcnd.out (or kpnd.out) file located in the path defined in the LOG_DIR field of the kcnd.conf (or kpnd.conf) file. When the node works properly, you can see that each block is created per second as follows.

$ tail kcnd.out
INFO[02/13,07:02:24 Z] [35] Commit new mining work                    number=11572924 txs=0 elapsed=488.336µs
INFO[02/13,07:02:25 Z] [5] Imported new chain segment                blocks=1 txs=0 mgas=0.000     elapsed=1.800ms   mgasps=0.000       number=11572924 hash=f46d09…ffb2dc cache=1.59mB
INFO[02/13,07:02:25 Z] [35] Commit new mining work                    number=11572925 txs=0 elapsed=460.485µs
INFO[02/13,07:02:25 Z] [35] 🔗 block reached canonical chain           number=11572919 hash=01e889…524f02
INFO[02/13,07:02:26 Z] [14] Committed                                 address=0x1d4E05BB72677cB8fa576149c945b57d13F855e4 hash=1fabd3…af66fe number=11572925
INFO[02/13,07:02:26 Z] [5] Imported new chain segment                blocks=1 txs=0 mgas=0.000     elapsed=1.777ms   mgasps=0.000       number=11572925 hash=1fabd3…af66fe cache=1.59mB
INFO[02/13,07:02:26 Z] [35] Commit new mining work                    number=11572926 txs=0 elapsed=458.665µs
INFO[02/13,07:02:27 Z] [14] Committed                                 address=0x1d4E05BB72677cB8fa576149c945b57d13F855e4 hash=60b9aa…94f648 number=11572926
INFO[02/13,07:02:27 Z] [5] Imported new chain segment                blocks=1 txs=0 mgas=0.000     elapsed=1.783ms   mgasps=0.000       number=11572926 hash=60b9aa…94f648 cache=1.59mB
INFO[02/13,07:02:27 Z] [35] Commit new mining work                    number=11572927 txs=0 elapsed=483.436µs

kcn console (kpn console)

Klaytn provides a CLI client: kcn console (or kpn console). However, a CN/PN may disable the RPC interface for the client due to the security reason. Another way of using the client is to connect to the process via IPC (inter-process communication).

The IPC file klay.ipc is located in the data directory on a CN/PN.

Please execute the following command and check out the result.

In the case of a CN,

$ ken attach /var/kend/data/klay.ipc
Welcome to the Klaytn JavaScript console!

instance: Klaytn/vX.X.X/XXXX-XXXX/goX.X.X
 datadir: /var/kend/data
 modules: admin:1.0 debug:1.0 governance:1.0 istanbul:1.0 klay:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0
 >

In the case of a PN,

$ kpn attach /var/kpnd/data/klay.ipc
Welcome to the Klaytn JavaScript console!

instance: Klaytn/vX.X.X/XXXX-XXXX/goX.X.X
coinbase: 0x67f68fdd9740fd7a1ac366294f05a3fd8df0ed40
at block: 11573551 (Wed, 13 Feb 2019 07:12:52 UTC)
 datadir: /var/kpnd/data
 modules: admin:1.0 debug:1.0 istanbul:1.0 klay:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0
 >

You can check the usable commands on API Document

The useful APIs to check the status of a CN/PN:

  • klay.blockNumber (to get the latest block number)

  • net.peerCount (to get the number of the connected Klaytn nodes currently)

 

klay.blockNumber

You can get the latest block number to see if blocks are created (for CNs) or propagated (for CNs and PNs) properly based on your node type.

> klay.blockNumber
11573819

 

net.peerCount

> net.peerCount

14

The above command line returns a different value based on the node type.

  • CN: the number of connected CNs + the number of connected PNs.

  • PN: the number of connected CNs + the number of connected PNs + the number of connected ENs.

his storage specification is derived from Azure Premium Disk specification.

With this, you complete this workshop successfully!!

Units of KLAY

Klaytn uses the following unit system for KLAY.

  • peb is the smallest currency unit.

  • ston is an alias for Gpeb and was introduced for convenience.

  • A KLAY is 10^18 peb.

Unit

 

peb value

 

peb

 
 

Unit

 

peb value

 

peb

 

peb

1 peb

1

kpeb

10^3 peb

1,000

Mpeb

10^6 peb

1,000,000

Gpeb

10^9 peb

1,000,000,000

ston

10^9 peb

1,000,000,000

uKLAY

10^12 peb

1,000,000,000,000

mKLAY

10^15 peb

1,000,000,000,000,000

KLAY

10^18 peb

1,000,000,000,000,000,000

kKLAY

10^21 peb

1,000,000,000,000,000,000,000

MKLAY

10^24 peb

1,000,000,000,000,000,000,000,000

GKLAY

10^27 peb

1,000,000,000,000,000,000,000,000,000

TKLAY

10^30 peb

1,000,000,000,000,000,000,000,000,000,000

klay.toPeb and klay.fromPeb are convenient APIs for converting between KLAY units.

$ ./klay attach data/dd/klay.ipc
...
> klay.fromPeb(25, "peb")
"25"
> klay.fromPeb(25, "Gpeb")
"0.000000025"
> klay.fromPeb(25, "ston")
"0.000000025"
> klay.fromPeb(25, "KLAY")
"0.000000000000000025"
> klay.toPeb(25, "peb")
"25"
> klay.toPeb(25, "ston")
"25000000000"
> klay.toPeb(25, "KLAY")
"25000000000000000000"

You can get the list of all units supported by klay.toPeb and klay.fromPeb by sending an invalid unit string such as the one below.

> klay.toPeb(1, "something-does-not-exist")
Error: This unit doesn't exist, please use one of the following units
"noKLAY": "0"
"peb": "1"
"kpeb": "1000"
"Mpeb": "1000000"
"Gpeb": "1000000000"
"ston": "1000000000"
"uKLAY": "1000000000000"
"mKLAY": "1000000000000000"
"KLAY": "1000000000000000000"
"kKLAY": "1000000000000000000000"
"MKLAY": "1000000000000000000000000"
"GKLAY": "1000000000000000000000000000"
"TKLAY": "1000000000000000000000000000000"

    at web3.js:2170:19
    at web3.js:2255:49
    at <anonymous>:1:1
With this, you complete this workshop successfully!!