본문으로 건너뛰기
Bankware Global Engineering

Distributed systems, ledger design, financial infrastructure, and protocol engineering.

모든 저자 보기

6자리 리딤코드는 어디까지 안전하게 만들 수 있을까

· 약 12분
Bankware Global Engineering

고객에게 7Q2M9A 같은 6자리 코드를 보내고 한 번만 혜택을 받게 해야 한다고 해보자. 코드는 숫자와 영문 대문자로 만들고, 다른 고객에게 같은 코드가 나가면 안 된다. 사용자가 입력하면 서버는 실제 발급한 코드인지 확인하고 혜택을 지급한 뒤 다시 사용할 수 없게 해야 한다.

이처럼 문자열을 가진 사람이 혜택을 청구하는 방식을 bearer형 리딤코드라고 부른다. 여러 사람이 함께 입력하는 공개 프로모션 코드와는 요구사항이 다르다. 여기서는 개별 발급형을 다룬다.

핵심 질문은 ‘어떤 암호를 쓸까’보다 먼저 있다. 중복 없는 발급, 발급 순서 은닉, 유효한 사용 판정과 추측 방어를 각각 어디서 맡을 것인가?

하드포크 없이 소유기간을 기록하다: SecurityToken.sol 설계 리뷰

· 약 9분
Bankware Global Engineering

토큰을 한 달 내내 가진 사람과 정산 직전에 산 사람에게 같은 수익을 나눠도 될까. 앞선 글에서는 이 질문을 소유 이력과 기간가중 권리의 관점에서 살펴봤다. 잔액이 바뀐 지점만 기록하면 그 사이에 얼마를 얼마나 오래 보유했는지 다시 계산할 수 있다는 아이디어였다.

그 글을 쓴 뒤 2023년의 코드를 다시 펼쳤다. 수식보다 먼저 존재했던 구현이었다. nigo-protocol-v0의 SecurityToken.sol은 토큰 잔액의 변경 이력으로 정해진 블록 구간의 수익을 계산하는 프로토타입이다. 기존 체인을 하드포크하지 않고도 이 생각을 스마트컨트랙트로 표현할 수 있었다. 작은 계산부터 따라가면 당시 구현이 보여준 가능성과 다음 설계에 남긴 과제를 함께 볼 수 있다.

증권의 권리를 보유기간에 따라 계산할 수 있을까

· 약 11분
Bankware Global Engineering

한 달 동안 임대료가 쌓였다. 그런데 그 자산의 권리는 월중에 C에서 A로, 일부는 다시 B로 넘어갔다. 수익을 지급할 때 누구에게 얼마를 줘야 할까?

한 시점의 소유자를 확정하는 방법도 있고, 수익이 발생한 기간의 보유 지분을 나누어 보는 방법도 있다. 어느 쪽이 맞는지는 상품의 권리 조건에 달려 있다. 자산을 작은 토큰으로 나눠 거래할 수 있게 만드는 것만으로는 이 질문에 답할 수 없다.

2023년 우리가 탐구한 것은 두 번째 방법이었다.

토큰이 이동할 때마다 잔액과 시점을 남겨두면, 누가 얼마를 얼마나 오래 보유했는지로 권리를 계산할 수 있을까?

스왑이 남긴 MEV를 사용자에게 돌려줄 수 있을까

· 약 8분
Bankware Global Engineering

2022년, DeFi에서 스왑은 몇 초 안에 끝났지만 그 거래의 경제적 여파는 거기서 끝나지 않았다.

한 사용자가 AMM, 즉 토큰 준비금으로 가격이 정해지는 거래 풀에서 큰 수량을 스왑한다. 준비금 비율이 움직이고 다른 탈중앙화 거래소(DEX)와 가격 차이가 벌어진다. 차익 기회를 찾는 참여자인 searcher는 뒤따르는 거래로 그 차이를 줄이며 이익을 얻는다. 이런 뒤따르기를 backrun이라고 한다.

사용자는 가격 영향과 가스비를 부담했는데, 거래 뒤에 남은 차익은 다른 누군가의 몫이 된다. 2022년 말 우리가 던졌던 질문은 여기서 시작했다.

그 차익거래를 사용자의 트랜잭션 안에서 실행하고, 비용을 뺀 나머지를 사용자에게 돌려줄 수는 없을까?