가격 투표
ZooBC의 몇몇 가격은 영원히 고정되어 있지 않습니다. 노드 레지스트리의 좌석들이 이에 투표합니다. 버전 0.5.8부터 투표로 정할 수 있는 모든 가격에 하나의 규칙이 적용됩니다. 스냅샷 주기(mainnet에서 30일)마다 한 번, 각 가격은 집계 대상 좌석 전체의 평균으로 움직입니다. 침묵한 좌석은 현행 가격으로 집계되며, 모든 투표는 먼저 현행 가격의 최대 20 % 위, 최소 절반까지로 제한됩니다. 발행 일정부터 잔액까지, 그 밖의 모든 것은 어떤 투표로도 손댈 수 없습니다.
투표로 정할 수 있는 것
| 가격 | mainnet 시작값 | 범위 |
|---|---|---|
| 전송 수수료 (수수료 배율) | 1.0, 투표에서는 0.01 ZBC로 표기 | 원자 단위 하나~1 ZBC, 즉 시작값의 최대 100배 |
| 계정 임대료 | 기간당 0.01 ZBC | 원자 단위 하나~기간당 10 ZBC |
| 토큰 유지비 | 기간당 0.1 ZBC | 원자 단위 하나~기간당 10 ZBC |
| 데이터셋 저장 가격 | 기간당 MiB당 0.05 ZBC | 원자 단위 하나부터 |
| 저장 배수 | 1.0 | 자체 범위 |
| 게이트웨이 스테이크 | 10 ZBC | 원자 단위 하나부터 |
| 마켓 개설 비용 | 50 ZBC | 원자 단위 하나부터 |
| 마켓 테이커 수수료 | 0.1 % | 1~100 베이시스 포인트 |
| 대기열 최소치 | 100 ZBC | 원자 단위 하나~250 ZBC |
전송 수수료는 모든 트랜잭션 하한에서 0.025 ZBC의 기본 작업 수수료에 곱해집니다(수수료). 대기열 최소치는 노드가 대기열에 들어갈 수 있는 최소 스테이크입니다(노드 등록). 그 밖의 가격은 해당 기능과 함께 설명합니다. 계정 임대료와 정리, 토큰 유지비 (지속), 데이터셋, 게이트웨이, 마켓과 주문입니다.
가격이 움직이는 방식
정지되지 않은 모든 등록 좌석은 한 표씩 가지며, 이들이 집계 대상 좌석입니다. 한 주기 동안 좌석은 원하는 만큼 자주 투표할 수 있으며, 가장 최근의 투표가 집계됩니다. 주기가 끝나면 다음과 같이 처리합니다.
- 각 투표를 제한합니다. 현행 가격의 최대 20 % 위, 최소 절반까지이며, 언제나 그 가격의 하한과 상한 안에 둡니다.
- 새 가격은 집계 대상 좌석 전체의 평균이며, 침묵한 좌석은 모두 현행 가격으로 집계됩니다.
아무도 투표하지 않으면 아무것도 바뀌지 않습니다. 던져진 투표의 중앙값도, 정확한 3분의 2 합의도, 가장 높은 투표도 아무것도 결정하지 않습니다.
계산 예시
집계 대상 좌석 열 개, 현행 가격 100의 경우입니다.
| 투표 | 각 투표의 집계값 | 새 가격 |
|---|---|---|
| 둘이 120에 투표, 여덟은 침묵 | 120, 120, 침묵한 좌석은 각각 100 | (2 × 120 + 8 × 100) ÷ 10 = 104 |
| 하나가 10,000에 투표, 아홉은 침묵 | 120 | (120 + 9 × 100) ÷ 10 = 102 |
| 하나가 0에 투표, 아홉은 침묵 | 50 | (50 + 9 × 100) ÷ 10 = 95 |
제한이 없다면 10,000이라는 투표는 단순 평균 1,090을 만들 것입니다. 제한을 먼저 적용하면, 좌석 하나는 좌석 열 개의 레지스트리에서 가격을 최대한의 한 단계 중 최대 10분의 1만큼, 좌석 100개의 레지스트리에서는 0.2 %만큼만 움직입니다.
가격이 움직일 수 있는 속도
모든 좌석이 최대한의 한 단계로 투표하더라도, 가격은 한 주기에 최대 20 % 오르고 최대 절반으로 떨어집니다. 열 배로 오르려면 약 13주기, 10분의 1로 떨어지려면 약 4주기가 걸립니다.
ZBC로 세는 모든 가격은 원자 단위 하나(0.00000001 ZBC)까지 투표로 낮출 수 있습니다. ZBC의 가치가 아주 높아지면 이 가격들도 함께 내려가, 계정이나 데이터셋을 유지하는 비용이 실질적으로 터무니없이 비싸지지 않게 할 수 있습니다. 계정 임대료의 0.01 ZBC에서 원자 단위 하나에 이르려면 약 20번 절반으로 줄여야 하므로, 최소 20주기가 걸립니다. 무료가 되는 것은 없습니다. 계산된 모든 요금은 최소 원자 단위 하나로 올림됩니다.
투표하기
투표는 좌석의 노드 키로 서명하는 수수료 없는 의무 트랜잭션입니다(노드의 키). 전송 수수료를 제외한 모든 가격은 SetConsensusParam(유형 51)으로 투표합니다.
전송 수수료는 두 단계로 투표하는 유일한 가격입니다.
- 주기의 전반부에 좌석은 자기 투표의 32바이트 해시만 담은 FeeVoteCommitment(유형 7)를 보내므로, 값은 숨겨진 채로 남습니다.
- 후반부에 값을 담은 FeeVoteReveal(유형 263)을 보냅니다.
공개는 같은 좌석이 같은 주기에 한 커밋과 해시가 일치할 때만 집계되며, 좌석의 가장 최근 유효 투표가 쓰입니다. 그다음 새 수수료는 다른 모든 가격과 같은 방식으로 계산됩니다.
안전장치
- 레지스트리 하한. 레지스트리의 좌석 수나 서로 다른 소유자 계정 수가 max(3, 제네시스 최소값), 즉 mainnet에서 7보다 적은 동안에는 레지스트리 전체의 어떤 결정도 확정되지 않습니다. 이 집계에서 한 운영자의 좌석 두 개는 한 표입니다.
- 주기마다 한 번. 파라미터는 주기마다 최대 한 번 바뀌며, 언제나 범위 안에 머뭅니다.
- 돈은 좌석들에게 남습니다. 이 가격들로 부과하는 것은 모두 등록 노드들에게 도달합니다. 임대료는 롱제비티 풀을 통해, 수수료는 추첨을 통해 갑니다(풀, 코인베이스 추첨).
어떤 투표로도 바꿀 수 없는 것
모든 노드가 각 블록의 코인베이스를 대조하는 발행 일정(공급과 발행), 어떤 계정의 잔액, 합의 규칙과 그 적용 높이, 그리고 제네시스입니다. 이것들은 제네시스와 노드 소프트웨어와 함께 정해지며, 어떤 투표나 키도 이를 움직이지 못합니다(ZooBC Foundation). 좌석들에게는 가격 외에 한 가지 투표가 더 있습니다. 좌석의 3분의 2는 소프트웨어 릴리스에 거부권을 행사할 수 있습니다(릴리스와 업데이트).