# 사용하기

다음은 SDK에서 제공하고 있는 함수입니다.&#x20;

* [init()](#init): 디앱 초기화
* [login](#login)(): 지갑 로그인 호출
* [transaction](#transaction)(): 지갑 트랜잭션 전송 호출
* ~~profile(): 로그인 토큰 검증~~

## init - 디앱 초기화

WalletProvider.init 함수를 통해 로그인 혹은 트랜잭션 전송전에 Dapp의 전달받은 디앱 키를 통해 초기화를 진행합니다.

SDK에서 제공되고 있는 **모든 함수는 디앱 초기화 이후 사용 가능**합니다.&#x20;

### 1. 파라미터

<table><thead><tr><th width="190.33333333333331">항목</th><th>타입</th><th width="322">설명</th><th width="105.66666666666674">필수여부</th></tr></thead><tbody><tr><td>clientId</td><td>string</td><td>사전에 제공 받은 공개용 디앱(Dapp) 키</td><td>O</td></tr><tr><td>env</td><td>'dev' | 'production'</td><td><p>서비스 환경 <br>- dev: 테스트넷</p><p>- production: 메인넷 (기본값)</p></td><td>X</td></tr><tr><td>customProviderUri</td><td>string</td><td>설치형 커스텀 프로바이더 서비스 endpoint</td><td>X</td></tr><tr><td>locale</td><td>'ko' | 'en'</td><td>국제화 언어</td><td>X</td></tr></tbody></table>

### 2. 예제코드

```javascript
import WalletProvider from '@sym/wallet-provider';

WalletProvider.init({
 clientId: 'dsaiud1h82139sad',
 env: 'dev', // 개발환경
 locale: 'en' // 영문
});
```

## login - 지갑 로그인 호출

WalletProvider.login 함수를 통해 프로바이더의 로그인 창을 호출합니다.

### 1. 파라미터

<table><thead><tr><th width="190.33333333333331">항목</th><th>타입</th><th width="322">설명</th><th width="105.66666666666674">필수여부</th></tr></thead><tbody><tr><td>redirectUri</td><td>string</td><td>로그인 완료 후 리다이렉션 될 URI</td><td>O</td></tr></tbody></table>

### 2. 응답 \<Promise>

<table><thead><tr><th width="163.33333333333331">항목</th><th>타입</th><th width="322">설명</th><th width="105.66666666666674">필수여부</th></tr></thead><tbody><tr><td>status</td><td>'fail' | 'success'</td><td>로그인 성공 실패 여부</td><td>O</td></tr><tr><td>accessToken</td><td>string</td><td>트랜잭션 전송 및 API 호출 시 필요한 Token (6H)</td><td>X</td></tr><tr><td>refreshToken</td><td>string</td><td>access token 을 재발급 받기 위한 Token (2W)</td><td>X</td></tr><tr><td>symId</td><td>string</td><td>지갑 로그인한 sym id</td><td>X</td></tr></tbody></table>

### 3. 예제코드

```javascript
import WalletProvider from '@sym/wallet-provider';

...
WalletProvider.login({
	redirectUri: 'http://localhost:3000/use/token',
}).then((m) => {
	console.log('로그인 완료', m);
});
```

## transaction - 트랜잭션 전송 호출

`WalletProvider.transaction`함수를 통해 프로바이더의 트랜잭션 전송 창을 호출합니다.

### 1. 파라미터

<table><thead><tr><th width="190.33333333333331">항목</th><th>타입</th><th width="322">설명</th><th width="105.66666666666674">필수여부</th></tr></thead><tbody><tr><td><mark style="color:purple;">config</mark></td><td>object</td><td>-</td><td>O</td></tr><tr><td><code>ㄴ</code> redirectUri</td><td>string</td><td>트랜잭션 전송 후 리다이렉션 될 URI</td><td>O</td></tr><tr><td><code>ㄴ</code> token</td><td>string</td><td>로그인 시 전달받은 accessToken</td><td>O</td></tr><tr><td><mark style="color:purple;">message</mark></td><td>object</td><td><a href="undefined-1/undefined">트랜잭션 파라미터 참조</a></td><td>O</td></tr><tr><td><code>ㄴ</code> type</td><td>'origin' | 'sct20' | 'sct21' | 'sct30'</td><td>트랜잭션 타입</td><td>O</td></tr><tr><td><code>ㄴ</code> method</td><td>string</td><td>SCT일 경우 메소드</td><td>O</td></tr><tr><td><code>ㄴ</code> params</td><td>object</td><td>SCT일 경우 sct 파라미터</td><td>X</td></tr><tr><td><code>ㄴ</code> to</td><td>string</td><td>트랜잭션 to</td><td>X</td></tr></tbody></table>

### 2. 응답 \<Promise>

<table><thead><tr><th width="189">항목</th><th width="163">타입</th><th>설명</th><th width="142">필수여부</th></tr></thead><tbody><tr><td>status</td><td>'fail' | 'success'</td><td>트랜잭션 전송 성공 실패 여부</td><td>O</td></tr></tbody></table>

### 3. 예제코드

```javascript
import WalletProvider from '@sym/wallet-provider';

... 

const accessToken = "{로그인 시 전달받은 accessToken}"

WalletProvider.transaction({
    redirectUri: 'http://localhost:3000/use/token',
    token: accessToken,
},
WalletProvider.Tx.Sct20.create({
    name: 'sinil',
    symbol: 'SIL',
    totalSupply: 500,
}).then((m) => {
    console.log('트랜잭션 전송 완료', m);
});
```
