Skip to content

Latest commit

 

History

History
150 lines (107 loc) · 8.13 KB

File metadata and controls

150 lines (107 loc) · 8.13 KB

import { Callout } from 'nextra/components'

How to bond

Introduction

For an in depth technical specification of the bond head over here ↗.

Initial settings

When IISS 3.1 will be activated, the bond requirement will be set to 5%. The slashing penalty will be set to 0% until the network and goloop is stable enough.

How to post a bond

You can find command line example further down this page If you want to remove your bond, there is an unbonding period of 7 terms, during which your bond can still be slashed

Using Keystore

Posting a bond is done in 3 steps:

  1. P-Rep whitelist up to 10 addresses which can post the bond. This is done using the following RPC command (setBonderList)
  2. Whitelisted bonder then must stake ICX to the P-Rep using (setStake)
  3. Whitelisted bonder then must post the bond to the P-Rep using (setBond)
ICONists can post a bond to up to 100 P-reps, if they are whitelisted by them A P-Rep can only receive a bond from 10 different ICONists

Using Ledger

You can manage your bond through ICONex and Ledger hardware. Here is a quick video to demonstrate the process.

Watch Video

Penalty/Slashing

When a P-Rep does not behave as expected, this bond will be slashed (ICX will be burn) following those specific rules.

An **opportunity** is defined as **one term** as Main P-Rep. Therefore, 30 opportunities means the last 30 terms as main P-Rep _(**which can be consecutive or not**)_

For example:

  • You are main prep for term1 to term100, you receive one penalty at term 100
  • You are sub prep from term101 to term199
  • You become main prep again from term200, you still have the previous penalty recorded

To get rid of all your previous penalties, make sure your node behave properly for 30 opportunities (30 terms as main prep).

L0 (Item) L1 (Detailed Item) L2 (Detailed Item) Description
Types
Validation Failure Penalty Condition P-Reps can get the penalty when fails to validate blocks successively for 660 blocks
Penalty Turn Skipping
Accumulated Validation Failure Penalty Condition P-Reps can get the penalty if, as a validator, accumulates validation failure penalty for 5 of 30 opportunities
There is a 4 validation failure penalty grace period and on 5th+ validation failure penalty within 30 opportunities
the P-Rep will continue to be burned 20% over and over again if the node continues to get validation failure penalties
Penalty Slash 10% of bond
P-Rep Disqualification Penalty Condition P-Reps can be disqualified via a “P-Rep Disqualification Proposal”
Penalty Disqualification
Slash 100% of bond
Missed Network Proposal Vote Penalty Condition P-Reps can get the penalty when fails to vote on a network proposal within 5 terms
Penalty Slash 10% of bond
Methods
Disqualification Disqualify the P-Rep immediately
Once disqualified, the P-Rep will be excluded in the list of P-Rep
Slashing Slash the amount of bond permanently
Turn Skipping Exclude the P-Rep from the validator set of the term temporarily

Command line example to post a bond

You can use public endpoints instead of a local node `url/uri`

preptools

config.json file (used in below commands)

{
  "url": "http://localhost:9080/api/v3",
  "nid": 7,
  "keystore": "wallet.json"
}

setBonderList

preptools setBonderList -c config.json --bonder-list hx5be1c0b343698ab2370524b598d48603d7c44a12,hxfbc0a8b4e5e8df8a2e93e8a9cd5325e37289bcd0 -p YOUR_PASSWORD -y

setBond

$ preptools setBond -c config.json hxa8df82e93e8a9cd5325e37289bcd0fbc0a8b4e5e,100 hx047e7de3d2623c008fdf3120180f95919c85bd95,200 -p YOUR_PASSWORD -y

goloop CLI

setBond

$ cat bond.json
{
  "params": {
    "bonds": [
      {
        "address": "hx047e7de3d2623c008fdf3120180f95919c85bd95",
        "value": "0x64"
      },
      {
        "address": "hxa8df82e93e8a9cd5325e37289bcd0fbc0a8b4e5e",
        "value": "0x123"
      }
    ]
  }
}

$ ./bin/goloop rpc sendtx call --to cx0000000000000000000000000000000000000000 --value 0x0 --key_store wallet.json --nid 1 --uri http://localhost:9080/api/v3 --key_password YOUR_PASSWORD --step_limit 0x1234123 --method setBond --raw bond.json

setBonderList

$ cat bonderList.json
{
  "params": {
    "bonderList": ["hx047e7de3d2623c008fdf3120180f95919c85bd95", "hx5be1c0b343698ab2370524b598d48603d7c44a12"]
  }
}

$ ./bin/goloop rpc sendtx call --to cx0000000000000000000000000000000000000000 --value 0x0 --key_store wallet.json --nid 1 --uri http://localhost:9080/api/v3 --key_password YOUR_PASSWORD --step_limit 0x1234123 --method setBonderList --raw bonderList.json