# 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();
```


---

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