
개발자 관점에서 본 Flashbots의 SUAVE 체인: MEV 외에도 EVM + TEE가 가져올 수 있는 가능성들은?
저자: ZHIXIONG PAN, DUGUBUYAN
SUAVE는 Flashbots가 개발한 탈중앙화 프로젝트로, TEE(Trusted Execution Environment) 환경을 갖춘 네트워크를 구축하여 MEV(Miner Extractable Value) 프로세스에서 발생하는 키 관리 및 다자간 신뢰 문제를 해결한다. 또한 SUAVE 프로젝트에 TEE가 도입되면서 MEV 문제 해결 외에도 다양한 가능성이 열렸다.
SUAVE 관련 코드 저장소
SUAVE 프로젝트는 이더리움 확장 기반으로 개발되어 EVM과 자연스럽게 호환된다. 현재 GitHub 상의 관련 프로젝트로는 SUAVE-geth, SUAVE-std, SUAVE-examples 등이 있다.
여기서 SUAVE-geth는 geth를 기반으로 확장된 실행 계층 코드로, 주로 geth에 암호화 연산 환경을 추가하고, 해당 환경 내에서 사용할 수 있는 precompile(사전 컴파일) 기능들을 포함한다. 특히 표준 HTTPS 요청을 위한 사전 컴파일을 추가해 개발자가 TEE 환경을 통해 다른 네트워크에 접근할 수 있도록 하였다. 또한 암호화된 매개변수 가져오기, 암호화 정보 저장 및 조회 등 TEE 기반 기능을 위한 일련의 사전 컴파일을 제공함으로써 신뢰 가능한 환경에서의 개발 인프라를 구성한다.
SUAVE-std는 개발자의 편의를 위해 제작된 라이브러리로, 개발 도구 모음이라고 이해할 수 있다. 예를 들어 HTTP 요청 사용 방법을 래핑하였으며, 이를 기반으로 ChatGPT를 사용하는 코드 라이브러리까지 패키징하였다. 덕분에 개발자는 ChatGPT 요청 메시지를 직접 조합하거나 응답을 파싱할 필요 없이, 단지 자신의 API key만 요청 메시지에 삽입하면 된다. 이러한 과정은 모두 TEE 환경 내에서 이루어지므로 API key의 보안이 보장된다. 초기에는 이 ChatGPT 표준 라이브러리가 기본적으로 GPT-3.5-turbo 모델을 사용하며 temperature 값도 0.7로 고정되었으나, 현재는 모델 등의 설정을 유연하게 매개변수로 전달할 수 있는 인터페이스가 추가되었다.
SUAVE-examples 프로젝트는 애플리케이션 개발 방법을 보여주는 예제 또는 초보자용 튜토리얼로 볼 수 있다. SUAVE 앱 개발을 처음 접하는 개발자는 이 프로젝트의 사례를 통해 학습하고 참고할 수 있다.
SUAVE 개발 실습
SUAVE는 이더리움을 확장한 프로젝트이므로(실행 환경을 MEVM, 즉 Modified Ethereum Virtual Machine이라 부름), 스마트 컨트랙트 개발은 EVM과 호환되며 공식 문서 역시 Solidity를 중심으로 설명한다. 따라서 기존의 Solidity 개발 경험은 그대로 활용 가능하다. SUAVE 앱 개발에서 스마트 컨트랙트 개발은 TEE 환경에서 암호화된 연산 기능을 지원하는 Solidity 개발로 이해할 수 있다.
몇 가지 핵심적인 SUAVE MEVM 사전 컴파일이 존재한다. 첫 번째는 confidentialInputs로, 애플리케이션 요청 시 암호화된 매개변수를 수신한다. 이 매개변수는 일반적으로 개인 키, API key 등 민감한 정보이며, 해당 정보의 평문은 반드시 TEE 환경 내에서만 노출되어야 하므로, 개발 과정에서 이 인터페이스를 통해 평문을 획득한다. 전송 과정 전체는 암호화되어 안전하고 신뢰할 수 있으며, 그 원리는 뒤에서 설명하겠다. 두 번째는 confidentialStore로, 민감한 정보를 저장하는 역할을 한다. 매개변수로부터 민감 정보를 얻은 후 즉시 계산에 사용하지 않고 나중을 위해 저장할 때 사용한다. 세 번째는 confidentialRetrieve로, 이후 계산 과정에서 민감 정보의 평문이 필요할 때 TEE 컨텍스트 환경에 데이터를 요청할 때 사용한다.
SUAVE는 민감 정보의 안전한 저장을 통해 다음과 같은 시나리오를 가능하게 한다. "사용자가 개인 키를 업로드하면, 제3자가 비즈니스 로직을 수행하다가 특정 조건을 충족했을 때 해당 개인 키를 사용해 서명을 수행할 수 있다. 이 경우 제3자는 지정된 규칙 하에서 사용자의 개인 키로 서명할 수 있지만, 절대 개인 키의 평문을 얻을 수는 없다."
SUAVE는 HTTPS 요청을 이용해 크로스체인 작업을 수행한다. 도구 모음 중 gateway라는 라이브러리를 사용하면 크로스체인 정보를 직접 읽어올 수 있는데, 본질적으로는 사용자가 특정 체인의 RPC 노드를 설정하거나 Infura, Etherscan 등의 API key를 업로드한 후, 필요한 시점에 해당 노드로 HTTP 요청을 보내는 방식이다. 크로스체인 쓰기 작업의 경우 transaction 패키지를 사용해 EIP1559 형식의 메시지를 인코딩한 후 eth_sendRawTransaction 인터페이스를 통해 트랜잭션을 브로드캐스트할 수 있다.
또 한 가지 주목할 만한 사용 사례는 Solidity 컴파일 후 생성된 bytecode를 민감 매개변수로 업로드하고 저장한 후, 조건이 충족되면 이를 배포하고 호출하는 것이다. 이를 통해 비공개 라이브러리가 형성된다. 이 사례는 '개인 키 + 비공개 bytecode 라이브러리' 형태로 확장할 수 있으며, 제3자에게 위임 호출을 할 때도 완전히 프라이빗한 거래를 가능하게 한다.
SUAVE의 특징
SUAVE의 최종 형태는 하나의 블록체인으로, 이를 SUAVE 체인이라 부른다. SUAVE 체인은 MEVM을 구현한 블록체인이라고 볼 수 있다. EVM과 호환되는 블록체인이므로 ERC20, ERC721 등의 자산을 SUAVE 체인 위에 구축할 수 있으며, 체인 상의 작업은 기존 EVM 계열 체인과 동일하다. 하지만 독특한 점은 오프체인 작업을 포함한다는 것이다. 예를 들어 다른 체인의 노드에 트랜잭션을 전송하는 등의 오프체인 작업 결과나 조건을 SUAVE 체인에 저장할 수 있고, 저장된 내용은 합의에 의해 보장된다. 이를 통해 오프체인 연산과 온체인 상태 간의 일관성을 달성할 수 있다. 예를 들어 개발자는 스마트 컨트랙트를 작성해 온체인에 조건을 기록(또는 수정)하도록 하고, 특정 체인의 네트워크 노드에 접근하여 반환값이 요구 조건을 충족하면 미리 정의된 ERC20 자산 이체를 수행할 수 있다.
이러한 모든 기능은 SUAVE의 오프체인 신뢰 가능한 컴퓨팅(TCE)에서 비롯된다. SUAVE는 Flashbots 팀이 개발했으며, Flashbots는 SUAVE를 "MEV의 미래(The Future of MEV)"로 보고 있으므로 번들 트랜잭션 처리 기능은 당연히 포함된다. 신뢰 가능한 환경을 갖춘 SUAVE 체인에서 MEV 관련 원리는 매우 간단하다. 번들 트랜잭션을 조합하여 Flashbots의 relay 노드로 전송하면 된다. 여기서 개인 키뿐만 아니라 코드 자체도 비밀리에 저장할 수 있어 큰 활용 잠재력을 지닌다. 예를 들어 빌더(builder)는 대상 체인에서 가스 보상 외에도 SUAVE 체인에서 특정 디지털 자산을 추가로 받을 수 있다. MEV 시장 측면에서 보면, 민감 정보가 안전하게 보장되는 환경에서 유연하게 비즈니스를 정의할 수 있다는 점이 현재 MEV가 달성하지 못한 부분이다(현재는 오프체인에서 신뢰, 계약, 명성 등에 의존).
SUAVE 개발 도구 및 인프라
개발자 입장에서 dapp 개발은 체인 상의 스마트 컨트랙트 개발 외에도 ether.js 등의 프론트엔드 도구들도 중요하다. SUAVE 앱 개발에서도 SUAVE 체인이 EVM 기반으로 개조되었기 때문에 ether.js, web3.js 등의 도구 역시 사용 가능하며, SUAVE 체인의 스마트 컨트랙트와의 상호작용 방식은 다른 EVM 호환 체인과 동일하다. 다만 이 도구들은 비밀 연산 환경(confidential environment) 기능은 호출할 수 없다. SUAVE 체인의 스마트 컨트랙트는 온체인(즉 SUAVE 체인) 작업과 오프체인(크로스체인 작업 포함) 작업으로 나뉘며, 오프체인 작업은 사실상 confidential 환경에서의 계산을 의미한다. confidential 환경의 계산을 위해서는 Flashbots 팀이 Go와 TypeScript 두 언어로 SDK를 제공하며, 사용법은 SUAVE 문서에 소개되어 있다. SUAVE 노드에 개인정보를 포함한 연산 트랜잭션(Flashbots 팀은 이를 Confidential Compute Request라 칭함)을 전송할 때, confidentialinputs 즉 민감 매개변수를 포함할 수 있으며, 이 매개변수는 전송 과정 전반에 걸쳐 오직 TEE 환경에서만 평문으로 노출된다.
마지막으로 스마트 컨트랙트 배포에 대해 말하자면, SUAVE 체인의 테스트넷 이름은 Regil이었으나 현재는 Toliman으로 업그레이드되었다. 배포 방법은 SUAVE 문서에 자세히 설명되어 있다. 배포 방식이나 배포 후 상호작용 방식 등은 이더리움 스마트 컨트랙트 배포와 크게 다르지 않다.
Kettle
스마트 컨트랙트 배포 후 실제 실행 방식은 이더리움과 차이가 있다. SUAVE의 주요 실행 단위는 Kettle이라 불린다. Kettle은 SUAVE의 TEE 실행 환경으로, MEVM 노드와 confidential data store를 포함한다. 개발자가 스마트 컨트랙트를 작성하고 배포한 후, 사용자가 confidential compute request(이하 CCR)를 보내면, 스마트 컨트랙트가 confidential compute를 필요로 할 때마다 실제로는 Kettle이 이를 실행한다.
Kettle의 구조도는 아래와 같다:

개발자가 Solidity로 앱을 개발하고 배포한 후 요청이 Kettle에 도달하면, 모든 처리는 MEVM에서 수행된다. MEVM은 geth의 기능 외에도 사전 컴파일 기능을 추가하여 민감 데이터의 저장 및 검색 등을 수행하며, SUAVE 체인의 상태를 처리(수정, 조회 등)하기도 한다.
Kettle의 주요 작업은 민감 정보 계산 요청의 수신 및 처리, 그리고 민감 데이터의 저장·검색 등이다. 예를 들어 어떤 민감 데이터를 저장하는 경우, 전체 프로세스는 다음과 같다. 사용자 프론트엔드에서 SDK 또는 suave geth 도구를 사용해 SUAVE 체인 상의 특정 스마트 컨트랙트에 CCR 요청을 보낸다. 이때 SDK 또는 suave geth 도구는 데이터 키(대칭 키)를 사용해 민감 데이터를 암호화한다. 이 데이터 키는 오직 Kettle 환경에서만 생성되고 노출되며, SUAVE의 RPC 노드는 암호문만 볼 수 있다. Kettle과 노드가 일대일 관계인지 여부는 SUAVE 문서에서 확인할 수 없다. 또한 Kettle 자체, 노드, 키 교환의 구체적인 원리 등도 문서에 명시되지 않았다. 그러나 알려진 암복호화 흐름을 기반으로 개발자는 민감 데이터가 사용자 프론트엔드에서부터 Kettle 내부의 TEE 환경까지 안전하게 보호될 것이라 믿을 수 있다.
민감 데이터는 Kettle 내 confidential data store에 저장되며, 개발자는 스마트 컨트랙트 작성 시 데이터 접근자 및 수정자를 지정할 수 있다. Kettle은 Transport 네트워크를 통해 이를 게시하며, 만약 해당 컨트랙트 내에서만 접근하도록 지정했다면, 이후의 CCR 요청도 반드시 동일한 Kettle로 전송되어야 한다. 왜냐하면 Kettle의 데이터 저장소는 전역적으로 동기화되지 않기 때문이다. 개발자가 스마트 컨트랙트를 배포한 후, 사용자는 해당 Kettle에 접근(CCR 요청 시 Kettle 주소를 반드시 지정해야 함)하여 민감 데이터를 사용할 수 있다. 사용자가 CCR을 보내 스마트 컨트랙트 내에서 민감 데이터를 요청할 때는, 데이터 저장 시 생성된 ID와 key를 사용해 검색하게 되며, 즉 민감 데이터는 키-값 방식으로 접근하고 사용된다.
HTTP 요청 등도 모두 Kettle이 처리한다. 분명히 이것은 SUAVE 체인 외부의 작업이며, 즉 단일 노드에서 실행되는 작업이다. SUAVE가 블록체인이지만, 블록체인 특성이 약한 이유다. Kettle이 CCR 요청을 실행할 때 여러 노드가 동시에 실행하고 검증하는 것은 아니다. 그 이유는 간단하다. 체인 외부 리소스에 접근하는 작업은 항상 멱등성을 보장할 수 없기 때문이다. 따라서 이러한 체인 외부 작업의 결과는 사실상 노드에 의존하게 된다. 따라서 개발자는 배포 시 Kettle 주소를 주의 깊게 선택해야 하며(이 점에서 Kettle은 특수한 스마트 컨트랙트처럼 볼 수 있음), 이후 사용자의 CCR 요청에는 반드시 해당 Kettle 주소가 포함되어야 한다.
또 한 가지 개발자가 유의해야 할 점은, 현재 테스트넷 Toliman에서는 Kettle이 반드시 TEE 환경에서 실행된다는 보장이 없다는 것이다. 따라서 테스트넷에서 스마트 컨트랙트를 개발할 때는 민감 데이터를 보호하고 진짜 민감 정보가 유출되지 않도록 주의해야 한다.
결론
SUAVE 체인은 TEE 환경을 도입함으로써 애플리케이션 개발에 강력한 능력을 제공하며, 잠재적인 활용 시나리오는 매우 다양하다. 간편하고 효율적인 크로스체인 작업은 Dapp 설계에 충분한 상상력을 부여한다.
SUAVE 체인의 Kettle 설계는 체인 외부 리소스를 처리할 수 있게 하지만, 이는 검증과 합의 문제를 동반한다. 성실하지 않은 Kettle은 네트워크에 치명적인 피해를 줄 수 있다. 어떻게 하면 Kettle이 악의적으로 행동하지 않도록 하거나, 악행 시 처벌받게 하며, 혹은 악행 비용을 충분히 높게 설정할 수 있을지가 해결해야 할 과제다. SUAVE 체인은 PoA(Proof of Authority) 합의 방식을 채택하고 있으며, 이것이 실제 운영에서 견고한지 여부는 아직 개발자들의 지켜볼 일이다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














