본문으로 건너뛰기
전체 글

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

· 약 11분
Bankware Global Engineering

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

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

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

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

이 글은 당시의 소유기간 증명 아이디어를 수익배분과 정책 표결에 적용해 보는 기록이다. 여기서 증명은 새로운 암호학적 proof가 아니라, 원장에 남은 잔액 이력으로 과거 지분을 감사 가능하게 재구성하는 회계 계산이다.

100,000개의 수익을 세 사람에게 나누기​

설명을 위해 달력 대신 블록 번호를 쓰자. 수익 지급자는 [58,98) 구간에 수익 토큰 100,000개를 배분한다. 시작 58은 포함하고 끝 98은 제외하므로 58~97의 40개 블록 슬롯이다. 증권토큰의 적격 공급량은 기간 내내 1,000개이며, 수익을 블록마다 똑같이 2,500개씩 배분하기로 정했다.

58번 블록에는 C가 1,000개를 모두 가지고 있다. 73번에 C가 A에게 전량을 넘기고, 83번에 A가 B에게 500개를 보낸다. 90번에는 B가 그 500개를 A에게 돌려준다. 예제에서 전송 블록의 잔액은 그 블록 안의 모든 전송이 끝난 뒤의 잔액으로 본다.

5898 블록에서 C, A, B의 증권토큰 잔액을 쌓은 면적 그래프. 모든 구간의 총보유량은 1,000개이며 8390에서만 A와 B가 500개씩 보유한다

구간블록 수C / A / B 잔액
[58,73)151,000 / 0 / 0
[73,83)100 / 1,000 / 0
[83,90)70 / 500 / 500
[90,98)80 / 1,000 / 0

A의 계산을 끝까지 따라가면 다음과 같다. 잔액과 보유 블록 수를 곱한 면적의 단위는 증권토큰·블록이다. 아직 지급할 수익 토큰의 수량은 아니다.

A의 면적=1,000×10+500×7+1,000×8=21,500A의 평균잔액=21,50040=537.5A의 수익=100,000×537.51,000=53,750\begin{aligned} A\text{의 면적}&=1{,}000\times10+500\times7\\ &\quad+1{,}000\times8=21{,}500\\ A\text{의 평균잔액}&=\frac{21{,}500}{40}=537.5\\ A\text{의 수익}&=100{,}000\times\frac{537.5}{1{,}000}\\ &=53{,}750 \end{aligned}
소유자지급 수익 토큰
C37,500
A53,750
B8,750
합계100,000

마지막 시점에는 A만 토큰을 가지고 있어도, 과거 구간을 보유했던 C와 B의 수익은 남는다. 수익배분이 묻는 것은 지급일의 잔액이 아니라 배분 대상으로 정한 기간에 누가 어떤 지분을 가졌는가이기 때문이다.

기록할 것은 매 블록의 복사본보다 변경점​

잔액이 바뀐 시점과 새 잔액을 저장한 항목을 체크포인트라고 한다. 위 예제에서 A의 잔액은 73번의 1,000, 83번의 500, 90번의 1,000을 기록하면 된다. 구간 시작 전 마지막 상태도 알아야 하며, 변화가 없는 블록마다 같은 잔액을 다시 저장할 필요는 없다.

이렇게 구간별 직사각형을 더한 값이 보유 면적이고, 기간으로 나누면 기간가중 평균잔액(TWAB, time-weighted average balance)이 된다. 소유자 ii의 구간 ss 잔액을 bi,sb_{i,s}, 구간 길이를 Δhs\Delta h_s, 전체 기간을 [H0,H1)[H_0,H_1)이라고 쓰면 다음과 같다.

Ai=∑sbi,sΔhsA_i=\sum_s b_{i,s}\Delta h_s b‾i=AiH1−H0\overline b_i=\frac{A_i}{H_1-H_0}

블록 수가 곧 벽시계 시간은 아니다. 실제 시간에 비례한 수익을 계산한다면 timestamp를 쓸 수 있다. 어느 시계를 쓰든 기간 경계와 같은 시점 안의 여러 전송을 처리하는 규칙을 먼저 고정해야 한다.

공급량이나 수익 발생속도가 바뀐다면​

앞의 예제는 공급량이 고정되고 수익도 균등하게 배분된다는 가정 덕분에 평균잔액만으로 계산할 수 있었다. mint·burn으로 공급량이 변하면 구간마다 지분율을 다시 봐야 한다. 실제 수익 발생액도 구간마다 다르다면 그 금액까지 함께 반영한다.

소유자 ii의 구간별 잔액은 bi,sb_{i,s}, 적격 공급량은 EsE_s, 그 구간에 배분할 수익 토큰 수는 RsR_s라 하자. 잔액·공급량·수익률이 달라지는 지점에서 구간을 나누면 지급액은 다음과 같다.

Pi=∑sRsbi,sEsP_i=\sum_s R_s\frac{b_{i,s}}{E_s}

쉽게 말해 “각 구간의 수익 × 그때의 내 지분율”을 더한다. 균등 배분이면 Rs=rΔhsR_s=r\Delta h_s이고, 앞 예제의 블록당 수익은 r=2,500r=2{,}500이다. 위 식은 Es>0E_s>0인 구간에 적용하며, 공급량이 0인 구간의 미배정 수익과 정수 나눗셈 뒤 남는 소액 잔여분은 별도 정책으로 정한다.

기간이 같은 두 구간에서 수익이 전반부 0, 후반부 100이라면, 전반부만 보유한 사람이 자동으로 50을 받아야 하는 것은 아니다. 전체 수익을 시간에 균등 배분하는 정책과 실제 발생액에 맞춰 배분하는 정책은 다르다. 분모에서 treasury 등을 제외할지도 상품의 권리 조건이며, 수식이 대신 결정하지 않는다.

2023년에 이 계산을 시도한 이유​

블록체인 난제 해결 챌린지를 준비하던 당시 기획서는 주소별 잔액과 블록 높이를 기록하고, 수익 지급자가 과거 블록 구간과 지급 자산을 지정하는 구조를 제안했다. 소유자는 나중에 자신의 기간별 지분을 근거로 수익을 청구한다. 프로젝트 기록에는 Substrate의 pallet-contracts, Ink!와 Rust로 잔액 캡처·수익 입금·인출 프로토타입을 구성했다고 남아 있다. 이 기록을 현재 제품의 검증된 기능과 동일하게 취급하지는 않는다.

중앙화된 기존 시스템에서도 보유기간 계산은 가능하다. 여러 기관의 소유·이전·정산 이력을 맞추고 상품별 규칙을 반복 구현하는 비용이 문제다. 우리가 관심을 가진 것은 공통된 소유 이력 위에 서로 다른 권리 계산을 올릴 가능성이었다.

기존 주식의 배당 기준일도 권리 확정과 대규모 정산에 필요한 규칙이며 배당락 등 가격 조정과 연결된다. 기간가중이 보편적으로 더 공정하다거나 기존 배당 기준일을 대체해야 한다는 뜻은 아니다. 임대료·로열티·이자 같은 현금흐름에서 어떤 배분이 상품의 의도에 맞는지를 검토할 수 있다는 의미다.

같은 보유 이력, 다른 표결 규칙​

수익은 과거에 보유했던 사람이 받을 수 있다. 반면 정책 표결에서 이미 전량 처분한 사람에게 계속 표를 줄지는 다른 문제다. 자산 관리사 교체나 유지보수 예산처럼 발행조건과 법률이 허용하는 운영정책을 생각해 보자.

일반적인 snapshot 투표는 특정 과거 시점의 표결권을 조회한다. 투표 후 토큰을 다른 주소로 옮겨 다시 투표하는 것을 막는 데 도움이 되며, 같은 트랜잭션에서 빌렸다 갚는 flash loan도 과거의 표를 만들 수 없다. OpenZeppelin의 거버넌스 가이드는 ERC20Votes의 위임 표결권 체크포인트를 이용하는 이 방식을 설명한다.

기간을 추가하면 장기 보유와 직전 매수를 구분할 수 있다. 제안이 공개되는 1,000번 블록의 시작을 VV로, 그 전 [900,1000)의 100개 블록을 관찰기간으로 잡자. A는 100개를 내내 보유했고, B는 990번 블록에 100개를 취득했다. 둘의 기준점 직전 잔액은 모두 100이지만 평균잔액은 A=100, B=10이다.

과거 평균만 사용하지 않고 기준점 직전 잔액을 상한으로 두면, 그 전에 전량 처분한 사람의 표는 0이 된다. 두 기준을 섞는 비율을 λ\lambda라고 하면 정책 선택은 다음처럼 보인다.

정책A의 표B의 표
snapshot만 사용 (λ=0\lambda=0)100100
절반씩 반영 (λ=0.5\lambda=0.5)10055
기간가중 적용 (λ=1\lambda=1)10010

B가 정당한 신규 투자자여도 같은 감쇠를 받는다. 기간가중은 짧게 들어온 자본의 영향을 줄이는 대신 신규 참여자의 발언권을 늦춘다. 오래된 대규모 지분의 과점을 해결하는 장치는 아니다.

기준점의 “직전”을 명확히 하기​

이 예제의 snapshot 잔액은 bi(V−)b_i(V^-), 즉 1,000번 블록이 시작되기 직전 상태다. 블록 종료 잔액을 저장하는 구현이라면 999번 블록의 종료 체크포인트에 해당한다. 제안 블록에서 일어난 매수·위임을 포함하지 않는 기준이며, 현재 블록 조회를 과거 조회 API에 그대로 넘긴다는 뜻이 아니다. ERC-5805도 현재 clock과 과거 조회 시점을 구분한다.

기준점 직전 잔액을 bi(V−)b_i(V^-), 관찰기간 평균잔액을 b‾i\overline b_i, 유효 표를 wiw_i라고 하면:

wi=(1−λ)bi(V−)+λmin⁡ ⁣(bi(V−),b‾i),0≤λ≤1\begin{aligned} w_i&=(1-\lambda)b_i(V^-)\\ &\quad+\lambda\min\!\left(b_i(V^-),\overline b_i\right),\\ &\hspace{2em}0\le\lambda\le1 \end{aligned}

999번 블록 말에 전량 매도했다면 기준 잔액이 0이므로 표도 0이다. 1,000번 블록 이후 처분한 사람의 표까지 막으려면 잠금이나 투표 시 추가 자격 확인이 필요하다. 기준점을 고정한 뒤의 숙의기간은 별도로 두며, 이를 위한 votingDelay와 표를 언제 확정하는지는 구분한다.

주소와 위임을 합치는 순서도 정책이다​

신원이 확인되는 토큰증권에서는 여러 지갑을 가진 실질 권리자별로 먼저 계산하고, 기준점 직전의 위임 대상(delegate)에게 유효 표를 합산해야 한다. 같은 delegate를 선택했다고 신규 지분이 장기 보유자의 이력을 물려받아서는 안 된다. 위임 자체의 지속기간도 반영하려면 별도의 위임 이력이 필요하다.

주소별 비선형 가중은 지갑 분할에도 민감하다. 같은 100개라도 제곱근을 지갑마다 계산하면 결과가 달라진다.

100=10,250≈14.14\sqrt{100}=10,\qquad 2\sqrt{50}\approx14.14

이는 단순 주소별 제곱근 가중의 반례이며 quadratic voting 전체를 설명하는 식은 아니다. 자기 지갑 사이의 이전, 수탁사의 고객별 하위원장부, 중복 집계 방지도 실질 권리자 기준으로 연결해야 한다.

정족수의 분모 역시 일반 총발행량을 그대로 쓸 수 없다. 유효 표 합계 ∑iwi\sum_i w_i의 비율을 쓰면 권리자 전체를 합산·검증하는 비용이 들고, 고정 절대값을 쓰면 유통량 변화에 둔감해진다. 어떤 정책이든 제안 생성 시 고정해야 한다. timelock은 실행 전 대응 시간을 주지만 매표·담합을 저절로 막지는 않는다.

보유 이력으로 알 수 없는 것​

원장상 지분을 오래 유지했다는 사실과 실제 경제적 위험을 부담했다는 사실은 다르다. 증권대차로 빌렸거나 파생상품으로 위험을 상쇄했는지는 잔액 이력만으로 알 수 없다. 개발·분석·운영·감시의 기여도 역시 별도다.

입력 자료계산하거나 판단할 것
소유 이력 + 수익 정책기간별 수익권
소유·위임 이력 + 표결 정책보유에 따른 유효 표
별도의 기여 증빙·평가 기록기여자 자격과 권한

기여 점수를 보유 점수에 단순히 더하면 단위가 큰 쪽이 다른 권한을 압도한다. 자산 매각처럼 두 관점이 필요한 사안에서는 보유자 채널과 기여자 채널의 별도 승인을 요구하는 방식을 검토할 수 있다. 모든 사안을 양원제로 처리해야 하는 것은 아니며, 기여 증빙의 발급·취소·이의제기와 평가자 장악 문제도 남는다.

시간을 쓰는 다른 거버넌스와도 구별해야 한다. vote-escrow는 앞으로 잠글 기간, conviction voting은 특정 제안을 지지한 기간을 사용한다. 이 글의 입력은 제안 전의 보유 이력이다. Curve VotingEscrow와 BlockScience의 conviction voting 자료는 각각의 차이를 보여준다. ERC-5805는 과거 위임 표 조회를 제안한 문서이며 2026-09-07 확인 시 Stagnant 상태다.

기록이 있다고 계산이 저렴한 것은 아니다​

토큰을 AMM에 예치하면 직접 보유자는 풀 컨트랙트로 바뀐다. 2023년 모델은 풀의 증권토큰 잔액에 사용자의 LP token 지분율을 곱해 간접 지분을 재구성하는 방안도 다뤘다. 모든 풀이 같은 규칙을 쓰는 것은 아니며, wrapper와 원자산 양쪽에 같은 수익·표를 주면 이중계산이 된다. 어떤 포장 토큰이 권리를 대신하는지 명시해야 하고, 기술적 보유자만으로 법적 권리자가 정해지지도 않는다.

컨트랙트 계산에도 별도의 상태가 필요하다. EVM 컨트랙트는 과거 블록의 임의 storage를 직접 읽을 수 없고 일반 mapping의 키 목록도 열거할 수 없다. 구현 선택은 다음처럼 나뉜다.

방식주요 대가
청구 때 체크포인트 순회직접적이지만 이력이 길면 가스 한계에 닿음
누적 면적과 이진 탐색조회를 줄이지만 공급량·위임 변화 합성이 복잡함
오프체인 계산 + Merkle root온체인 비용을 줄이는 대신 재현성과 이의제기 절차가 필요함

부분 청구·중복 지급·소액 잔여분 처리도 실제 프로토콜의 일부다. Solidity에서 이 문제를 표현한 별도의 2023년 프로토타입은 하드포크 없이 소유기간을 기록하다: SecurityToken.sol 설계 리뷰에서 코드와 함께 살펴본다.

토큰화의 제도와 권리 계산의 경계​

이 아이디어가 곧바로 모든 증권의 권리를 바꾸는 것은 아니다. 네 용어를 구분하면 적용 범위가 선명해진다.

용어이 글에서의 의미
RWA현실 자산·권리를 토큰화하는 넓은 업계 범주
토큰증권증권인 권리를 분산원장 기반으로 발행·기록하는 형식
STO토큰증권을 발행·모집하는 행위
권리 계산기발행조건에 따라 이력에서 수익·정책 권한을 계산하는 규칙

RWA 토큰이라는 이름만으로 법적 소유권이나 증권성이 생기지 않는다. 토큰증권에도 증권의 실질과 투자자 보호·공시 규칙이 적용된다. 법정 주주총회 의결권을 컨트랙트가 임의로 바꿀 수 있다는 뜻도 아니다.

한국 금융위원회는 2023년 정비방안에서 토큰증권을 증권의 새로운 발행 형식으로 설명했다. 관련 개정안은 2026년 국회를 통과했고, 개정 전자증권법은 2027년 2월 4일 시행 예정이다. 2026년 9월 확인 시에는 아직 시행 전이므로 적격 원장과 세부 인프라를 준비하는 단계라는 경계를 유지해야 한다.

국제 논의도 가능성과 도입 수준을 나누어 읽을 필요가 있다. BIS의 2025년 보고서는 자산 기록과 실행 규칙을 프로그래머블 플랫폼에 결합하는 가능성을 다룬다. 반면 FSB의 2024년 평가는 당시 도입이 매우 낮지만 증가한다고 봤고, ESMA의 2025년 DLT Pilot 검토도 초기 참여의 한계를 설명했다. 이 자료들을 2026년 시장 전체가 이미 전환됐다는 근거로 사용하지는 않는다.

프로그램 가능한 권리는 프로그램 가능한 권력이다​

이 아이디어는 뱅크웨어글로벌 주식회사의 대한민국 등록특허 제10-2670671호 「증권형 토큰의 수익 배분 시스템 및 방법」으로 정리됐다(출원 2023-10-16, 등록 2024-05-27). 발행·이전·배분 룰·소유기간 조회·지급과 중복 방지를 다루며, 간접 지분 계산은 상세 실시예에 포함된다. 이는 설계 이력을 밝히기 위한 정보이며 확장성·공정성 검증이나 실시허락을 뜻하지 않는다.

수익권은 어떤 기간의 수익을 누구에게 배분하는가를 묻고, 표결권은 어떤 참여자에게 얼마나 결정권을 줄 것인가를 묻는다. 같은 이력을 읽어도 질문이 다르면 계산은 달라진다. 기여도는 아예 다른 증빙에서 출발한다.

원장은 소유의 역사를 기록할 수 있다. 그 역사에 어떤 권리의 무게를 부여할지는 관찰기간·분모·배분률을 정하는 사람과 코드, 그리고 상품의 제도가 결정한다.