bifrost-relayer.rs
bifrost-relayer.rs 란?
바이프로스트 재단은 최근 바이프로스트 네트워크를 위해 Rust로 구현된 CCCP-릴레이어 (CCCP-Relayer)를 공개했습니다. 새로운 릴레이어는 여러 블록체인에서 전반적인 성능과 견고성을 향상시키기 위해 재설계되었습니다. 이 릴레이어는 Python 버전과 동일한 기능을 유지하며, 크로스체인 트랜잭션을 처리하고 한 블록체인에서 다른 블록체인으로 데이터 전송(예: 가격 정보 제공)을 용이하게 합니다. 다음 섹션에서는 바이프로스트 네트워크 릴레이어의 Rust 구현에 대한 설정 과정을 안내합니다.
설치 요구 사항
bifrost-relayer
를 시작하려면 특정 의존성을 수동으로 설치해야 합니다. 실행 가능한 바이너리 파일과 설정 YAML 파일은 모든 환경 및 운영자에게 필수적으로 요구됩니다.
먼저 최신 bifrost-relayer
릴리스 바이너리를 설치합니다. 최신 릴리스는 GitHub 저장소의 릴리스 페이지에서 확인할 수 있습니다.
wget "https://github.com/bifrost-platform/bifrost-relayer.rs/releases/latest/download/bifrost-relayer"
바이너리를 실행하려면 파일의 권한을 업데이트합니다.
chmod +x bifrost-relayer
다음으로 설정 YAML 파일을 설치합니다. 해당 파일은 빠른 시작을 위한 템플릿 역할을 합니다. 테스트넷과 메인넷 환경 간의 차이를 고려할 때, 운영 대상 네트워크에 해당하는 파일을 사용해야합니다.
# First create a directory to save your configuration file
mkdir configs && cd configs
# For mainnet only
wget "https://github.com/bifrost-platform/bifrost-relayer.rs/releases/latest/download/config.mainnet.yaml"
# For testnet only
wget "https://github.com/bifrost-platform/bifrost-relayer.rs/releases/latest/download/config.testnet.yaml"
설정
다음으로, 설정 YAML 파일에는 운영자가 설정해야 하는 특정 파라미터들이 포함되어 있습니다. 예를 들어, 릴레이어 개인 키 및 각 EVM 제공자 (provider)의 RPC 엔드포인트와 같은 변수는 운영자 자체에 따라 다르므로 이러한 값은 수동으로 설정해야 합니다.
다음 블록체인 네트워크에 대한 RPC 엔드포인트를 준비해야 합니다. 이를 위한 두 가지 옵션이 있습니다: 1) 자체 블록체인 노드를 운영하는 것, 또는 2) RPC 엔드포인트를 제공하는 서비스를 이용하는 것입니다. 아래 링크에서 노드 제공자를 확인할 수 있습니다.
Bifrost (반드시 직접 운영하며 완전히 동기화되어 있어야 합니다.)
Configuration Templates
설정 파라미터
다음 표는 릴레이어에 대한 사용자 정의 가능한 파라미터를 보여줍니다. 각 파라미터는 환경에 따라 변경할 수 있습니다. 그러나 "템플릿 제공됨" 열에 체크되지 않은 필드를 제외하고는 템플릿에 명시된 기본값을 사용하는 것을 강력히 권장합니다. 또한, "템플릿 제공됨"은 단지 예시일 뿐이므로 특정 파라미터(예: 개인 키)에 대해서는 올바른 값으로 변경해야 합니다.
일반적으로 안전을 위해 그리고 예상치 못한 시스템 오작동을 방지하기 위해, YAML 파일에 포함되어 있지만 명시적으로 지정되지 않은 파라미터는 변경하지 않는 것이 좋습니다. 네트워크의 자체 모니터링 메커니즘이 변경된 파라미터로 인한 오작동을 감지하면, 해당 릴레이어는 슬래싱 (slashing)될 수 있습니다.
Systemd 사용
Systemd 사용을 선호하는 운영자의 경우, Systemd 실행 환경을 위한 설정 파일을 생성해야 합니다. 먼저 다음 디렉토리에 설정 파일을 생성합니다.
sudo vi /etc/systemd/system/bifrost-relayer.service
아래에는 설정 예시가 제공됩니다. 다음 파라미터들은 사용자 설정 환경에 따라 설정되어야 합니다.
<DIRECTORY_WHERE_BIFROST_RELAYER_LOCATES>
: 설치된bifrost-relayer
바이너리 파일이 위치한 디렉토리의 절대 경로.<PATH_TO_BIFROST_RELAYER>
: 설치된bifrost-relayer
바이너리 파일의 절대 경로.<PATH_TO_CONFIG_FILE>
: 설치된config.testnet.yaml
또는config.mainnet.yaml
파일의 절대 경로. 이 매개변수는 CLI 옵션--chain
의 값이 됩니다.
[Unit]
Description=Bifrost Relayer Daemon
After=network.target
StartLimitIntervalSec=5
[Service]
Type=simple
Restart=always
RestartSec=30
SyslogIdentifier=bifrost-relayer
SyslogFacility=local7
WorkingDirectory=<DIRECTORY_WHERE_BIFROST_RELAYER_LOCATES>
ExecStart=<PATH_TO_BIFROST_RELAYER> --chain <mainnet|testnet|<PATH_TO_CONFIG_FILE>>
KillSignal=SIGHUP
[Install]
WantedBy=multi-user.target
릴레이어 서비스 실행
이제 다음 명령어를 실행하여 서비스를 시작할 수 있습니다. 먼저, 다음 시스템 재시작 시 자동으로 시작되도록 서비스를 활성화합니다.
sudo systemctl enable bifrost-relayer
그런 다음, 서비스의 설정 파일에 있는 지침을 실행하면서 Systemd 서비스를 시작하려면 아래와 같이 start
명령어를 사용합니다.
sudo systemctl start bifrost-relayer
마지막으로, 서비스가 성공적으로 실행되었는지 확인합니다.
systemctl status bifrost-relayer
로그 확인
실행 중인 bifrost-relayer
서비스 로그를 확인하려면 아래 명령어를 실행합니다.
journalctl -f -u bifrost-relayer
서비스가 성공적으로 시작되면 초기 로그가 아래와 유사하게 표시될 것입니다.
2023-08-04T14:41:38 INFO sc_sysinfo ]💻 Operating system: macos
2023-08-04T14:41:38 INFO sc_sysinfo ]💻 CPU architecture: aarch64
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] Bifrost Relayer
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] ✌️ version 1.0.2-1053ac84663
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] ❤️ by bifrost-platform, 2023-2023
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] ⛓ Chain specification: testnet
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] 👤 Relayer: 0xf708d58820fa20405993e186a8b38fb777f3143a
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] 🔨 Relay Targets (Legacy): bifrost, bsc
2023-08-04T14:41:38 INFO bifrost-relayer]-[main ] 🔨 Relay Targets (EIP1559): ethereum, polygon
2023-08-04T14:41:38 INFO bifrost ]-[block-manager ] 💤 Idle, best: #8495214
2023-08-04T14:41:38 INFO ethereum ]-[block-manager ] 💤 Idle, best: #9459619
2023-08-04T14:41:38 INFO polygon ]-[block-manager ] 💤 Idle, best: #38621155
2023-08-04T14:41:38 INFO bsc ]-[block-manager ] 💤 Idle, best: #32143709
부트스트랩 (bootstrap) 설정이 활성화되어 있다면, 다음과 같이 과거 이벤트 부트스트랩을 시작할 것입니다.
2023-07-14T16:00:35 INFO bifrost ]-[roundup-handler ] ⚙️ [Bootstrap mode] Bootstrapping RoundUp events.
2023-07-14T16:00:35 INFO bsc ]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrapping Socket events.
2023-07-14T16:00:35 INFO bifrost ]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrapping Socket events.
2023-07-14T16:00:35 INFO mumbai ]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrapping Socket events.
2023-07-14T16:00:35 INFO goerli ]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrapping Socket events.
2023-07-14T16:00:37 INFO bifrost ]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrapping Socket events.
2023-07-14T16:00:37 INFO bifrost-relayer]-[bridge-handler ] ⚙️ [Bootstrap mode] Bootstrap process successfully ended.
초기 시작 및 부트스트랩 프로세스가 끝나면, 각 체인이 YAML 파일에 지정된 블록 최종화 (block confirmations)에 도달할 때까지 시스템이 대기합니다. 그런 다음, 다음과 같이 매 간격마다 새로운 블록을 가져올 것입니다.
2023-08-04T14:41:54 INFO polygon ]-[block-manager ] ✨ Imported #38621155
2023-08-04T14:41:56 INFO bifrost ]-[block-manager ] ✨ Imported #8495214
2023-08-04T14:41:56 INFO polygon ]-[block-manager ] ✨ Imported #38621156
2023-08-04T14:41:57 INFO bsc ]-[block-manager ] ✨ Imported #32143709
2023-08-04T14:41:58 INFO polygon ]-[block-manager ] ✨ Imported #38621157
2023-08-04T14:41:59 INFO bifrost ]-[block-manager ] ✨ Imported #8495215
2023-08-04T14:42:00 INFO bsc ]-[block-manager ] ✨ Imported #32143710
2023-08-04T14:42:00 INFO polygon ]-[block-manager ] ✨ Imported #38621158
2023-08-04T14:42:02 INFO ethereum ]-[block-manager ] ✨ Imported #9459619
2023-08-04T14:42:02 INFO bifrost ]-[block-manager ] ✨ Imported #8495216
2023-08-04T14:42:02 INFO polygon ]-[block-manager ] ✨ Imported #38621159
2023-08-04T14:42:03 INFO bsc ]-[block-manager ] ✨ Imported #32143711
릴레이어가 위에 언급된 모든 시스템 로그를 충족했다면, 이는 성공적으로 시작되어 정상적인 상태로 작동하기 시작했음을 의미합니다.
서비스 업그레이드
bifrost-relayer
는 지속적으로 개발되고 있기 때문에, 릴레이어 서비스 업그레이드가 필요할 수 있습니다. 이러한 업그레이드가 가능해지면, 릴레이어 운영자들은 저희 커뮤니티 채널 또는 직접적인 소통을 통해 통보받을 것입니다. 일부 업그레이드는 필수가 아닌 선택 사항일 수 있음을 참고하시기 바랍니다.
먼저, 이전 bifrost-relayer
바이너리 파일을 제거하거나 백업합니다.
rm <PATH_TO_BIFROST_RELAYER_BINARY>
그런 다음, 최신 버전의 bifrost-relayer
를 동일한 디렉토리에 설치하고 권한을 업데이트합니다. (디렉토리가 변경된 경우 Systemd 설정 파일도 수정해야 합니다.)
chmod +x bifrost-relayer
마지막으로, Systemd 서비스를 재시작합니다.
sudo systemctl restart bifrost-relayer
도커(Docker) 사용
도커 사용을 선호하는 운영자의 경우, 도커가 운영 체제에 미리 설치되어 있어야 합니다. 설치가 완료되면 다음 단계로 진행할 수 있습니다.
릴레이어를 도커 컨테이너로 실행하려면, 아래 명시된 명령어를 실행합니다.
<DIRECTORY_WHERE_CONFIG_FILE_LOCATES>
: 설치된config.testnet.yaml
또는config.mainnet.yaml
파일이 위치한 디렉토리의 절대 경로.<YOUR_CONFIG_FILE_NAME>
: 설치된 설정 YAML 파일의 이름.<YOUR_CONTAINER_NAME>
: 릴레이어 컨테이너의 이름.
docker run -d \
--restart always \
--network host \
--mount type=bind,source=<DIRECTORY_WHERE_CONFIG_FILE_LOCATES>,target=/relayer/configs \
--name <YOUR_CONTAINER_NAME> \
thebifrost/bifrost-relayer.rs:latest --chain /relayer/configs/<YOUR_CONFIG_FILE_NAME>
로그 확인
실행 중인 bifrost-relayer
컨테이너 로그를 확인하려면 아래 명령어를 실행합니다.
docker logs -f <YOUR_CONTAINER_NAME>
도커 이미지 업그레이드
bifrost-relayer
는 지속적인 개발이 이루어지고 있어, 서비스 업그레이드가 요구될 수 있습니다. 이러한 업그레이드가 제공되면, 릴레이어 운영자에게는 커뮤니티 채널을 통해 관련 내용이 안내됩니다. 이때 일부 업그레이드는 필수가 아닌 선택 사항일 수 있다는 점을 유의하시기 바랍니다.
먼저 실행 중인 릴레이어 컨테이너를 중지하고 제거합니다.
docker stop "YOUR_CONTAINER_NAME"
docker rm "YOUR_CONTAINER_NAME"
그런 다음, 최신 bifrost-relayer
도커 이미지를 풀 (pull) 받아옵니다.
docker pull thebifrost/bifrost-relayer.rs:latest
마지막으로 다음 명령어를 실행하여 새 컨테이너를 시작합니다.
docker run -d \
--restart always \
--network host \
--mount type=bind,source=<DIRECTORY_WHERE_CONFIG_FILE_LOCATES>,target=/relayer/configs \
--name <YOUR_CONTAINER_NAME> \
thebifrost/bifrost-relayer.rs:latest --chain /relayer/configs/<YOUR_CONFIG_FILE_NAME>
파라미터 설명
system
릴레이어의 시스템 관련 파라미터
-
-
system.private_key
릴레이어의 개인키
"0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"
-
system.debug_mode
디버그 모드가 활성화되었는지 나타내는 플래그. 활성화되면 디버그 수준 로그 및 Sentry 알림이 활성화됩니다.
true
/ false
false
btc_provider
비트코인 체인 RPC 제공자와 관련된 매개변수.
-
-
btc_provider.id
비트코인 체인의 ID
10000
(For Mainnet)10001
(For Testnet)
-
btc_provider.chain
비트코인 체인의 이름
"main"
(For Mainnet)"test"
(For Testnet)
-
btc_provider.provider
비트코인 체인의 RPC 엔드포인트.
-
-
btc_provider.call_interval
블록 동기화 간격(밀리초). 매 새로운 간격마다 시스템은 대상 체인에서 새로 채굴된 모든 블록을 동기화합니다.
10000
-
btc_provider.block_confirmations
새로운 블록을 동기화하는 데 필요한 블록 확인 수.
3
3
evm_providers
EVM 체인 제공자와 관련된 매개변수.
-
-
evm_providers.id
체인의 ID
3068
-
evm_providers.name
체인의 이름
"bifrost"
-
evm_providers.provider
노드의 RPC 엔드포인트. 노드가 릴레이어와 동일한 서버에서 실행 중이거나 실행될 예정이라면, 이 값을 제공된 예시로 설정하십시오.
"http://127.0.0.1:9933"
-
evm_providers.call_interval
블록 동기화 간격(밀리초). 매 새로운 간격마다 시스템은 대상 체인에서 새로 채굴된 모든 블록을 동기화합니다.
1500
-
evm_providers.block_confirmations
새로운 블록을 동기화하는 데 필요한 블록 확인 수.
5
-
evm_providers.is_relay_target
시스템이 외부 체인 CCCP 작업에 참여할지 여부를 나타내는 플래그. 이 값이 '참(true)'으로 설정되면, 시스템은 대상 체인에서 트랜잭션을 실행하려고 시도하므로 충분한 잔액이 필요합니다. 바이프로스트 네트워크인 경우 이 값은 '참(true)'으로 설정되어야 합니다.
true
/ false
-
evm_providers.eip1559
시스템이 EIP-1559 트랜잭션을 실행할지 여부를 나타내는 플래그. false
로 설정되면, 트랜잭션은 레거시(legacy) 타입으로 실행될 거예요.
true
/ false
false
evm_providers.min_gas_price
시스템이 레거시 트랜잭션을 실행할 때 설정할 최소 가스 가격(WEI 단위). 값이 null이면 동적으로 설정됩니다. 이 필드는 eip1559
매개변수가 비활성화된 경우에만 적용됩니다.
30000000000
0
evm_providers.min_priority_fee
EIP-1559 트랜잭션을 실행할 때 시스템이 설정할 최소 우선순위 수수료(WEI 단위). 값이 null
이면 동적으로 설정됩니다. 이 필드는 eip1559
매개변수가 활성화된 경우에만 적용됩니다.
30000000000
0
evm_providers.escalate_percentage
멤풀(mempool)에 갇힌 트랜잭션을 교체하기 위해 가스 가격을 인상하는 데 사용될 백분율. 이 옵션은 레거시 트랜잭션에만 적용됩니다.
15.0
15.0
evm_providers.is_initially_escalated
가스 가격이 초기부터 인상될지 여부를 나타내는 플래그입니다. escalate_percentage
는 인상률에 사용됩니다. 이 옵션은 레거시 트랜잭션에만 적용됩니다.
true
/ false
false
evm_providers.get_logs_batch_size
eth_getLogs()
요청 시 사용되는 배치 크기(=블록 범위)입니다. 이 값을 늘리면 RPC 요청 비율은 줄어들지만, 설정된 값에 따라 이벤트 처리가 지연될 수 있습니다. 기본 크기는 1로 설정되어 있어, 매 새 블록마다 요청이 이루어집니다.
5
1
sentry_config
Sentry 관련 매개변수. 이 섹션이 설정 파일에 없으면 Sentry는 비활성화됩니다.
-
None
sentry_config.is_enabled
Sentry 활성화 여부를 나타내는 플래그.
-
-
sentry_config.environment
Sentry 클라이언트의 식별자입니다. 이 값은 트리거된 알람을 구분하는 데 사용됩니다.
"mainnet"
""
sentry_config.dsn
Sentry DSN. 이 값이 설정되면 오류 및 경고 알림이 전송됩니다. 값이 비어 있으면 Sentry는 비활성화됩니다.
-
-
prometheus_config
Prometheus 관련 매개변수. 이 섹션이 설정 파일에 없으면 Prometheus는 비활성화됩니다.
-
None
prometheus_config.is_enabled
Prometheus 메트릭 수집이 활성화되었는지 여부를 나타내는 플래그.
true
/ false
-
prometheus_config.is_external
Prometheus 서버가 모든 인터페이스에 노출될지 여부를 나타내는 플래그.
true
/ false
false
prometheus_config.port
Prometheus 익스포터 TCP 포트.
8000
8000
bootstrap_config
부트스트랩(Bootstrap) 관련 매개변수. 부트스트랩은 릴레이어가 (재)시작될 때마다 실행되는 프로세스입니다. 이 프로세스는 과거 CCCP 이벤트를 수집하여 릴레이어가 놓친 작업을 방지하기 위해 이벤트를 다시 처리하도록 합니다.
-
None
bootstrap_config.is_enabled
부트스트랩 활성화 여부를 나타내는 플래그.
true
/ false
-
bootstrap_config.round_offset
놓친 이벤트를 검색할 라운드 수.
3
3
Last updated