# Miscellaneous

## klay\_sha3 <a href="#klay_sha3" id="klay_sha3"></a>

Returns Keccak-256 (not the standardized SHA3-256) of the given data.

**Parameters**

| Name | Type | Description                           |
| ---- | ---- | ------------------------------------- |
| data | DATA | The data to convert into a SHA3 hash. |

**Return Value**

| Type         | Description                        |
| ------------ | ---------------------------------- |
| 32-byte DATA | The SHA3 result of the given data. |

**Example**

```shell
// Request
curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"klay_sha3","params":["0x11223344"],"id":1}' https://public-en-baobab.klaytn.net

// Result
{
  "jsonrpc":"2.0",
  "id":1,
  "result":"0x36712aa4d0dd2f64a9ae6ac09555133a157c74ddf7c079a70c33e8b4bf70dd73"
}
```

## klay\_recoverFromTransaction <a href="#klay_recoverfromtransaction" id="klay_recoverfromtransaction"></a>

Returns the recovered sender address from RLP encoded transaction bytes. If the sender address of the tx has composite accountKey type, it will return the sender address, not the addresses extracted from signatures. If the recovery failed, it returns 0x0 address.

**Parameters**

| Name         | Type            | Description                                                                                                                                                   |
| ------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| data         | DATA            | RLP encoded transaction bytes                                                                                                                                 |
| block number | QUANTITY \| TAG | Integer or hexadecimal block number, or the string `"earliest"`, `"latest"` or `"pending"` as in the [default block parameter](#the-default-block-parameter). |

**Return Value**

| Type         | Description        |
| ------------ | ------------------ |
| 20-byte DATA | Recovered address. |

**Example**

```shell
// Request
curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"klay_recoverFromTransaction","params":["0x08f88307850ba43b74008366926694000000000000000000000000000000000000dead843b9aca00945bd2fb3c21564c023a4a735935a2b7a238c4cceaf847f8458207f6a09c57511347c7b88c3539a6584b4d57991f6c4665ffcde89da0e9895eb078bef7a0296f4fd2a765567e034f4754cf31a9902c49d6a1d465a2e3fd10b165476cffa8", "latest"],"id":1}' https://public-en-baobab.klaytn.net

// Result
{
  "jsonrpc":"2.0",
  "id":1,
  "result":"0xe15cd70a41dfb05e7214004d7d054801b2a2f06b"
}
```

## klay\_recoverFromMessage <a href="#klay_recoverfrommessage" id="klay_recoverfrommessage"></a>

Returns signer address from message signature. It validates if the message is signed by the given account. Klaytn has several [accountKey](https://docs.klaytn.foundation/content/klaytn/design/accounts#account-key) types. So if the address(account) argument has a composite accountKey like AccountKeyWeightedMultisig and the signature is generated by a member private key of the account, you will get the paired address with the member's private key, not account address. And you can be sure that the key used for signing the message is a member of the account. Additionally this function has an ability to validate a signature in the two kind of prefix when signing a message, "\x19Ethereum Signed Message:\n" and "\x19Klaytn Signed Message:\n"

**Parameters**

| Name         | Type            | Description                                                                                                                                                   |
| ------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| address      | string          | The address of the signer account.                                                                                                                            |
| message      | DATA            | Message bytes                                                                                                                                                 |
| signature    | 65-byte DATA    | Signature bytes                                                                                                                                               |
| block number | QUANTITY \| TAG | Integer or hexadecimal block number, or the string `"earliest"`, `"latest"` or `"pending"` as in the [default block parameter](#the-default-block-parameter). |

**Return Value**

| Type         | Description        |
| ------------ | ------------------ |
| 20-byte DATA | Recovered address. |

**Example**

```shell
// Request
curl -H "Content-Type: application/json" --data '{
  "jsonrpc":"2.0",
  "method":"klay_recoverFromMessage"
  ,"params":[
"0xA2a8854b1802D8Cd5De631E690817c253d6a9153",
"0xdeadbeef", 
"0x1e6338d6e4a8d688a25de78cf2a92efec9a92e52eb8425acaaee8c3957e68cdb3f91bdc483f0ed05a0da26eca3be4c566d087d90dc2ca293be23b2a9de0bcafc1c", 
"latest"
], 
  "Id":1
}
' https://public-en-baobab.klaytn.net

// Result
{
  "jsonrpc":"2.0",
  "id":1,
  "result":"0xa2a8854b1802d8cd5de631e690817c253d6a9153"
}
```

## klay\_forkStatus <a href="#klay_forkstatus" id="klay_forkstatus"></a>

Returns the whole list of hardforks and their effectiveness at the given block.

**Parameters**

| Name         | Type            | Description                                                                                                                                                   |
| ------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| block number | QUANTITY \| TAG | Integer or hexadecimal block number, or the string `"earliest"`, `"latest"` or `"pending"` as in the [default block parameter](#the-default-block-parameter). |

**Return Value**

| Type | Description                           |
| ---- | ------------------------------------- |
| JSON | List of forks and their effectiveness |

**Example**

```shell
// Request
curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"klay_forkStatus","params":["latest"],"id":1}' https://public-en-baobab.klaytn.net

// Result
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "EthTxType": true,
    "Istanbul": true,
    "KIP103": false,
    "Kore": true,
    "London": true,
    "Magma": true,
    "Shanghai": false
  }
}
```

## klay\_createAccessList <a href="#klay_createaccesslist" id="klay_createaccesslist"></a>

This method creates an `accessList` based on a given `Transaction`. The `accessList` contains all storage slots and addresses read and written by the transaction, except for the sender account and the precompiles. This method uses the same transaction call object and `blockNumberOrTag` object as [`klay_call`](https://archive-docs.klaytn.foundation/content/dapp/json-rpc/api-references/transaction#klay_call). An accessList can be used to unstuck contracts that became inaccessible due to gas cost increases. Adding an `accessList` to your transaction does not necessary result in lower gas usage compared to a transaction without an access list.

**Parameters**

| Name             | Type            | Description                                                                                                                                                                                                                                                                                                                                                          |
| ---------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| callObject       | Object          | The transaction call object. Refer to [`klay_call`](https://archive-docs.klaytn.foundation/content/dapp/json-rpc/api-references/transaction#klay_call) for the object's properties.                                                                                                                                                                                  |
| blockNumberOrTag | QUANTITY \| TAG | Integer or hexadecimal block number, or the string `"earliest"`, `"latest"` or `"pending"` as in [default block parameter](https://archive-docs.klaytn.foundation/content/dapp/json-rpc/api-references/block#the-default-block-parameter). The block number is mandatory and defines the context (state) against which the specified transaction should be executed. |

**Return Value**

| Type   | Description                                                                                                              |
| ------ | ------------------------------------------------------------------------------------------------------------------------ |
| Object | Returns list of addresses and storage keys used by the transaction, plus the gas consumed when the access list is added. |

**Example**

```shell
// Request
curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"klay_createAccessList", "params": [{"from": "0x8cd02c6cbd8375b39b06577f8d50c51d86e8d5cd", "data": "0x608060806080608155"}, "latest"], "id":1}' http://localhost:8551

// Result
{
  "jsonrpc": "2.0",
  "id":1,
  "result": {
    "accessList": [{
      "address": "0xa02457e5dfd32bda5fc7e1f1b008aa5979568150",
      "storageKeys": ["0x0000000000000000000000000000000000000000000000000000000000000081"]
    }],
    "gasUsed": "0x128ee"
  }
}
```
