Incentivized Testnet의 출시로 작년 Shelley 시대가 도래 한 이후 Cardano 플랫폼은 빠르게 변화하는 개발 기간에 들어 섰습니다. Ouroboros Classic 합의 프로토콜은 지난 30 개월 동안 Cardano Byron과 ada cryptocurrency를 지원했으며 곧 Ouroboros Praos로 전환 할 것입니다. 이것은 Cardano가 탈 중앙화 될 때 처음으로 Shelley에 전원을 공급하는 PoS ( Proof-of- Stake) 프로토콜 버전입니다 . 그것은 스테이 킹 과정에서 에이다 소지자 및 스테이크 풀 소유자에게 금전적 보상을 제공합니다.
우리는 2 월 20 일 Cardano를 원래의 합의 프로토콜 인 Ouroboros Classic에서 업데이트 된 버전 인 Ouroboros BFT로 전환 한 하드 포크로 업그레이드했습니다. 이 BFT 하드 포크는 Ouroboros BFT에서 전환 기간을 시작했습니다. Ouroboros BFT는 Praos로 전환하는 데 도움이되도록 설계된 프로토콜의 축소 버전으로 악의적 인 동작을 계속 방지합니다. 많은 사람들이 눈치 채지 못했을 것입니다. Daedalus 지갑 사용자에게는 표준 소프트웨어 업데이트를 의미했습니다. 거래소는 수동으로 업그레이드해야했지만 몇 주가 걸렸으므로 도움을 요청했습니다.
다음 이벤트는 3 월 30 일에 ' 바이런 재부팅 ' 이었습니다 . 이는 위임 및 탈 중앙화를 지원하는 새 노드와 향후 셸리 기능을 포함하여 많은 Cardano 구성 요소에 대한 완전히 새로운 코드를 공개했습니다. 새로운 코드베이스의 가장 큰 장점은 모듈 식으로 재 설계되었으므로 다른 컴포넌트에 영향을주지 않고 많은 컴포넌트를 변경할 수 있다는 것입니다.
BFT는 셸리 하드 포크의 점프 오프 포인트 역할을하며, Haskell 테스트 넷에 만족하면 발생합니다. 이 두 번째 하드 포크는 거래소, ada 소지자 및 지갑 사용자를위한 2 월 프로세스와 유사한 프로세스이며, 비 이벤트와 비슷할 것입니다.
그러나 모든 것이 표면에서 매끄럽게 보이지만 숨겨진 활동이 많이 있습니다. 연못에서 고요하게 수영하는 오리처럼 – 발이 잔잔한 물 아래에서 격렬하게 웅크 리고있는 반면, 우리의 블록 체인 엔지니어는 어려움을 겪고 있습니다.
그래서 우리는 Cardano 프로젝트의 두 명의 엔지니어 인 Duncan Coutts와 Edsko de Vries가 그들이 어떻게했는지 알아 내기 위해 앉았습니다. Duncan은 지난 3 년 동안 Cardano의 아키텍처 리더였으며, Duncan과 Edsko는 Cardano 개발에 사용되는 프로그래밍 언어 인 Haskell을 사용하여 35년을 보냈습니다,
던컨, 어떻게 했어?
Cardano 로드맵에 설명 된대로 IOHK의 블록 체인 엔지니어는 원활한 코드 업데이트를 믿습니다. 놀랍도록 복잡한 작업 인 단일 업데이트로 Ouroboros Classic에서 Praos 로의 전환을 시도하는 대신 Ouroboros BFT를 중개자로 사용하는 2 단계 접근 방식이었습니다 (그림 1). BFT 코드는 Byron 시대의 연합 노드 및 Byron 재부팅시 릴리스 된 Shelley 스타일 노드와 모두 호환됩니다. 릴레이 경주와 같습니다. 한 러너 (이 경우 한 프로토콜을 실행)는 다른 러너가 대기중인 핸드 오버 상자에 들어갑니다. 그들은 속도를 동기화하여 서로 완벽하게 호환되며 배턴을 넘겨 (메인 넷 운영) 배턴이있는 새로운 주자는 핸드 오버 박스에서 다음 랩을 계속합니다.
다달 루스 비행 과정은 모든 사람이 mainnet에, 우리는 핵심 노드를 통해 교환이 완료되면, 기존의 코드가 중복 된 것을 실행되면 우리는 신속하게 개발하고 새로운 지갑을 테스트하고있었습니다. 우리는 4 월 24 일에 출시 된 새로운 메인 넷 Daedalus 지갑과 함께 현재 전환 단계에 있습니다.
IOHK의 찰스 호 스킨 슨 (Charles Hoskinson) 수석 회장 이 하드 포크에 대한 화이트 보드 비디오 에서 설명하는 것처럼 우리의 목표는 '쉘리에 정상적으로 진입하는 것' 입니다. 이 작업을 수행하는 데 중요한 도구는 하드 포크 결합기를 만드는 것입니다.
그것은 농기계처럼 들립니다. 무엇입니까?
콤비 네이터는 다른 것들을 결합한 것의 기술적 용어 일뿐입니다. 예를 들어 덧셈은 숫자의 결합 자입니다. 하드 포크 결합기는 두 개의 프로토콜 을 단일 프로토콜로 결합 합니다. 우리는 이것을 두 프로토콜의 순차적 조합이라고 부릅니다. 왜냐하면 그것은 첫 번째 프로토콜을 잠시 동안 실행하고 어떤 시점에서 두 번째 프로토콜로 전환하기 때문입니다. 우리의 경우, 이것은 BTF에서 Praos로 이동할 때 Ouroboros의 두 가지 버전입니다.
이 모든 것의 영리한 부분은 작업을 수행하는 개별 모듈을 사용하는 동시에 서로와 블록 체인에 대해 가능한 한 적은 것을 알고 있습니다. 여기서는 단순성이 핵심이며, 우리가 '추상'이라고 부르는 세부 사항을 취하는이 프로세스입니다. 컨센서스 모듈의 대부분은 암호 화폐를 다루고 있으며 블록 체인에 거의 모든 것을 넣을 수 있다는 것을 알 필요조차 없습니다. 예를 들어, Ouroboros 블록 체인에서 Pokémon 원장의 예를 사용하여 세미나를 수행했습니다. 유일한 차이점은 원장 규칙입니다. 합의는 모두 동일합니다. UTXO 스타일의 회계보다는 포켓몬 재생 규칙을 사용하여 프로그래밍 전문 용어로 '인스턴트 화'했습니다. [기술적 인 관심이있는 독자를 위해 Edsko가 향후 블로그 게시물에서 '추상'프로세스 및 결합자를 자세히 살펴 보는 것을주의하십시오.]
간단하게 들리게
실제로 Cardano가 ada cryptocurrency와 다른 것들을 동시에 실행하기 때문에 까다 롭습니다. 캐러밴을 따라 운전하고 견인하는 동안 자동차의 모든 바퀴를 바꾸는 것으로 생각하십시오. 따라서 우리는 완전히 신뢰할 수있는 방식으로이 작업을 수행 할 수 있어야합니다.
우리는 이것을 일회성 작업으로 다룰 수 있었지만 프로토콜 결합기를 사용하여 일반적인 방식으로 수행하는 것이 합리적이었습니다. 더 나은 결과를 얻고 코드 작동을 보장하는 데 필요한 테스트가 훨씬 쉬워 지므로이 경로를 선택했습니다. 또한 앞으로 더 많은 하드 포크가 출시 될 예정이므로 선택이 더욱 명확 해졌습니다. 예를 들어, Cardano의 개발이 정점에 다 다르고 Goguen, Basho 및 Voltaire 시대를 거치면서 각 단계마다 하나 이상의 하드 포크가있을 것입니다.
그래서 까다로운 비트에 어떻게 대처 했습니까?
글쎄, 우선, 우리는 연구하지 않고 그것을해야했습니다. 연구원들은 단일 프로토콜을 독립적이고 완벽한 것으로 설명합니다. 그러나 그것은 우리가있는 곳이 아닙니다. 우리는 다른 것을 사용하는 체인으로 시작한 후 Praos를 실행하려고합니다. 하나의 프로토콜에서 다른 프로토콜로 일반적인 방식으로 진행되는 Edsko의 연구는 연구에서 다루지 않습니다. 그리고 그것은 어렵고 복잡합니다. 모든 세부 사항에는 많은 생각과 머리를 긁는 것이 필요합니다. 그러나 카르 다노 코드베이스 간 전환은 학계에서 출판 될 것으로 예상되는 것이 아닙니다. 그것은 새로운 측면을 가지고 있지 않으며 단지 구현 문제로 간주됩니다.
Edsko, 예를 들어 주시겠습니까?
Duncan이 말했듯이, 연구원들에게 이러한 구현 문제는 사소한 것이지만이를 처리하는 것은 우리가하는 일의 99 %입니다. 블록 체인의 시간 문제를 해결하십시오. 내가 몇 주 동안 머리를 두드리는 것입니다. 시간은 체인이 슬롯 당 최대 하나의 블록을 포함 할 수있는 슬롯으로 구분됩니다. 우리는 종종 실제 상황에서 슬롯 번호와 시간을 변환해야합니다. 예를 들어 노드가 '내 차례입니까?' 다음 블록을 생성합니다. 이것은 Cardano의 기본이지만 하드 포크 후에 슬롯의 길이가 변경됩니다. 바이런의 경우 슬롯은 20 초입니다. 셸리의 경우 2 초 또는 1 초입니다. 정말 복잡하게하기 위해, 하드 포크가 만들어지는 정확한 시점은 체인 자체에서 결정됩니다. 그러나 전환 시점이 언제인지 알아야합니다. 그것은 일시적입니다.
이것은 많은 복잡한 것들이 풀리는 진짜 닭과 계란의 영토입니다. 우리는 일을하는 방법에 대해 매우 정확해야합니다. 이론 상으로는 사소한 것일 수도 있지만 사물을 풀고 순환 문제가 아닌지 확인하는 것은 매우 어렵습니다.
우리는 그것이 틀릴 여유가 없기 때문에 당신이 옳다는 것을 어떻게 알 수 있습니까?
던컨 : 훌륭한 질문입니다. 내 대답은 당신이 두 가지 수준에서 대답에 온다는 것입니다. 첫 번째는 지적입니다. 문제를 분석하고, 수학을하고, 동료들과 이야기를 나누고, 문제가 어떻게 조화를 이루는 지 알 수있을 때까지 씨름합니다. 둘째, 모든 QuickCheck 테스트를 수행하여 이것이 생각하는 바를 수행한다는 확신을줍니다. 우리는 이러한 전환을 포함하여 전혀 생각할 수없는 비정상적인 사례에 실제로 적용되는 광범위한 테스트를 수행합니다. 코드 줄을 바꿀 때마다 100,000 번의 테스트를 수행 할 수 있습니다. [Lars Brünjes는 Haskell 제작자 중 한 사람인 John Hughes가 IOHK가 테스트 전략을 개발하는 데 어떻게 도움이 되었는지에 대해 글을 썼습니다 .]
Edsko : 예, 저는이 두 가지 사항에 동의합니다. 콤비 네이터 측면에서 필자는 작성한 코드가 제공해야한다는 보장과 원장의 요구를 보장함으로써 이러한 문제를 해결합니다. 나는이 '만약의'추론이 실제로 정당화되었다는 수학적 증거를 스케치 한 다음 공식 분석 팀에 의지한다. 공식적인 방법 팀은 블록 체인을 설명하는 수학적 규칙을 설정 한 사람들이며 필요한 보증을 제공하는 방식으로 규칙을 조정할 수 있습니다.
Duncan의 두 번째 요점으로, 위에서 언급 한 시간 문제는 수학적으로 열심히 생각하고 테스트함으로써 맞다는 것을 알고 있습니다. 전체 블록 체인이 있으면 타이밍 결정이 쉽지만 미래에 대한 예측은 어렵습니다. 다행히도 우리가 설정하는 방식은 테스트 블록 체인을 쉽게 만들 수 있다는 것을 의미합니다. 전체 블록 체인을 만든 다음이 체인을 반으로 자릅니다. 나는 전반부를 가지고 현재에 있다고 생각합니다. 나머지 반은 미래에 설정합니다. 그런 다음 '현재'(상반기)를 사용하여 '미래'(후반부)에 대한 예측을 수행하고 계산이 쉬운 모든 것에 대해 확인할 수 있습니다. 그들이 일치하면 모든 것이 정상이라는 것을 알고 있습니다.
언제부터 시작 했습니까?
Duncan이 OBFT의 천재적인 아이디어를 생각 해낸 직후. 그래서 약 18 개월 동안 콤비 네이터를 켜고 끄는 것에 대해 생각하고 있습니다. 2018 년 10 월부터 Ouroboros를 모듈 식으로 다시 작성하기 시작한 것이 GitHub 리포지토리에 대한 첫 번째 커밋에서 시작한 디자인 목표였습니다. 2018 년 12 월, 곧 OBFT와 Praos에서 프로토 타입 시연이있었습니다.
그리고 얼마나 많은 사람들이 참여 했습니까?
Duncan : 많은 사람들이 컨센서스 코드를 연구 해 왔지만,이 결합기와 같은 어려운 일이 생길 때마다 Edsko에게 전달합니다. 그는 우리의 소프트웨어 엔지니어입니다! 이것은 공식적인 지원 방법의 로프로 등반하는 것이 아니라 자유 등반으로의 Haskell 프로그래밍입니다.
마지막 생각?
Duncan : 실행중인 코드가 현재 단계적으로 폐지되었으며 한 달 전에 Cardano를 실행 한 코드가 더 이상 존재하지 않습니다. 모든 사람이 메인 넷에서 새 코드를 실행하고 코어 노드를 통한 스왑을 마치면 이전 코드는 중복됩니다. 우리는 지금 그 전환 단계에 있으며 아무도 하늘이 무너지고 있다고 소리 치지 않습니다. 아무도 눈치 채지 못했습니다.
Edsko : 그것은 그 자체로 상당히 큰 성과입니다. OBFT의 아이디어는 전환을하는 데 중요했지만 Shelley로 전환 한 후에는 더 이상 관련이 없습니다. 이것은 은행이 비용을 알고있는 것처럼 레거시 코드를 버리는 방법이었습니다.
던컨 : 모든 것이 제대로 작동하면 아무 것도 눈치 채지 못할 것입니다.
던컨과 에드 스코, 시간 내 주셔서 감사합니다. 나는 우리가 당신에게 다시 돌아올 수있게하는 것이 좋을수있습니다
출처:https://iohk.io/en/blog/posts/2020/05/07/combinator-makes-easy-work-of-shelley-hard-fork/?utm_content=buffer9dcaa&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer