# Kaia Provider

Ethers.js 또는 Web3.js를 Wepin Provider와 함께 사용하면 EVM 계열의 블록체인과 상호작용 할 수 있습니다.&#x20;

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

{% hint style="info" %}
목록에 필요한 블록체인이 없나요? [위핀 팀에 요청](https://wepinwallet.typeform.com/WEPIN-Wallet)하여 별도의 비용 없이 블록체인을 추가할 수 있습니다.
{% endhint %}

<table><thead><tr><th width="172.33333333333331">Chain ID</th><th>Network Name</th><th>Network Variable</th><th></th></tr></thead><tbody><tr><td>8217</td><td>Kaia Mainnet</td><td>klaytn</td><td></td></tr><tr><td>1001</td><td>Kaia Kairos Testnet</td><td>klaytn-testnet</td><td></td></tr></tbody></table>

## 설치(Install)

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

```bash
npm install @wepin/provider-js
```

{% endtab %}

{% tab title="yarn" %}

```bash
yarn add @wepin/provider-js
```

{% endtab %}
{% endtabs %}

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

<pre class="language-javascript"><code class="lang-javascript"><strong>// 1. 패키지 import
</strong>import { WepinProvider } from '@wepin/provider-js'
<strong>
</strong>// 2. 초기화
const WepinProvider = new WepinProvider({
    appId: 'your-wepin-app-id',
    appKey: 'your-wepin-app-key',
})
</code></pre>

## 초기화하기 <a href="#initialization" id="initialization"></a>

Wepin Provider를 초기화하는 방법입니다.&#x20;

## init

```javascript
await wepinProvider.init(attributes?)
```

### **Parameters**

* `attributes` \<object> **optional**
  * `defaultLanguage`: 위젯 기본 언어 설정, 기본 값은 `ko`입니다. 현재 지원하는 언어는 `en`, `ko`, `ja` 3가지 입니다.
  * `defaultCurrency`: T위젯 기본 통화 설정, 기본 값은 `KRW`입니다. 현재 지원하는 통화는 `USD`, `KRW`, `JPY` 3가지 입니다.

### **Return value**

* `Promise`\<void>

### **Example**

```javascript
await wepinProvider.init({
    defaultLanguage: 'ko',
    defaultCurrency: 'KRW',
})
```

## isInitialized

WepinProvider 가 정상적으로 초기화 되었는지 확인할 수 있습니다.&#x20;

```javascript
wepinProvider.isInitialized()
```

### **Parameters**

* `<void>`

### **Return value**

* `<boolean>`\
  init이 정상적으로 잘 된 경우 <mark style="color:orange;">`true`</mark> , 실패한 경우 <mark style="color:orange;">`false`</mark> 를 반환합니다.

### **Example**

```javascript
if(wepinProvider.isInitialized()) {
  console.log('wepinProvider is initialized!')
}
```

## changeLanguage

위젯의 언어와 통화를 변경할 수 있습니다.

```javascript
wepinProvider.changeLanguage(attributes)
```

### **Parameters**

* `attributes` \<object>
  * `language` \<string>\
    위젯에 표시될 언어를   지정합니다. 현재 지원하는 언어는 `en`, `ko`, `ja` 3가지 입니다.
  * `currency` \<string>\
    위젯에 표시될 통화를  지정합니다. 현재 지원하는 통화는 `USD`, `KRW` , `JPY` 3가지 입니다.

### **Return value**

* \<boolean>\
  init이 정상적으로 잘 된 경우 <mark style="color:orange;">`true`</mark> , 실패한 경우 <mark style="color:orange;">`false`</mark> 를 반환합니다.

### **Example**

```javascript
if(wepinProvider.isInitialized()) {
  console.log('wepinProvider is initialized!')
}
```

## 메서드(Method)

Wepin Provider 초기화 후에 메서서드를 사용할 수 있습니다.

### getProvider

Network에 해당하는 Provider를 반환합니다.

```jsx
await wepinProvider.getProvider(network)
```

#### **Parameters**

* `network` \<string> \
  위핀이 지원하는 Provider의 Network Variable 값으로, Kaia Mainnet의 경우 "klaytn" 입니다. Network Variable은 소문자로 입력해야 합니다. 전체 목록은 [Kaia Provider 지원 네트워크](#supported-networks)에서 확인하세요.

#### **Return value**

* `Promise`\<BaseProvider> - A EIP-1193 provider

#### **Example**

```javascript
const provider = await wepinProvider.getProvider('klaytn')
```

## finalize

WepinProvider 사용을 종료합니다.

```javascript
wepinProvider.finalize()
```

#### **Parameters**

* `<void>`

#### **Return value**

* `<void>`

#### **Example**

```javascript
wepinProvider.finalize()
```

***

### request

Kaia 블록체인과 상호작용 할 수 있도록 JSON-RPC 요청을 보낼 수 있습니다.

{% hint style="info" %}

#### kaia prefix method 는 버전0.0.31 이부터 지원합니다.

{% endhint %}

#### eth\_accounts / klay\_accounts / kaia\_accounts

위핀 지갑에 연결하여 사용자의 허가를 받아 계정의 주소를 공유합니다. 연결이 승인되면 애플리케이션은 메세지 서명이나 트랜잭션 요청을 할 수 있습니다.

**Parameters**

* `void`

**Returns**

* `Promise<Array<string>>` - 사용자의 주소 목록을 반환합니다.

**Example**

```typescript
const accounts = await wepinProvider.request({
      method: 'kaia_accounts',
      params: []
})
```

***

#### eth\_signTransaction / klay\_signTransaction / kaia\_signTransaction

주어진 매개변수로 트랜잭션을 구성하고 사용자의 개인키로 트랜잭션에 서명합니다.&#x20;

**Supported Tx Type**

<table><thead><tr><th width="300">TxType</th><th width="247">Support Fee Delegateed</th><th>Version</th></tr></thead><tbody><tr><td>TxTypeLegacy</td><td>false</td><td></td></tr><tr><td>TxTypeValueTransfer</td><td>true</td><td>≥ v.0.0.31</td></tr><tr><td>TxTypeValueTransferMemo</td><td>true</td><td>≥ v.0.0.31</td></tr><tr><td>TxTypeSmartContractExecution</td><td>true</td><td>≥ v.0.0.31</td></tr></tbody></table>

**Parameters**

{% tabs %}
{% tab title="TxTypeLegacy" %}
TxTypeLegacyTransaction 은 기존에 Kaia(Klaytn)에 존재했던 거래 유형을 나타냅니다.

* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소 (컨트랙트 주소 또는 일반 계정 주소)
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice`\<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `data` \<string> - 실행할 스마트 컨트랙트의 데이터 또는 빈 값. 일반 전송의 경우 `0x`
  {% endtab %}

{% tab title="TxTypeValueTransfer" %}
TxTypeValueTransfer 는 사용자가 KLAY 를 전송할 때 사용되는 트랜잭션입니다.

* `typeInt` \<number> - 8(TxTypeValueTransfer) or 9(TxTypeFeeDelegatedValueTransfer) or 10(TxTypeFeeDelegatedValueTransferWithRatio)
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `feePayer` \<string> - 수수료를 대납할 계정의 주소. typeInt 가 9 또는 10 일 때 필요.
* `feeRatio` \<string> - 수수료 대납자의 수수료 비율. 1\~99 사이의 값을 HexString 형식으로 입력. typeInt가 10 일 때 필요.
  {% endtab %}

{% tab title="TxTypeValueTransferMemo" %}
TxTypeValueTransferMemo 는 사용자가 특정 메세지와 함께KLAY 를 전송할 때 사용되는 트랜잭션 입니다.

* `typeInt` \<number> - 16(TxTypeValueTransfer) or 17(TxTypeFeeDelegatedValueTransfer) or 18(TxTypeFeeDelegatedValueTransferWithRatio)
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `input` \<string> - 트랜잭션과 함께 전송되는 메세지. Hex string 형식으로 입력.
* `feePayer` \<string> - 수수료를 대납할 계정의 주소. typeInt 가 17 또는 18 일 때 필요.
* `feeRatio` \<string> - 수수료 대납자의 수수료 비율. 1\~99 사이의 값을 HexString 형식으로 입력. typeInt가 18 일 때 필요.
  {% endtab %}

{% tab title="TxTypeSmartContractExecution" %}
TxTypeSmartContractExecution 은 스마트 컨트랙트 실행을 위한 트랜잭션입니다.

* `typeInt` \<number> - 48(TxTypeValueTransfer) or 49(TxTypeFeeDelegatedValueTransfer) or 50(TxTypeFeeDelegatedValueTransferWithRatio)
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소 (컨트랙트 주소)
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `input` \<string> - 트랜잭션과 함께 전송되는 데이터. Hex string 형식으로 입력.
* `feePayer` \<string> - 수수료를 대납할 계정의 주소. typeInt 가 49 또는 50 일 때 필요.
* `feeRatio` \<string> - 수수료 대납자의 수수료 비율. 1\~99 사이의 값을 HexString 형식으로 입력. typeInt가 50 일 때 필요.
  {% endtab %}
  {% endtabs %}

**Returns**

* `Promise<Object>`
  * `raw <string>` - 직렬화된 트랜잭션
  * `tx <Object>` - 서명이 포함된 트랜잭션 오브젝트.

**Example**

<pre class="language-typescript"><code class="lang-typescript"><strong>const params = {
</strong>      typeInt: 49,       //TxTypeFeeDelegatedSmartContractExecution
      from: senderAddress,
      to: '0x4dbccb64e9f7b4df4263d8e3b93c89ae406fd8e5',
      input: '0x45773e4e'
      gas: '0x15f90',
      gasPrice: '0x5d21dba00',
      feePayer: feePayerAddress,
}

const {raw, tx} = await wepinProvider.request({
      method: 'kaia_signTransaction',
      params: [params]
})


const decodedTx = caver.transaction.decode(raw)
const signedTx = await caver.wallet.signAsFeePayer(
      feePayerAddress,
      decodedTx as FeeDelegatedTransaction
)
const txId = await caver.rpc.klay.sendRawTransaction(
      signedTx.getRawTransaction()
)
</code></pre>

***

#### eth\_sendTransaction / klay\_sendTransaction / kaia\_sendTransaction

주어진 매개변수로 트랜잭션을 구성하고 사용자의 개인키로 트랜잭션에 서명하여 네트워크에 전송합니다.&#x20;

sendTransaction 은 FeeDelegated 를 지원하지 않습니다.

**Supported Tx Type**

<table><thead><tr><th width="300">TxType</th><th>Version</th></tr></thead><tbody><tr><td>TxTypeLegacy</td><td></td></tr><tr><td>TxTypeValueTransfer</td><td>≥ v.0.0.31</td></tr><tr><td>TxTypeValueTransferMemo</td><td>≥ v.0.0.31</td></tr><tr><td>TxTypeSmartContractExecution</td><td>≥ v.0.0.31</td></tr></tbody></table>

**Parameters**

{% tabs %}
{% tab title="TxTypeLegacy" %}
TxTypeLegacyTransaction 은 기존에 Kaia(Klaytn)에 존재했던 거래 유형을 나타냅니다.

* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소 (컨트랙트 주소 또는 일반 계정 주소)
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice`\<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `data` \<string> - 실행할 스마트 컨트랙트의 데이터 또는 빈 값. 일반 전송의 경우 `0x`
  {% endtab %}

{% tab title="TxTypeValueTransfer" %}
TxTypeValueTransfer 는 사용자가 KLAY 를 전송할 때 사용되는 트랜잭션입니다.

* `typeInt` \<number> - 8
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
  {% endtab %}

{% tab title="TxTypeValueTransferMemo" %}
TxTypeValueTransferMemo 는 사용자가 특정 메세지와 함께KLAY 를 전송할 때 사용되는 트랜잭션 입니다.

* `typeInt` \<number> - 16
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `input` \<string> - 트랜잭션과 함께 전송되는 메세지. Hex string 형식으로 입력.
  {% endtab %}

{% tab title="TxTypeSmartContractExecution" %}
TxTypeSmartContractExecution 은 스마트 컨트랙트 실행을 위한 트랜잭션입니다.

* `typeInt` \<number> - 48
* `from` \<string> - 트랜잭션을 보내는 계정의 주소. 실제 서명자의 주소와 다르면 에러 발생.
* `to` \<string> - 트랜잭션의 수신자 주소 (컨트랙트 주소)
* `gas` \<string> - 트랜잭션 실행에 필요한 최대 가스량. Hex string 형식으로 입력.
* `gasPrice` \<string> - 트랜잭션에 지불할 가스 비용. Hex string 형식으로 입력.
* `value` \<string> - 트랜잭션과 함께 전송되는 Klay 값. Hex string 형식으로 입력.
* `input` \<string> - 트랜잭션과 함께 전송되는 데이터. Hes string 형식으로 입력.
  {% endtab %}
  {% endtabs %}

**Returns**

* `Promise<string>` - 트랜잭션 해시

**Example**

```typescript
const params = {
      typeInt: 8,       //TxTypeValueTransfer
      from: senderAddress,
      to: toAddress,
      value: '0x1234'
      gas: '0x15f90',
      gasPrice: '0x5d21dba00'
}

const txId = await wepinProvider.request({
      method: 'kaia_sendTransaction',
      params: [params]
})
```

***

#### eth\_sign / klay\_sign / kaia\_sign

EIP-191 방식으로 message 를 서명합니다.

**Parameters**

* `<array>`
  * `<string>` - sign 하는 계정의 주소(Public Key)
  * `<string>` - sign 하려는 message

**Returns**

* `Promise<string>` - 서명 값(hex string)

**Example**

```typescript
const message = 'Hello World'

const signature = await wepinProvider.request({
      method: 'kaia_sign',
      params: [signerAddress, message]
})
```

***

#### personal\_sign

EIP-191 방식으로 message 를 서명합니다.

**Parameters**

* `<array>`
  * `<string>` - sign 하는 계정의 주소(Public Key)
  * `<string>` - sign 하려는 message

**Returns**

* `Promise<string>` - 서명 값(hex string)

**Example**

```typescript
const message = 'Hello World'

const signature = await wepinProvider.request({
      method: 'personal_sign',
      params: [signerAddress, message]
})
```

***

#### eth\_signTypedData\_v1 / klay\_signTypedData\_v1

EIP-712 v1 형식의 데이터를 서명합니다.

**Parameters**

* `<array>`
  * `<string>` - sign 하는 계정의 주소(Public Key)
  * `<string>` - sign 하려는 message

**Returns**

* `Promise<string>` - 서명 값(hex string)

**Example**

```typescript
const signature = await wepinProvider.request({
      method: 'kaia_signTypedData_v1',
      params: [signerAddress, msgParamsV1 ]
})
```

***

#### eth\_signTypedData\_v3 / klay\_signTypedData\_v3

EIP-712 v3 형식의 데이터를 서명합니다.

**Parameters**

* `<array>`
  * `<string>` - sign 하는 계정의 주소(Public Key)
  * `<string>` - sign 하려는 message

**Returns**

* `Promise<string>` - 서명 값(hex string)

**Example**

```typescript
const signature = await wepinProvider.request({
      method: 'kaia_signTypedData_v3',
      params: [signerAddress, msgParamsV3 ]
})
```

***

#### eth\_signTypedData\_v4 / klay\_signTypedData\_v4

EIP-712 v4 형식의 데이터를 서명합니다.

**Parameters**

* `<array>`
  * `<string>` - sign 하는 계정의 주소(Public Key)
  * `<string>` - sign 하려는 message

**Returns**

* `Promise<string>` - 서명 값(hex string)

**Example**

```typescript
const signature = await wepinProvider.request({
      method: 'kaia_signTypedData_v4',
      params: [signerAddress, msgParamsV4 ]
})
```

그 외 Kaia 네트워크의 자세한 내용은 아래 링크를 참고하세요.

{% embed url="<https://docs.kaia.io/references/json-rpc/references/>" %}


---

# 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/provider/kaia-provider.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.
