Skip to main content

Genesis Ceremony

Overview

This page describes an early iteration of the Silvermint genesis ceremony and provides instructions for validators participating in the launch of a Silvermint network.

Background

A genesis ceremony includes the work necessary to identify the known validators at launch and to create and distribute the genesis block, the first block of a blockchain. For Silvermint this means collecting the following information off-chain:

  • Public key the validator will use to sign blocks
  • IP address of the validator used for networking
  • Request to claim of a validator slot
  • Request to receive Silvermint coins at network launch

Prior to network launch validators receive a validator slot ID and a copy of the genesis block.

Submit Validator Information

  • Use Silvermint tools to generate the key set your validator will use to sign blocks. The instructions below generate the keys in the default location for Silvermint sudo ./wallet keygen -o=/etc/silvermint/keys/nodekey

  • Record the value in the pub file as hex value, you can use cat to view the hex value of the key: sudo cat /etc/silvermint/keys/nodekey.pub

  • With the public key you will use to sign blocks and the IP address of your validator you will use to connect to other validators, go to the Silvermint genesis ceremony website to Claim Validator Slot.

  • Record your validator id number provided at the end of the Claim Validator Slot process. You will include this value when you start your validator. If you need to find your validator id again later, use the Verify Validator Slot process.

  • Wait for the genesis ceremony admin to announce the genesis block is available to download. Select Get Genesis to download a zipped file.

  • Unzip the genesis block file and save it in the location where Silvermint can load it at node start. /var/silvermint/save the folders in the save director from the zipped folder should contain only the folders 0-1999

Wallet Balance Process

  • Download the silvermint wallet app to create your validator wallet, in a specific location: sudo ./wallet keygen -o=/etc/silvermint/keys/<keyname>

  • Record the value in the pub file as hex value, you can use cat to view the hex value of the key: sudo cat /etc/silvermint/keys/<keyname>

  • Go to the silvermint genesis ceremony website to claim your starting coin, click on Claim Wallet Balance and enter your info

Genesis Ceremony Process

Overview

This is an early iteration of the Silvermint genesis process. Prior to the launch of the Silvermint mainnet, this process will change based on validator feedback and new features. This process requires the following roles:

Genesis Admin - This is a person responsible for the creation and distribution of the genesis block, and validation all validators are available prior to opening the network to transactions.

Node Operator - This is a person responsible for instantiating a Silvermint node, providing all required details to the Genesis Admin, and starting a Silvermint node as a validator with the approved genesis block.

This process requires a communication channel participants. For Silvermint testing we will use the Silvermint Discord.

Steps in the Genesis Ceremony

  • Genesis Admin creates the keys for signing the starting balances in the genesis block. Saves keys to: sudo ./wallet keygen -o=/etc/silvermint/keys/adminkey

  • Start the Genesis Ceremony website using Silvermint Tools. sudo ./genesisapi

  • Genesis Admin announces Node Operators should use the Genesis Ceremony Tool to claim a validator slot and, if desired, claim coins as part of the genesis mint.

  • Genesis Admin verifies data submitted by Node Operators saved to the correct folders

  • Genesis Admin creates the genesis block: sudo ./mksnapshot --validators_dir=/.genesisapi/validators --txns_dir=/.genesisapi/transactions --save_dir=/.genesisapi/snapshot.d

  • Tar the snapshot.d file to snapshot.tar.gz, to be downloaded by the validators: tar -zcvf snapshot.tar.gz snapshot.d

  • Genesis Admin announces to Node Operators the genesis block is ready for download.

  • Node Operators start nodes using the genesis block, validator ID, and public key used for signing blocks.

  • Genesis Admin and Node Operators communicate to confirm all nodes are running and ready for transactions to be sent to the network.

Genesis API information

POST /validator

  • Description: Claim Validator Slot, takes a JSON object containing a string of the hex value of a wallet pubkey of a validator and the ip address of that validator to be added to the genesis ceremony, returns a string that is the id of the validator slot claimed for that validator wallet and ip
  • Body: JSON { "Wallet": string, "Ip": string }
  • Returns: string

POST /balance

  • Description: Claim Wallet Balance, takes a JSON object containing a string of the hex value of a wallet pubkey and the starting amount of that wallet to be claimed in the genesis ceremony, returns a string of the status of the transaction if successful returns Transaction saved
  • Body: JSON { "Wallet": string, "Amount": string }
  • Returns: string

GET /validator/:wallet

  • Description: Verify Validator Information, in the path contains a string of the hex value of a wallet pubkey of a validator, returns a JSON object containing information saved for that validator pubkey
  • Path Parameter: wallet string
  • Returns: JSON { "Wallet": string, "Id": string, "Ip": string }

GET /balance/:wallet

  • Description: Verify Wallet Information, in the path contains a string of the hex value of a wallet pubkey, returns a JSON object containing the information of that wallet starting balance
  • Path Parameter: wallet string
  • Returns: JSON { "Wallet": string, "Balance": int }

GET /genesis

  • Description: Gets Genesis Zip file
  • Returns: a file, snapshot.tar.gz

DELETE /validator/:wallet

  • Description: Remove Validator Information, in the path contain a string of the hex value of a wallet pubkey for a validator that is to be deleted from the genesis ceremony files, return a string stating if the validator was deleted
  • Path Parameter: wallet string
  • Returns: string