> For the complete documentation index, see [llms.txt](https://docs.bifrostnetwork.com/kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bifrostnetwork.com/kr/developer-documentations/pallet-interfaces/relaymanager.md).

# RelayManager

### Description

바이프로스트 네트워크의 풀 노드 운영자는 릴레이어 프로그램도 추가로 운영해야 합니다. 따라서 모든 릴레이어의 상태를 신중하게 관리하고 추적하는 것은 네트워크 안정성 유지에 매우 중요합니다. 릴레이어 관리를 위한 핵심 구현은 `pallet_relay_manager`에 정의되어 있습니다.

### Extrinsics

**set\_storage\_cache\_lifetime(new: `u32`)**

* interface: `api.tx.relayManager.setStorageCacheLifetime`
* summary: `StorageCacheLifetime` 라운드 길이를 설정합니다. 오리진은 루트 (root)여야 합니다.

**set\_heartbeat\_offence\_activation(is\_active: `bool`)**

* interface: `api.tx.relayManager.setHeartbeatOffenceActivation`
* summary: 릴레이어 하트비트 (heartbeat) 관리의 활성화 여부를 설정합니다. 오리진은 루트 (root)여야 합니다.

**set\_heartbeat\_slash\_fraction(new: `Perbill`)**

* interface: `api.tx.relayManager.setHeartbeatSlashFraction`
* summary: 하트비트 위반에 대한 새로운 슬래시 (slash) 비율을 설정합니다. 오리진은 루트 (root)여야 합니다.

**set\_relayer(new: `AccountId`)**

* interface: `api.tx.relayManager.setRelayer`
* summary: 본딩된 릴레이어 계정을 (재)설정합니다. 오리진은 본딩된 컨트롤러 계정 (controller account)이어야 합니다. 상태 반영은 즉시 적용됩니다.

**heartbeat()**

* interface: `api.tx.relayManager.heartbeat`
* summary: 현재 세션에 대한 릴레이어 활성 (liveness) 관리를 위해 새로운 하트비트를 전송합니다. 오리진은 등록된 릴레이어 계정이어야 하며, 선택된 릴레이어만 요청할 수 있습니다.

### Storage Values

**StorageCacheLifetime(): `u32`**

* interface: `api.query.relayManager.storageCacheLifetime`
* summary: 스토리지 데이터가 캐시될 수 있는 최대 스토리지 수명.

**Round(): `RoundIndex`**

* interface: `api.query.relayManager.round`
* summary: 현재 라운드 인덱스.

**BondedController(`AccountId`): `Option<AccountId>`**

* interface: `api.query.relayManager.bondedController`
* summary: 컨트롤러 계정을 릴레이어 계정에 매핑.

**RelayerPool(): `Vec<Relayer<AccountId>>`**

* interface: `api.query.relayManager.relayerPool`
* summary: 현재 라운드의 릴레이어 풀 (선택된 릴레이어 및 선택되지 않은 릴레이어 포함).

**RelayerState(): `Option<RelayerMetadata<AccountId>>`**

* interface: `api.query.relayManager.relayerState`
* summary: 특정 릴레이어의 현재 상태.

**SelectedRelayers(): `Vec<AccountId>`**

* interface: `api.query.relayManager.selectedRelayers`
* summary: 현재 라운드를 위해 선택된 활성 릴레이어 세트.

**InitialSelectedRelayers(): `Vec<AccountId>`**

* interface: `api.query.relayManager.initialSelectedRelayers`
* summary: 현재 라운드 시작 시 선택된 활성 릴레이어 세트.

**CachedSelectedRelayers(): `Vec<(RoundIndex, Vec<AccountId>)>`**

* interface: `api.query.relayManager.cachedSelectedRelayers`
* summary: 이전 라운드에서 선택된 캐시된 활성 릴레이어 세트.

**CachedInitialSelectedRelayers(): `Vec<(RoundIndex, Vec<AccountId>)>`**

* interface: `api.query.relayManager.cachedInitialSelectedRelayers`
* summary: 각 이전 라운드 시작 시 선택된 캐시된 활성 릴레이어 세트.

**Majority(): `u32`**

* interface: `api.query.relayManager.majority`
* summary: 현재 활성 릴레이어 세트의 다수.

**InitialMajority(): `u32`**

* interface: `api.query.relayManager.initialMajority`
* summary: 현재 라운드 시작 시 현재 활성 릴레이어 세트의 다수.

**CachedMajority(): `Vec<(RoundIndex, u32)>`**

* interface: `api.query.relayManager.cachedMajority`
* summary: 이전 라운드에서 선택된 활성 릴레이어 세트를 기반으로 캐시된 다수.

**CachedInitialMajority(): `Vec<(RoundIndex, u32)>`**

* interface: `api.query.relayManager.cachedInitialMajority`
* summary: 각 이전 라운드 시작 시 선택된 활성 릴레이어 세트를 기반으로 캐시된 다수.

**ReceivedHeartbeats(`AccountId`): `bool`**

* interface: `api.query.relayManager.receivedHeartbeats`
* summary: 현재 세션에서 특정 릴레이어의 수신된 하트비트.

**IsHeartbeatOffenceActive(): `bool`**

* interface: `api.query.relayManager.isHeartbeatOffenceActive`
* summary: 릴레이어 하트비트 위반 관리의 활성화 여부.

**HeartbeatSlashFraction(): `Perbill`**

* interface: `api.query.relayManager.heartbeatSlashFraction`
* summary: 하트비트 위반에 대한 슬래시 (slash) 비율.

### Constants

**StorageCacheLifetimeInRounds: `u32`**

* interface: `api.consts.relayManager.storageCacheLifetimeInRounds`
* summary: 스토리지 데이터가 캐시될 수 있는 라운드 기준 최대 수명.

**IsHeartbeatOffenceActive: `bool`**

* interface: `api.consts.relayManager.isHeartbeatOffenceActive`
* summary: 릴레이어 하트비트 위반 관리의 활성화 여부.

**DefaultHeartbeatSlashFraction: `Perbill`**

* interface: `api.consts.relayManager.defaultHeartbeatSlashFraction`
* summary: 하트비트 위반에 대한 기본 슬래시 (slash) 비율.
