# caver.validator

`caver.validator` 패키지는 Klaytn에 애플리케이션을 구현할 때 사용되는 검증 함수를 제공합니다.

**NOTE** `caver.validator`는 caver-js [v1.6.3](https://www.npmjs.com/package/caver-js/v/1.6.3) 이후로 제공됩니다.

## validateSignedMessage <a href="#validatesignedmessage" id="validatesignedmessage"></a>

```javascript
caver.validator.validateSignedMessage(message, signatures, address [, isHashed])
```

서명에서 복구된 퍼블릭 키를 Klaytn 계정의 계정 키와 비교하여 서명된 메시지를 검증합니다.

**Parameters**

| Name       | Type      | Description                                                                                                                                                         |
| ---------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| message    | string    | 메시지 문자열입니다. 메시지가 Klaytn 고유의 접두사로 해시화되어 있다면, 세 번째 파라미터는 `true`로 전달되어야 합니다.                                                                                           |
| signatures | object \\ | Array                                                                                                                                                               |
| address    | string    | 메시지에 서명하는 계정 주소입니다.                                                                                                                                                 |
| isHashed   | boolean   | (선택 사항, 기본값: `false`) 마지막 매개 변수가 `true`이면, 주어진 `message`에는 자동적으로 `"\x19Klaytn Signed Message:\n" + message.length + message`가 접두사로 붙지 않을 것이며, 이미 접두사가 있다고 간주될 것입니다. |

**Return Value**

`Promise`는 `PromiEvent`를 반환: Promise가 새로운 컨트랙트 인스턴스와 함께 해결(resolved)됩니다.

**Examples**

```javascript
const address = '0xa84a1ce657e9d5b383cece6f4ba365e23fa234dd'
const message = 'Some Message'
const signature = [
    '0x1b',
    '0x8213e560e7bbe1f2e28fd69cbbb41c9108b84c98cd7c2c88d3c8e3549fd6ab10',
    '0x3ca40c9e20c1525348d734a6724db152b9244bff6e0ff0c2b811d61d8f874f00',
]
> caver.validator.validateSignedMessage(message, signature, address).then(console.log)


const address = '0xa84a1ce657e9d5b383cece6f4ba365e23fa234dd'
const hashedMessage = '0xa4b1069c1000981f4fdca0d62302dfff77c2d0bc17f283d961e2dc5961105b18'
const signature = [
    '0x1b',
    '0x8213e560e7bbe1f2e28fd69cbbb41c9108b84c98cd7c2c88d3c8e3549fd6ab10',
    '0x3ca40c9e20c1525348d734a6724db152b9244bff6e0ff0c2b811d61d8f874f00',
]
> caver.validator.validateSignedMessage(hashedMessage, signature, address, true).then(console.log)
```

## validateTransaction <a href="#validatetransaction" id="validatetransaction"></a>

```javascript
caver.validator.validateTransaction(tx)
```

트랜잭션을 검증합니다. 이 함수는 `signatures`에서 복구된 퍼블릭 키와 Klaytn 계정 키의 퍼블릭 키를 비교합니다. 만약 트랜잭션이 `feePayerSignatures` 변수와 함께 수수료가 위임되었다면, 이 함수는 수수료 지불자의 퍼블릭 키의 `feePayerSignatures`에서 복구된 퍼블릭 키들을 비교합니다.

**Parameters**

| Name | Type   | Description                                                                                                                                          |
| ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| tx   | object | 검증할 [feePayerSignatures](https://github.com/klaytn/klaytn-docs-ko/blob/main/docs/dapp/sdk/caver-js/api-references/caver.transaction#class)의 인스턴스입니다. |

**Return Value**

`Promise`는 `PromiEvent`를 반환: 트랜잭션이 유효한지 여부에 따라 Promise가 불리언 값과 함께 해결(resolved)됩니다.

**Examples**

```javascript
// Basic transaction will be validated with `signatures`.
const tx = caver.transaction.valueTransfer.create({...})
> caver.validator.validateTransaction(tx).then(console.log)

// Fee-delegation transaction will be validated with `signatures` and `feePayerSignatures`.
const tx = caver.transaction.feeDelegatedValueTransfer.create({...})
> caver.validator.validateTransaction(tx).then(console.log)
```

## validateSender <a href="#validatesender" id="validatesender"></a>

```javascript
caver.validator.validateSender(tx)
```

트랜잭션 발신자를 검증합니다. 이 함수는 `signatures`에서 복구된 퍼블릭 키와 Klaytn 계정 키의 퍼블릭 키를 비교합니다.

**Parameters**

| Name | Type   | Description                                                                                                                                                 |
| ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| tx   | object | An instance of [Transaction](https://github.com/klaytn/klaytn-docs-ko/blob/main/docs/dapp/sdk/caver-js/api-references/caver.transaction#class) to validate. |

**Return Value**

`Promise`는 `boolean`을 반환: 트랜잭션이 유효한지 여부에 따라 Promise가 불리언 값과 함께 해결(resolved)됩니다.

**Examples**

```javascript
const tx = caver.transaction.valueTransfer.create({...})
> caver.validator.validateSender(tx).then(console.log)
```

## validateFeePayer <a href="#validatefeepayer" id="validatefeepayer"></a>

```javascript
caver.validator.validateFeePayer(tx)
```

트랜잭션의 수수료 납부자를 검증합니다. 이 함수는 `feePayerSignatures`에서 복구된 퍼블릭 키와 수수료 납부자 계정의 퍼블릭 키를 비교합니다.

**Parameters**

| Name | Type   | Description                                                                                                                                                 |
| ---- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| tx   | object | An instance of [Transaction](https://github.com/klaytn/klaytn-docs-ko/blob/main/docs/dapp/sdk/caver-js/api-references/caver.transaction#class) to validate. |

**Return Value**

`Promise` returning `boolean`: The promise will be resolved with a boolean value of whether the transaction is valid or not.

**Examples**

```javascript
const tx = caver.transaction.feeDelegatedValueTransfer.create({...})
> caver.validator.validateFeePayer(tx).then(console.log)
```


---

# 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://archive-ko.docs.klaytn.foundation/content/dapp/sdk/caver-js/api-references/caver.validator.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.
