> For the complete documentation index, see [llms.txt](https://docs.wepin.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.wepin.io/restful-api/transaction.md).

# 트랜잭션

트랜잭션 실행과 관련된 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>
