이오스 백서 읽어주는 남자 3번째 포스팅입니다.
이태민님이 번역하시고 조재우님이 감수하신 이오스 기술백서를 제가 가지고 있는 백서를 읽는 능력(?)을 바탕으로 이오스 백서를 읽어볼까 합니다. 혹 제가 잘못 이해하는 부분이 있다면 독자분들이 바로 잡아주시길 바랍니다. 그리고 제가 이오스 백서를 읽어드리는 목적은 이오스에 대한 이해를 돕기 위함이지 투자를 권유하기 위함이 아님을 분명히 밝혀둡니다.
한글 번역된 기술백서 링크-이태민님이 번역하시고 조재우님이 감수하심
@leesunmoo/eos-leesunmoo
@leesunmoo/eos-2-leesunmoo 에 이어서 계속합니다.
역할 기반 권한 관리 (Role Based Permission Management)
권한 관리는 메시지가 정상적으로 인증(authorized)되었는지 결정하는 것을 포함됩니다. 가장 단순한 형태의 권한 관리는 트랜잭션의 서명 여부를 검사하는 것이나, 이는 이미 필요한 서명을 알고 있을 때 가능합니다. 일반적으로 권한은 사용자와 그룹에 부여되며 이는 종종 구분됩니다. EOS.IO 소프트웨어는 계정별로 누가, 언제, 어떤 작업을 할 수 있는지에 대하여 세부적으로 제어하는 선언적 권한 관리 시스템을 제공합니다.
이 부분부터 백서 내용이 제대로 어려워지기 시작하는 부분입니다. 위 내용이 큰 의미를 가지고 있는지를 저는 모르겠습니다. 그런데 스팀잇 포스팅 내용 중에 이오스 블록체인의 문제를 이야기할 때 기술적으로 구체적이지 않다고 주로 언급되는 부분이기도 합니다. 사실적 관점에서 이 부분이 기술적으로 가능하냐 아니냐는 저같은 허접이 평가할 부분이 아닙니다. 저같은 이들이 기술적으로 가능하다 아니다를 판단할 수 있다면 이미 그것은 그리 대단한 블록체인이 아닐겁니다. 소위 전문가라는 이들도 저랑 그닥 다르지 않습니다. 그들은 자신들이 마치 다 알고 있는 듯이 이야기 하지만 블록체인 기술은 지금까지 인류가 가보지 못한 길을 가는 것 입니다. 이오스 블록체인이 백서의 내용대로 개발이 가능한지 아닌지는 오직 댄 라이머만이 알 수 있습니다. 코스모스의 재권도 모르고 이더리움의 비탈릭도 모릅니다. 이더리움이 백서대로 개발될수 있는지를 비탈릭만이 알 수 있고 코스모스가 백서대로 개발될지를 재권만이 아는 것과 같은 이치입니다.
인증과 권한 관리를 표준화하고 애플리케이션의 비즈니스 로직과 분리하는 것이 중요합니다. 이것은 권한 관리가 범용적인 관점에서 이루어지도록 하는 도구를 개발할 수 있게 하며, 또한 성능 최적화의 큰 가능성이 열리게 합니다.
이오스 블록체인이 이더리움의 스마트컨트렉과 같은 기능을 수행할 것을 암시하는 부분입니다. 이미 이오스 블록체인이 이더리움의 스마트컨트렉 기능을 수행할 것이라고 알고 계신 부분을 확인해 보는 정도로 생각하시면 됩니다.
모든 계정은 다른 계정들(other accounts)과 개인키들(private keys)의 가중치 조합(weighted combination)으로 제어될 수 있습니다. 이를 통해 현실의 권한 구성 방식과 유사한 위계적 인증 구조(hierarchical authority structure)를 생성할 수 있으며, 또한 기금(funds)에 대한 다중 사용자 제어(multi-user control)를 보다 쉽게 하도록 합니다. 다중 사용자 제어는 보안 관점에서 큰 의의가 있으며, 이를 올바르게 사용할 경우 해킹으로 인한 도난의 위험을 큰폭으로 감소시킬 수 있습니다.
EOS.IO 소프트웨어는 타 계정으로 전송 가능한 메시지 타입을 키와 다른 계정의 자유로운 조합으로 정의할 수 있게 합니다. 예를 들어, 사용자의 소셜 미디어 계정의 키와 별도로 거래 권한의 키를 가질 수 있습니다. 다른 계정에 키를 할당하지 않고도 다른 계정이 사용자의 계정을 대신하여 활동할 수 있도록 할 수도 있습니다.
지난해 이더리움 블록체인 위에서 스마트컨트렉으로 구동되었던 더다오를 기억하시는 분이 있으실 겁니다. 더다오의 오류로 인한 펀딩 참여자의 멘붕은 지금 생각해보아도 어이가 없는 상황입니다. 저도 그 당시 더다오에 펀딩을 했던 1인 인지라 이더리움 스마트컨트렉을 생각할 때 마다 이더리움은 향 후 더다오 같은 사태에 어찌 대비하고 있을지 늘 궁금했었습니다. 이오스 블록체인은 위에 언급된 방식으로 해킹으로 인한 도난의 위험을 큰폭으로 감소시킬 수 있다고 이야기합니다. 위에 언급된 방식을 컴퓨터공학이나 암호학적으로 이해를 하고 있지는 못한 상태라 막연히 이전의 더다오 같은 일은 없겠구나 하는 정도로 이해하고 있습니다.
명명된 권한 수준 (Named Permission Levels)
EOS.IO 소프트웨어를 이용하여 계정은 상위 명명된 권한 수준들로부터 파생되는 명명된 권한 수준을 정의할 수 있습니다. 각각 명명된 권한 수준은 인증 방식(authority)을 정의합니다. 인증 방식은 다른 계정의 키와 명명된 권한 수준의 자유로운 조합에 대한 역치 다중서명 확인(threshold multi-signature check)입니다. 예를 들어, 한 계정의 "친구" 권한 수준은 해당 계정에 대해 어떠한 친구 계정으로도 동등하게 제어될 수 있게 할 수 있습니다.
이미 스팀 블록체인을 활용한 스팀잇을 사용해 보신분들은 오너키,엑티브키,포스팅키,메모키의 각각의 기능과 역할을구분하실 수 있습니다. 이오스 블록체인도 이와 유사한 방식으로 사인키,오너키,엑티브키,포스팅키,메모키를 가지는 것으로 이해됩니다. 현재의 스팀잇과 차이라면 포스팅키를 타인과 분할해서 사용할 수 있다는 부분이 눈에 들어옵니다.
다른 예제로서 Steem 블록체인이 있으며, 여기에는 3가지 하드 코딩된 명명된 권한 수준을 가지고 있습니다. 소유자(owner), 활동(active), 포스팅(posting) 입니다. 포스팅 권한은 투표나 글쓰기와 같은 소셜 활동을 할 수 있으며, 활동 권한은 소유자 변경 외 모든 활동이 가능합니다. 소유자(owner) 권한은 콜드 스토리지(cold storage)를 의미하며 모든 활동이 가능합니다. EOS.IO는 steem의 개념을 일반화하여 각각의 계정 소유주가 활동 그룹을 포함하는 독자적인 위계(hierarchy)를 정의할 수 있도록 합니다.
이오스 블록체인은 스팀보다는 조금 더 계정 소유주가 자신의 권한을 조정할 수 있는 기능이 추가되는 것으로 보입니다.
명명된 메시지 처리기 그룹 (Named Message Handler Groups)
EOS.IO 소프트웨어는 각각의 계정이 독자적인 메시지 처리기를 명명(named)하고 중첩 그룹화(nested groups)하는 것을 허용합니다. 명명된 메시지 핸들러 그룹(names message handler group)들은 권한 수준을 설정할 때 다른 계정으로부터 참조될 수 있습니다.
최상위 수준의 메시지 처리기 그룹은 계정 이름이며, 가장 낮은 수준은 특정 계정으로부터 받은 개별적인 메시지 타입입니다. 이러한 그룹들은 다음과 같이 참조될 수 있습니다. @계정명.그룹A.하위그룹B.메시지타입 (@accountname.groupa.subgroupb.MessageType)
이러한 모형을 이용하여 거래소의 계약을 거래 단위로 그룹화하여 입금과 출금을 별개로 다룰 수 있게 됩니다. 이러한 거래 계약의 그룹화는 교환소의 사용자에게 편의성을 제공합니다.
기술적으로 어찌 되는 것인지는 모르겠습니다. 이 부분 이해가 되시는 분이 댓글로 설명해 주시면 감사하겠습니다.
권한 매핑 (Permission Mapping)
EOS.IO 소프트웨어는 계정별로 어떠한 계정의 명명된 메시지 처리기 그룹과 보유하고 있는 명명된 관리 수준 간의 매핑을 진행할 수 있도록 합니다. 예를 들어, 계정 소유자는 해당 계정 소유자의 소셜 미디어 애플리케이션을 "친구" 관리 그룹과 매핑할 수 있습니다. 이 매핑을 통해, 어떤 친구들이라도 계정 소유자처럼 계정 소유자의 소셜 미디어에 포스팅할 수 있습니다. 친구들이 계정 소유자처럼 포스팅할지라도 그들이 가진 키로 메시지에 서명합니다. 이는 어떤 친구가 계정을 사용했고 무엇을 하였는지 알 수 있음을 뜻합니다.
이오스 블록체인이 잘되면 스팀블록체인에 어떤 좋은 점이 있을까? 라는 의문을 이오스 블록체인 이야기를 댄라이머가
스팀잇에 처음 포스팅 하기 시작했을 때부터 가진 적이 있습니다. 위 부분은 스팀블록체인이 이오스 블록체인에 스마트 컨트렉으로 연결한다면 소셜미디어로서 많은 기능을 저렴한 비용으로 얻을 수 있겠구나 하는 생각이 들게 하는 부분입니다.
권한 검사 (Evaluating Permissions)
@앨리스가 @밥에게 "액션" 타입의 메시지를 보낸다 가정해봅시다. EOS.IO 소프트웨어는 먼저 @앨리스가 @밥.그룹A.하위그룹.액션 처리기에 대한 권한을 매핑하였는지 확인합니다. 만약 매핑되어 있지 않다면 매핑이 발견될 때 까지 @밥.그룹A.하위그룹, @밥.그룹A, @밥의 순서로 검사합니다. 만약 메시지 처리기에 대한 매핑이 없으면 @앨리스.활동(active) 명명된 권한 그룹 매핑을 가정합니다.
만약 매핑이 확인이 되면 역치 다중서명 절차와 명명된 권한에 대한 인증을 통해 서명된 인증에 대한 유효성을 검증합니다. 실패할 경우 상위 권한으로 검사를 수행하며 최종적으로 소유자 권한인 @앨리스.소유자(owner)까지 검사를 진행합니다.
기술적인 부분이라 각자의 능력으로 이해하는 것 외에는 방법이 없지 싶습니다. 저는 이해 못하고 패스입니다.
기본 권한 그룹( Default Permission Groups)
모든 계정은 제한이 없는 "소유자(owner)" 권한과 소유자 변경 외 모든 것이 가능한 "활동(active)" 권한을 가집니다. 그외 다른 권한은 "활동(active)"으로부터 파생됩니다.
이미 스팀블록체인에서 명쾌하게 구현되어 있는 기술입니다.
권한 검사의 병렬화 (Parallel Evaluation of Permissions)
권한 검사 절차는 "읽기 작업만" 필요로 하며 트랜잭션으로 인한 권한의 변경은 블록이 종료될 때까지는 어떠한 영향도 발휘하지 못합니다. 이것은 모든 트랜잭션의 모든 키와 권한 검사가 병렬적으로 진행될 수 있음을 뜻합니다. 더 나아가, 롤백을 고려해야 할 수도 있어 처리 비용이 많이 발생하는 애플리케이션 로직이 없는 신속한 권한 검사의 가능함도 뜻합니다. 마지막으로, 이는 보류 중인 트랜잭션이 수신될 때 트랜잭션 권한을 평가할 수 있으며, 승인된 트랜잭션은 다시 검사할 필요가 없습니다.
전체적인 관점에서, 권한 검사는 트랜잭션 유효성 검사에서 많은 연산 비중을 가집니다. 그러므로 권한 검사를 읽기 연산만으로 구성하여 병렬화하면 전체 성능의 큰 향상을 얻게 됩니다.
메시지 로그(message log)로부터 블록체인의 결정된 상태(deterministic state)로 재구축(replay)하는 과정에서 권한 검사를 다시 수행할 필요는 없습니다. 정상적인 블록에 트랜잭션이 포함되어 있으므로 이 과정을 넘길 수 있습니다. 점진적으로 과대해지는 블록체인의 재구축에 드는 계산 비용을 큰 폭으로 감소시킬 수 있습니다.
블록체인에서 직렬과 병렬 이라는 단어가 등장할 때, 이것의 의미를 파악하는 것은 쉽지 않습니다. 대부분의 사람이 중학교 시절에 배운 건전지를 직렬 또는 병렬로 연결하는 시험 문제지를 떠올릴 것입니다. 블록체인에서 직결은 데이터를 처리함에 있어서 시간차 순으로 데이터를 처리하는 것으로 저는 이해하고 있습니다. 직렬은 동일시간에 복수의 데이타를 처리할 수 없다고 생각하시면 됩니다. 코인거래소에서 특정코인의 거래방식은 직렬처리로 이해하시면 됩니다. 비트코인의 이체처리도 직렬처리라고 이해하시면 됩니다. 물론 이 때 비트코인은 선입선출이 아니라 높은 수수료 순서대로 처리하는 차이가 있기는 합니다. 코인거래소를 거래소 전체의 흐름에서 보면 여러 코인이 동시간대에 처리됩니다. 이것은 병렬처리 방식으로 이해하시면 됩니다. 블록체인의 맏형님이신 비트코인은 탄생할 때 목적이 화폐기능을 하는 것 이었습니다. 그렇다보니 병렬처리를 그닥 염두에 두지 않아도 되었습니다. 블록체인으로 화폐기능 이외의 것을 수행하려면 병렬처리는 필수입니다. 이오스 블록체인은 이 병렬처리 기술을 구현하고 그것을 통해 트렌젝션의 유효성 검사의 효율을 높일 수 있게 된다는 의미입니다. 블록체인은 트렌젝션의 유효성 검사가 기능의 핵심이라고 해도 과언이 아닙니다. 그래서 이과정에 많은 시간과 컴퓨터 연산을 소비하게 됩니다. 이것을 얼마나 효율적으로 안정성 있게 수행하는가가 해당 블록체인의 성능입니다.
이후 부분은 다음 포스팅(eos 백서-4)에서 읽어드리겠습니다
감사합니다.
@leesunmoo 올림