게시일자:2020년 5월7일

출처: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%20(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)

집필자:Anthony Quinn, Editor(IOHK)

번역: Paul Ko (앰버서더)

우리는 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 스타일 노드와 모두 호환성이 있습니다. 릴레이 경주와 같습니다. 한 러너 (이 경우 한 프로토콜을 실행)는 다른 러너가 대기중인 핸드 오버 박스에 들어갑니다. 그들은 속도를 동기화 (서로 완벽하게 호환성이 있기 때문에)시켜 다음 러너에게 바톤을 넘겨 (메인넷을 운영), 다음으로 바톤을 넘겨 받은 새로운 주자는 핸드 오버 박스에서 다음 랩을 향해 계속합니다.

[그림1] 메인넷 바론에서 쉘리까지의 로드맵

Daedalus Flight 프로세스는 새로운 지갑을 신속하게 개발하고 테스트하는 데 도움이 되었으며, 일단 모든 사람이 메인 넷에서 지갑을 실행하고 코어 노드에서 스왑을 마치면 이전 코드는 불필요하게 됩니다. 우리는 4월 24일에 출시된 새로운 메인넷 Daedalus 지갑과 함께 현재 전환 단계에 있습니다.

IOHK의 책임자 찰스 호스킨슨 (Charles Hoskinson)이 하드포크에 대한 화이트 보드 비디오에서 설명한 것처럼 우리의 목표는 ‘셸리에 정상적으로 진입’하는 것입니다. 이 작업을 수행하는 데 중요한 도구는 하드포크 결합기를 만드는 것이었습니다.

그것은 농기계처럼 들립니다. 무엇입니까?

콤비네이터(결합기)는 다른 것들을 결합한 것의 기술적 용어 일뿐입니다. 예를 들어 덧셈은 숫자의 결합자입니다. 하드포크 결합기는 두 개의 프로토콜을 단일 프로토콜로 결합합니다. 우리는 이것을 두 프로토콜의 순차적 결합이라고 부릅니다. 왜냐하면 첫 번째 프로토콜을 잠시 동안 실행하고 어떤 시점에서 두 번째 프로토콜로 전환하기 때문입니다. 우리의 경우, 이것은 BTF에서 Praos로 전환할 때의 Ouroboros의 두 가지 버전이 됩니다.

이들 모든 것의 현명한 부분은 서로 블록체인에 대해 가능한 한 거의 알지 못하는 사이에 작업을 수행하는 개별 모듈을 사용하는 것이었습니다. 여기서는 중요한 것은 단순성이며 우리가 ‘추상화’라고 불리는 세부 정보를 가져 오는 과정입니다. 거의 모든 컨센서스 모듈은  암호통화를 다루고 있다는 것을 알 필요도 없고, 블록체인에 거의 모든 것을 넣을 수 있습니다. 예를 들어, 우리는 Ouroboros 블록체인에서 Pokémon 원장의 예를 사용하여 세미나를 진행했습니다. 유일한 차이점은 원장 규칙입니다. 합의는 모두 동일합니다. UTXO 스타일의 회계가 아니라 Pokémon게임을 하기 위한 규칙에 따라 설정합니다(프로그래밍 전문 용어로는 ‘인스턴트화’라고 합니다). [기술적인 관심이 있는 독자를 위해 Edsko가 향후 블로그 게시물에 ‘추상화 ‘프로세스 및 결합기를 자세히 살펴보는 것에 주의해 보세요]

간단하게 들리는데요

실제로 Cardano가 ada cryptocurrency와 다른 것들을 동시에 실행하기 때문에 까다 롭습니다. 자동차를 운전하여 캐러밴을 견인하고 있을 때 자동차의 모든 타이어를 바꾼다고 상상해 보십시오. 따라서 우리는 완전히 신뢰할 수있는 방식으로 이 작업을 수행할 수 있어야 합니다.

우리는 이것을 일회성 작업으로 다룰 수 있었지만 프로토콜 결합기를 사용하여 일반적인 방식으로 수행하는 것이 합리적이었습니다. 이 방법을 선택한 것은 더 나은 결과를 얻고 코드 작동을 보장하는 데 필요한 테스트가 훨씬 수월했기 때문이었습니다. 또한 앞으로 더 많은 하드포크가 있을 예정이므로 선택이 더욱 명확해졌습니다. 예를 들어, Cardano의 개발이 절정에 도달하여 Goguen, Basho 및 Voltaire 시대를 거치면서 각 단계마다 하나 이상의 하드포크가 있을 것입니다.

그래서 까다로운 비트에 어떻게 대처했습니까?

글쎄요, 우선, 우리는 연구하지 않고 그것을 해야 했습니다. 연구원들은 단일 프로토콜을 독립적이고 완벽한 것으로 설명합니다. 그러나 그것은 우리가 있는 곳이 아닙니다. 우리는 다른 것을 사용하는 체인으로 시작한 후 Praos를 실행하려고 합니다. 한 프로토콜에서 다른 프로토콜로 일반적인 방식으로 진행하는 Edsko의 연구는 이 조사에서는 다루지 않고 있습니다. 그리고 그것은 힘들고 복잡합니다 모든 세부 사항에는 많은 생각과 머리를 긁는 것이 필요합니다. 그러나 카르다노 코드베이스 간 전환은 학계에서 출판될 것으로 기대되는 것이 아닙니다. 새로운 측면이 아니라 단순한 구현의 문제로 간주되고 있습니다.

Edsko, 예를 들어 주시겠습니까?

Duncan이 말했듯이, 연구원들에게 이러한 구현 문제는 사소한 것이지만 이를 처리하는 것은 우리가 하는 일의 99%입니다. 블록체인의 시간 문제를 예로 들겠습니다. 몇 주 동안 머리를 두드리고 있던 것이었습니다. 시간은 슬록으로 분할되어 체인에는 슬롯당 최대 1개의 블록을 포함할 수 있습니다. 예를 들어, 다음 블록을 생성하기 위해 노드가 ‘내 차례인가?’를 알아야 하는 경우와 같이 현실 세계에서는 슬롯 번호와 시간을 자주 변환할 필요가 있습니다. 이것은 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로 전환한 후에는 더 이상 관련이 없습니다. 이것은 은행이 비용을 알고있는 것처럼 레거시 코드를 버리는 방법이었습니다.

던컨 : 모든 것이 제대로 작동하더라도 아무 것도 눈치 채지 못할 것입니다.

던컨과 에드 스코, 시간 내 주셔서 감사합니다. 모두를 다시 일자리로 돌려 보내드리는 게 나을 것 같습니다.

이상입니다.

카르다노에 관한 기사를 앞으로도 계속해서 전달해 갈 수 있도록 JOY 풀에 위임을 해 주시면 홈페이지 운영에 도움이 많이 될 것 같습니다.

JOY 풀에 대한 운영상황을 알고 싶으신 분들은 https://t.me/joypool 을 통해서 자세한 내용을 접하실 수 있습니다.