# 트랜잭션

트랜잭션 실행과 관련된 API는 3가지로 구성됩니다.&#x20;

* [트랜잭션에 필요한 정보 조회](#undefined) `/v1/tx/prepare`
* [트랜잭션 서명하기](#undefined-1) `/v1/tx/sign`
* [트랜잭션 전송하기](#undefined-2) `/v1/tx/broadcast`&#x20;

상황에 따라 필요한 API들을 순서대로 수행할 수 있습니다.

* 서명만 생성하는 경우: 트랜잭션에 필요한 정보 조회  ⇒ 트랜잭션 서명하기&#x20;
* 서명 생성과 브로드캐스트까지 한번에 실행하는 경우: 트랜잭션에 필요한 정보 조회 ⇒ 트랜잭션 전송하기
  * (Optional) 서명 생성 및 브로드캐스트까지 실행하는 경우: 트랜잭션에 필요한 정보 조회 ⇒ 트랜잭션 서명하기 ⇒ 트랜잭션 전송하기

### 트랜잭션에 필요한 정보 조회 <a href="#retrieve-transaction-information" id="retrieve-transaction-information"></a>

트랜잭션에 필요한 수수료와 같은 정보를 조회 합니다.

```http
POST /v1/tx/prepare HTTP/1.1
Host: sdk.wepin.io
X-API-KEY: ${APP_KEY}
X-API-DOMAIN: {APP_DOMAIN}
X-SDK-TYPE: {platform}_rest_api
Content-Type: application/json
Authorization: Bearer ${access_token}
```

#### Request

**Parameter**

<table><thead><tr><th width="134">Name</th><th width="132">Type</th><th width="382">Description</th><th>Required</th></tr></thead><tbody><tr><td>userId</td><td>String</td><td><a href="/pages/OuSeFTVsA0hkjyoAOvnH#login">로그인</a> 후 받은 Response의 userId</td><td>O</td></tr><tr><td>accountId</td><td>String</td><td>전송할 계정 ID. <code>/v1/account</code>의 response value</td><td>O</td></tr><tr><td>contract</td><td>String</td><td>토큰을 전송하려고 할 때, 전송할 토큰의 contract 주소</td><td>X</td></tr><tr><td>to</td><td>String</td><td>전송 받을 주소</td><td>O</td></tr><tr><td>isNft</td><td>String</td><td><code>ERC1155</code> | <code>ERC721</code><br>NFT를 전송하려고 할 때, NFT scheme type 을 정의</td><td>X</td></tr><tr><td>tokenId</td><td>Number String</td><td><code>isNft</code> 를 설정하고 NFT를 전송하려고 하는 경우 NFT 의 token ID</td><td>X</td></tr><tr><td>amount</td><td>String</td><td>전송할 코인 or 토큰의 개수. FT를 전송할 경우에 사용.</td><td>X</td></tr></tbody></table>

#### Response

**Success Response**

<table><thead><tr><th width="167">Name</th><th width="169">Type</th><th>Description</th></tr></thead><tbody><tr><td>Name</td><td>Type</td><td>Description</td></tr><tr><td>balance</td><td>String</td><td>전송하려는 계정의 현재 Balance</td></tr><tr><td>decimals</td><td>String</td><td>전송하려는 계정 코인의 decimals</td></tr><tr><td>symbol</td><td>String</td><td>전송하려는 계정 코인의 symbol</td></tr><tr><td>tokenId</td><td>Number</td><td>전송하려는 계정이 토큰 계정인 경우 tokenId</td></tr><tr><td>detail</td><td>TxData(Object)</td><td>Transaction에 필요한 데이터. 계정의 종류에 따라 다른 TxData 포맷을 가짐.</td></tr></tbody></table>

### 트랜잭션 서명하기 <a href="#sign-transaction" id="sign-transaction"></a>

[트랜잭션에 필요한 정보 조회](#undefined)를 통해 조회한 데이터를 이용해서 실제 서명을 진행합니다. 필요에 따라서 TxData의 fee 값을 수정해서 서명을 진행할 수 있습니다. 서명 전에는 반드시 PIN Pad Library를 이용하여 사용자의 지갑 PIN 번호를 받아서 UVD를 함께 전송해야 합니다.

```http
POST /v1/tx/sign HTTP/1.1
Host: sdk.wepin.io
X-API-KEY: ${APP_KEY}
X-API-DOMAIN: {APP_DOMAIN}
X-SDK-TYPE: {platform}_rest_api
Content-Type: application/json
Authorization: Bearer ${access_token}
```

#### Request

**Parameter**

<table><thead><tr><th width="129">Name</th><th width="149">Type</th><th width="373">Description</th><th>Required</th></tr></thead><tbody><tr><td>userId</td><td>String</td><td><a href="/pages/OuSeFTVsA0hkjyoAOvnH#login">로그인</a> 후 받은 Response의 userId</td><td>O</td></tr><tr><td>type</td><td>String</td><td>서명의 종류<br>•<code>transaction</code> (transaction) | <code>msg_sign</code> (Personal sign) | <code>sign_data</code> (typed data)<br>• type에 따라 <code>txData</code> 의 구성이 다릅니다.<br>•<code>msg_sign</code> | <code>sign_data</code> 는 현재 <strong>EVM</strong> transaction만 지원합니다.</td><td>O</td></tr><tr><td>pin</td><td>UVD</td><td>사용자의 UVD</td><td>O</td></tr><tr><td>walletId</td><td>String</td><td>사용자 지갑 ID</td><td>O</td></tr><tr><td>accountId</td><td>String</td><td>전송할 계정 ID. <a href="#undefined">트랜잭션에 필요한 정보 조회</a>의 accountId와 동일한 값이어야 함.</td><td>O</td></tr><tr><td>tokenId</td><td>String</td><td>토큰을 전송하는 경우 tokenId</td><td>X</td></tr><tr><td>isNft</td><td>String</td><td><code>ERC1155</code> | <code>ERC721</code></td><td>X</td></tr><tr><td>contract</td><td>String</td><td>토큰을 전송하는 경우 contract 주소</td><td>X</td></tr><tr><td>txData</td><td>TxData(Object)</td><td>Transaction에 필요한 데이터. 계정의 종류에 따라 다른 TxData 포멧을 가짐. <a href="#undefined">트랜잭션에 필요한 정보 조회</a>를 통해 조회한 데이터 값을 포함.</td><td>O</td></tr><tr><td>otpCode</td><td>Object</td><td>otp 인증 정보</td><td>X</td></tr></tbody></table>

#### Response

**Success Response**

<table><thead><tr><th width="187">Name</th><th width="142">Type</th><th>Description</th></tr></thead><tbody><tr><td>signatureResult</td><td>Object</td><td>sign result 값. 전송 네트워크 별로 다른 구조.</td></tr><tr><td>transaction</td><td>Object</td><td>전송 세부 내역</td></tr></tbody></table>

### 트랜잭션 전송하기 <a href="#broadcast-transaction" id="broadcast-transaction"></a>

서명된 트랜잭션을 전송합니다.

```http
POST /v1/tx/broadcast HTTP/1.1
Host: sdk.wepin.io
X-API-KEY: ${APP_KEY}
X-API-DOMAIN: {APP_DOMAIN}
X-SDK-TYPE: {platform}_rest_api
Content-Type: application/json
Authorization: Bearer ${access_token}

```

#### Request

**Parameter**

<table><thead><tr><th width="163">Name</th><th width="147">Type</th><th width="337">Description</th><th>Required</th></tr></thead><tbody><tr><td>userId</td><td>String</td><td><a href="/pages/OuSeFTVsA0hkjyoAOvnH#login">로그인</a> 후 받은 Response의 userId</td><td>O</td></tr><tr><td>type</td><td>String</td><td>서명의 종류<br>• <code>transaction</code> (transaction) | <code>msg_sign</code> (Personal sign) | <code>sign_data</code> (typed dat<br>• type에 따라 <code>txData</code> 의 구성이 다릅니다.<br>• <code>msg_sign</code> | <code>sign_data</code> 는 현재 <strong>EVM</strong> transaction만 지원합니다.</td><td>O</td></tr><tr><td>pin</td><td>UVD</td><td>사용자의 UVD</td><td>O</td></tr><tr><td>walletId</td><td>String</td><td>사용자 지갑 ID</td><td>O</td></tr><tr><td>accountId</td><td>String</td><td>전송할 계정 ID. <a href="#undefined">트랜잭션에 필요한 정보 조회</a>의 accountId와 동일한 값이어야 함.</td><td>O</td></tr><tr><td>tokenId</td><td>String</td><td>토큰을 전송하는 경우 tokenId</td><td>X</td></tr><tr><td>contract</td><td>String</td><td>토큰을 전송하는 경우 contract 주소</td><td>X</td></tr><tr><td>isNft</td><td>String</td><td><code>ERC1155</code> | <code>ERC721</code></td><td>X</td></tr><tr><td>signatureResult</td><td>String | Object</td><td><code>/prepare</code> <code>/sign</code> <code>/broadcast</code> 순서로 실행 시 이미 서명된 데이터를 Broadcast 하는 경우<br>서명(/<code>tx/sign</code>) 후 전달 받은 데이터(수정 없이 그대로 사용)</td><td>X</td></tr><tr><td>txData</td><td>TxData(Object)</td><td><code>/prepare</code> <code>/broadcast</code>순서로 실행 시 서명을 하고 Broadcast 까지 한번에 하는 경우 Transaction에 필요한 데이터. 계정의 종류에 따라 다른 TxData 포멧을 가짐. <a href="#undefined">트랜잭션에 필요한 정보 조회</a>를 통해 조회한 데이터 값을 포함.</td><td>X</td></tr><tr><td>otpCode</td><td>Object</td><td>otp 인증 정보</td><td>X</td></tr></tbody></table>

### Response

**Success Response**

<table><thead><tr><th width="190">Name</th><th width="124">Type</th><th>Description</th></tr></thead><tbody><tr><td>signatureResult</td><td>Object</td><td>sign result 값. 전송 네트워크 별로 조금씩 다른 구조.</td></tr><tr><td>transaction</td><td>Object</td><td>전송 세부 내역</td></tr><tr><td>broadcastData</td><td>String</td><td>네트워크로 전송한 데이터</td></tr><tr><td>txid</td><td>String</td><td>Transaction ID</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wepin.io/restful-api/transaction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
