> 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/widget-integration/web-javascript-sdk/undefined/solana-wallet-adapter.md).

# Solana Wallet Adapter

## 지원 네트워크 <a href="#supported-networks" id="supported-networks"></a>

<table><thead><tr><th width="172.33333333333331">Chain ID</th><th>Network Name</th><th>Network Variable</th></tr></thead><tbody><tr><td>solana:mainnet</td><td>Solana Mainnet</td><td>solana</td></tr><tr><td>solana:devnet</td><td>Solana Devnet</td><td>solana-devnet</td></tr></tbody></table>

## 설치(Install)

{% tabs %}
{% tab title="npm" %}

```bash
npm install @wepin/solana-wallet-adapter
```

{% endtab %}

{% tab title="yarn" %}

```bash
yarn add @wepin/solana-wallet-adapter
```

{% endtab %}
{% endtabs %}

설치가 완료되면 앱 등록 후 할당받은 App ID와 App Key를 사용하여 아래와 같이 WepinProvider 인스턴스를 초기화합니다. 이렇게 하면 WepinProvider 를 사용할 수 있게 됩니다.

<pre class="language-javascript"><code class="lang-javascript"><strong>// 1. 패키지 import
</strong>import { WepinSolanaWalletAdapter } from "@wepin/solana-wallet-adapter";

<strong>
</strong>// 2. 초기화
const wepinSolanaWalletAdapter = new WepinSolanaWalletAdapter({
    appId: 'your-wepin-app-id',
    appKey: 'your-wepin-app-key',
    network: 'solana',
    attributes: {
        defaultCurrency: 'KRW', 
        defaultLanguage: 'ko'
    }
})
</code></pre>

```jsx
//@solana/wallet-adapter-react 와 함께 사용하시는 경우
const wallets = useMemo(
    () => [
      new WepinSolanaWalletAdapter({
        appId: 'your-wepin-app-id',
        appKey: 'your-wepin-app-key',
        network: 'solana',
        attributes: {
            defaultCurrency: 'KRW', 
            defaultLanguage: 'ko'
        }
      })
    ],
    []
  );
```

### **Parameters**

* WepinWalletAdapterConfig \<Object>
  * `appId` \<string>\
    앱 등록 후 할당받은 App ID
  * `appKey` \<string>\
    앱 등록 후 할당받은 App Key
  * `network` \<string> **optional**\
    위핀이 지원하는 월렛어댑터의 Network Variable 값으로, Solana Mainnet의 경우 "solana" 입니다. Network Variable은 소문자로 입력해야 합니다. 전체 목록은 [Wepin Solana Wallet Adapter 지원 네트워크](#supported-networks)에서 확인하세요.\
    기본값은 "solana"입니다.
  * `attributes` \<object> **optional**
    * `defaultLanguage`: 위젯의 기본 설정 언어. 현재 지원하는 언어는 `en`, `ko` , `ja`입니다. 기본값은 `en` 입니다.
    * `defaultCurrency`: 위젯의 기본 통화 설정. 현재 지원하는 통화는 `USD`, `KRW`, `JPY` 입니다. 기본값은 `USD` 입니다.

## 메소드(Method)

Wepin Solana Wallet Provider 에서 사용할 수 있는 메소드는 다음과 같습니다.

### connect

Wepin Wallet 과 연결하고 사용자의 Public Key 를 가져옵니다.

#### parameters

* `<void>`

#### Return Value

Promise\<void>

* 연결 성공 시, Wallet Adapter의 connected 값이 true 로 설정되고, `publicKey` 속성에 사용자의 Public Key 가 설정됩니다.

#### Example

```typescript
await walletSolanaWalletAdapter.connect()
const isConnected = walletSolanaWalletAdapter.connected    //연결 여부 확인
const publicKey = walletSolanaWalletAdapter.publicKey        //연결된 계정의 PublicKey
```

***

### signMessage

지정된 메시지를 사용자의 계정으로 서명합니다.

#### parameters

* `message` \<Uint8Array>\
  서명할 메시지

#### Return Value

* `Promise<Uint8Array>`\
  서명된 메시지&#x20;

#### Example

```typescript
const message = new TextEncoder().encode('Hello, Solana!');
const signedMessage = await wepinSolanaWalletAdapter.signMessage(message);
console.log(`Signed message as Uint8Array:`, signedMessage);
```

***

### signTransaction

Solana 트랜잭션 객체를 입력받아 서명합니다.

#### parameters

* `transaction` \<Transaction | VersionedTransaction>\
  서명할 Solana 트랜잭션 객체

#### Return Value

* `Promise<Transaction | VersionedTransaction>`\
  서명이 포함된 트랜잭션 객체

#### Example

```typescript
import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js';

const publicKey = wepinSolanaWalletAdapter.publicKey
// 트랜잭션 생성
const transaction = new Transaction().add(
  SystemProgram.transfer({
    fromPubkey: publicKey,
    toPubkey: new PublicKey('recipient-public-key'),
    lamports: 1000000,
  }),
);

// 최근 블록해시와 feePayer 설정
transaction.recentBlockhash = 'recent-blockhash';
transaction.feePayer = publicKey;

// 트랜잭션 서명
const signedTransaction = await wepinSolanaWalletAdapter.signTransaction(transaction);

console.log('Signed Transaction:', signedTransaction);

```

***

### sendTransaction

Solana 트랜잭션 객체를 입력 받아 서명하고 전송합니다.

#### parameters

* `transaction` \<Transaction | VersionedTransaction> - 서명 및 전송할 Solana 트랜잭션 객체
* `connection` Connection - Solana 네트워크와 상호작용하는 연결 객체
* `options` SendTransactinOptions - 트랜잭션 전송 시 필요한 추가 옵션 *optional*
  * `signers` - 추가 서명이 필요한 계정 배열 *optional*

#### Return Value

* `Promise<TransactionSignature>` - 성공적으로 전송된 트랜잭션의 고유 서명(signature) 을 반환합니다.

#### Example

```typescript
import { Connection, Transaction, SystemProgram, PublicKey } from '@solana/web3.js';

const connection = new Connection(umi.rpc.getEndpoint(), 'finalized')
const publicKey = wepinSolanaWalletAdapter.publicKey
// 트랜잭션 생성
const transaction = new Transaction().add(
  SystemProgram.transfer({
    fromPubkey: publicKey,
    toPubkey: new PublicKey('recipient-public-key'),
    lamports: 1000000,
  }),
);

// 최근 블록해시와 feePayer 설정
transaction.recentBlockhash = 'recent-blockhash';
transaction.feePayer = publicKey;

// 트랜잭션 서명
const signature = await wepinSolanaWalletAdapter.sendTransaction(transaction, connection, {});

console.log('Signature:', signature );

```

***

### signAllTransactions

여러개의 Solana 트랜잭션 객체를 입력 받아 서명합니다.

{% hint style="info" %}
signAllTransactions을 이용하기 위해서는 사전에 사용 등록이 필요합니다. Wepin에 [문의](https://mail.google.com/mail/u/0/?to=wepin.contact@iotrust.kr\&su=%EB%AC%B8%EC%9D%98%ED%95%98%EA%B8%B0%5BGeneral%5D\&body=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.+%EA%B4%80%EB%A0%A8+%EB%AC%B8%EC%9D%98+%EC%82%AC%ED%95%AD%EC%9D%84+%EC%9E%85%EB%A0%A5%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94.\&fs=1\&tf=cm)해주세요. 한번에 sign 할 수 있는 Transaction 개수는 최대 10개 입니다.
{% endhint %}

#### parameters

* `Array<Transaction | VersionedTransaction>`\
  서명할 Solana 트랜잭션 객체 배열

#### Return Value

* `Promise<Array<Transaction | VersionedTransaction>>`\
  서명이 포함된 트랜잭션 객체 배열

#### Example

```typescript
import { Transaction, SystemProgram, PublicKey } from '@solana/web3.js';

// 트랜잭션 서명
const signedTransactions = await wepinSolanaWalletAdapter.signAllTransactions(transactions);

console.log('Signed Transactions:', signedTransactions);

```

***

### disconnect

Wepin Wallet 연결을 해제합니다.

#### parameters

* `<void>`

#### Return Value

* `Promise<void>`

#### Example

```typescript
await wepinWallet.disconnect();
```
