# 사이드체인에서 카운실을 추가/제거하는 방법

**URL:** https://devforum.kaia.io/t/topic/2231
**Category:** Kaia
**Tags:** klaytn
**Created:** [11월 2, 2021, 2:10오전 UTC](https://devforum.kaia.io/t/topic/2231 "2021-11-02T02:10:02Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![GenieKim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/geniekim/32/1075_2.png) [@GenieKim](https://devforum.kaia.io/u/GenieKim)
#### Post date: [11월 2, 2021, 2:10오전 UTC](https://devforum.kaia.io/t/topic/2231/1 "2021-11-02T02:10:02Z")

</div>

제네시스를 만들때 여러개의 cn노드를 설정하였습니다.  
중간에 특정 cn을 제거하고 새로운 cn을 추가하기 위한 방법이 있을까요?

---

<div class="post-metadata">

### Author: ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)
#### Post date: [11월 2, 2021, 7:15오전 UTC](https://devforum.kaia.io/t/topic/2231/2 "2021-11-02T07:15:09Z")

</div>

@GenieKim, 안녕하세요.

API를 통해서 추가 및 삭제가능합니다.

- `governance.vote("governance.addvalidator", <cn address>)`
- `governance.vote("governance.removevalidator", <cn address>)`

감사합니다.

참조:

> **[governance](https://docs-space.klaytn.com/bapp/json-rpc/api-references/governance)**
>
> APIs related to the Klaytn Governance.

---

<div class="post-metadata">

### Author: ![GenieKim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/geniekim/32/1075_2.png) [@GenieKim](https://devforum.kaia.io/u/GenieKim)
#### Post date: [11월 3, 2021, 5:39오전 UTC](https://devforum.kaia.io/t/topic/2231/3 "2021-11-03T05:39:50Z")

</div>

제네시스에서 생성한 CN의 경우 자동으로 KLAY 스테이킹된 컨트랙트가 함께 배포되는 것 같습니다.  
신규로 add하는 CN의 경우 스테이킹을 어떻게 해야하나요?  
스테이킹을 해야 블록을 생성할 수 있는 것 아닌가요?

이건 다른 질문입니다만, 제네시스에서 useGiniCoeff를 설정하지 않으면 블록 생성 슬롯을 배정할때 라운드 로빈으로 모든 CN이 순서대로 생성하게 되는것인가요? 아니면 스테이킹 수량에 따라 확률적으로 생성하게 되는 것인가요?

---

<div class="post-metadata">

### Author: ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)
#### Post date: [11월 5, 2021, 2:13오전 UTC](https://devforum.kaia.io/t/topic/2231/4 "2021-11-05T02:13:01Z")

</div>

@GenieKim

제네시스에서 생성한 CN이 어떻게 등록된 CN을 의미할까요?  
자동으로 Staking된 컨트랙트는 배포되지 않습니다.

`0000000000000000000000000000000000000400 ` 주소에 addressbook이라는 컨트랙트가 배포되고, 각 CN Staking contract들은 address book에 등록되는 과정을 거칩니다. 신규로 CN을 추가하는 경우 새로운 CN contract를 address book에 등록해야합니다.

Staking 양에 따라서 block proposer가 될 확률이 변경되고요, staking양이 많을 수록 proposer가 될 확률은 증가합니다. 지니계수를 사용하면 그 확률이 staking양에 정확하게 비례하게 늘어나진 않습니다.

감사합니다.

---

<div class="post-metadata">

### Author: ![GenieKim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/geniekim/32/1075_2.png) [@GenieKim](https://devforum.kaia.io/u/GenieKim)
#### Post date: [11월 8, 2021, 1:55오전 UTC](https://devforum.kaia.io/t/topic/2231/5 "2021-11-08T01:55:09Z")

</div>

homi를 통해 생성된 CN에 대해서 문의드렸습니다.  
그렇다면 homi로 생성하지 않고 genesis.json파일에서 키 정보가 없는 새로운 CN을 등록하려면  
validator add 를 통해 등록 후 addressbook컨트랙트를 호출하여 스테이킹해야되나요?

추가로 genesis에서 사이드체인의 KLAY 초기 발행량을 수정할 수 있는지 궁금합니다.  
아니면 고정값인가요?

---

<div class="post-metadata">

### Author: ![Pepper](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/pepper/32/1478_2.png) [@Pepper](https://devforum.kaia.io/u/Pepper)
#### Post date: [11월 8, 2021, 2:59오전 UTC](https://devforum.kaia.io/t/topic/2231/6 "2021-11-08T02:59:14Z")

</div>

네 그렇습니다.

발행량의 경우 genesis에서 키 별로 가지는 초기 balance 및 reward의 MintingAmount(채굴시 보상) 을 통해 수정할 수 있습니다.

---

<div class="post-metadata">

### Author: ![GenieKim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/geniekim/32/1075_2.png) [@GenieKim](https://devforum.kaia.io/u/GenieKim)
#### Post date: [11월 23, 2021, 8:08오전 UTC](https://devforum.kaia.io/t/topic/2231/7 "2021-11-23T08:08:28Z")

</div>

거버넌스의 addValidator를 통해 새로운 CN을 추가하고  
아래 코드를 참고하여 CNStakingContract를 사이드체인에 배포하였습니다.

> <https://github.com/klaytn/cn-staking-contract-tests/blob/master/index.js>

그 다음 순서는 addressbook 컨트랙트에서 CNStakingContract와 CN주소를 등록하는 것으로 알고 있는데 맞나요?  
현재 addressbook은 0000000000000000000000000000000000000400 주소로 genesis.json에서 배포한 상태입니다.  
addressbook에서 constructContract, registerCnStakingContract, activateAddressBook 순으로 호출하면 되는 것이 맞는 지 궁금합니다.

---

<div class="post-metadata">

### Author: ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)
#### Post date: [11월 26, 2021, 6:59오전 UTC](https://devforum.kaia.io/t/topic/2231/8 "2021-11-26T06:59:24Z")

</div>

@GenieKim 안녕하세요,

우선 현재 klaytn repo에 있는 cnStakingContract와 AddressBook을 초기화 하는 방법은 다음과 같습니다.

1. [AddressBook] `constructContract`: adminList와 requirement를 통해서 multisig를 호출할 admin과 정족수를 설정
2. (Lockup 물량 및 초기 상태 리뷰 함수 호출: contract에 물량 락업 설정 및 상태를 확인하기 위한 함수 호출)
3. [CnStakingContract]: `submitRegisterCnStakingContract`: cn staking address와 reward address를 등록하기 위한 함수
4. (KIR / POC 컨트랙트 초기화)
5. [AddressBook] `submitActivateAddressBook`: address book 활성화

AddressBook과 CnStakingContract는 여러명의 admin을 두어 호출하는 multi sig방식으로 구현이 되어있습니다. 이외에 초기 토큰 락업 물량을 설정하는 방법이나 KIR / POC등 블록 생성 reward를 분배받는 컨트랙트 관련 함수들도 포함되어있습니다.

GX내에서도 해당 컨트랙트 배포 및 관리를 tool을 개발하여 사용하고 있습니다. 어떤 형태의 service chain을 구축하고 있는지에 따라서 위 언급한 기능이 필요할 수 있겠습니다. 더 추가적으로 궁금하신점을 남겨주시면 답변드리도록 하겠습니다

감사합니다.

---

<div class="post-metadata">

### Author: ![GenieKim](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/geniekim/32/1075_2.png) [@GenieKim](https://devforum.kaia.io/u/GenieKim)
#### Post date: [11월 29, 2021, 5:01오전 UTC](https://devforum.kaia.io/t/topic/2231/9 "2021-11-29T05:01:53Z")

</div>

말씀해주신 내용 중 2번은 어떤 컨트랙트의 어떤 함수일까요?  
그리고 4번의 컨트랙트 코드는 github 어디에서 찾을 수 있을까요?

---

<div class="post-metadata">

### Author: ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)
#### Post date: [12월 2, 2021, 5:04오후 UTC](https://devforum.kaia.io/t/topic/2231/10 "2021-12-02T17:04:27Z")

</div>

f2f 답변 드린바와 같이 AddressBook과 CNStaking 컨트랙트는 다음과 같습니다.

2번관련: [klaytn/CnStakingContract.sol at dev · klaytn/klaytn · GitHub](https://github.com/klaytn/klaytn/blob/dev/contracts/cnstaking/CnStakingContract.sol)  
4번관련: [klaytn/AddressBook.sol at dev · klaytn/klaytn · GitHub](https://github.com/klaytn/klaytn/blob/dev/contracts/reward/contract/AddressBook.sol)

감사합니다.
