본문으로 건너뛰기
SaferICO SaferICO스마트 컨트랙트 보안
누구나 이용 — 구독도 결제도 필요 없음

서명하기 전에, 이 트랜잭션을 읽으세요.

지갑은 '0xa9059cbb…'를 보여 주고 확인을 누르라고 합니다. 랩은 그것을 사람의 문장으로 되돌립니다: 어떤 함수를 부르는지, 인자는 무엇인지. 그 옆에는 손으로는 답하기 어려운 질문에 답하는 도구 여섯 개가 더 있습니다.

구독 불필요코드는 브라우저를 떠나지 않음공개 API누구도 고발하지 않음
//일곱 개의 도구

손으로는 답하기 어려운 질문들

각 도구는 구체적인 질문 하나에만 답합니다 — 그리고 무엇에는 답할 수 없는지도 함께 말해 줍니다.

트랜잭션 데이터 디코딩

calldata, 4바이트 셀렉터, 함수명을 붙여넣으세요. 4바이트 하나에 여러 시그니처가 대응할 수 있고 — 때로는 일부러 그렇게 만들어졌으므로 — 저희는 하나만 고르지 않고 가능한 후보를 전부 보여 드립니다.

실패 원인 읽기

요즘 트랜잭션은 되돌아갈 때 아무도 못 읽는 4바이트 커스텀 에러를 돌려줍니다. 저희는 그것을 실제 오류 메시지로 되돌리고, panic 코드도 16진수가 아니라 이름으로 적어 드립니다.

이 컨트랙트에서 새로 쓴 부분은 어디인가?

대부분의 ERC-20은 OpenZeppelin에 수십 줄을 얹은 것입니다. 라이브러리 지문을 먼저 빼면 남는 것이 팀이 실제로 쓴 코드이고 — 변경은 바로 거기에 숨어 있습니다.

두 컨트랙트 비교

변수명을 전부 바꾸고 서식을 새로 잡아도 아무것도 숨길 수 없습니다 — 비교는 텍스트가 아니라 토큰 구조를 기준으로 합니다. 겹치는 규모를 보고할 뿐, 누가 누구를 베꼈다고는 결코 말하지 않습니다.

이 돈은 어디서 왔나?

그 주소에 처음 송금한 사람까지 최대 세 홉을 거슬러 올라가고, 각 홉마다 근거가 되는 트랜잭션을 함께 보여 줍니다. 거리는 유죄의 증거가 아니며, 페이지에 그렇게 적혀 있습니다.

두 주소 사이의 최단 경로

두 주소 모두 사용자가 직접 넣으며, 어떤 명단도 관여하지 않고 어떤 고발도 성립하지 않습니다. 세 홉 이내로 제한됩니다 — '이 제한 안에서는 경로를 찾지 못했다'는 참인 말이고, '경로가 없다'는 이 도구가 내릴 수 있는 결론이 아닙니다.

공개 저장소 스캔

저희는 파일 목록만 뽑아내고, GitHub에서 파일을 받아 로컬에서 분석하는 것은 사용자의 브라우저입니다 — 코드는 저희 서버를 거치지 않습니다. 공개 저장소만 지원합니다: 어떤 인증 정보도 전송되지 않기 때문입니다.

도구 자체(스캐너, 콘솔, SAFI 워크스페이스)의 화면은 아직 영어입니다. 이 페이지들은 그 안으로 들어가기 전에 무엇을 하게 되는지 한국어로 끝까지 설명해 드립니다.

이 도구를 다르게 만드는 절제

추적 도구는 아주 쉽게 고발 기계가 됩니다. 이 도구는 그러지 않겠다는 결정 위에 서 있습니다.

⚖️ 거리는 유죄의 증거가 아닙니다

두 주소 사이의 한 홉은 사람이 아니라 네트워크를 설명합니다. 큰 거래소에서 출금해 본 지갑이라면 수만 개 주소와 한 홉 거리에 있고, 그중에는 반드시 나쁜 것들도 섞여 있습니다.

그래서 이 도구는 각 홉을 증명하는 트랜잭션을 보여 주고 판단은 사용자에게 맡깁니다. 어떤 주소도 '사기꾼'이라 부르지 않습니다. 그것은 의도에 대한 추론이고, 체인은 의도를 기록하지 않으니까요.

01측정한 것만 말하고, 추측한 것은 말하지 않습니다

4바이트 함수 셀렉터에는 여러 시그니처가 대응할 수 있고, 이 충돌은 빠르게 읽는 사람을 속이려고 일부러 만들어지기도 합니다. 그래서 저희는 일치하는 후보를 전부 보여 드립니다. 하나만 자신 있게 내미는 것이야말로 공격자가 이용하는 실수입니다.

02'찾지 못했다'는 '존재하지 않는다'가 아닙니다

경로 탐색은 세 홉과 정해진 횟수의 조회 안으로 제한됩니다. 아무것도 찾지 못했을 때 정직한 표현은 이것입니다: 그 제한 안에서는 찾지 못했다.

이 두 문장 사이의 차이가, 믿을 수 있는 도구와 듣기 좋은 말만 하는 도구의 차이입니다.

03비슷함은 표절이 아닙니다

두 ERC-20 사이의 원시 유사도는 대체로 OpenZeppelin이 얼마나 널리 쓰이는지를 재는 값입니다. 저희는 라이브러리 지문을 먼저 빼서, 결과가 이 프로젝트를 위해 쓰인 코드에 관한 것이 되게 합니다.

그렇게 하고도 도구는 겹치는 규모만 보고합니다. 누가 누구를 베꼈는지는 코드가 답할 수 있는 질문이 아닙니다 — 그것은 시간선이 답하고, 그것을 읽는 사람은 사용자입니다.

//자주 묻는 질문

랩에 관하여

구독이 필요한가요?
필요 없습니다. 분석 랩은 계정도 결제도 없이 쓸 수 있고, 모든 도구가 공개 API 엔드포인트로도 제공되므로 직접 만드신 코드에서 호출하실 수 있습니다.
제 저장소 코드가 여러분에게 업로드되나요?
아닙니다. 저희는 파일 목록만 뽑고, 각 파일을 GitHub에서 받아 로컬에서 분석하는 것은 사용자의 브라우저입니다. 코드는 어느 단계에서도 저희 서버를 거치지 않습니다. 비공개 저장소는 애초에 지원하지 않습니다 — 어떤 인증 정보도 보내지 않기 때문입니다.
디코딩 결과가 왜 하나가 아닌가요?
함수 셀렉터가 4바이트뿐이라 여러 시그니처가 같은 셀렉터를 만들 수 있기 때문입니다 — 우연일 때도 있고, 의도적일 때도 있습니다. 나머지 후보를 숨기고 하나만 자신 있게 내미는 것, 그것이 바로 공격자가 이용하는 지점입니다.
추적 결과에 어떤 주소가 나오면 연루된 건가요?
아니며, 도구도 그렇게 말하지 않습니다. 도구가 보여 주는 것은 그 주소들을 잇는 트랜잭션과, 있다면 그 출처 표시입니다. 결론은 사용자가 내리는 것이고, 거리만으로는 증거가 되지 않습니다.

송금하기 전에 컨트랙트부터 확인하세요

컨트랙트 주소를 붙여넣으면 위험을 감수하기 전에 소유자 권한, 유동성, 매도 시뮬레이션 결과를 볼 수 있습니다. 스캔 한 번마다 소액의 수수료가 있고 서명 전에 금액이 먼저 표시됩니다 — 요금제를 구독하면 횟수 제한 없이 포함됩니다.