
시간 바운드 토큰: 기한 설정, 소유권 및 수익의 토큰화가 암호자산에 어떤 새로운 가능성을 열어줄 것인가?
저자: Ricsson Ngo, Shatabarto Bhattacharya
번역: TechFlow
서론
시간마저 토큰화될 수 있다면, 암호화 세계는 또 어떤 새로운 놀이 방식을 만들어낼 수 있을까?
최근 '시간 제한 토큰(Time Bound Token)'이라는 개념이 등장했으며, 이와 관련된 기술 설계 및 사용 사례에 대한 논의도 시작되고 있다. 전통 금융이든 암호화 자산이든 간에, '시간'은 종종 어떤 권리의 제약 조건으로 작용한다. 예를 들어 만기 상환, 기간 한정 임대, 옵션 및 선물 계약 등이 그러하다. 일정 기간 동안(조건) 특정 자산에 대해 일정한 권리를 가지며, 정해진 규칙에 따라 만기 후 경제적 이익(결과)을 실현하는 구조다.
이러한 '조건'과 '결과'의 현실적 논리는 명백히 스마트 계약으로 설계할 수 있으며, 즉 시간 제한이라는 조건 자체가 토큰화될 가능성을 의미한다.
그렇다면 시간 제한 토큰(TBT)은 구체적으로 어떻게 구현되며, 어떤 실제 적용 시나리오들이 존재할까? 본문은 이러한 질문들에 답하며 새로운 내러티브의 가능성을 살펴본다.
요약
시간 제한 토큰(TBT, Time Bound Token)은 자산의 시간선 상 소유권을 이전하고 관리할 수 있는 토큰으로, 본질적으로 옵션의 순수한 표현이다. TBT는 임대 가능한 NFT, 위탁 포지션, 기한이 정해진 거버넌스 권한, 일반적인 옵션, 부동산 임대 등 시간 제약이 있는 자산들을 대표할 수 있다. TBT의 작동 원리는 토큰(Fungible Token 또는 NFT)을 주기적인 시간선으로 분할하여 각각의 시간 구간을 서로 다른 주소가 소유할 수 있도록 하는 것이다.

소개
TBT는 실용성에 중점을 두고 설계되었다. TBT 소유자는 함수를 호출함으로써 기초 자산을 활용해 경제적 혹은 재무적 이익을 얻을 권리가 있다. 현재 시간이 사용자가 주장하는 시간선의 일부인지 여부를 확인함으로써 토큰의 소유권을 판단한다. 이러한 혜택의 예시는 다음과 같다:
-
포장된 크립토 키티(Crypto Kitty)를 이용해 새로운 크립토 키티 알을 부화시키기.
-
포장된 유니스왑(Uniswap) 유동성 포지션을 통해 수수료 수취하기.
-
거버넌스 관련 기능 호출하기.
-
일정 비율 공식(옵션)에 따라 USDC와 ETH를 교환하기.
-
부동산 임대권을 나타내기.
-
정기 결제 수행하기.
위의 예시를 바탕으로 사고실험을 해보자. Alice가 0개월부터 1개월까지 100개의 TBT를 소유하고 있고, Bob은 1개월부터 2개월까지 100개의 TBT를 소유하고 있다고 가정하자. 지금이 0개월 기준으로 이미 0.5개월이 지났다면, 현재 시간은 Alice의 시간선에 속하므로 Alice는 필요에 따라 유틸리티 함수를 여러 번 호출할 수 있지만 Bob은 호출할 수 없다. Alice는 1개월이 지난 후에는 더 이상 유틸리티 함수를 호출할 수 없게 되고, Bob은 1개월이 되어야 비로소 유틸리티 함수로부터 혜택을 받을 수 있다. TBT는 전체 유효기간이 지나면 만료되어 소멸된다.
TBT는 일반 토큰처럼 이전할 수 있다. 여기서 말하는 이전은 채권과 토큰 수량의 이전을 의미한다. 예를 들어 Alice는 0개월에서 1개월까지의 50개 TBT를 Bob에게 이전할 수 있으며, 이 경우 Alice는 0개월에서 1개월까지의 50개 TBT만 남게 되고, Bob은 0개월에서 1개월까지의 50개 TBT와 1개월에서 2개월까지의 100개 TBT를 갖게 된다. Charlie는 6개월부터 무한대까지의 100개 TBT를 Oscar에게 이전할 수 있으며, 이 경우 Charlie는 2개월에서 6개월까지의 100개 TBT를 보유하고 있게 되며, Oscar는 6개월부터 무한대까지의 100개 TBT를 가지게 된다.
구현 세부사항
다음은 TBT 초기 인터페이스 구현의 초안이다. (TechFlow 주: 코드 예시 포함. 기술 구현에 관심 없는 독자는 결론 부분만 읽어도 무방하다.)
ERC1155과 유사한 다중 토큰 표준을 따르며, 여기서 ID는 서로 다른 토큰을 나타낸다. 공급량이 1인 경우 NFT이며, 공급량이 1보다 큰 경우는 상호교환 가능한 토큰을 의미한다.
코드 예시:
-
function period(uint256 id) external view returns (uint256 seconds)
이 함수는 주어진 ID의 TBT 하나의 주기를 초 단위로 반환한다. 두 주기 사이의 타임스탬프를 '타임틱(time tick)'이라고 한다. 일반적으로 주기가 너무 짧으면 TBT의 가스 비용이 과도해지므로 바람직하지 않다. 반대로 너무 긴 주기도 TBT의 유연성을 크게 저하시키므로 적절하지 않다. 일반적으로 사회적으로 통용되는 주기는 매주, 매월, 분기별, 반년, 매년 등이 있다.
-
function shift(uint256 id) external view returns (uint256 seconds)
이 함수는 주어진 주기 계산의 시작점인 초기 오프셋(offset)을 초 단위로 반환한다. 오프셋은 주기 길이보다 작아야 한다.
-
function transfer(address to, uint256 id, uint64 start, uint64 end, uint256 amount, bytes calldata data) external
이 함수는 소유자가 주어진 TBT의 시작 및 종료 시간을 설정하여 대상 주소로 TBT를 이전할 수 있도록 한다. 오프셋을 뺀 후, 시작 및 종료 시간은 반드시 주기 값으로 나누어 떨어져야 한다. 만약 시작 시간이 현재 블록 타임스탬프보다 작다면, 기본값으로 현재 주기의 시작 타임틱이 사용된다. 종료 시간이 0이면 무한대라고 간주한다. 데이터 구조는 최적의 가스 효율성과 최소한의 업데이트를 위해 체인형 맵핑 구조로 구현해야 한다.
-
function balanceOf(address owner, uint256 id) external view returns (bytes memory balance)
이 함수는 소유자의 전체 시간선 위치를 나타내는 바이트(bytes)를 반환한다. 호출자는 아래에 제시된 순수 함수(pure function)를 사용해 이를 디코딩해야 한다:
-
function decodeBalance(bytes memory balance) internal pure returns (TimeDelta[] memory timeDeltas)
-
struct TimeDelta { uint64 time; int192 delta; }
시간 델타 배열은 시간선 위치를 효과적으로 표현하는 데이터 구조이다. time 필드는 소유자가 델타 변화를 경험하는 타임틱을 나타내며, delta 필드는 해당 타임틱 이후 TBT 수량의 증감 값을 나타낸다. 예를 들어 다음의 시간 델타를 얻었다고 하자:
-
{ time: 1,700,000,000, delta: 100 }
-
{ time: 1,700,010,000, delta: -50 }
-
{ time: 1,700,030,000, delta: 150 }
이는 소유자가 블록 타임스탬프 1,700,000,000부터 1,700,010,000까지 100개의 TBT를 소유하고 있음을 의미한다. 그 후 1,700,010,000부터 1,700,030,000까지는 100-50 = 50개의 TBT를 소유하며, 마지막으로 1,700,030,000부터 무한대까지는 100-50+150 = 200개의 TBT를 소유하게 된다.
이러한 바이트 반환과 디코더를 사용하는 구현 방식은 미래 임의의 시간에 대한 선언만 반환하면 된다는 점에서 유리하다. 다만 구현 방식을 더 실용적으로 변경하여 반환 범위를 최대치로 제한할 수도 있다.
각 타임틱에서 시간 델타의 합은 음수가 될 수 없다. 따라서 토큰의 발행, 소각, 이전은 이러한 조건을 항상 유지해야 한다. 또한 시간이 지남에 따라 소유자의 잔액은 현재 시간 이후의 가장 최근 타임틱만을 표시해야 한다.
예를 들어 위와 동일한 예시에서, 블록 타임스탬프가 1,700,010,010으로 변했다고 가정하자. BalanceOf는 다음과 같은 시간 델타를 표시해야 한다:
-
{ time: 1,700,010,000, delta: 50 }
-
{ time: 1,700,030,000, delta: 150 }
본 문서에는 다중 이전, 업데이트, 페이지네이션된 balanceOf, 페이지네이션된 업데이트, 메타데이터, onReceived 등의 추가 함수들이 존재하지만 생략되었다. 위에 언급된 기능들은 기존 토큰 표준과 TBT의 핵심 차이점이다.
또 다른 잠재적 TBT 구현 방식은 단일 컨트랙트 내에 모든 TBT를 위한 단일 저장소를 두고, 시간선 잔액 업데이트, 발행, 소각, 이전 등의 기본 기능을 구현하는 것이다. 누구나 주어진 ID에 대해 TBT를 초기화할 수 있다. 확장성을 위해 TBT 주기의 여러 지점에 콜백(Hooks)을 설정하였다. 이는 approve 및 transferFrom이 필요 없을 수 있는 장점을 제공하는데, TBT 인터페이스를 사용하는 컨트랙트가 다중 토큰 이전 데이터를 활용할 수 있기 때문이다.
미래 전망
시간 제약이 토큰화됨에 따라 시간 기반 자산을 창의적으로 금융화할 수 있는 시대가 열렸다. 우리는 이러한 자산들을 위한 AMM을 만들 수 있으며, 예를 들어 '0개월에서 1개월까지의 TBT'와 '1개월에서 무한대까지의 TBT'를 교환하는 시장을 설계할 수 있다. 현재 유사한 기능을 제공하는 프로토콜들의 사례는 다음과 같다:
펜들 파이낸스(Pendle Finance)는 기존 수익성 자산을 두 개의 시간선으로 분할한다:
-
수익 토큰(Yield Token): 현재부터 만기일까지 유효하며, 유틸리티 함수는 만기 전까지 수익을 축적한다.
-
원금 토큰(Principal Token): 만기일 이후부터 유효하며, 사용자는 이를 해제해 만기 후 원금을 회수할 수 있다.
이 프로토콜은 사용자가 고정 수익과 할인 사이를 자유롭게 교환할 수 있도록 한다.
타임스왑(Timeswap)은 시간을 통해 토큰을 교환하며, 자산을 두 개의 시간선으로 나눈다:
-
기존 토큰을 미래 토큰으로 교환: 만기 전 토큰을 만기 후 토큰으로 교환함으로써 사용자가 할인된 가격으로 토큰을 구매할 수 있도록 한다.
-
미래 토큰을 기존 토큰으로 교환: 만기 후 토큰을 만기 전 토큰으로 교환함으로써 사용자가 정산 없이 레버리지를 활용할 수 있도록 한다.
TBT는 이러한 프로토콜의 차세대 버전에 기능을 확장하고, 고정 만기 금융 분야로의 새로운 설계를 유도할 것이다. 이 토큰 표준은 DeFi 공간을 고정 만기 금융 영역으로 확장하는 불씨가 될 수 있으며, 이는 전통 금융시장에서도 아직 개척되지 않은 거대한 시장이다.
게임 내 NFT 임대 또한 인기 있는 기능이다. 게임 길드는 플레이어에게 NFT를 임대하여 게임 보상을 획득한다. TBT를 도입하면 NFT 임대의 유연성과 기능성이 크게 확장될 것이다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














