토카막 네트워크 톤(TON) 스왑 시스템이란 무엇인가요?

철학자(정순형)
Tokamak Network
Published in
19 min readAug 19, 2020

--

0. 들어가며

최근 토카막 네트워크 토큰(TON; 톤)의 발행과 분배 모델이 공개 되었습니다. 토카막 네트워크는 토큰 발행에 관한 사항을 단순히 글로써 약속하는데에 그치지 않고, 사전에 정해진 토큰 발행에 관한 규칙이 코드를 통해 강제되도록 하는 토큰 교환 스마트 컨트랙트(Token Swap Smart Contract)를 구축했습니다. 이 글에서는 토큰 교환 컨트랙트의 구성과 작동에 관한 일체의 사항을 명료하게 정리하여 토큰 보유자 분들에게 혹시나 생길 수 있는 궁금증을 미리 해소하고자 하는 목적으로 작성되었습니다.

1. 토카막 네트워크의 토큰 스왑 시스템이란?

토큰 스왑 시스템은 토카막 네트워크 토큰(Tokamak Network Token ; TON)의 발행에 관한 모든 정책을 이더리움 블록체인에 기록한 코드로 정의됩니다. 토큰 교환 컨트랙트에는 발행량, 발행시기, 발행 대상자 등에 관한 규칙들이 적혀 있고 코드는 이에 관한 수행을 강제합니다. 이 시스템은 스마트 컨트랙트로 정의되기 때문에 사전에 정해진 룰 외에는 그 누구도(심지어 해당 시스템을 만든 개발팀조차) 여기에 인위적인 규칙 변경을 가할 수 없습니다.

2. 왜 토큰 스왑 시스템이 필요한가요?

스마트 컨트랙트는 프로그래밍 된 계약입니다. 기존 계약의 경우 계약조항이 이행되지 않을 경우 사법제도가 개입해 이행을 강제하지만, 스마트 컨트랙트는 블록체인에 기록된 코드를 통해 이행이 강제됩니다. 토카막 네트워크는 토큰 발행과 일정 및 분배에 관한 사항을 스마트 컨트랙트를 통해 진행함으로써 1)사전에 약속되지 않은 제3자의 개입에 의한 임의의 토큰 발행을 미연에 방지할 수 있을 뿐만 아니라, 토큰 세일 참여자들이 약속된 토큰을 정해진 일정을 바탕으로 수령하는 과정에서 2)관리자의 개입에 의해 토큰 분배 과정에서 의도적인 시차를 발생시켜 시장 혼란을 초래하는 문제도 해결할 수 있습니다.

3. 토큰 스왑 시스템은 어떻게 동작하나요?

토큰 스왑 시스템은 토큰 발행 모델 및 분배 정책을 스마트 컨트랙트로 구현한 것입니다.

3.1 소스토큰, 타겟토큰과 교환(source, target token and swap)

토카막 네트워크의 토큰 전체를 TON으로 한 번에 발행하는 대신, 소스 토큰 (Source Token)과 타겟 토큰 (Target Token)으로 분류하여 발행하고, 소스 토큰과 타겟 토큰 간에 교환하는 구조로 구성되어 있습니다. 예를들어, 2019년 8월부터 2020년 8월 현재까지 순서대로 씨드 라운드, 프라이빗 라운드, 전략 라운드 3차례에 걸친 프라이빗 토큰 세일의 투자자들에게는 씨드톤, 프라이빗톤, 전략톤(SeedTON, PrivateTON, StrategicTON)이라고 불리는 토큰을 발행 하였습니다. 이렇게 각각의 토큰 사용 목적에 따라 분류 된 토큰을 소스토큰이라고 부르며 향후 토카막 네트워크의 생태계에서 직접적으로 사용될 타겟 토큰인 톤(TON)에 대한 교환권(redemption ticket)의 성격을 가지고 있습니다.

아래는 토카막 토큰 스왑 시스템에서 사용하는 9종의 소스토큰을 정리한 표입니다.

*MTON의 실제 발행량은 MTON 스테이킹 등으로 인해서 조금의 오차가 발생할 수 있습니다.

Marketing TON을 제외한 모든 토큰의 교환비는 50:1입니다.

타겟 토큰인 TON의 최초 발행량인 50,000,000 TON은 볼트(Vault)라고 불리는 금고 역할을 하는 컨트랙트에 보관되어 있습니다. 각 소스토큰은 스와퍼 컨트랙트(Swapper Contract)를 통해서 볼트에 보관되어 있는 톤(TON)과 교환됩니다. 톤(TON)을 볼트에서 꺼내기 위해서는 항상 스와퍼를 거쳐야 하며, 스와퍼 외에 볼트에서 TON을 꺼낼 수 있는 방법은 존재하지 않습니다. 스와퍼가 동작하기 위해서는 해당 소스토큰 전체를 스와퍼에게 맡겨야하는데, 스왑 요청이 발생하게 되면 스와퍼는 맡아둔 소스토큰을 태워 없애고, 타겟토큰을 볼트에서 꺼내어 소스토큰을 맡아둔 유저에게 사전에 정해진 베스팅 일정대로 나누어 줍니다.

소스토큰을 분실할 경우 타겟토큰인 TON과 교환할 수 있는 방법은 없습니다. 또한, 이 과정에서 관리자가 개입할 수 있는 여지 또한 없기 때문에 소스 토큰을 분실할 경우 TON을 받을 수 없으니 소스 토큰 보유자분들께서는 계정 관리에 주의를 기울여 주시기를 부탁드립니다.

3.2 type1(VestingSwapper), type2(Swapper)

소스 토큰과 타겟 토큰을 교환해주는 스와퍼는 그 기능에 따라 2종류가 있습니다. Type1 스와퍼는 내부에 베스팅 기능이 내제되어 있으며, Type2 스와퍼는 토큰 내제된 베스팅 기능을 이용합니다.

  • Type1(VestingSwapper) : seedTON, privateTON, strategicTON, MTON 일부
  • Type2(Swapper) : MTON 일부, TeamTON, ReserveTON, DaoTON, Business TON

스와퍼에 내제된 베스팅 기능을 사용하기 위해서는 보유하고 있는 소스토큰 전체를 스와퍼에 맡겨야 됩니다. 소스 토큰 예치(Source Token Depositing)이라고 불리는 이 세레모니를 통해서 스와퍼에 내장된 베스팅 함수가 동작을 하기 시작합니다.

3.2.1 베스팅과 클리프(Vesting and cliff)

베스팅이란 일정한 기간동안 토큰을 나누어 가져가는것을 뜻합니다. 그리고 클리프란 베스팅 일정이 시작되기 전에 한번에 받을 수 있는 일정한 토큰의 양을 의미합니다.

토카막 스왑 시스템의 베스팅 모델은 30일을 단위로 이뤄지는 계단형(Staircase) 모델을 사용하고 있습니다. 즉, 30일이 경과하면 일시에 해당 기간에 해당하는 양만큼의 토큰을 교환할 수 있는 권리가 소스토큰 보유자에게 생기게 됩니다.

베스팅 예시

위의 예시 그래프는 100개에 해당되는 토큰이 약 4단위 기간에 걸쳐서 25개씩 균등하게 배분되는 과정을 나타내고 있습니다. 시작일(Start)에는 25개에 해당되는 클리프(Cliff)가 설정되어 있는 것을 확인할 수 있습니다.

토카막 스왑 시스템은 각각의 소스토큰별로 고유한 베스팅 / 클리프 스케줄 및 수량과 교환비가 사전에 정해져 있습니다. 이에 관한 자세한 사항은 관련 포스팅과 상단 표를 참고해 주시기 바랍니다.

3.2.2 MTON의 베스팅

Marketing TON의 경우는 조금 독특합니다. 사전에 진행 된 몇 개의 이벤트를 통해서 토카막 네트워크의 생태계의 기여해주셨던 분들에게 일부 Marketing TON이 배분되었습니다. 이렇게 배분된 토큰은 별도의 베스팅 없이 곧바로 스왑 됩니다. 한 편, 향후 사용 될Marketing TON에 관한 베스팅 일정과 수량은 별도로 정의되어 있습니다.

먼저 이벤트를 통해 나눠진 MTON의 경우는 베스팅 옵션이 걸려있지 않은 Type2(Swapper) 스와퍼를 이용합니다. 베스팅 기능이 걸려있지 않기 때문에 유저들은 언제든지 토큰을 스왑할 수 있습니다. 반면에 이벤트를 통해서 나눠지지 않은 남은 MTON의 경우는 Type1(VestingSwapper) 스와퍼를 이용해 토큰에 베스팅을 걸어두게 됩니다.

결론적으로 MTON은 type1, type2 스와퍼를 적절히 나누어 세팅함으로써 정해진 베스팅 일정과 수량에 맞는 토큰 분배가 이뤄질 수 있도록 세팅이 되어있습니다.

3.2.3 DAO TON의 스왑

DAO 토큰은 2020년 말까지 톤(TON)과 스왑될 수 없습니다. 토카막 네트워크는 전체 토큰의 35%에 해당하는 DAO거버넌스에 관한 일체의 사항을 2020년 말에 공개할 예정이며, 따라서 해당 기간이 도래하여 DAO거버넌스 컨트랙트가 구축되기 전까지 DAO TON은 TON으로 스왑될 수 없습니다.

3.3 볼트와 버너(Vault and Burner)

볼트(Valut)는 아직 스왑되지 않은 톤(TON)을 보관하는 금고 컨트랙트입니다. 오직 사전에 지정된 스와퍼(Swapper)만이 볼트에서 톤을 꺼낼 수 있습니다.

버너(Burner)는 태워 없어지는 토큰을 저장하는 계정입니다. 일단 버너로 들어온 토큰은 그 어떠한 방법으로도 꺼낼 수 없습니다. 토큰의 무덤이죠. 스왑이 진행된 소스 토큰은 모두 버너로 들어가 더이상 유통되지 않습니다. 토카막 스왑 시스템은 제로 계정(0x00…00)과 1계정(0x00…001)을 버너 어카운트로 사용합니다.

3.4 스마트 컨트랙트 수준에서의 동작

3.4는 presale-contract 레포지토리에 올라가 있는 스왑/소스토큰/타겟토큰과 관련된 컨트랙트 코드에 관한 설명을 담고 있습니다. 만약 코드를 직접 보시는게 편하시다면 해당 레포지토리를 직접 방문해주시고, 기술적인 내용에 익숙치 않은 분들은 이 부분은 넘어가셔도 좋습니다.

3.4.1 컨트랙트 다이어그램(Contract Diagram)

3.4.2 Swapper/VestingSwapper

30일 단위 Release가 가능한 VestingTokenStep.sol을 사용하는 소스토큰의 경우 Swapper.sol 컨트랙트를 이용해서 타겟 토큰인 TON으로 스왑합니다. 반면에 VestingToken.sol의 경우 30일단위로 베스팅을 할 수 없기 때문에 베스팅 기능이 탑재되어 있는 VestingSwapper.sol을 이용해 TON으로 스왑을 진행해야 합니다.

3.4.3 Swap flow detail

(1) VestingToken.sol (seed/private/strategic)

VestingToken.sol로 만들어진 소스토큰은 내장된 베스팅 기능을 사용하지 않고 VestingSwapper.sol의 베스팅 기능을 통해 TON으로 스왑됩니다. 동일한 소스토큰을 통해서 이중 스왑 등으로 악용되는 것을 막기 위해 베스팅이 시작되기 전 유저의 소스 토큰은 VestingSwapper에 Deposit()함수를 호출하여 모든 소스토큰을 예치해야 합니다. 내부적으로 Deposit( ) 함수는 VestingToken의 approveAndCall()을 실행하고, 이 트랜잭션이 다시 VestingSwapper에 소스 토큰을 Deposit( ) 하는 과정에서 베스팅에 필요한 정보를 등록하게 됩니다. 이후 사용자는 VestingSwapper의 swap( ) 함수를 통해 VestingToken에 해당하는 TON을 받을 수 있습니다.

(2) VestingTokenStep.sol

VestingTokenStep.sol을 이용하는 소스토큰의 경우는 내부적으로 30일 단위로 베스팅 일정을 관리할 수 있기 때문에 swapper를 이용해 단순히 TON의 swap만 지원해주게 됩니다. 사용자는 토큰에 내장되어 있는 Vesting 일정에 따라 Swapper contract에 swap( )를 호출하여 소스토큰을 태워 없애고 타겟 토큰을 수령할 수 있습니다.

(3) 이벤트를 통해 분배된 MTON

사용자는 MTON의 approve( ) 함수를 이용하여 Swapper에게 해당 사용자의 MTON을 이동할 권한을 부여합니다. 이후 사용자는 Swapper의 swap( ) 함수를 실행하게 되면 Swapper는 사용자의 MTON을 이동시켜 태워 없애고, TON을 나눠줍니다.

(4) 분배되지 않은 MTON

전체적인 방식은 VestingToken과 같지만, MTON은 단순한 ERC20 토큰이고, 분배 일정이 없이 한 번에 모든 MTON이 스왑되기 때문에 세부적인 부분에서 차이가 있습니다. MTON을 lock하는 과정은 MTON.approve( ), VestingSwapper.receiveApproval( ) 함수들을 호출함으로써 이루어지는데, MTON을 VestingSwapper에 Deposit( )한 뒤 Vesting 일정에 따라 관리될 수 있도록 하기 위함입니다. 이후 VestingSwapper의 swap( ) 함수를 호출하여 TON을 받게 됩니다.

4. 추가 사항

4.1 TON에 추가 발행(mint)와 관련된 로직

추가발행 권한은 TON 스테이킹을 위해서 존재하는 권한이며, TON 스테이킹이 정식으로 출시되기 전까지는 토카막 네트워크 관리자 계정에 권한이 위임되어 있을 예정입니다. 이 추가 발행 권한은 2020/3분기로 예정된 공식 스테이킹 기능 출시와 더불어, 시뇨리지 매니저 컨트랙트(Seigniorage Manager Contract)로 이관되어 스테이킹을 통해서만 추가발행이 가능토록 전환됩니다. 시뇨리지 컨트랙트에게 모든 권한이 이관되기 전까지 관리자 계정은 토카막 네트워크 팀의 멀티 시그니쳐를 통해서 안전하게 보관되게 됩니다.

4.2 다오톤(DAO TON)과 관련된 사항

전체 TON의 35%에 해당하는 다오톤의 사용처를 결정하는 다오 거버넌스는 백서와 로드맵에 명시된 바와 같이 2021년 초에 공개될 계획입니다. 토카막 스왑 시스템은 이에 맞춰 2021년 1월 초 전에 DAO TON에 해당하는 토큰을 한꺼번에 스왑할 수 있는 기능을 탑재하였고, 이렇게 스왑된 토큰은 준비된 다오 거버넌스 볼트(Dao Governance Vault)로 이전하여 거버넌스의 통제를 받을 계획입니다.

4.3 권한 소거 전 TONVault에서 수동출금 2건

스와퍼와 각 소스 토큰의 권한을 소거하기 전 2건의 수동출금이 이루어졌습니다. 내역 및 목적은 다음과 같습니다.

4.4 주요 컨트랙트의 권한 소거 트랜잭션 기록

5. 토카막 스왑 시스템의 주요 컨트랙트

5.1 TON

5.2 SEED SALE

5.3 PRIVATE SALE

5.4 STRATEGIC SALE

5.5 Marketing TON

5.6 Other tokens

5.6 기타

6. 자주 묻는 질문(FAQ)

  • 소스 토큰이 있는 지갑을 분실했습니다. 되찾을 방법이 있나요?

토카막 네트워크는 관리자 개입으로 인한 소스토큰의 임의적 소거/발행을 미연에 방지하기 위해 관리자 계정의 권한을 모두 소거했습니다. 따라서 부주의로 인하여 소스토큰을 보유한 지갑을 분실 했을 경우 소스토큰을 되찾을 방법은 없습니다. 분실되지 않도록 계정 관리에 유의해 주시기 바랍니다.

  • 왜 초기에 톤 볼트(TON Valult)라고 불리는 단 하나의 계정이 대부분의 톤(TON)을 가지고 있나요?

토카막 네트워크는 토큰 전체를 TON으로 한 번에 발행하는 대신, 소스 토큰 (Source Token)과 타겟 토큰 (Target Token)으로 분류하여 발행하고, 소스 토큰과 타겟 토큰 간에 교환하는 구조로 구성되어 있습니다. 따라서 이 교환 기간에 TON을 안전하게 보관할 계정이 필요하고 그것이 볼트인 것이죠. TON은 정해진 베스팅 일정에 맞춰서 교환되기 때문에 초기에는 많은 양의 토큰을 마치 단 하나의 계정이 가지고 있는것처럼 보일 수 있습니다. 하지만 시간이 지나면서 소스토큰 보유자들이 스왑 요청을 해 나가는 과정에서 볼트의 TON이 사용자들에게 서서히 분배되게 됩니다.

  • 소스토큰의 일부만 베스팅을 잡아둘 수 있나요?

네 가능합니다. 다만 베스팅을 잡아둔 수량에 비례하여 베스팅 함수의 클리프 수량(y절편값)이 결정되기 때문에 잡아두지 않은 소스토큰의 비율만큼 베스팅 옵션은 발동되지 않습니다.

  • 소스토큰의 소유권은 어떻게 넘겨줄 수 있나요?

모든 소스토큰은 이더리움 표준 토큰인 ERC20 스펙을 따릅니다. 소유하고 계신 계정간 소스 토큰을 전송하실 수 있습니다.

  • 베스팅이 진행되는 도중에 중단을 요청할 수 있나요?

일단 베스팅이 시작되면 중단시킬 수 있는 방법은 없습니다.

  • 스왑 컨트랙트는 안전한가요? 해킹되어 분실될 가능성은 없나요?

스왑 컨트랙트는 토카막 네트워크의 엔지니어팀에 의해서 수차례 내부 검증 및 테스트를 진행하였습니다. 더불어 혹시 내부적으로 발견하지 못한 보안상의 취약점을 발견하기 위해 세계적으로 알려진 스마트 컨트랙트 전문 감사 조직인 Certik에게 코드 감사를 의뢰하여 검수를 마쳤습니다.

  • 소스토큰 보유자 입니다. 스와퍼의 내부 동작원리를 다 이해하고 사용해야하나요? 손쉽게 스왑하기 위한 웹서비스는 없나요?

토카막 네트워크팀은 메타마스크(Metamask) 지갑을 쓰고 계신 분들을 위해 베스팅 대시보드(http://vesting.tokamak.network) 서비스를 오픈하였습니다. 본인의 계정을 메타마스크에 연동해 주신 이후에 베스팅 대시보드 가이드를 따라 손쉽게 베스팅 컨트랙트와 상호작용하실 수 있습니다. 이 과정에서 스와퍼의 내부 동작 과정 전체를 이해하실 필요는 없습니다.

  • 스왑 과정에서 이더리움 수수료가 너무 비싸요! 수수료를 아낄 수 있는 방법은 없나요?

토큰 스왑 시스템은 모두 이더리움 블록체인 상에서 동작하는 스마트 컨트랙트로써 트랜잭션 발생을 위해 지불하는 이더리움 수수료를 피할 수는 없습니다. 이더리움의 수수료는 네트워크 사용자가 많이지면 높아지고 줄어들면 낮아지기 때문에 이더리움 네트워크가 상대적으로 덜 붐비는 시간에 스왑 요청을 하시면 수수료를 아낄 수 있습니다.

  • 소스 토큰은 어디서 구할 수 있나요? 판매하는 곳이 있나요? 소스토큰도 거래가 가능한가요?

SeedTON, PrivateTON, StrategicTON의 경우 투자기관과 KYC(Know Your Customer; 고객 확인 절차)를 거친 초기 투자자에게만 나누어져 있고 계약상 이에 대한 재판매는 금지되어 있습니다. Marketing TON(MTON)의 경우는 토카막 네트워크의 마케팅 이벤트를 통해서 다수의 개인에게 분배되어 있으나, 특정 거래소에 상장 혹은 거래 되고 있지는 않습니다. 그 외의 소스토큰은 해당 목적에 사용될 수 있도록 토카막 네트워크팀이 보유하고 있으며, 이에 대한 판매는 계획된 바 없습니다.

이벤트를 통해 나눠진 MTON의 경우 본질적으로 ERC20이기 때문에 토카막 네트워크팀이 사인간의 교환까지 개입하여 금지할 수는 없습니다. 따라서 MTON을 획득하기 위해서는 받은 i)이벤트 참여자와 장외거래를 하시는 방법, 혹은 ii)향후 이벤트에 귀를 기울여 적극적으로 참여해 주시면 될 것 같습니다.

  • 소스 토큰을 스왑하지 않고 장기간 계속 보유하게되면 어떻게 되나요? 시간이 많이 지나도 스왑 가능한가요?

베스팅이 시작된 이후 40개월 이내에 스왑을 하지 않을 경우 소스토큰에 대한 스왑 권리는 소멸됩니다.

  • 스와퍼나 볼트도 해킹이 가능한가요?

FAQ 6번을 참조해 주시기 바랍니다.

  • 소스 토큰을 어떻게 보관하는 것이 가장 안전한가요?

소스토큰은 이더리움 표준 토큰 스펙(ERC20)을 따르기 때문에, 이에 대한 보관은 하드웨어 혹은 소프트웨어 월렛을 이용해 이더리움 혹은 ERC20계열의 토큰을 안전하게 보관하는 것과 그 맥을 달리하지 않습니다. 기본적으로는 소스토큰을 소유한 계정의 개인키 혹은 씨드 단어가 타인에 손에 넘어가거나 분실되지 않도록 안전하게 보관하고, 지갑을 사용하는 과정에서 정품 소프트웨어를 이용하여 초기화 된 PC를 사용하시기를 권장합니다.

--

--

철학자(정순형)
Tokamak Network

Tokamak Network(Ethereum Based Layer2 Solution) Inventor. Seoul Ethereum Meetup Co-organizer. Entrepreneur.Miner. Trader. Engineer. Developer.