# subxt

[`subxt`](https://github.com/paritytech/subxt) 라이브러리를 사용하면 원격 프로시저 호출을 통해 Substrate 노드에 트랜잭션을 제출할 수 있습니다. `subxt` 라이브러리를 사용하기 전에 독립적인 `subxt` 명령 줄 인터페이스를 사용하여 트랜잭션을 제출할 대상으로 사용할 Substrate 노드의 메타데이터를 다운로드할 수 있습니다. `subxt-cli` 도구를 사용하면 `subxt` 라이브러리를 사용하는 데 중요한 두 가지 핵심 작업을 수행할 수 있습니다:

* `subxt-cli` 도구를 사용하여 대상 Substrate 노드에서 메타데이터를 다운로드할 수 있습니다.
* `subxt-cli` 도구를 사용하여 대상 Substrate 노드의 메타데이터에서 런타임 API 코드를 생성할 수 있습니다.

`subxt` 라이브러리와 `subxt-cli` 도구는 메타데이터 v14 이상을 사용하는 모든 노드에 사용할 수 있습니다. `subxt` 라이브러리의 사용 예는 [examples](https://github.com/paritytech/subxt/tree/master/examples) 폴더를 참조하십시오.

### 설치

`subxt-cli`를 설치하려면:

1. 필요한 경우 터미널 셸을 엽니다.
2. 필요한 경우 Rust 컴파일러와 툴체인이 설치되어 있는지 확인합니다.
3. 다음 명령을 사용하여 필요한 패키지를 다운로드합니다: `cargo install subxt-cli`

### 기본 명령 사용법

`subxt` 명령을 실행하는 기본 구문은 다음과 같습니다:

`subxt <SUBCOMMAND>`

`subxt`가 노드를 로컬에서 실행 중이거나 대상 체인을 지정해야만 `subxt`가 노출하는 명령을 사용할 수 있습니다. 메타데이터가 이미 제공된 경우 노드를 실행하지 않고 `codegen` 하위 명령을 사용할 수 있습니다.

#### 플래그

`subxt` 명령과 함께 다음 선택적 플래그를 사용할 수 있습니다.

| 플래그           | 설명        |
| ------------- | --------- |
| -h, --help    | 사용법 정보 표시 |
| -V, --version | 버전 정보 표시  |

#### 하위 명령

`subxt` 명령 줄 인터페이스와 함께 다음 하위 명령을 사용할 수 있습니다.

| 명령어        | 설명                                                |
| ---------- | ------------------------------------------------- |
| `codegen`  | 메타데이터에서 런타임 API 클라이언트 코드를 생성합니다.                  |
| `metadata` | `subxt` 코드 생성에 사용할 Substrate 노드에서 메타데이터를 다운로드합니다. |

#### 출력

하위 명령을 지정하는 방식에 따라 `subxt`의 출력에는 다음 정보 중 일부 또는 모두 포함됩니다:

| 이 필드  | 내용                       |
| ----- | ------------------------ |
| 메타데이터 | 대상 체인의 메타데이터가 포함된 파일입니다. |
| API   | 대상 체인의 API가 포함된 파일입니다.   |

#### 예제

`subxt` 프로그램의 버전 정보를 표시하려면 다음 명령을 실행합니다:

`subxt --version`

`subxt metadata` 명령의 사용법 정보를 표시하려면 다음 명령을 실행합니다:

`subxt metadata --help`

### codegen

`subxt codegen` 명령을 사용하여 대상 Substrate 노드에 대한 인터페이스를 생성합니다.

이는 노드의 API를 디버깅하거나 특정 하드웨어 제약 조건을 충족시키기 위해 수정하는 데 유용할 수 있습니다.

**기본 사용법**

`subxt codegen [OPTIONS]`

**플래그**

`subxt codegen` 명령과 함께 다음 선택적 플래그를 사용할 수 있습니다.

| 플래그             | 설명        |
| --------------- | --------- |
| `-h, --help`    | 사용법 정보 표시 |
| `-V, --version` | 버전 정보 출력  |

**옵션**

`subxt codegen` 명령과 함께 다음 명령 줄 옵션을 사용할 수 있습니다.

| 옵션                  | 설명                                             |
| ------------------- | ---------------------------------------------- |
| `-f, --file <file>` | 인코딩된 메타데이터 파일의 경로를 지정합니다.                      |
| `--url <url>`       | 코드 생성을 위해 메타데이터를 쿼리할 Substrate 노드의 URL을 지정합니다. |

**예제**

생성된 API를 형식화하여 터미널에 출력하려면 다음 명령을 실행합니다:

`subxt codegen | rustfmt`

생성된 API를 파일에 저장하려면 다음 명령을 실행합니다:

`subxt codegen | rustfmt --edition=2018 > api.rs`

### metadata

`subxt metadata` 명령을 사용하여 대상 Substrate 노드의 메타데이터를 가져옵니다.

**기본 사용법**

`subxt metadata [OPTIONS]`

**플래그**

`subxt metadata` 명령과 함께 다음 선택적 플래그를 사용할 수 있습니다.

| 플래그             | 설명        |
| --------------- | --------- |
| `-h, --help`    | 사용법 정보 표시 |
| `-V, --version` | 버전 정보 출력  |

**옵션**

`subxt metadata` 명령과 함께 다음 명령 줄 옵션을 사용할 수 있습니다.

| 옵션                      | 설명                                                                           |
| ----------------------- | ---------------------------------------------------------------------------- |
| `-f, --format <format>` | 표시할 메타데이터의 형식을 지정합니다. 유효한 형식은 `json`, `hex` 또는 `bytes`입니다. 기본 형식은 `json`입니다. |
| `--url <url>`           | 메타데이터를 쿼리할 Substrate 노드의 URL을 지정합니다. 기본 URL은 `http://localhost:9933`입니다.     |

**예제**

로컬 노드에서 바이트로 인코딩된 메타데이터를 파일로 저장하려면 다음 명령을 실행합니다:

`subxt metadata -f bytes > metadata.scale`

Rococo 네트워크의 메타데이터를 JSON 파일로 저장하려면 다음 명령을 실행합니다:

`subxt metadata --url https://rococo-rpc.polkadot.io:443 > <contract_name>.json`

메타데이터의 타입 배열에서 타입 `125`를 쿼리하고 JSON으로 출력하려면 다음 명령을 실행합니다:

`subxt metadata --format json | jq '.[1].V14.types.types | .[125]'`
