layout | permalink |
---|---|
default |
/SEBAK-deployment/ |
To deploy the sebak network, the basic steps are mentioned below.
- Compose network
- Genesis block generation
- Node deployment
If you deployed network already, you should skip generating genesis block .
You can run SEBAK in standalone mode, please check Running Standalone Mode.
The network-id
is this-is-test-sebak-network
.
Shortly, blockchain is the chains of block and genesis block is the first block of entire blocks.
Before generating genesis block, you must make the keypair for genesis block.
Keypair of sebak has 2 important concepts. secret seed and public address. As name implies, public address will be used to represent your account. So you can send and receive BOScoin using the public address. The secret seed is such like private key. When you opened your account, you can use it. Secret seed never be shared with any other people, please keep it safe.
sebak can make keypair, secret seed and public address.
$ sebak key generate
Secret Seed: SCN4NSV5SVHIZWUDJFT4Z5FFVHO3TFRTOIBQLHMNPAZJ37K5A2YFSCBM
Public Address: GALQG5SCKCPXUG4ODPMFZJGZ6XBVJTLAJFR7OJKJOJVARA7M4H5SGSOG
For the Genesis block generation, 2 sets of key pairs(required), network id (required) and storage location(optional) are necessary. First key pair which secret seed and public address meant to be genesis block, 2nd key pair meant to be common budget account. Network id is the unique key phrase to distinguish its network. Storage mention specific location for save data. Details are looking below.
$ sebak genesis \
--network-id "this-is-test-sebak-network" \
--storage "file:///tmp/db-n0" \
GCXOTSI6IXZNIEYWVJBPZV4VFK7IEQVHRPIC7TFTIN4FFXYK7BVUBCOU \
GBLZVWCICHM4ZFCK2M5IRFOQLANTGT53GX2BEKOQ75FJ2TDK6OEQAF4U \
INFO[10-29|14:57:28] genesis block created ...
successfully created genesis block
You can also check the usage of
sebak key generate
in SEBAK Commands.
You should make genesis block in every nodes
You don"t need high performance machine for deploying sebak, but your nodes should be on the very fast network environment.
- Nodes
node | endpoint | validators |
---|---|---|
n0 | https://localhost:12345 | n1 n2 |
n1 | https://localhost:12346 | n0 n2 |
n2 | https://localhost:12347 | n0 n1 |
- Keys
You have to generate new keypairs for deploy nodes through sebak key generate
.
To run sebak, you need SSL certificates for HTTP2 protocol.
$ sebak tls
INFO[10-31|16:55:03] Generate tls certificate and key files
If you want to create self-signed SSL certificates, see Generating a self-signed certificate using OpenSSL.
After successfully creating genesis block and SSL certificates, run n0:
$ sebak node \
--network-id "this-is-test-sebak-network" \
--bind "https://localhost:12345" \
--tls-key "sebak.key" \
--tls-cert "sebak.crt" \
--storage "file:///tmp/db-n0" \
--secret-seed SCN4NSV5SVHIZWUDJFT4Z5FFVHO3TFRTOIBQLHMNPAZJ37K5A2YFSCBM \
--validator "GDPQ2LBYP3RL3O675H2N5IEYM6PRJNUA5QFMKXIHGTKEB5KS5T3KHFA2 GCZG7MBKRSS6MJVZOALYBJB5C223FSZ43MDTPX2O4UGQTCXTHWBDNUB6" \
--discovery http://localhost:12346 \
--log-level debug \
INFO[10-31|19:18:35] Starting Sebak module=main caller=run.go:401
DBUG[10-31|19:18:35] parsed flags: module=main
network-id=this-is-test-sebak-network
bind=https://localhost:12345
publish=https://localhost:12345
storage=file:///tmp/db-n0
tls-cert=sebak.crt
tls-key=sebak.key
log-level=debug
log-format=terminal
log=
....
and n1
$ sebak node \
--network-id "this-is-test-sebak-network" \
--bind "https://localhost:12346" \
--tls-key "sebak.key" \
--tls-cert "sebak.crt" \
--storage "file:///tmp/db-n1" \
--secret-seed SBGJDQ2J4PIYU7JVGKIBLNF6X3DOEVW3I4W2T77M2B47X2MPSUNXZ7T7 \
--validators "GBNUTWSM4FRSEULVMHZF7NFQWIBGEDF5X5OHXFOZJB6SH5MIEDEJEJ2F GCZG7MBKRSS6MJVZOALYBJB5C223FSZ43MDTPX2O4UGQTCXTHWBDNUB6" \
--discovery http://localhost:12345 \
--log-level debug \
INFO[10-31|19:18:35] Starting Sebak module=main caller=run.go:401
DBUG[10-31|19:18:35] parsed flags: module=main
network-id=this-is-test-sebak-network
bind=https://localhost:12346
publish=https://localhost:12346
storage=file:///tmp/db-n1
tls-cert=sebak.crt
tls-key=sebak.key
log-level=debug
log-format=terminal
log=
....
and n2
$ sebak node \
--network-id "this-is-test-sebak-network" \
--bind "https://localhost:12347" \
--tls-key "sebak.key" \
--tls-cert "sebak.crt" \
--storage "file:///tmp/db-n2" \
--secret-seed SDQKKG2MBSAXVLUE5JFNM7MXQ7MV7WPRIEOS7U7KLWFDKYDKXTLSSRTC \
--validators "GBNUTWSM4FRSEULVMHZF7NFQWIBGEDF5X5OHXFOZJB6SH5MIEDEJEJ2F GDPQ2LBYP3RL3O675H2N5IEYM6PRJNUA5QFMKXIHGTKEB5KS5T3KHFA2" \
--discovery http://localhost:12345 \
--log-level debug \
INFO[10-31|19:18:35] Starting Sebak module=main caller=run.go:401
DBUG[10-31|19:18:35] parsed flags: module=main
network-id=this-is-test-sebak-network
bind=https://localhost:12347
publish=https://localhost:12347
storage=file:///tmp/db-n2
tls-cert=sebak.crt
tls-key=sebak.key
log-level=debug
log-format=terminal
log=
....
If nodes launched sucessful, each node will connect other nodes and will be ready to make consensus.
To spawn a simple network, we prepared to deploy using docker.
First build the docker image:
$ docker build . -t sebak
# The build process creates a rather large image, which is regenarated every time
# To clean up all orphaned images, you can run the following command
$ docker rmi -f $(docker images -f "dangling=true" -q)
Then you can spawn 3 nodes using the following commands:
$ docker run --net host --rm -it --env-file=docker/node1.env sebak
$ docker run --net host --rm -it --env-file=docker/node2.env sebak
$ docker run --net host --rm -it --env-file=docker/node3.env sebak