안녕하세요, 블록체인 좋아하는 sigmoid입니다. 얼마전 백서를 분석했던 Enigma 프로젝트의 샘플을 구동해보고 파악한 부분을 간략히 정리해봅니다.
Multi party computation
선택된 몇개의 노드가 연산을 처리하는 형태입니다. 퍼블릭체인에서 몇개의 노드만 일을 시키는 방식의 구현은 굉장히 어려운 문제인데요, Enigma 프로토콜은 principal node가 random seed를 전파하고, random seed로 Lottery를 돌려 당첨된 노드들이 참여하도록 구성되어 있습니다.
Off-chain computing
Ethereum의 계약 코드를 EVM에서만 실행하는 것이 아니라, 계약 코드의 일부를 TEE(Trusted Execution Environment)에서구동하는 형태입니다. Privacy에 민감한 처리를 intel sgx같은 컨테이너화 된 안전한 연산장치에서 돌리겠다는 뜻인데요. 따라서 sgx를 지원하는 intel cpu가 필요합니다만, 테스트넷에서는 emulation도 가능하도록 되어 있네요.
Trustness
연산이 실행된 후 TEE의 개인키로 서명된 데이터들이 온체인으로 커밋되고, 다른 노드들에 의해 유효성을 검증받도록 되어 있습니다. TEE가 실행했다고 한들, 해당 TEE를 구동하는 노드가 악의적으로 다른 연산결과를 제출할 수도 있기 때문입니다.
검증 부분이 제가 생각하는 블록체인의 가장 큰 장점 중 하나인데, Enigma가 MPC와 Privacy를 잘 비벼놨다고 느꼈습니다. .영리한 사람들이 참 많네요.
참고한 문서는 Enigma official blog의 Getting Started with the Enigma Protocol: A Complete Developer’s Guide 입니다. (https://blog.enigma.co/getting-started-with-the-enigma-protocol-a-complete-developers-guide-170b7dfa5c0f)
블로그에 나온대로 깃헙에서 2개의 코드를 다운 받습니다. 하나는 dapp이고, 하나는 enigma network인데요. 받아서 빌드하는건 워낙 자세히 블로그에 쓰여있으니 그대로 따라해보시면 됩니다. darq-truffle 설치하라고 나오는데 저는 그냥 ubuntu 기본패키지인 truffle사용했네요. (문제없이 샘플동작합니다)
샘플로 제공된 댑은 백만장자의 주소와 잔액을 몇개 추가한 뒤, 최고 부자를 조회하게 되면 결과가 반환되도록 구현되어 있습니다.
그동안 이더리움 코어쪽만 보다보니 dapp이나 layer2프로토콜에 대한 지식이 많이 부족했는데요, Enigma를 통해 댑의 기본 동작원리도 조금은 이해하는 경험을 하게 되어 개인적으로 참 좋은 시간을 보냈습니다.(node js와 rust는 완전 첫경험이네요)
public 체인에서 그룹을 구성하는 방법을 enigma는 신뢰가능한 principal노드 + 로터리로 풀었고, ekiden은 DKMS로 풀었는데 탈중앙화 측면에서는 ekiden이 좋아보이는데, 더좋은 방법은 없을지 재미있게 고민해볼만한 포인트인것 같습니다.
(크게보면 플라즈마도...)