씨레벨(Sealevel) – 병렬 처리된 수천 개의 스마트 컨트랙트

“솔라나는 세계에서 가장 성능이 뛰어난 무허가 블록체인입니다. 현재 솔라나 테스트넷에는 각각의 독립된 200개의 노드가 GPU와 함께 운영될 때 50만TPS 이상의 속도를 꾸준히 유지하고 있습니다. 이를 위해서는 여러가지 최적화와 새로운 기술의 구현이 필요하며, 결과적으로 블록체인 개발에서 새로운 차원의 네트워크 역량(보안성, 성능/확장성, 탈중앙화, 호환성, 상호운용성 등)을 보여주는 획기적인 변화를 이끌어낼 것입니다.

솔라나 네트워크를 가능하게하는 7 가지 주요 혁신은 다음과 같습니다:
역사 증명(POH)— 합의 이전의 시계;
타워 비잔틴 장애허용(Tower BFT) – 역사증명으로 최적화된 버전의 프랙티컬 비잔틴 장애허용(PBFT) ;
터빈(Turbine) – 블록 확산 프로토콜;
걸프스트림(Gulf Stream) – 멤풀이 없는 트랜젝션 전달 프로토콜
씨레벨(Sealevel) – 스마트 컨트렉트 병렬처리 런타임;
클라우드브레이크(Cloudbreak) – 수평으로 확장된 계정 데이터베이스; 그리고
복제자(Replicators) – 분산 원장 저장소
이번 블로그에서는 솔라나의 스마트 컨트랙트 병렬처리 런타임인 씨레벨(Sealevel)에 관해 살펴보도록 하겠습니다. 시작하기 전에, 한 가지 생각해 봐야할 것은 EVM과 EOS의 WASM기반 런타임은 모두 싱글 스레드라는 것입니다. 즉, 한 번에 컨트랙트 하나가 블록체인 상태를 업데이트합니다. 솔라나가 구현하고 있는 것은 검증노드가 사용할 수 있는 가능한 많은 코어를 활용하여 수만개의 컨트랙트를 병렬처리할 수 있는 런타임입니다.
“솔라나가 트랜잭션을 병렬처리할 수있는 비결은 트랜잭션 실행 중에 트랜잭션이 읽거나 쓰는 모든 상태데이터를 설명하기 때문입니다. 이를 통해 겹치지 않는 트랜잭션을 동시에 실행할 수 있을뿐만 아니라, 동일한 상태를 읽는 트랜잭션도 동시에 실행할 수 있습니다.

프로그램과 계정
솔라나의 계정 데이터베이스인 클라우드브레이크는 퍼블릭 키를 계정에 매핑 한 것입니다. 계정은 잔액과 데이터를 유지하며, 여기서 데이터는 바이트 벡터입니다. 계정에는 “소유자” 필드가 있습니다. “소유자”는 계정의 상태 전이를 관리하는 프로그램의 퍼블릭 키입니다. 프로그램은 코드이며 상태가 없습니다. 또한 상태 전환을 위해 할당된 계정의 데이터 벡터에 의존합니다.
“1. 프로그램은 자신이 소유한 계정의 데이터만 변경할 수 있습니다.

“2. 프로그램은 자신이 소유한 계정에서만 인출 할 수 있습니다.

“3. 모든 프로그램은 모든 계정에 크레딧을 제공할 수 있습니다.

“4. 모든 프로그램은 모든 계정을 읽을 수 있습니다.

“기본적으로 모든 계정은 시스템 프로그램의 소유로 시작됩니다.

“1. 시스템 프로그램은 계정 소유권을 할당할 수있는 유일한 프로그램입니다.

“2. 시스템 프로그램은 초기값이 0인 데이터를 할당할 수있는 유일한 프로그램입니다.

“3. 계정 소유권 할당은 단 한 번만 가능합니다.

“로더(loader) 프로그램이 사용자 정의 프로그램을 로드합니다. 로더 프로그램은 계정의 데이터를 실행 가능으로 표시할 수 있습니다. 사용자는 다음 트랜잭션을 수행하여 사용자 정의 프로그램을 로드합니다.

1. 새로운 퍼블릭 키를 만드세요.
2. 코인을 키로 옮기세요.
“3. 시스템 프로그램이 메모리를 할당하도록 지시하세요.

“4. 시스템 프로그램이 계정을 loader에게 지정하도록 지시하세요.

“5. 바이트 코드를 조각 메모리에 업로드하세요.

“6. 로더 프로그램이 메모리를 실행 가능으로 표시하도록 지시하세요.

“이 시점에서, 로더는 바이트코드를 확인하며 바이트코드가 로드된 계정은 실행 가능한 프로그램으로 사용될 수 있습니다. 새 계정은 사용자 정의 프로그램의 소유로 표시될 수 있습니다.

“여기서 핵심적인 부분은 프로그램이 코드이며, 키- 값 저장소 내에는 프로그램과 해당 프로그램에만 쓰기 권한을 부여하는 일부 키가 있다는 것입니다.

트랜젝션
“트랜젝션은 명령어 벡터를 지정합니다. 각 명령에는 프로그램, 프로그램 명령, 그리고 트랜잭션에서 읽고 쓰려는 계정 목록이 포함됩니다. 이러한 인터페이스는 디바이스에 대한 저수준 운영 체제(low level Operating System) 인터페이스에서 영감을 얻었습니다.

size_t
readv(int d, const struct iovec iov, int iovcnt);
struct iovec {
char iov_base; / Base address. /
size_t iov_len; / Length. /
};
“readv 또는 writev와 같은 인터페이스는 사용자가 읽거나 쓰려는 모든 메모리를 커널에 미리 알려줍니다. 이를 통해 OS가 장치를 프리 페치하고 디바이스를 준비하며 디바이스가 허용하는 경우 작업을 동시에 수행합니다.

“솔라나에서 각 명령어는 미리 읽고 쓰기를 원하는 계정을 VM에 알려줍니다. 이것이 VM에 대한 최적화의 근간입니다.

“1. 보류중인 수백만건의 거래를 정렬세요.

“2. 겹치지 않는 모든 트랜잭션을 병렬로 스케줄에 올리세요.

“또한 CPU 및 GPU 하드웨어 설계 방식을 활용할 수 있습니다.

솔라나, 확장성이 뛰어난 블록체인
SIMD 명령어를 사용하면 단일 코드 조각을 여러 데이터 스트림에서 실행할 수 있습니다. 이는 씨레벨(Sealevel)이 솔라나에서만 가능한 추가적인 최적화를 실행할 수 있음을 의미합니다.
“1. 모든 인스트럭션을 프로그램 ID별로 정렬하십시오.

“2. 모든 계정에 대상으로 프로그램을 동시에 실행하십시오.

“이것이 어떻게 효과적인 최적화인지 더 알고 싶으시다면, CUDA 개발자 안내서를 살펴보십시오.

“CUDA 아키텍처는 확장 가능한 다중 스레드 스트리밍 멀티프로세서(SM) 배열을 기반으로 구축되었습니다. 호스트 CPU의 CUDA 프로그램이 커널 그리드를 호출 할 때, 그리드의 블록이 열거되어 사용 가능한 실행 용량을 가진 멀티 프로세서에 분배됩니다.”
최신 Nvidia GPU에는 4000 CUDA 코어가 있지만 멀티 프로세서 대략 50여개 뿐입니다. 멀티 프로세서는 한번에 하나의 프로그램 명령어만 실행할 수 있지만, 80 개가 넘는 다른 입력값을 병렬 처리할 수 있습니다. 따라서 씨레벨이 로드한 들어오는 모든 트랜잭션이 CryptoKitties::BreedCats와 같이 하나의 프로그램 명령을 호출하면, 솔라나는 사용 가능한 모든 CUDA 코어에서 모든 트랜잭션을 동시에 실행할 수 있습니다.
“공짜는 없으므로, SIMD 최적화를 실현하려면 실행된 명령들은 적은 수의 분기 포함해야하며, 모두 동일한 분기를 가져야합니다. 멀티 프로세서는 가장 느린 경로 실행으로 인해 일괄 처리됩니다. 이렇게 까다로움에도 불구하고, Sealevel을 통한 병렬 처리는 단일 스레드 런타임과 비교하여 블록체인 네트워크가 작동하는 방식에 근본적인 해결책을 제공하며, 매우 높은 처리량과 유용성을 가능케합니다.

솔라나, 확장성이 뛰어난 블록체인
“솔라나는 역사증명, 복제증명, 걸프스트림과 같은 혁신 기술과 함께 씨레벨을 구현하여 세계에서 가장 성능이 뛰어난 블록체인을 만듭니다. 솔라나 테스트 넷은 현재 가동 중이며, http://explorer.solana.com/에서 확인할 수 있습니다. 비용 상의 이유로, 적은 수의 노드만 운영하고 있지만, 벤치마킹을 위해 AWS, GCE, Azure 클라우드 인프라에 구축된 데이터 센터 23곳에 흩어져 있는 200개가 넘는 각각의 독립된 노드(서로 하드웨어를 공유하지 않음)를 운영할 수 있도록 준비하고 있습니다.


현재 런타임이 작동 중이며, 개발자들은 이제 테스트나우(testnow)에 코드를 배포할 수 있습니다. 개발자들은 C 언어로 스마트 컨트랙트를 만들 수 있지만, 솔라나팀은 러스트 툴체인을 적극적으로 개발 중입니다. R러스트는 솔라나 스마트 컨트랙트 개발에 있어 가장 중요한 핵심 언어가 될 것입니다. 러스트 툴체인은 솔라나 자바스크립트 SDK의 일부로 모든 개발자들이 사용할 수 있고, SDK는 더 업그레이드될 겁입니다.
솔라나는 곧 코스모스의 게임 오브 스테이크(Game of Stakes)와 유사한 투어 드 솔(Tour de SOL)에서 노드를 운영하는 밸리데이터/검증인에게 인센티브를 제공하는 공개 베타 테스트넷을 출시합니다. 투어 드 솔은 대중들이 솔라나 네트워크의 한계를 테스트하는데 도전하여 토큰도 확보하는 테스트넷 공개 참여 이벤트입니다.