# TON 지갑 개요

### <mark style="color:blue;">기본 용어</mark> <a href="#id-00" id="id-00"></a>

#### TON 지갑: <a href="#id-0" id="id-0"></a>

TON 체인에서 지갑은 여전히 니모닉/개인키로 관리되지만, 각 지갑은 하나의 스마트 컨트랙트이며 사용하기 전에 메인넷에 배포해야 한다. 배포 후 지갑을 사용하려면 소량의 Toncoin을 네트워크 수수료로 지불해야 한다.

#### TON 계정: <a href="#id-1" id="id-1"></a>

동일한 니모닉으로 TON 공식 지갑이 제공하는 여러 유형의 컨트랙트를 기반으로 서로 다른 계정을 만들 수 있다. 컨트랙트 유형에 따라 지원 기능이 달라지지만, 모두 동일한 니모닉으로 관리된다.

#### 2 합약 버전: <a href="#id-2" id="id-2"></a>

TON은 다양한 기능을 제공하는 여러 종류의 지갑 컨트랙트를 제공한다.

| 컨트랙트 유형            | 주요 기능                           |
| ------------------ | ------------------------------- |
| Wallet V1          | 한 번에 하나의 트랜잭션만 전송               |
| Wallet V2          | 트랜잭션 시간 제한을 추가하여 장시간 미확인을 방지    |
| Wallet V3          | Subwallet ID 기능 추가, 하위 지갑 생성 가능 |
| Wallet V4          | “플러그인”과 구독 기능 추가, V3 기능과 호환     |
| Highload wallet V3 | 대량 트랜잭션 전송 지원                   |
| Lockup wallet      | 일정 기간 자산을 잠금                    |
| Restricted wallet  | 지정 계정과만 거래 가능, 스테이킹 노드 실행 지원    |

Subwallet ID: 정수 형태의 하위 지갑 ID. 기본값은 698983191이며, 다른 Subwallet ID를 설정해 서로 다른 하위 지갑을 만들 수 있다.

Jetton: TON 체인의 비원주 자산을 Jetton이라 부른다.

Jetton wallet: 지갑 내 Jetton 자산별로 전용 Jetton wallet 컨트랙트가 존재하며, Jetton 전송은 지갑 컨트랙트가 해당 Jetton wallet 컨트랙트를 호출해 실행된다.

### <mark style="color:blue;">TON과 EVM 체인의 주요 차이</mark> <a href="#id-4" id="id-4"></a>

1. TON에서는 모든 프로젝트가 컨트랙트이며, 지갑 또한 컨트랙트이자 해당 주소가 된다.
2. 지갑 컨트랙트를 사용하려면 첫 트랜잭션 시 배포 비용과 각 트랜잭션의 스토리지 비용을 지불해야 한다.
3. TON 스마트 컨트랙트는 업그레이드할 수 있지만, EVM 컨트랙트는 배포 후 업그레이드가 어렵다.
4. 다른 Subwallet ID를 사용하면 동일한 퍼블릭 키로 여러 지갑 계정을 만들 수 있다.

### <mark style="color:blue;">TON 지갑의 특징</mark> <a href="#id-5" id="id-5"></a>

1. 새 지갑은 첫 트랜잭션에서 소량의 Toncoin으로 지갑 컨트랙트를 배포해야 한다.
2. 하나의 지갑에는 여러 주소 형식이 있으며 겉보기엔 다르지만 모두 동일 지갑을 가리킨다. 다만 네트워크가 다른 주소로 전송하면 자산이 영구히 손실된다.

### <mark style="color:blue;">TON 지갑 주소 형식과 주요 특성</mark> <a href="#id-6" id="id-6"></a>

| 주소 형식 | 네트워크 | 트랜잭션 특성                                                  | 적용 사례                                                                       |
| ----- | ---- | -------------------------------------------------------- | --------------------------------------------------------------------------- |
| E...  | 메인넷  | 해당 주소로 전송 시 트랜잭션이 반려될 수 있으므로, 지갑 컨트랙트가 배포되었는지 먼저 확인해야 한다 | EQ 주소는 입금을 기다리는 스마트 컨트랙트에 적합. 아직 배포되지 않은 컨트랙트로 전송하면 자금이 반려되어 손실을 어느 정도 방지한다 |
| U...  | 메인넷  | 전송이 반려되지 않는다                                             | 지갑 자산 보관에 적합, U 주소로 전송된 자금은 반려되지 않는다                                        |
| k...  | 테스트넷 | 전송이 반려될 수 있으므로 배포 여부 확인 필요                               | TON 테스트넷에서 사용되는 반려 가능 주소                                                    |
| 0…    | 테스트넷 | 전송이 반려되지 않는다                                             | TON 테스트넷의 반려 불가 주소                                                          |

### <mark style="color:blue;">TON 지갑과 EVM 지갑의 주요 차이</mark> <a href="#id-7" id="id-7"></a>

| 지갑 유형        | EVM 지갑      | TON 지갑                                                                                                                                               |
| ------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| 완전 자가 관리     | 예           | 예                                                                                                                                                    |
| 계정 주소        | 생성 즉시 무료 사용 | 모든 주소가 스마트 컨트랙트이므로 사용 전 소량 TON으로 배포해야 하며, 각 트랜잭션마다 스토리지 수수료를 지불해야 한다                                                                                 |
| 주소 형식        | 0x…         | <p>U…</p><p>E…</p><p>0…</p><p>k…</p>                                                                                                                 |
| 네트워크 수수료 구성  | gas fee     | <p>총 비용 =</p><p>storage fees</p><p>+ in fwd fees</p><p>+ computation fees</p><p>+ action fees</p><p>+ out fwd fees</p><p>초기 트랜잭션 시 컨트랙트 배포 비용 추가</p> |
| 수수료 수정 가능 여부 | 가능          | 불가능                                                                                                                                                  |

### <mark style="color:blue;">TON 트랜잭션 수수료 구성</mark> <a href="#id-8" id="id-8"></a>

TON 체인에서 수수료는 Gas로 계산되며, 각 트랜잭션 수수료는 여러 항목으로 이루어져 있고 사용자가 직접 우선순위를 조정할 수 없다.

| 수수료 구성       | 설명                                                                                   |
| ------------ | ------------------------------------------------------------------------------------ |
| Storage fees | 지갑 계정은 온체인 컨트랙트이므로, 이전 트랜잭션 이후 경과 시간에 대한 스토리지 비용을 매번 지불해야 한다. 컨트랙트 크기가 클수록 비용도 증가한다. |
| Fwd. fees    | 지갑이 온체인 내부/외부 메시지를 전송할 때 컨트랙트를 호출하는 비용. In fwd. fees와 Out fwd. fees를 포함한다.           |
| Action fees  | 모든 비용 계산 후 실제 트랜잭션(컨트랙트 호출)을 실행하는 데 필요한 비용.                                          |
| Gas fees     | Computation fees로, 트랜잭션 계산 비용을 의미한다. Gas 1 단위당 400 nanotons이 든다.                     |

### <mark style="color:blue;">TON 지갑 사용 시 유의 사항</mark> <a href="#id-9" id="id-9"></a>

1. 온체인 트랜잭션 비용은 모두 TON 체인이 수취하며 TokenPocket 지갑은 별도 수수료를 받지 않는다.
2. 모든 지갑은 첫 트랜잭션에서 Toncoin을 사용해 지갑 컨트랙트를 배포해야 하며, 이는 한 번만 발생한다.
3. 각 트랜잭션마다 온체인 스토리지 비용이 발생하며 매번 지불해야 한다.
4. 이미 배포된 지갑에 Toncoin 잔액이 없으면 다음 입금 시 그동안 누적된 스토리지 비용이 자동 공제되므로 입금액과 출금액이 다소 다를 수 있다.
5. 트랜잭션 시 수신자의 네트워크(메인넷/테스트넷)가 자신의 네트워크와 일치하는지 반드시 확인해야 하며, 네트워크가 다르면 자산이 영구 손실된다. 이 규칙은 DApp 상호작용에도 동일하게 적용된다.
6. 지갑은 니모닉과 개인키를 기반으로 탈중앙화 방식으로 생성/가져오기 되므로 반드시 안전하게 보관해야 한다.
7. 이미 생성된 지갑은 컨트랙트 유형이 추가되거나 변경되어도 주소가 바뀌지 않는다.
8. TON에서 DApp과 상호작용할 때 지갑을 연결한 후 다른 지갑으로 전환해도 알림이 표시되지 않으므로, 거래 전에 연결된 지갑이 현재 지갑인지 확인해야 한다.
9. 일부 DApp은 네트워크 불일치를 경고하지 않을 수 있으므로, 지갑이 현재 메인넷인지 테스트넷인지 확인하여 네트워크 오차로 인한 자산 손실을 방지해야 한다.
