서명 전 거래 시뮬레이션: 지갑에서 꼭 확인해야 할 안전 기능

2026년 5월 6일

암호화폐 세계에서 “확인됨(Confirmed)”은 사실상 되돌릴 수 없다는 뜻이에요. 이더리움에서 한 번 승인한 거래는 실수였든, 피싱에 속아 진행한 것이든 블록체인에 영구적으로 기록되며, 대부분의 경우 사후 복구가 어렵습니다.

거래 시뮬레이션(Transaction Simulation)은 최근 몇 년 사이 크립토 지갑 보안에서 가장 중요한 기능 중 하나로 자리 잡았습니다. 원리는 간단합니다. 사용자가 실제로 서명하고 트랜잭션을 브로드캐스트하기 전에, 가상 환경에서 해당 거래를 미리 실행해 보는 것이죠.

즉, “지금 이 거래를 승인하면 온체인에서 어떤 일이 일어나는지”를 서명 전에 보여줍니다. 여기에는 자산 잔액 변화, 컨트랙트 호출 경로, 토큰 승인 권한 변경 등이 포함될 수 있어요.

이 기능은 말 그대로 치명적인 손실을 피하는 데 도움이 될 수 있습니다.

왜 거래 시뮬레이션이 필요한가요?

블록체인 거래의 기술적 내용은 대부분의 사용자에게 매우 불투명합니다. 지갑에 서명 요청이 뜰 때 사용자가 흔히 보는 정보는 다음 정도입니다.

  • 긴 16진수 calldata
  • 대상 컨트랙트 주소
  • 대략적인 Gas 추정치

거래 시뮬레이션이 없다면, 사용자는 이 거래가 실행된 뒤 실제로 어떤 변화가 생길지 직관적으로 알기 어렵습니다.

예를 들어 이 요청이 단순히 토큰 사용 권한을 승인하는 것인지, 실제로 유동성을 추가하는 것인지, 포지션을 종료하는 것인지, 아니면 낯선 주소로 자산을 전송하는 것인지 구분하기 어렵습니다.

이런 불투명성은 드레이너(Drainer) 공격과 피싱 서명이 성공하는 핵심 이유 중 하나입니다. Chainalysis의 연구에서도 많은 피해자가 사후에야 자신이 속았다는 사실을 알게 되며, 정작 서명 직전에는 무엇을 승인했는지 명확히 인지하지 못하는 경우가 많다고 설명합니다.

거래 시뮬레이션의 기술적 원리

거래 시뮬레이션은 보통 “포크된 상태(Forked State)” 위에서 EVM 실행을 미리 돌려보는 방식으로 동작합니다.

  1. 현재 체인의 상태를 읽습니다. 예: 계정 잔액, 컨트랙트 스토리지, 승인 기록 등
  2. 이 상태의 로컬 복사본에서 거래를 가상 실행합니다.
  3. 실행 전후의 상태 차이를 반환합니다. 예: 어떤 잔액이 늘었는지, 줄었는지, 어떤 승인 권한이 새로 생기거나 변경됐는지

이 과정은 클라이언트나 RPC 레이어에서 수행되며, 실제 네트워크에 거래를 브로드캐스트하지 않습니다. 따라서 실제 온체인 상태에도 영향을 주지 않습니다.

기술적으로는 이더리움 JSON-RPC의 eth_call 인터페이스와 Tenderly, Alchemy 같은 플랫폼의 시뮬레이션 API를 활용하는 경우가 많습니다.

EIP-712 구조화 서명이나 EIP-2612 Permit 서명의 경우, 품질이 좋은 시뮬레이션 도구는 서명 내용을 사람이 읽을 수 있는 형태로 파싱합니다. 예를 들어 원시 16진수 데이터 대신 “USDC X개를 컨트랙트 주소 Y에 승인합니다”처럼 보여주는 방식입니다.

거래 시뮬레이션으로 발견할 수 있는 대표적인 문제

악성 Approve 요청

Hyperliquid 같은 DEX를 사칭한 피싱 사이트에서 공격자는 겉보기에는 정상적인 USDC 승인 요청을 보낼 수 있습니다. 하지만 실제 spender 주소는 악성 컨트랙트일 수 있어요.

거래 시뮬레이션은 이런 경우 “50,000 USDC를 0x1234...abcd 주소(알 수 없는 컨트랙트)에 승인합니다”와 같은 결과를 보여줄 수 있습니다. 사용자가 기대한 작업과 명확히 다르다면, 서명 전에 멈출 수 있습니다.

대규모 잔액 이상 전송

일부 드레이너 트랜잭션은 transferFrom을 직접 호출해 지갑 안의 토큰을 공격자 주소로 옮기려 합니다.

시뮬레이션 결과에 ETH -5.2, USDC -25,000처럼 잔액 변화가 명확히 표시된다면, 이것이 정상적인 작업이 아니라는 점을 한눈에 확인할 수 있습니다.

배치 작업 안에 숨겨진 단계

EIP-4337 계정 추상화(Account Abstraction)는 하나의 UserOperation 안에 여러 작업을 묶을 수 있게 합니다. 이는 편리하지만, 악성 DApp이 사용자가 기대한 작업 뒤에 추가 전송 단계를 끼워 넣는 데 악용될 수도 있습니다.

거래 시뮬레이션은 전체 작업 순서를 보여줌으로써 숨겨진 추가 작업을 발견하는 데 도움이 됩니다.

예상보다 큰 슬리피지

정상적인 DEX 거래에서도 거래 시뮬레이션은 서명 전에 예상 체결 가격과 슬리피지를 확인하는 데 유용합니다. 현재 유동성 상황에서 거래를 실행해도 되는지 판단하는 데 도움이 되며, 유동성 부족으로 인한 큰 손실을 줄이는 데 참고할 수 있습니다.

무기한 선물 DEX에서 특히 중요한 이유

dYdX, GMX 같은 무기한 선물 DEX에서는 사용자가 자주 다음과 같은 작업을 수행합니다.

  • 포지션 오픈 또는 추가 진입: 큰 금액의 USDC 예치가 수반될 수 있음
  • 손절·익절 설정 조정
  • DEX 컨트랙트에서 자금 출금

각 작업은 온체인에서 서명이 필요한 트랜잭션일 수 있습니다. 거래 시뮬레이션은 사용자가 확인 버튼을 누르기 전에 “예치 후 계정 잔액 변화”, “출금 후 예상 수령 금액” 같은 구체적인 수치를 보여줄 수 있습니다.

이는 단순한 조작 실수를 줄이는 데 도움이 될 뿐 아니라, 중간에 삽입된 악성 요청을 식별하는 데도 유용합니다.

OneKey의 거래 시뮬레이션 방식

OneKey 지갑은 거래 시뮬레이션을 핵심 보안 기능으로 사용자 흐름에 통합하고 있습니다.

  • 자동 실행: 서명 요청이 들어올 때마다 자동으로 시뮬레이션을 실행하며, 사용자가 별도로 켤 필요가 없습니다.
  • 읽기 쉬운 결과: 기술적인 diff 대신 “잔액 변화 요약”처럼 이해하기 쉬운 형태로 보여줍니다.
  • 위험도 평가: 시뮬레이션 결과를 바탕으로 거래를 고위험, 의심, 정상 등으로 분류하고, 고위험 작업에는 경고를 표시합니다.
  • EIP-712 파싱: 구조화 서명 요청에서 owner, spender, value 같은 핵심 필드를 사람이 읽을 수 있는 형태로 보여줍니다.
  • 오픈소스 구현: OneKey GitHub 저장소가 공개되어 있어 보안 연구자가 시뮬레이션 로직을 검토할 수 있습니다.

OneKey 하드웨어 지갑과 함께 사용할 경우, 거래 시뮬레이션 결과를 기기 화면에서 확인할 수 있습니다. 컴퓨터 화면이 조작되더라도, 물리 기기에서 확인하는 내용과 시뮬레이션 결과를 대조할 수 있다는 점이 중요합니다.

또한 실전 무기한 선물 거래를 할 때는 OneKey Perps를 활용하는 흐름이 좋습니다. OneKey 환경 안에서 서명 요청을 확인하고, 거래 시뮬레이션과 서명 파싱 결과를 함께 검토하면서 포지션 오픈, 조정, 출금 과정을 더 신중하게 진행할 수 있습니다.

거래 시뮬레이션의 한계

거래 시뮬레이션은 강력한 도구이지만, 완벽한 보안 장치는 아닙니다. 다음과 같은 한계가 있습니다.

상태 의존성

시뮬레이션은 현재 온체인 상태를 기준으로 실행됩니다. 실제 거래가 포함되는 시점에는 가격, 잔액, 유동성, 컨트랙트 상태 등이 달라질 수 있어 결과가 완전히 일치하지 않을 수 있습니다.

복잡한 컨트랙트 로직

일부 컨트랙트는 동적 파라미터나 오프체인 데이터, 예를 들어 오라클 가격에 의존합니다. 이 경우 시뮬레이션 결과가 실제 실행 결과와 차이가 날 수 있습니다.

시간 의존형 공격

일부 정교한 공격 컨트랙트는 시뮬레이션 호출을 감지해 정상 결과를 반환하고, 실제 브로드캐스트 시점에만 악성 로직을 실행하도록 설계될 수 있습니다. 흔한 방식은 아니지만, 충분히 알아둘 필요가 있는 고급 공격 기법입니다.

따라서 거래 시뮬레이션은 매우 가치 있는 보조 도구이지만, 절대적인 안전망으로 여겨서는 안 됩니다. 컨트랙트 주소 확인, 승인 권한 관리(Revoke.cash 같은 도구 참고), 접속한 사이트와 요청 출처 확인을 함께 해야 더 탄탄한 방어 체계를 만들 수 있습니다.

함께 고려할 만한 거래 보안 습관

거래 시뮬레이션을 사용할 때는 다음 습관도 함께 들이는 것이 좋습니다.

  • 처음 사용하는 DApp에서는 항상 도메인과 공식 채널을 확인합니다.
  • 토큰 Approve 요청의 spender 주소를 확인합니다.
  • 무제한 승인보다는 필요한 한도만 승인하는 방식을 고려합니다.
  • 사용하지 않는 승인 권한은 주기적으로 정리합니다.
  • 큰 금액을 이동하기 전에는 소액 테스트를 고려합니다.
  • 하드웨어 지갑 화면에 표시되는 정보와 지갑 앱의 정보를 함께 확인합니다.

자주 묻는 질문

Q1. 거래 시뮬레이션은 Gas를 소모하나요?

아니요. 시뮬레이션은 로컬 환경이나 RPC 노드의 가상 환경에서 실행되며, 실제 온체인 거래를 만들지 않습니다. 따라서 Gas가 소모되지 않습니다. Gas는 사용자가 최종적으로 거래를 확인하고 브로드캐스트할 때만 발생합니다.

Q2. 모든 지갑이 거래 시뮬레이션을 지원하나요?

아닙니다. 거래 시뮬레이션은 지갑이 직접 통합해야 하는 기능이며, 지원 수준도 지갑마다 다릅니다. OneKey 지갑은 이를 표준 보안 기능으로 내장하고 있지만, 일부 구형 지갑은 여전히 원시 16진수 데이터만 보여주는 경우가 있습니다.

Q3. 시뮬레이션 결과가 정상으로 보이면 거래가 반드시 안전한가요?

반드시 그렇지는 않습니다. 앞서 설명한 것처럼 시간 의존형 공격은 시뮬레이션 때는 정상으로 보이다가 실제 실행 시 악성 로직을 작동시킬 수 있습니다.

또한 시뮬레이션 결과가 정확하더라도, 사용자가 그 의미를 오해한 상태에서 직접 승인하면 의도와 다른 거래를 실행할 수 있습니다. 결국 핵심은 “내가 무엇에 서명하는지 이해하는 것”입니다.

Q4. Hyperliquid에서 거래할 때 매번 시뮬레이션을 확인해야 하나요?

공식 앱에서 수행하는 일반적인 작업이라면 시뮬레이션은 주로 참고용에 가깝습니다. 하지만 새로운 웹사이트, 처음 연결하는 DApp, 예상과 다른 서명 요청이 나타난 경우에는 반드시 시뮬레이션 결과를 확인하는 것이 좋습니다.

“새로운 출처의 요청은 반드시 시뮬레이션을 본다”는 습관은 합리적인 보안 실천입니다.

Q5. 거래 시뮬레이션이 MEV 봇의 선행매매를 막아주나요?

직접적으로 막아주지는 않습니다. 거래 시뮬레이션은 주로 서명 내용의 가독성과 안전성 확인을 위한 기능입니다.

다만 시뮬레이션을 통해 예상 슬리피지를 확인하면 더 적절한 슬리피지 한도를 설정할 수 있고, 이로 인해 큰 슬리피지 손실이 발생할 가능성을 줄이는 데 간접적으로 도움이 될 수 있습니다.

마무리: 서명하기 전에 먼저 시뮬레이션하세요

되돌릴 수 없는 블록체인 환경에서 “나중에 후회”는 큰 의미가 없습니다. 거래 시뮬레이션은 서명 전에 한 번 더 확인할 수 있는 거울과 같습니다. 하드웨어 지갑의 확인 버튼을 누르기 전에, 내가 실제로 무엇을 승인하는지 볼 수 있게 해줍니다.

OneKey 지갑을 다운로드하면 내장된 거래 시뮬레이션과 서명 파싱 기능을 별도 설정 없이 사용할 수 있습니다. 무기한 선물 거래를 한다면 OneKey Perps를 함께 활용해 보세요. 포지션을 열고, 조정하고, 출금하는 각 단계에서 서명 내용을 더 명확히 확인하는 데 도움이 됩니다.

위험 고지: 이 글은 교육 목적의 참고 자료이며, 투자 조언이나 보안 보장을 의미하지 않습니다. 거래 시뮬레이션 기능에는 기술적 한계가 있으며 모든 유형의 악성 거래를 완전히 차단한다고 보장할 수 없습니다. 암호화폐 거래는 높은 시장 위험을 수반하며, 온체인 자산 손실은 일반적으로 되돌릴 수 없습니다. 관련 위험을 충분히 이해한 뒤 본인의 상황에 맞게 신중히 판단해 주세요.

OneKey로 암호화 여정 보호하기

View details for OneKeyOneKey

OneKey

세계에서 가장 진보한 하드웨어 지갑.

View details for 앱 다운로드앱 다운로드

앱 다운로드

스캠 경고. 모든 코인 지원.

View details for OneKey SifuOneKey Sifu

OneKey Sifu

암호화 의문을 해결하기 위해, 한 번의 전화로.