# VM Standard Tracing

**NOTE** Some debug namespace APIs are unsafe/unappropriate to be opened to public. We recommend you to provide the debug namespace APIs to authorized users only. However, if you want to maintain a public EN and provide debug namespace APIs to the public, we strongly recommend you to set the `rpc.unsafe-debug.disable` flag which will disable APIs that are unsafe/unappropriate to be opened to the public and enable only a subset of the debug namespace APIs. The enabled APIs are as follows:

* [VM Tracing](https://archive-ko.docs.klaytn.foundation/content/dapp/json-rpc/api-references/debug/tracing) APIs, however with limited functionality (only [pre-defined tracers](https://archive-ko.docs.klaytn.foundation/content/dapp/json-rpc/api-references/tracing#tracing-options) are allowed)
* debug\_dumpBlock, debug\_dumpStateTrie, debug\_getBlockRlp, debug\_getModifiedAccountsByHash, debug\_getModifiedAccountsByNumber, debug\_getBadBlocks, debug\_getModifiedStorageNodesByNumber
* debug\_metrics

## debug\_standardTraceBadBlockToFile <a href="#debug_standardtracebadblocktofile" id="debug_standardtracebadblocktofile"></a>

Similar to [debug\_traceBadBlock](https://archive-ko.docs.klaytn.foundation/content/dapp/json-rpc/api-references/tracing#debug_tracebadblock), `standardTraceBadBlockToFile` accepts a bad block hash and will replay the bad block. It returns a list of file names containing tracing result. Note that the files will be stored in the machine that serves this API.

|  Client | Method Invocation                                                       |
| :-----: | ----------------------------------------------------------------------- |
| Console | `debug.standardTraceBadBlockToFile(hash, [options])`                    |
|   RPC   | `{"method": "debug_standardTraceBadBlockToFile", "params": [hash, {}]}` |

**Parameters**

| Name    | Type         | Description                                   |
| ------- | ------------ | --------------------------------------------- |
| hash    | 32-byte DATA | 블록의 해시입니다.                                    |
| options | object       | [표준 추적 옵션](#standard-tracing-options)을 참고하세요. |

**Return Value**

| Type       | Description                                                                                                                                                            |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| JSON array | 파일명의 목록입니다. 각 파일은 트랜잭션 추적 결과를 나타냅니다. 파일명 형식은 `block_{first 4 bytes of the block hash}-{transaction index}-{first 4 bytes of the transaction hash}-{random string}`입니다. |

**Example**

Console

```javascript
> debug.standardTraceBadBlockToFile("0x1d5ba00e313a81ae6d409d459c153327072665d9ea2f47608369722baf0cfbb6")
["/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x1d5ba00e-0-0xae6f8ed4-701973544", "/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x1d5ba00e-1-0x2e37321f-918920039"]
```

HTTP RPC

```shell
curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"debug_standardTraceBadBlockToFile","params":["0x1d5ba00e313a81ae6d409d459c153327072665d9ea2f47608369722baf0cfbb6"],"id":1}' https://public-en-baobab.klaytn.net
{"jsonrpc":"2.0","id":1,"result":["/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x1d5ba00e-0-0xae6f8ed4-608268252","/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x1d5ba00e-1-0x2e37321f-315574667"]}
```

## debug\_standardTraceBlockToFile <a href="#debug_standardtraceblocktofile" id="debug_standardtraceblocktofile"></a>

Similar to [debug\_traceBlock](https://archive-ko.docs.klaytn.foundation/content/dapp/json-rpc/api-references/tracing#debug_traceblock), `standardTraceBlockToFile` accepts a block hash and will replay the block that is already present in the database. It returns a list of file names containing tracing result. Note that the files will be stored in the machine that serves this API.

|  Client | Method Invocation                                                    |
| :-----: | -------------------------------------------------------------------- |
| Console | `debug.standardTraceBlockToFile(hash, [options])`                    |
|   RPC   | `{"method": "debug_standardTraceBlockToFile", "params": [hash, {}]}` |

**Parameters**

| Name    | Type         | Description                                                |
| ------- | ------------ | ---------------------------------------------------------- |
| hash    | 32-byte DATA | Hash of a block.                                           |
| options | object       | See [standard tracing options](#standard-tracing-options). |

**Return Value**

| Type       | Description                                                                                                                                                                                                                  |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| JSON array | A list of file names. Each represents a tracing result of a transaction. The format of a file name is `block_{first 4 bytes of the block hash}-{transaction index}-{first 4 bytes of the transaction hash}-{random string}`. |

**Example**

Console

```javascript
> debug.standardTraceBlockToFile("0x485fff444481ee28debe50639f312f44e0a09342161a8906a99cf325cc2512a4")
["/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x485fff44-0-0xfe8210fc-141224302"]
```

HTTP RPC

```shell
$ curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"debug_standardTraceBlockToFile","params":["0x485fff444481ee28debe50639f312f44e0a09342161a8906a99cf325cc2512a4"],"id":1}' https://public-en-baobab.klaytn.net
{"jsonrpc":"2.0","id":1,"result":["/var/folders/v9/z3vq7j4d42b2jq_vxsv0km6h0000gn/T/block_0x485fff44-0-0xfe8210fc-288181237"]}
```

## 표준 추적 옵션 <a href="#standard-tracing-options" id="standard-tracing-options"></a>

You may give trace API function a secondary optional argument, which specifies the options for this specific call. The possible options are:

* `disableStorage`: `BOOL`. Setting this to true will disable storage capture (default = false).
* `disableMemory`: `BOOL`. Setting this to true will disable memory capture (default = false).
* `disableStack`: `BOOL`. Setting this to true will disable stack capture (default = false).
* `txHash`: `string`. Setting this value will trace only the specified transaction.
