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

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

@GenieKim, 안녕하세요.

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

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

감사합니다.

참조:

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

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

@GenieKim

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

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

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

감사합니다.

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

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

네 그렇습니다.

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

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

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

@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을 구축하고 있는지에 따라서 위 언급한 기능이 필요할 수 있겠습니다. 더 추가적으로 궁금하신점을 남겨주시면 답변드리도록 하겠습니다

감사합니다.

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

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

2번관련: klaytn/CnStakingContract.sol at dev · klaytn/klaytn · GitHub
4번관련: klaytn/AddressBook.sol at dev · klaytn/klaytn · GitHub

감사합니다.