활성화 프로토콜

1. 기능

새로운 버전의 Waves 소프트웨어는 새로운 기능을 제공합니다. 새로운 기능들은 다수의 노들로부터 동시에 활성화되어야 합니다. 지금 전까지 기능들은 타임스탬프에 의해 활성화되었습니다. 이로 인해 노드 소유자들은 노드를 업데이트하는데 많은 시간이 걸렸습니다. 노드를 제시간에 업데이트하지 못했을 경우 의도지 않게 포크에 참여하는 상황이 발생합니다. 기능 활성화 프로토콜은 Waves 커뮤니티에게 적절한 속도로 새로운 기능을 적용할 수 있도록 해줍니다. 또는 일부 기능들을 적용하지 않게도 해줍니다.

1.1 기능의 식별

각각의 새로운 기능에는 고유한 순차 번호가 지정됩니다. ID를 할당 받은 신규 기능들의 리스트는 각각의 새로운 릴리즈와 함께 제공됩니다.

새로운 기능은 노드의 새로운 소프트웨어 버전과 함께 출시됩니다. 다른 버전들은 새로운 기능이 활성화될 때까지 동일하게 작동할 수 있습니다. 기능이 활성화된 후에 네트워크는 두 부분으로 나누어집니다: 기능을 구현하는 노드와 구현하지 않는 노드.

1.2 블록체인에서의 기능 상태

기능의 상태는 블록체인에 저장되어있습니다. 기능은 세 가지의 상태 중 하나의 상태로 나타납니다. 초기 상태는 Defined로 표시됩니다. 모든 기능은 또는 기능이 존재하지 않더라도 처음에는 상태가 표시됩니다. 다음 상태는 - Approved 입니다. 해당 기능이 마이너들로부터 필요한 투표수를 받았다는 뜻입니다. 정해진 기간(블록의 수)이 지나면 승인된 기능은 활성화됩니다. 그 순간(블록) 이후로 해당 기능을 구현하는 노드는 새로운 방식으로 작동하기 시작합니다.

2. 투표

투표는 마이너들이 수행합니다. 만약 마이너가 일부 기능을 지원하고 "예"를 투표하고 싶다면 configuration 파일에 있는 지원된 기능 목록에 기능의 숫자(ID)를 기입하면 됩니다. 그 이후로는 해당 마이너로부터 생성된 모든 블록에는 지원된 기능의 ID를 포함할 것입니다. 매 10,000 블록 (이 숫자는 다른 블록체인에서 다를 수 있습니다) 마다 노드는 기능을 지원하는 블록의 수를 합산합니다. 만약 해당 기능이 마지막 계산 기간 동안 80% 이상의 찬성표를 얻으면 승인됩니다. 승인되지 못한다면 투표는 계속 진행되고 또 다른 투표 기간 (메인넷의 경우 1만 블록) 동안 투표가 시행됩니다.

만약 노드가 새로운 기능이 승인된것을 확인하였지만 해당 기능을 구현하지 않는다면 지원되지 않는 기능의 활성화에 대한 경고 메세지가 기록될 것입니다.

승인된 기능이 활성화되기 전에 10,000블록을 통과해야 합니다. 이 기간은 비마이닝 노드들이 신규 버전으로 업데이트할 수 있도록 시간을 주는 것입니다.

새로운 기능이 활성화되었지만 노드가 이를 지원하도록 업데이트를 하지 않은 경우 노드는 자체적으로 종료되고 (기본 설정) 지원되지 않는 기능 활성화에 대한 오류가 기록될 것입니다.

경고

 테스트넷의 승인과 활성화 기간은 각각 3,000 블록으로 설정되어있습니다.
 테스트가 목적이기에 새로운 기능을 보다 빨리 활성화시킬 수 있습니다.

3. Configuration 파일 변경

새로운 configuration 파일 섹션에 features가 도입되었습니다. 이는 두가지의 매개 변수를 포함합니다:

  • auto-shutdown-on-unsupported-feature 는 yes 또는 no가 될 수 있습니다. 이 설정을 켜면 노드의 codebase에 기능이 구현되어 있지 않다면 해당 노드는 종료될 것입니다. 기본 설정은 yes로 되어있습니다.

  • supported는 노드 소유자가 지원하는 기능 ID 목록을 포함합니다. 기본 설정은 목록에 아무것도 등록되어 있지 않습니다.

새로운 섹션에 대한 예시를 아래에서 확인하세요.

 features {
   auto-shutdown-on-unsupported-feature = yes
   supported = []
 }

4. REST API 변경

기능 활성화 프로토콜을 지원하기 위해 새로운 API 방식이 노드/활성화 경로에 추가되었습니다. 이에 따라 기능의 현재 상태를 나타내는 JSON이 리턴 됩니다.

 {
   "height": 678929,
   "approvalInterval": 10000,
   "approvalThreshold": 8000,
   "nextCheck": 680000,
   "features": [
       {
           "id": 1,
           "blockhainStatus": "ACTIVATED",
           "nodeStatus": "SUPPORTED"
       },
       {
           "id": 2,
           "blockhainStatus": "APPROVED",
           "nodeStatus": "SUPPORTED"
       },
       {
           "id": 3,
           "blockchainStatus": "VOTING",
           "nodeStatus": "SUPPORTED",
           "supportBlocks": 7892,
       },
       {
           "id": 4,
           "blockchainStatus": "VOTING",
           "nodeStatus": "UNSUPPORTED",
           "supportBlocks": 7892
       }
   ]
 }

리턴된 오브젝트의 필드:

  • height - 노드의 현재 블록 height

  • approvalInterval - 승인 또는 활성화의 블록 주기 기간

  • approvalThreshold - 승인되기 위해 기능을 지원하는 블록의 수

  • nextCheck - 기능의 승인 또는 활성화 상태를 계산하는 next height

  • features - 모든 기능의 목록

  • id - 기능 ID

  • blockchainStatus - 기능의 현재 상태. DEFINED, VOTING, APPROVED 또는 ACTIVATED 로 나타남

  • nodeStatus - 노드 기능 상태. SUPPORTED 또는 UNSUPPORTED로 나타남

  • supportBlocks - 기능 지원을 포함하는 블록의 수

5. 예시

버전 1.0.0에는 새로운 멋진 기능이 도입되었습니다. ID는 123입니다.

버전 1에서는 마이닝 풀에서 총 지분의 40%인 'SuperMiners'들은 이 기능을 지원합니다. 'SuperMiners'의 관리자는 노드를 0.9.9 버전에서 1.0.0 버전으로 업데이트합니다. 그리고 123을 configuration 파일의 지원된 기능 목록에 추가합니다. 'SuperMiner' 노드는 1228765 height 이후로 각각의 채굴된 블록에 ID 123을 넣기 시작합니다. 하지만 다른 마이너들은 이 기능을 지원하지 않고도 그들의 노드를 1.0.0 버전으로 업데이트합니다.

1,230,000번째 블록 노드는 50%의 블록만이 123 기능에 대한 지원을 한다고 계산했습니다. 따라서 기능의 상태는 변함없이 유지됩니다. 투표 기간 동안 기능은 충분한 동의를 얻지 못해 승인받지 못했으며 투표는 계속됩니다.

SuperMiners'는 다음 10,000 블록 동안 몇 안 되는 마이너들이 이 기능을 지원하도록 설득했습니다. 1,240,000번째 블록에서 마지막으로 생성된 10,000개의 블록 중 9,102개의 블록이 기능을 지원하였습니다. 이는 약 91%입니다. 따라서 기능의 상태는 approved로 변경되었습니다. 그 순간 0.9.9 버전과 이전 버전을 실행하는 노드는 지원되지 않는 기능 승인에 대한 경고를 합니다.

1,250,000번째 블록에서 기능 123이 활성화될 것이며 노드 버전 1.0.0과 상위의 버전에서 사용이 시작됩니다. 이전 버전의 노드는 작동이 멈춥니다.

results matching ""

    No results matching ""