EOS 백서에 '결정론적(deterministic)'이란 단어의 의미
EOS 백서에 '결정론적(deterministic)'이란 단어가 자주 등장합니다.
제가 이해하는 '결정론적'이라는 단어의 의미를 알아보고자 합니다.
먼저, 백서에 등장하는 '결정론'은 아래와 같습니다.
- 애플리케이션의 결정론적 병렬 실행 (Deterministic Parallel Execution of Applications)
- 결정론적으로 동작하는 가상 머신을 통합할 수 있습니다. ('스크립트와 가상 머신 (Scripts & Virtual Machines' 부분)
- 결정론적이며 샌드박스인 형태로 만들 수 있습니다. ('웹어셈블리 (WASM; Web Assembly' 부분)
이것의 의미는 아래와 같습니다.
1번은 어플리케이션, 즉 스마트 컨트랙트가 결정론적으로 (병렬) 실행된다는 의미입니다.
2번의 경우 원문은 '"Any language or virtual machine that is deterministic "으로 표현되어 있습니다. 즉 스마트 컨트랙트에 사용되는 언어(language)가 결정론적이라고 이야기하고 있습니다.
3번의 경우 기존의 비결정론적인 웹어셈블리(WASM)를 결정론적으로 만들 수 있다는 것입니다. 원문은 "With a few small modifications, Web Assembly can be made deterministic "이라고 표현합니다. 즉, 가상 머신으로 사용할 WASM을 결정론적으로 고치겠다는 표현입니다.
3번의 경우를 제외하고 보면, 이것은 스마트 컨트랙트가 결정론적으로 실행된다는 이야기입니다.
이것을 이해하기 위해서는 현재 이더리움의 스마트 컨트랙트의 문제에 대해서 알아야 합니다.
이더리움의 경우, 솔레디티 등의 언어에서 스마트 컨트랙트를 컴파일할 때 가스(gas)를 정확히 예측할 수 없습니다.
이 때문에 만일 스마트 컨트렉트를 실행 중 설정된 가스비를 모두 사용하면, 이를 최초 상태로 되돌리는 롤백 (기능)을 해야 합니다.
이것은 해커가 이런 기능을 일부러 이용하여 네트워크를 마비시킬 수도 있는 나쁜 기능이고,
또한 컴파일 단계에서 컨트랙트에서 소모될 총 가스를 정확히 안다면, 공격자가 가스를 이용한 공격을 방어할 수 있는 여러가지 수단으로 이용할 수 있기때문에 컴파일 단계에서 가스를 정확히 예측하는 것이 중요합니다.
이를 해결하기 위해 이더리움 개발자들은 컴파일 단계에서 가스 계산을 정확히 할 수 있는 파이썬 언어와 문법이 비슷한 viper 언어를 개발하고 있습니다.
https://github.com/ethereum/viper
EOS는 코인의 지분율에 해당하는 만큼의 마이너 자원(리소스)의 사용권을 토큰 보유자에게 제공하는 방법으로 보안을 유지합니다.
즉, EOS는 마이너의 자원(리소스)에 대한 '리소스 사용 제한'이 있다는 것이고, 이 제한을 넘지 않은 거래만이 블럭에 포함될 수 있다는 것입니다.
이를 위해서는 EOS는 컴파일 단계에서 스마트 컨트랙트의 자원 사용량(이더리움으로는 가스에 해당함)을 정확히 측정할 수 있어야 합니다.
저는, 이와 같이 스마트 컨트랙트의 자원 사용량을 컴파일 단계에서 정확히 알 수 있는 것을 '결정론적'이라고 표현한 것으로 이해하고 있습니다.
이런 부분을 생각하면, 꼭 dApps로 만들어야할 상황이 아니면 현재 방식대로 앱을 만드는게 더 좋은 방법이겠다는 생각이 듭니다...
좋은 글 감사합니다.