문서: erigon.gitbook.io 블로그: erigon.substack.com Twitter: x.com/ErigonEth
Erigon은 효율성 측면에서 Ethereum(삽입 가능한 합의 레이어가 있는 실행 레이어)을 구현한 것입니다. 기본적으로 아카이브 노드.
erigon
포트caplin
포트beaconAPI
포트shared
포트other
포트systemd
예제htop
잘못된 메모리 사용량을 표시합니다. 중요한 기본값 : Erigon은 기본적으로 아카이브 노드입니다. 필요한 경우 --prune.mode
사용하여 더 작게 만듭니다(처음 시작한 후에는 변경할 수 없음).
In-depth links are marked by the microscope sign (?)
RAM: >=32GB, Golang >= 1.22; GCC 10+ 또는 Clang; Linux: 커널 > v4. 64비트 아키텍처.
SSD 또는 NVMe. HDD를 권장하지 않음 - HDD에서 Erigon은 항상 체인 팁 뒤에 N 블록을 유지하지만 뒤처지지는 않습니다. 용량에 가까워지면 SSD 성능이 저하된다는 점을 명심하세요. CloudDrives(예: gp3): 클라우드 네트워크 드라이브에서 블록 실행이 느립니다.
? Eragon3 datadir 크기에 대한 자세한 내용
? 여기에 저장된 데이터 유형에 대한 자세한 내용
릴리스 노트 및 바이너리
최신 릴리스를 빌드합니다(노드를 실행하려는 대부분의 사용자에게 적합합니다):
git clone --branch release/ < x.xx > --single-branch https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon
--torrent.download.rate=20mb
로 다운로드 속도를 높이세요. ? See Downloader docs
--datadir
사용하여 데이터를 저장할 위치를 선택합니다.
Gnosis Chain의 경우 --chain=gnosis
사용하고, Polygon Mainnet의 경우 --chain=bor-mainnet
, Polygon Amoy의 경우 --chain=amoy
사용합니다. Gnosis Chain의 경우 Erigon(https://docs.gnosischain.com/category/step--3---run-consensus-client)과 함께 Consensus Layer 클라이언트가 필요합니다.
make help
실행하면 Makefile에서 사용할 수 있는 편리한 명령이 나열되고 설명됩니다.
datadir
chaindata # "Recently-updated Latest State", "Recent History", "Recent Blocks"
snapshots # contains `.seg` files - it's old blocks
domain # Latest State
history # Historical values
idx # InvertedIndices: can search/filtering/union/intersect them - to find historical data. like eth_getLogs or trace_transaction
accessors # Additional (generated) indices of history - have "random-touch" read-pattern. They can serve only `Get` requests (no search/filters).
txpool # pending transactions. safe to remove.
nodes # p2p peers. safe to remove.
temp # used to sort data bigger than RAM. can grow to ~100gb. cleaned at startup.
# There is 4 domains: account, storage, code, commitment
1개의 nvme-raid에 데이터 디렉터리를 저장할 여유가 있다면 좋습니다. 그럴 수 없다면 저렴한 드라이브에 기록을 저장할 수 있습니다.
# place (or ln -s) `datadir` on slow disk. link some sub-folders to fast (low-latency) disk.
# Example: what need link to fast disk to speedup execution
datadir
chaindata # link to fast disk
snapshots
domain # link to fast disk
history
idx
accessors
temp # buffers to sort data >> RAM. sequential-buffered IO - is slow-disk-friendly
# Example: how to speedup history access:
# - go step-by-step - first try store `accessors` on fast disk
# - if speed is not good enough: `idx`
# - if still not enough: `history`
# eth-mainnet - archive - April 2024
du -hsc /erigon/ *
6G /erigon/caplin
50G /erigon/chaindata
1.8T /erigon/snapshots
1.9T total
du -hsc /erigon/snapshots/ *
100G /erigon/snapshots/accessor
240G /erigon/snapshots/domain
260G /erigon/snapshots/history
410G /erigon/snapshots/idx
1.7T /erigon/snapshots
# bor-mainnet - archive - Jun 2024
du -hsc /erigon/ *
160M /erigon/bor
50G /erigon/chaindata
3.7T /erigon/snapshots
3.8T total
du -hsc /erigon/snapshots/ *
260G /erigon-data/snapshots/accessor
850G /erigon-data/snapshots/domain
650G /erigon-data/snapshots/history
1.4T /erigon-data/snapshots/idx
4.1T /erigon/snapshots
debug_getModifiedAccountsByNumber
를 반환합니다.--internalcl
기본적으로 활성화되어 있습니다. 사용을 비활성화하려면 --externalcl
사용하세요.chaindata
15gb
미만입니다. rm -rf chaindata
사용해도 됩니다. (성장 방지: --batchSize <= 1G
권장)--prune
플래그가 변경됨 : --prune.mode
참조(기본값: archive
, full: full
, EIP-4444: minimal
)--sync.loop.block.limit=5_000
기본적으로 활성화되어 있습니다.플래그:
verbosity
log.console.verbosity
( verbosity
에 대한 별칭 재정의)log.json
log.console.json
( log.json
의 별칭)log.dir.path
log.dir.prefix
log.dir.verbosity
log.dir.json
stdout/stderr에만 기록하려면 --verbosity
(또는 log.console.verbosity
) 플래그를 사용하여 가장 높은 출력 로그 수준을 지정하는 int 값을 제공할 수 있습니다.
LvlCrit = 0
LvlError = 1
LvlWarn = 2
LvlInfo = 3
LvlDebug = 4
LvlTrace = 5
디스크에 수집할 로그의 출력 디렉토리를 설정하려면 --log.dir.path
설정하십시오. erigon
에서 생성된 파일 이름을 변경하려면 --log.dir.prefix
플래그를 대체 이름으로 설정해야 합니다. --log.dir.verbosity
플래그는 위와 동일한 int 값 또는 'debug' 또는 'info'와 같은 문자열 값을 사용하여 이 로깅의 자세한 정도를 제어하는 데에도 사용할 수 있습니다. 디스크 로깅의 경우 기본 자세한 정도는 'debug'(4)입니다.
로그 형식은 부울 플래그 log.json
또는 log.console.json
사용하거나 디스크 출력 --log.dir.json
사용하여 json으로 설정할 수 있습니다.
Erigon은 기본적으로 "올인원 바이너리" 솔루션이지만 TxPool을 별도의 프로세스로 시작할 수도 있습니다. JSON RPC 계층(RPCDaemon), p2p 계층(Sentry), 기록 다운로드 계층(Downloader), 합의에 대해서도 마찬가지입니다. 리소스 제한, 확장, 자체 구현으로 교체, 보안 등 명확한 이유가 없는 한 별도의 프로세스로 서비스를 시작하지 마세요. Erigon의 서비스를 별도의 프로세스로 시작하는 방법은 docker-compose.yml을 참조하세요. 각 서비스에는 자체 ./cmd/*/README.md
파일이 있습니다. 에리곤 블로그.
Ethereum Mainnet, Seplia, Holesky, Gnosis에 대한 합의 기능이 내장되어 있습니다. 외부 합의 레이어를 사용하려면: --externalcl
.
Erigon을 사용해 보고 싶다면 공개 테스트넷 중 하나인 Holesky(또는 Amoy) 동기화를 시작하는 것이 좋습니다. 훨씬 더 빠르게 동기화되며 많은 디스크 공간을 차지하지 않습니다.
git clone https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon --datadir= < your_datadir > --chain=holesky --prune.mode=full
기본 위치가 아닌 위치에 Erigon 파일을 저장할 수 있는 --datadir
옵션을 참고하세요. --datadir
디렉토리 이름은 --chain
의 체인 이름과 일치할 필요가 없습니다.
블록 생산은 Ethereum & Gnosis Chain에서 완벽하게 지원됩니다. Polygon에 대해서는 아직 실험적입니다.
--config
플래그를 사용하여 TOML 구성 파일을 통해 Erigon 플래그를 설정할 수 있습니다. 구성 파일에 설정된 플래그는 Erigon 명령줄에서 직접 플래그를 작성하여 덮어쓸 수 있습니다.
./build/bin/erigon --config ./config.toml --chain=sepolia
구성 파일에 chain : "mainnet"
이 있다고 가정하고 --chain=sepolia
추가하면 toml 구성 파일 내부의 플래그를 덮어쓸 수 있으며 체인을 sepalia로 설정합니다.
datadir = ' your datadir '
port = 1111
chain = " mainnet "
http = true
"private.api.addr" = " localhost:9090 "
"http.api" = [ " eth " , " debug " , " net " ]
Erigon은 합의 계층 클라이언트(CL)를 위한 실행 계층(EL)으로 사용될 수 있습니다. 기본 구성은 괜찮습니다.
CL 클라이언트가 다른 장치에 있는 경우 --authrpc.addr 0.0.0.0
(엔진 API는 기본적으로 localhost에서 수신 대기)과 --authrpc.vhosts <CL host>
추가합니다. 여기서 <CL host>
는 소스 호스트이거나 any
.
합의 계층과 실행 계층 간의 보안 연결을 설정하기 위해 JWT 비밀 키가 자동으로 생성됩니다.
JWT 비밀 키는 기본적으로 jwt.hex
라는 이름으로 datadir에 존재하며 해당 경로는 --authrpc.jwtsecret
플래그로 지정할 수 있습니다.
연결을 성공적으로 설정하려면 이 정보가 합의 레이어에도 지정되어야 합니다. 자세한 내용은 여기에서 확인할 수 있습니다.
Erigon이 실행되면 CL 클라이언트가 <erigon address>:8551
을 가리켜야 합니다. 여기서 <erigon address>
는 localhost
또는 Erigon을 실행하는 장치의 IP 주소이고 Erigon이 생성한 JWT 비밀 경로도 가리켜야 합니다.
Caplin은 Prysm, Lighthouse, Teku, Nimbus 및 Lodestar와 같은 본격적인 검증 컨센서스 클라이언트입니다. 목표는 다음과 같습니다.
새로운 합의 레이어를 개발한 주된 이유는 그에 따른 가능한 이점을 실험하기 위한 것입니다. 예를 들어, Engine API는 Erigon과 잘 작동하지 않습니다. Engine API는 한 번에 한 블록씩 데이터를 전송하는데, 이는 Erigon의 작동 방식에 적합하지 않습니다. Erigon은 많은 블록을 동시에 처리하도록 설계되었으며 데이터를 효율적으로 정렬하고 처리해야 합니다. 따라서 Erigon에서는 Engine API에 의존하는 대신 블록을 독립적으로 처리하는 것이 더 나을 것입니다.
Caplin은 기본적으로 활성화되어 있습니다. 이를 비활성화하고 Engine API를 활성화하려면 --externalcl
플래그를 사용하세요. 그 시점부터 외부 합의 레이어는 더 이상 필요하지 않습니다.
Caplin에는 과거 상태 및 블록에 대한 보관 모드도 있습니다. --caplin.archive
플래그를 통해 활성화할 수 있습니다. caplin의 Beacon API를 활성화하려면 --beacon.api=<namespaces>
플래그를 추가해야 합니다. 예: --beacon.api=beacon,builder,config,debug,node,validator,lighthouse
모든 엔드포인트를 활성화합니다. **참고: Caplin은 스테이킹 준비가 되어 있지 않으므로 집계 엔드포인트가 아직 구현되지 않았습니다. 추가적으로 Beacon API를 활성화하면 RAM 사용량이 6GB 더 높아집니다.
충돌을 피하기 위해 6개의 플래그를 정의하십시오: --datadir --port --http.port --authrpc.port --torrent.port --private.api.addr
. 동일한 기계에 있는 여러 체인의 예:
# mainnet
./build/bin/erigon --datadir="<your_mainnet_data_path>" --chain=mainnet --port=30303 --http.port=8545 --authrpc.port=8551 --torrent.port=42069 --private.api.addr=127.0.0.1:9090 --http --ws --http.api=eth,debug,net,trace,web3,erigon
# sepolia
./build/bin/erigon --datadir="<your_sepolia_data_path>" --chain=sepolia --port=30304 --http.port=8546 --authrpc.port=8552 --torrent.port=42068 --private.api.addr=127.0.0.1:9091 --http --ws --http.api=eth,debug,net,trace,web3,erigon
공백이 있는 경우 경로를 인용하세요.
? Detailed explanation is DEV_CHAIN.
좋은 네트워크 대역폭에서 EthereumMainnet FullNode는 3시간 안에 동기화됩니다: OtterSync는 동기화할 수 있습니다
플랫 KV 스토리지. Erigon은 키-값 데이터베이스를 사용하고 계정과 스토리지를 간단한 방식으로 저장합니다.
? See our detailed DB walkthrough here.
전처리 . 일부 작업의 경우 Erigon은 임시 파일을 사용하여 데이터를 기본 DB에 삽입하기 전에 데이터를 전처리합니다. 이는 쓰기 증폭을 줄이고 DB 삽입이 훨씬 더 빨라집니다.
? See our detailed ETL explanation here.
일반 상태
단일 계정/상태 트리 . Erigon은 계정과 저장소 모두에 단일 Merkle 트라이를 사용합니다.
? Staged Sync Readme
대부분의 Erigon 구성 요소(txpool, rpcdaemon, 스냅샷 다운로더, sentry 등)는 Erigon 내부에서 작동할 수 있으며 동일한 서버(또는 다른 서버)에서 독립적인 프로세스로 작동할 수 있습니다. 예:
make erigon rpcdaemon
./build/bin/erigon --datadir=/my --http=false
# To run RPCDaemon as separated process: use same `--datadir` as Erigon
./build/bin/rpcdaemon --datadir=/my --http.api=eth,erigon,web3,net,debug,trace,txpool --ws
--rpc.batch.concurrency
, --rpc.batch.limit
, --db.read.concurrency
--http.compression
, --ws.compression
비활성화하여 처리량을 늘립니다. ? See RPC-Daemon docs
docker compose up prometheus grafana
.
# please use git branch name (or commit hash). don't use git tags
go mod edit -replace github.com/erigontech/erigon-lib=github.com/erigontech/erigon/erigon-lib@5498f854e44df5c8f0804ff4f0747c0dec3caad5
go get github.com/erigontech/erigon@main
go mod tidy
erigon
포트요소 | 포트 | 규약 | 목적 | 노출해야 함 |
---|---|---|---|---|
엔진 | 9090 | TCP | gRPC 서버 | 사적인 |
엔진 | 42069 | TCP & UDP | 스냅싱크(Bittorrent) | 공공의 |
엔진 | 8551 | TCP | 엔진 API(JWT 인증) | 사적인 |
보초 | 30303 | TCP & UDP | eth/68 피어링 | 공공의 |
보초 | 30304 | TCP & UDP | eth/67 피어링 | 공공의 |
보초 | 9091 | TCP | 들어오는 gRPC 연결 | 사적인 |
rpc데몬 | 8545 | TCP | HTTP & 웹소켓 & GraphQL | 사적인 |
일반적으로 30303 및 30304는 들어오는 피어링 연결을 허용하기 위해 인터넷에 노출됩니다. 9090은 rpcdaemon 또는 기타 연결(예: rpcdaemon -> erigon)에 대해서만 내부적으로 노출됩니다. 포트 8551(JWT 인증)은 Consensus Layer 노드의 엔진 API JSON-RPC 쿼리에 대해서만 내부적으로 노출됩니다.
caplin
포트요소 | 포트 | 규약 | 목적 | 노출해야 함 |
---|---|---|---|---|
보초 | 4000 | UDP | 피어링 | 공공의 |
보초 | 4001 | TCP | 피어링 | 공공의 |
포트를 구성하려면 다음을 사용하십시오.
--caplin.discovery.addr value Address for Caplin DISCV5 protocol (default: "127.0.0.1")
--caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000)
--caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001)
beaconAPI
포트요소 | 포트 | 규약 | 목적 | 노출해야 함 |
---|---|---|---|---|
나머지 | 5555 | TCP | 나머지 | 공공의 |
shared
포트요소 | 포트 | 규약 | 목적 | 노출해야 함 |
---|---|---|---|---|
모두 | 6060 | TCP | 프로프 | 사적인 |
모두 | 6061 | TCP | 측정항목 | 사적인 |
pprof나 메트릭(또는 둘 다)을 활성화하는 선택적 플래그를 활성화할 수 있습니다. 자세한 내용을 보려면 바이너리에 --help
사용하세요.
other
포트 향후 사용을 위해 예약됨: gRPC 포트 : 9092
합의 엔진, 9093
스냅샷 다운로더, 9094
TxPool
0.0.0.0/8 "This" Network RFC 1122, Section 3.2.1.3
10.0.0.0/8 Private-Use Networks RFC 1918
100.64.0.0/10 Carrier-Grade NAT (CGN) RFC 6598, Section 7
127.16.0.0/12 Private-Use Networks RFC 1918
169.254.0.0/16 Link Local RFC 3927
172.16.0.0/12 Private-Use Networks RFC 1918
192.0.0.0/24 IETF Protocol Assignments RFC 5736
192.0.2.0/24 TEST-NET-1 RFC 5737
192.88.99.0/24 6to4 Relay Anycast RFC 3068
192.168.0.0/16 Private-Use Networks RFC 1918
198.18.0.0/15 Network Interconnect
Device Benchmark Testing RFC 2544
198.51.100.0/24 TEST-NET-2 RFC 5737
203.0.113.0/24 TEST-NET-3 RFC 5737
224.0.0.0/4 Multicast RFC 3171
240.0.0.0/4 Reserved for Future Use RFC 1112, Section 4
255.255.255.255/32 Limited Broadcast RFC 919, Section 7
RFC 922, Section 7
IpTables 구문과 동일
systemd
예제 별도의 사용자로 build/bin
에서 erigon을 실행하면 오류가 발생할 수 있습니다.
error while loading shared libraries: libsilkworm_capi.so: cannot open shared object file: No such file or directory
make DIST=<path> install
사용하여 다른 사용자를 위해 라이브러리를 설치 해야 합니다. $HOME/erigon
또는 /opt/erigon
설치 경로로 사용할 수 있습니다. 예를 들면 다음과 같습니다.
make DIST=/opt/erigon install
kill -SIGUSR1 <pid>
, 추적 가져오기 및 중지: kill -6 <pid>
--pprof
플래그를 추가하고 실행go tool pprof -png http://127.0.0.1:6060/debug/pprof/profile?seconds=20 > cpu.png
--pprof
플래그를 추가하고 실행go tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png
? Detailed explanation is here.
Docker는 보안상의 이유로 UID/GID 1000의 사용자 erigon을 사용합니다. Dockerfile에서 이 사용자가 생성되는 것을 볼 수 있습니다. 호스트의 사용자 UID/GID가 Docker의 사용자 UID/GID(1000)와 동일한 폴더의 호스트 사용자 소유권을 제공하여 문제를 해결할 수 있습니다. 자세한 내용은 포스팅으로
--txpool.nolocals=true
--http.api
목록에 admin
추가하지 마세요--http.corsdomain="*"
은 나쁜 습관입니다. 정확한 호스트 이름이나 IP를 설정하세요.--rpc.batch.concurrency
, --rpc.batch.limit
줄여 DOS로부터 보호합니다.https://github.com/mathMakesArt/Erigon-on-RPi-4
Docker를 사용하면 컨테이너를 통해 Erigon을 빌드하고 실행할 수 있습니다. 이렇게 하면 호스트 OS에 빌드 종속성을 설치할 필요성이 줄어듭니다.
사용자 UID/GID는 호스트 OS와 컨테이너 간에 동기화되어야 파일이 올바른 권한으로 기록됩니다.
호스트 OS에 전용 사용자/그룹을 설정할 수 있으며, 이 경우 다음 make
대상을 사용할 수 있습니다.
# create "erigon" user
make user_linux
# or
make user_macos
저장소 루트에 .env.example
파일이 있습니다.
DOCKER_UID
- 도커 사용자의 UIDDOCKER_GID
- 도커 사용자의 GIDXDG_DATA_HOME
- 도커 컨테이너에 마운트될 데이터 디렉터리지정하지 않으면 UID/GID는 현재 사용자를 사용합니다.
XDG_DATA_HOME
에 대한 좋은 선택은 도우미 대상 make user_linux
또는 make user_macos
에 의해 생성된 ~erigon/.ethereum
디렉토리를 사용하는 것입니다.
권한 확인: 모든 경우에 XDG_DATA_HOME
(지정 또는 기본값)은 docker의 사용자 UID/GID가 쓸 수 있어야 하며, 이는 빌드 시 DOCKER_UID
및 DOCKER_GID
에 의해 결정됩니다. 권한으로 인해 빌드 또는 서비스 시작이 실패하는 경우 이러한 환경 변수에 의해 제어되는 모든 디렉터리, UID, GID가 올바른지 확인하세요.
다음 명령은 포트 30303의 Erigon, 포트 8545의 rpcdaemon, 포트 9090의 prometheus 및 포트 3000의 grafana를 시작합니다.
#
# Will mount ~/.local/share/erigon to /home/erigon/.local/share/erigon inside container
#
make docker-compose
#
# or
#
# if you want to use a custom data directory
# or, if you want to use different uid/gid for a dedicated user
#
# To solve this, pass in the uid/gid parameters into the container.
#
# DOCKER_UID: the user id
# DOCKER_GID: the group id
# XDG_DATA_HOME: the data directory (default: ~/.local/share)
#
# Note: /preferred/data/folder must be read/writeable on host OS by user with UID/GID given
# if you followed above instructions
#
# Note: uid/gid syntax below will automatically use uid/gid of running user so this syntax
# is intended to be run via the dedicated user setup earlier
#
DOCKER_UID= $( id -u ) DOCKER_GID= $( id -g ) XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
#
# if you want to run the docker, but you are not logged in as the $ERIGON_USER
# then you'll need to adjust the syntax above to grab the correct uid/gid
#
# To run the command via another user, use
#
ERIGON_USER=erigon
sudo -u ${ERIGON_USER} DOCKER_UID= $( id -u ${ERIGON_USER} ) DOCKER_GID= $( id -g ${ERIGON_USER} ) XDG_DATA_HOME= ~ ${ERIGON_USER} /.ethereum DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
Makefile은 erigon, prometheus 및 grafana에 대한 초기 디렉터리를 만듭니다. PID 네임스페이스는 다른 프로세스(RPCDaemon 로컬 모드)에서 Erigon의 DB를 여는 데 필요한 erigon과 rpcdaemon 간에 공유됩니다. 참조: https://github.com/erigontech/erigon/pull/2392/files
docker 설치 시 docker 데몬을 루트(기본값)로 실행해야 하는 경우 위 명령 앞에 sudo
붙여야 합니다. 그러나 보안상의 이유로 루트가 아닌 사용자로 docker(및 해당 컨테이너)를 실행하는 것이 권장되는 경우도 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 이 문서를 참조하세요.
우편
--sync.loop.block.limit=10_000
SNAPSHOT_MADV_RND=false
vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt
ls /mnt/erigon/snapshots/domain/*.kv | parallel vmtouch -vdlw
# if it failing with "can't allocate memory", try:
sync && sudo sysctl vm.drop_caches=3
echo 1 > /proc/sys/vm/compact_memory
Windows 사용자는 3가지 방법으로 erigon을 실행할 수 있습니다:
제공된 wmake.ps1
PowerShell 스크립트를 사용하여 기본적으로 Windows용 실행 가능 바이너리를 빌드합니다. 사용법 구문은 make
명령과 동일하므로 .wmake.ps1 [-target] <targetname>
실행해야 합니다. 예: .wmake.ps1 erigon
erigon 실행 파일을 빌드합니다. 모든 바이너리는 .buildbin
하위 폴더에 있습니다. Windows에서 성공적인 네이티브 빌드를 위해서는 몇 가지 요구 사항이 있습니다.
chocolatey
패키지 관리자를 설치하는 것이 좋습니다. 다음 사항 참조).wmake.ps1 db-tools
)를 빌드해야 하는 경우 Windows용 Chocolatey 패키지 관리자를 설치해야 합니다. Chocolatey에서는 다음 구성 요소를 설치해야 합니다. cmake
, make
, mingw
by choco install cmake make mingw
. Windows 시스템 "경로" 변수에 C:ProgramDatachocolateylibmingwtoolsinstallmingw64bin이 있는지 확인하세요. 안티 바이러스에 대한 중요 참고 사항 MinGW의 컴파일러 감지 단계에서는 컴파일러 기능을 테스트하기 위해 일부 임시 실행 파일이 생성됩니다. 일부 바이러스 백신 프로그램은 해당 파일이 Win64/Kryptic.CIS
트로이 목마(또는 그 변종)에 감염되었을 가능성이 있는 것으로 탐지한다고 보고되었습니다. 이는 오탐(false positive)이지만 우리는 100개 이상의 Windows용 보안 제품 공급업체와 해당 검색 알고리즘을 제어할 수 없으며 이로 인해 Windows 빌드 사용 환경이 불편해질 수 있다는 점을 이해합니다. 이 문제를 해결하려면 복제된 저장소의 buildbinmdbxCMakeFiles
하위 폴더에 대해 바이러스 백신에 대한 제외를 설정하거나 다음 두 가지 옵션을 사용하여 erigon을 실행할 수 있습니다.
Docker 사용: docker-compose.yml을 참조하세요.
버전 2에서는 WSL(Linux용 Windows 하위 시스템)을 엄격하게 사용하세요. 이 옵션에서는 일반 Linux 배포판에서와 마찬가지로 Erigon을 빌드할 수 있습니다. 데이터가 마운트된 Windows 파티션(예: /mnt/c/[...]
, /mnt/d/[...]
등)을 가리킬 수도 있지만 이러한 경우 성능에 영향을 미치게 됩니다. 이는 해당 마운트 지점이 네트워크 파일 시스템인 DrvFS
사용하고 또한 MDBX가 한 번에 하나의 프로세스만 데이터에 액세스할 수 있음을 의미하는 단독 액세스를 위해 db를 잠그기 때문입니다. 이는 동일한 컴퓨터에서 실행되더라도 원격 DB로 구성되어야 하는 rpcdaemon
실행에 영향을 미칩니다. 대신 데이터가 기본 Linux 파일 시스템에서 호스팅되는 경우에는 제한이 적용되지 않습니다. 또한 기본 WSL2 환경에는 Windows 호스트의 네트워크 인터페이스 중 하나와 일치하지 않는 자체 IP 주소가 있습니다. 라우터에서 포트 30303에 대해 NAT를 구성할 때 이 점을 고려하십시오.
주요 토론은 Discord 서버에서 진행됩니다. 초대를 받으려면 귀하의 이름, 직업, Discord에 가입하려는 이유에 대한 간략한 설명, Erigon에 대해 어떻게 알게 되었는지와 함께 bloxster [at] proton.me
로 이메일을 보내십시오.
erigon.substack.com
x.com/ErigonEth
security [at] torquem.ch
에 이메일을 보내세요.
htop
잘못된 메모리 사용량을 표시합니다. MemoryMap
사용하는 Erigon의 내부 DB(MDBX) - OS가 애플리케이션(linux, windows) 대신 모든 read, write, cache
작업을 관리하는 경우
res
열의 htop
에는 "지정된 앱에 대한 페이지 캐시를 보유하는 데 사용되는 앱 + OS"의 메모리가 표시되지만 정보가 없습니다. htop
에서 앱이 메모리의 90%를 사용한다고 말하면 동일한 시스템에서 3개의 앱 인스턴스를 더 실행할 수 있기 때문입니다. - 그 90%
의 대부분이 "OS 페이지 캐시"이기 때문입니다. OS는 메모리가 필요할 때마다 자동으로 이 캐시를 해제합니다. "페이지 캐시 크기"가 작을수록 Erigon의 성능에는 전혀 영향을 미치지 않을 수 있습니다.
다음 도구는 Erigon의 올바른 메모리 사용량을 보여줍니다.
vmmap -summary PID | grep -i "Physical footprint"
. grep
없으면 세부 정보를 볼 수 있습니다section MALLOC ZONE column Resident Size
앱 메모리 사용량이 표시되고, section REGION TYPE column Resident Size
OS 페이지 캐시 크기가 표시됩니다.Prometheus
대시보드는 OS 페이지 캐시 없이 Go 앱의 메모리를 표시합니다( make prometheus
, 브라우저에서 열기 localhost:3000
, 자격 증명 admin/admin
).cat /proc/<PID>/smaps
Erigon은 최초 동기화 중에는 ~4GB의 RAM을 사용하고 일반 작업 중에는 ~1GB의 RAM을 사용합니다. OS 페이지 캐시는 무제한의 메모리를 활용할 수 있습니다.
경고: 동일한 시스템에 있는 여러 Erigon 인스턴스가 동시에 디스크에 닿으면 성능에 영향을 미칩니다. 주요 Erigon 최적화 중 하나는 "디스크 무작위 액세스 감소"입니다. "블록 실행 단계"는 여전히 많은 무작위 읽기를 수행합니다. 이것이 가장 느린 단계인 이유입니다. 동일한 디스크에서 여러 최초 동기화를 실행하지 않는 것이 좋습니다. 제네시스 동기화가 통과되면 동일한 디스크에서 여러 Erigon 인스턴스를 실행해도 괜찮습니다.
(gp3와 유사) 다음을 읽을 수 있습니다: #1516 (주석) 간단히 말해서: 네트워크 디스크는 블록 실행에 좋지 않습니다. db 비병렬 비배치 방식으로 데이터를 읽는 실행을 차단하기 때문입니다. 요령: 충분한 RAM을 사용하고 환경 변수 ERIGON_SNAPSHOT_MADV_RND=false
설정하면 Erigon은 더 높은 IO 비용을 들여 클라우드 드라이브에서 충분히 잘 작동합니다.
예: btrfs의 autodefrag 옵션 - 쓰기 IO를 100배 증가시킬 수 있습니다.
Gnome Tracker - 광부를 탐지하고 죽입니다.
이전 방식으로 Erigon을 시작하려고 할 때 BuildKit 오류가 발생하는 다른 사람은 아래를 사용할 수 있습니다...
XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose