# Gasless Transaction

## TX-SERVER 사용 신청

TX-SERVER의 API를 이용 특정 지갑주소로 토큰을 전송하기 위해서는 아래 사이트에서 API Key 발급 신청 및 발급 처리 완료 후 연동을 위한 정보를 획득하여 사용이 가능하다.

{% tabs %}
{% tab title="웹 사이트" %}
<https://business.fncy.world/page/issue/partner/key>
{% endtab %}
{% endtabs %}

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/man2TaFgWhVo2uzpa1Yw/API_Key_1.png" alt=""><figcaption></figcaption></figure>

* [x] **Step 1.** 웹 사이트 접근
* [x] **Step 2.** API Key 발급 신청 완료 후 "<mark style="color:red;">접수 ID</mark>" 메모
* [x] **Step 3.** 일정 시간 후 API Key 발급 정보 확인하기

## TX-SERVER API 기능

API Key 발급 신청이 완료되면 연동을 위한 정보인 요청 도메인, Api-Key등의 정보를 확인할 수 있고 그 정보를 이용하여 아래 API 요청이 가능 합니다.

## 관리 컨트랙트 메서드 목록 조회

<mark style="color:blue;">`GET`</mark> `/v1/management-contract-methods`

#### Headers

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| Api-Key<mark style="color:red;">\*</mark> | String | API Key 발급 정보 |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}

## 트랜잭션 요청 등록

<mark style="color:green;">`POST`</mark> `/v1/transaction-request`

#### Headers

| Name                                      | Type   | Description   |
| ----------------------------------------- | ------ | ------------- |
| Api-Key<mark style="color:red;">\*</mark> | String | API Key 발급 정보 |

#### Request Body

| Name                                             | Type   | Description                            |
| ------------------------------------------------ | ------ | -------------------------------------- |
| functionParams<mark style="color:red;">\*</mark> | String | 컨트랙트 함수 호출 시 필요한 필수 파라미터 값들            |
| methodNo<mark style="color:red;">\*</mark>       | String | 호출 가능한 컨트랙트 함수의 고유값 (메서드 목록 조회 API 정보) |
| ticketId<mark style="color:red;">\*</mark>       |        | 포인트 교환 서버에서 요청하는 요청ID (UNIQUE)         |

{% tabs %}
{% tab title="200: OK " %}

{% endtab %}
{% endtabs %}

## Gasless Transaction을 이용한 Web2와 Web3간 재화 교환 예제

## 1. UX/UI 디자인

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/SHj5WHJ4z1Aee7hz9b3x/Exchange.png" alt=""><figcaption></figcaption></figure>

## 2. 시퀀스 다이어그램

## 1) 로그인

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/fxRRdwj7ZI5Wa9DdX7Bl/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%20(1).png" alt=""><figcaption><p>Login Simple Sequence Diagram</p></figcaption></figure>

* 게임 플레이어 아이디를 조회 하여  로그인 하기 위해서 게임에서의 인증과 동일한 인증 채널을 제공해 주고 각 채널을 통해  인증하여 전달해 주는 정보를 활용하여 로그인 토큰을 발급해 준다.
* 포인트 교환소는 게임 인증서버에서 발급된 토큰을 이용하여 보호된 지원 요청에 사용합니다.

## 2) 포인트 출금 (토큰 입금)

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/L3m8uhZSHLpTBPy9BbOe/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%20(2).png" alt=""><figcaption><p>Point Withdrawal Simple Sequence Diagram</p></figcaption></figure>

* 게임 서버에 포인트 차감 요청이 성공하면 TX-SERVER에 지정된 지갑주소로 토큰 입금 요청을 하며 결과는 추후 콜백의 요청 정보를 통해서 확인한다.
* TX-SERVER 요청을 위한 TICKET\_ID는 중복되지 않은 유니크한 정보로 생성하여 요청하고 저장한다.

## 3) 포인트 입금 (토큰 출금)

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/J4BOUNiybBRQ8dqxSCoi/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%20(3).png" alt=""><figcaption><p>Point Deposit Simple Sequence Diagram</p></figcaption></figure>

* 토큰 출금 요청후 결과 콜백에서 성공시에만 게임 서버를 통해서 포인트 증가 요청을 한다.&#x20;
* TX-SERVER 요청을 위한 TICKET\_ID는 중복되지 않은 유니크한 정보로 생성하여 요청하고 저장한다.

## 4) 출금 토큰 전송

<figure><img src="https://content.gitbook.com/content/ckizaNCC9ZGBnzuimaoV/blobs/cTztNenxG4zXW89gf5kZ/%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%20(4).png" alt=""><figcaption><p>Withdrawal Token Transfer Simple Sequence Diagram</p></figcaption></figure>

* 게임 포인트를 출금하여 입금된 토큰을 임의의 지갑주소로 전송한다.
* TX-SERVER 요청을 위한 TICKET\_ID는 중복되지 않은 유니크한 정보로 생성하여 요청하고 저장한다.

##
