[공지] 스팀코인판 스왑 오류 발생 리포트 및 처리 계획 안내

문제 사후 분석 리포트

(1) 스팀코인판 스왑 처리 우선순위

스팀코인판 스왑은 스팀 엔진 오더북 DEX가 지속적인 접속 오류로 인한 사용자 불편함을 개선하기 위해 개발되었습니다. Uniswap v2와 유사하게 사용자가 직접 풀 유동성을 공급/해제하고 유동성 풀의 교환 비율에 따라 스왑되는 방식으로 동작합니다.

스팀코인판 스왑은 KRWP토큰을 중심으로 SCT-KRWP, SCTM-KRWP, STEEM-KRWP 이렇게 3가지의 풀로 구성되어 있습니다.

KRWP토큰이 메인 토큰으로 묶여서 라우팅되어 거래가 되는 방식이기 때문에 만약 SCT를 STEEM으로 교환하는 경우, 실제로는 다음과 같은 2개의 스왑 거래가 일어나게 됩니다.

[거래1] SCT를 KRWP로 교환
[거래2] KRWP를 STEEM으로 교환

반면에 KRWP를 STEEM으로 매도하는 경우에는 1번의 거래로 스왑이 종료됩니다.

따라서 다음과 같은 3가지의 거래가 있는 경우에 실제 스왑이 처리되는 순서를 정리해보면 이렇습니다.

[스왑 신청 순서]
(1) A유저(첫 번째 신청) : SCT를 STEEM으로 스왑
(2) B유저(두 번째 신청) : SCTM를 STEEM으로 스왑
(3) C유저 (세 번째 신청) : KRWP를 STEEM으로 스왑

[실제 처리 순서]
(1) A유저(1차 스왑) : SCT ➡️ KRWP 변경
(2) B유저( : SCTM ➡️ KRWP 변경
(3) C유저 : KRWP ➡️ STEEM 교환 완료
(4) A유저 : KRWP ➡️ STEEM 교환 완료
(5) B유저 : KRWP ➡️ STEEM 교환 완료

신청 순서는 A ➡️ B ➡️ C 순이었으나 실제로는 KRWP토큰을 스왑한 C유저가 제일 먼저 STEEM을 받게 되는 것입니다. 결과적으로 동시다발적인 스왑 거래가 요청되는 경우 KRWP를 매도한 사람이 이득을 보게 되는 방식이 됩니다.

위의 예시처럼, KRWP 매도 요청을 우선 처리하도록 설계가 된 것이 문제 발생의 원인 중 하나입니다.

(2) 스왑 트랜잭션 관련 DB 저장 오류

위의 예시 화면에서 알 수 있듯이 여러 트랜잭션이 동시에 몰리는 경우 한 개의 블록에 여러 개의 트랜잭션이 담기게 됩니다.

스왑 트랜잭션이 요청된 건들은 DB에 고유한 키 값으로 구분이 되며 등록이 되는데, 여기서 고유한 키 값이란 주민등록번호와 같이 동일한 값이 없는 완전히 고유한 구분 값을 의미합니다.

1개의 블록에는 여러 트랜잭션이 담길 수 있기 때문에 이 고유 키 값을 블록넘버가 아닌 Txid로 설정했어야 하나 블록넘버로 설정이 되어 있던 관계로, 동일한 블록 넘버를 가진 스왑 요청의 경우 DB에 정상적으로 저장되지 않은 문제가 발생했습니다.

위 이미지와 같이 Txid를 키값으로 하여 DB에 등록이 되었어야 하나 블록넘버를 고유 키 값으로 하여 일부 거래의 누락 현상이 발생하였습니다.

펜딩 중인 트랜잭션 반환 처리

스팀코인판 스왑 재개 후 많은 트랜잭션이 동시다발적으로 몰리면서 위에서 설명한 문제들이 원인이 되어 스왑이 제대로 동작하지 않은 점에 대해서 다시 한 번 사과의 말씀을 올립니다.

먼저 펜딩 중인 트랜잭션들은 다음과 같이 반환 처리가 진행될 예정입니다.

  • @jacobyu님께서 반환 처리 후 별도의 포스팅을 통해 안내
  • 반환 처리 기간 : 3월 9일(목) ~ 3월 10일(금)

팀의 유동성 공급 증명

팀에서 유동성 공급을 충분히 하였는지, 그리고 가격하락을 막기 위한 매수를 진행했는지 여부는 온체인 기록을 통해 모두 투명하게 확인하실 수 있습니다. 팀의 유동성 공급 계정은 @sct.kpsteem, @buildonbase, @arbitrum까지 총 3개의 계정이며 스왑 시스템에 공급한 유동성 규모는 약 400,000 STEEM 입니다.

  • 398,126 STEEM (= 100,497 + 57,086 + 44,794 + 157,797 + 37,952)

또한, 스왑 재개 후 가파른 가격 하락을 막기 위해 스왑 시작 초기 약 40,000 STEEM을 사용하여 매수를 진행하였습니다. 아래에서 매수를 진행한 트랜잭션 시간을 확인하실 수 있습니다.

스왑이 정상적으로 작동하지 않아 해당 원인 파악에 들어가며 추가적인 매수를 진행할 수는 없었으나, 최대한 피해를 보시지 않도록 최선을 다해 유동성 공급을 하고자 노력하였습니다.

초기 가격 방어 이후에도 추가 매수를 고려했지만 스왑 시스템이 정상적으로 작동하지 않아 진행하지 못했습니다.

스왑 오류 처리 계획

스왑으로 받은 STEEM의 교환 비율이 만족스럽지 않았던 모든 분들께 트랜잭션 복구(revert) 처리를 해드릴 예정입니다. 현재 원활한 복구 처리를 위한 웹페이지(아래에서 설명하는 마이그레이션 및 브릿지 포함)의 개발이 시작되었습니다. 이와 관련해서는 다음주 중 별도 공지를 통해 안내드리겠습니다.

사전에 개략적으로 설명을 드리면, 트랜잭션 원상 복구는 특정 거래가 아닌 계정 단위로만 가능합니다. 다음과 같이 거래를 했다고 가정해보겠습니다.

  • 10,000 SCT 매도 - 4,120 STEEM
  • 2,000 KRWP 매도 - 3,543 STEEM
  • 20,000 SCT 매도 - 8,600 STEEM

이 사용자의 전체 매도, 매수 수량은 아래와 같습니다.

  • 전체 매도 수량 : 30,000 SCT / 2,000 KRWP
  • 스왑으로 받은 STEEM 수량 합계 : 16,263 STEEM

트랜잭션 복구 신청 페이지에서 스왑을 통해 받은 STEEM을 전송하고 30,000 SCT와 2,000 KRWP를 받게 됩니다.

  • 공정성을 위해 스왑 건별 환불은 불가하며 계정 단위로만 환불이 가능합니다
  • 별도로 구축된 웹사이트의 Revert 메뉴를 통해 환불이 진행됩니다
  • 모든 스왑 거래가 DB에 입력되어 있어 수량 확인 후 버튼 클릭만으로 트랜잭션 복구 신청이 가능합니다
  • 수량이 일치하지 않는 경우 트랜잭션 복구 처리가 되지 않습니다

전체 거래 내역을 보시면 아시겠지만, 팀의 유동성 공급 계정을 제외한 모든 계정은 매도 거래만 있었습니다. 스왑 초기에 매도를 통해 상대적으로 이득을 본 분들이 바꿔간 STEEM은 모두 팀의 손실로 부담합니다.

트랜잭션 복구 후 계획

[고지사항]

몇몇분들께서 일전에 JJM의 청산을 예로 드시며 모든 사람들에게 동일하게 STEEM을 지급해달라는 요청을 하셨으나, 스팀코인판은 스팀엔진 이슈로 인해 서비스 방식을 변경할 뿐 지금 청산을 하는 것이 아니므로 동일한 방식을 따를 수 없습니다.

현재 스왑은 토큰 단일화 후 NFT기반 보팅 서비스로 전환하는 것에 찬성하지 않거나, 빠른 현금화를 원하시는 분들을 위한 엑싯을 지원하는 것을 목적으로 할 뿐이므로 일정 수준 이상의 교환 비율을 보장할 수 없습니다.

[스팀엔진 서비스 종료에 따른 마이그레이션]

엔진팀에 지속적인 문의를 통해 답변을 받은 결과, 스팀엔진은 4월까지만 운영 후 서비스가 종료될 예정입니다. 더불어 이번 사태를 통해 스팀코인판 스왑 시스템은 사용자들이 믿고 사용할 수 있는 수준의 서비스가 아니라는 점을 알 수 있었습니다.

이에 따라 스팀코인판 스왑 서비스는 완전히 종료하고, 안정성과 투명성이 충분하게 입증된 트론의 대표 스왑 플랫폼인 Sunswap을 통해 스왑을 지원할 계획입니다.

<Sunswap으로 마이그레이션 하는 이유>

  • 공정성, 신뢰성, 편의성 등을 모두 고려하였을 때 충분히 검증되고 신뢰 가능한 스마트 컨트랙트 기반의 AMM DEX를 통해 스왑을 제공하는 것이 가장 좋은 옵션이라고 판단하였습니다.

  • 스팀 계정 보유자들은 기본적으로 트론 계정을 모두 보유하고 있으며, 이더리움이나 BSC 등은 트랜잭션 수수료를 지불해야 하나 트론의 경우 TRX를 스테이킹하면 수수료를 지불하지 않고도 사용이 가능합니다.

  • 모든 트랜잭션 내역은 Tronscan을 통해 투명하게 확인하실 수 있습니다.

<Sunswap을 통한 스왑 지원 일정>

Sunswap을 통한 스왑 지원은 트랜잭션 복구 요청을 모두 완료한 뒤에 관련 일정과 사용방법 등을 공지할 예정입니다. Sunswap을 통한 스왑 지원 시작일은 4월 중으로 계획하고 있습니다.

주요 내용 정리

  • 펜딩 중인 스왑 거래 요청건은 모두 반환 처리되며 @jacobyu님의 포스팅을 참고하시면 됩니다
  • 기존에 스왑한 토큰의 교환 비율이 불만족스럽거나 부당하다고 생각하시는 분들은 스왑 전 상태로 트랜잭션 복구 처리를 해드립니다
  • 스팀코인판 스왑 서비스는 완전히 종료하고, 안정성과 투명성이 충분하게 입증된 Sunswap(트론)을 기반으로 스왑 기능을 재개합니다
  • Sunswap의 이용 방법은 사전에 가이드를 통해 자세히 안내 드릴 예정입니다
  • 스팀엔진 서비스 종료 전 트론으로의 마이그레이션 기능을 제공할 예정입니다
  • 마이그레이션 시 팀에서 모은 자금으로 1차 바이백을 진행하고 트론의 Sunswap으로 유동성 풀을 일괄 이동합니다
  • @sct.krwp 계정의 큐레이션 보상은 바이백 재원 등으로 활용됩니다
  • 썬스왑에서의 스왑 기능 지원 종료 전까지 부정기적으로 또는 필요하다고 판단되는 경우 팀원들의 사비 등으로 바이백을 진행할 수 있습니다
  • 트론 네트워크상의 STEEM은 브릿지를 통해 스팀 블록체인상의 스팀 계정으로 입금 받을 수 있습니다
  • STEEM의 브릿지 입출금 수수료는 각각 2%이며 수수료의 50%는 바이백 재원으로 사용됩니다
  • Sunswap을 통한 스왑 거래 지원은 6월 말일까지 지원 후 종료됩니다
  • 2023년 7월 1일부터는 NFT기반 시스템으로 통합하여 운영됩니다. 다만 시스템 구축 등에 시간이 더 필요한 경우 일정이 변경될 수 있습니다
  • Sunswap에서 각 토큰들의 상대적 교환 비율을 기준으로 NFT 통합이 진행되며 통합에 적용되는 교환 비율은 특정 시점에 결정됩니다.
  • NFT로 통합 시 1개 단위의 NFT에 해당되지 않는 토큰들의 수량은 절사 처리됩니다 (절사 처리된 토큰은 자동 소각됩니다). 1개 단위의 비율에 대해서는 통합 전에 비율 산정 후 사전 공지할 예정입니다.
  • NFT는 매달 큐레이션 보상을 재원으로 하여 옥션 방식으로 유동화를 지원하며, 매입한 NFT는 소각됩니다
  • 2023년 7월 1일부터 2024년 6월 30일까지 1년 동안 운영 후 NFT 홀더들의 투표를 통해 지속 운영 또는 최종 청산 여부를 결정합니다. (투표를 통해 홀더의 70% 이상 동의하는 방향으로 결정)
  • 최종 청산 시에는 @sct.krwp 계정이 보유하고 있는 STEEM을 자신의 지분율만큼 클레임할 수 있습니다
H2
H3
H4
3 columns
2 columns
1 column
15 Comments