เอกสารประกอบ: 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, โกลัง >= 1.22; GCC 10+ หรือเสียงดังกราว; บน Linux: เคอร์เนล > v4. สถาปัตยกรรม 64 บิต
SSD หรือ NVMe ไม่แนะนำ HDD - บน HDD Eragon จะอยู่ด้านหลังปลายโซ่เสมอ N บล็อก แต่จะไม่ล้าหลัง โปรดทราบว่าประสิทธิภาพของ SSD จะลดลงเมื่อใกล้ถึงความจุ CloudDrives (เช่น gp3): การดำเนินการบล็อกช้าบนไดรฟ์เครือข่ายคลาวด์
- รายละเอียดเพิ่มเติมเกี่ยวกับขนาดข้อมูล Eragon3
- รายละเอียดเพิ่มเติมเกี่ยวกับประเภทของข้อมูลที่เก็บไว้ที่นี่
บันทึกประจำรุ่นและไบนารี
สร้างรุ่นล่าสุด (ซึ่งจะเหมาะสำหรับผู้ใช้ส่วนใหญ่ที่ต้องการเรียกใช้โหนด):
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
เพื่อเลือกตำแหน่งที่จะจัดเก็บข้อมูล
ใช้ --chain=gnosis
สำหรับ Gnosis Chain, --chain=bor-mainnet
สำหรับ Polygon Mainnet และ --chain=amoy
สำหรับ Polygon Amoy สำหรับ Gnosis Chain คุณต้องมีไคลเอ็นต์ Consensus Layer ควบคู่ไปกับ Erigon (https://docs.gnosischain.com/category/step--3---run-consensus-client)
การรัน 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
หากคุณสามารถจัดเก็บ datadir บน 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
flags เปลี่ยนแล้ว : ดู --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
หากต้องการตั้งค่า dir เอาต์พุตสำหรับบันทึกที่จะรวบรวมบนดิสก์ โปรดตั้งค่า --log.dir.path
หากคุณต้องการเปลี่ยนชื่อไฟล์ที่สร้างจาก erigon
คุณควรตั้งค่าสถานะ --log.dir.prefix
ให้เป็นชื่ออื่นด้วย แฟล็ก --log.dir.verbosity
ยังพร้อมใช้งานเพื่อควบคุมความละเอียดของการบันทึกนี้ ด้วยค่า int เช่นเดียวกับด้านบน หรือค่าสตริง เช่น ' debug' หรือ 'info' คำฟุ่มเฟือยเริ่มต้นคือ 'debug' (4) สำหรับการบันทึกดิสก์
รูปแบบบันทึกสามารถตั้งค่าเป็น json ได้โดยใช้แฟล็กบูลีน log.json
หรือ log.console.json
หรือสำหรับดิสก์เอาต์พุต --log.dir.json
Erigon โดยค่าเริ่มต้นคือโซลูชัน "all in one binary" แต่เป็นไปได้ที่จะเริ่ม TxPool เป็นกระบวนการที่แยกจากกัน เหมือนกันจริงเกี่ยวกับ: เลเยอร์ JSON RPC (RPCDaemon), เลเยอร์ p2p (Sentry), เลเยอร์การดาวน์โหลดประวัติ (ตัวดาวน์โหลด), ฉันทามติ อย่าเริ่มบริการเป็นกระบวนการที่แยกจากกัน เว้นแต่คุณจะมีเหตุผลที่ชัดเจน เช่น การจำกัดทรัพยากร การขยายขนาด แทนที่ด้วยการใช้งานของคุณเอง ความปลอดภัย วิธีเริ่มบริการของ Eragon เป็นกระบวนการที่แยกจากกัน ดูใน docker-compose.yml แต่ละบริการจะมีไฟล์ ./cmd/*/README.md
ของตัวเอง บล็อกเอริกอน
ฉันทามติในตัวสำหรับ Ethereum Mainnet, Sepolia, Holesky, Gnosis วิธีใช้ Consensus Layer ภายนอก: --externalcl
หากคุณต้องการทดลองใช้ Eragon: ตัวเลือกที่ดีคือเริ่มซิงค์หนึ่งในเครือข่ายทดสอบสาธารณะ 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
โปรดทราบตัวเลือก --datadir
ที่อนุญาตให้คุณจัดเก็บไฟล์ Eragon ในตำแหน่งที่ไม่ใช่ค่าเริ่มต้น ชื่อของไดเร็กทอรี --datadir
ไม่จำเป็นต้องตรงกับชื่อของเชนใน --chain
การผลิตแบบบล็อกได้รับการสนับสนุนอย่างเต็มที่สำหรับ Ethereum & Gnosis Chain มันยังอยู่ในช่วงทดลองสำหรับรูปหลายเหลี่ยม
คุณสามารถตั้งค่าสถานะ Eragon ผ่านไฟล์กำหนดค่า TOML ด้วยการตั้งค่าสถานะ --config
การตั้งค่าสถานะในไฟล์การกำหนดค่าสามารถเขียนทับได้โดยการเขียนการตั้งค่าสถานะโดยตรงบนบรรทัดคำสั่ง Eragon
./build/bin/erigon --config ./config.toml --chain=sepolia
สมมติว่าเรามี chain : "mainnet"
ในไฟล์กำหนดค่าของเรา โดยการเพิ่ม --chain=sepolia
อนุญาตให้เขียนทับแฟล็กภายในไฟล์กำหนดค่า toml และตั้งค่า chain เป็น sepolia
datadir = ' your datadir '
port = 1111
chain = " mainnet "
http = true
"private.api.addr" = " localhost:9090 "
"http.api" = [ " eth " , " debug " , " net " ]
Erigon สามารถใช้เป็น Execution Layer (EL) สำหรับ Consensus Layer client (CL) การกำหนดค่าเริ่มต้นก็โอเค
หากไคลเอ็นต์ CL ของคุณอยู่บนอุปกรณ์อื่น ให้เพิ่ม --authrpc.addr 0.0.0.0
(Engine API Listen บน localhost ตามค่าเริ่มต้น) รวมถึง --authrpc.vhosts
โดยที่
เป็นโฮสต์ต้นทางของคุณหรือ any
.
เพื่อสร้างการเชื่อมต่อที่ปลอดภัยระหว่าง Consensus Layer และ Execution Layer คีย์ลับ JWT จะถูกสร้างขึ้นโดยอัตโนมัติ
รหัสลับ JWT จะแสดงอยู่ใน datadir ตามค่าเริ่มต้นภายใต้ชื่อ jwt.hex
และสามารถระบุพาธได้ด้วยแฟล็ก --authrpc.jwtsecret
ข้อมูลส่วนนี้จำเป็นต้องได้รับการระบุใน Consensus Layer ด้วยเพื่อสร้างการเชื่อมต่อได้สำเร็จ สามารถดูข้อมูลเพิ่มเติมได้ที่นี่
เมื่อ Erigon กำลังทำงาน คุณจะต้องชี้ไคลเอ็นต์ CL ของคุณไปที่
โดยที่
เป็น localhost
หรือที่อยู่ IP ของอุปกรณ์ที่ใช้ Erigon และยังชี้ไปที่เส้นทางลับ JWT ที่สร้างโดย Erigon
Caplin เป็นลูกค้าฉันทามติที่มีคุณสมบัติครบถ้วนในการตรวจสอบ เช่น Prysm, Lighthouse, Teku, Nimbus และ Lodestar เป้าหมายคือ:
เหตุผลหลักว่าทำไมจึงพัฒนา Consensus Layer ใหม่ขึ้นมาเพื่อทดลองถึงประโยชน์ที่เป็นไปได้ที่อาจมาพร้อมกับมัน ตัวอย่างเช่น Engine API ทำงานได้ไม่ดีกับ Eragon Engine API ส่งข้อมูลครั้งละหนึ่งบล็อก ซึ่งไม่เหมาะกับวิธีการทำงานของ Eragon Eragon ได้รับการออกแบบมาเพื่อจัดการบล็อกจำนวนมากพร้อมกัน และจำเป็นต้องจัดเรียงและประมวลผลข้อมูลอย่างมีประสิทธิภาพ ดังนั้นจึงเป็นการดีกว่าสำหรับ Eragon ที่จะจัดการบล็อกอย่างอิสระแทนที่จะอาศัย Engine API
Caplin ถูกเปิดใช้งานตามค่าเริ่มต้น หากต้องการปิดใช้งานและเปิดใช้งาน Engine API ให้ใช้แฟล็ก --externalcl
จากจุดนั้น ไม่จำเป็นต้องใช้ Consensus Layer ภายนอกอีกต่อไป
Caplin ยังมีโหมดเก็บถาวรสำหรับสถานะและบล็อกทางประวัติศาสตร์ สามารถเปิดใช้งานได้ผ่านแฟล็ก --caplin.archive
ในการเปิดใช้งาน Beacon API ของ caplin จะต้องเพิ่ม flag --beacon.api=
เช่น --beacon.api=beacon,builder,config,debug,node,validator,lighthouse
จะเปิดใช้งานตำแหน่งข้อมูลทั้งหมด **หมายเหตุ: Caplin ยังไม่พร้อมสำหรับการดำเนินการ ดังนั้นจุดสิ้นสุดการรวมกลุ่มจึงยังคงถูกนำมาใช้ การเปิดใช้งาน Beacon API เพิ่มเติมจะทำให้มีการใช้งาน RAM สูงขึ้น 6 GB
กำหนด 6 แฟล็กเพื่อหลีกเลี่ยงข้อขัดแย้ง: --datadir --port --http.port --authrpc.port --torrent.port --private.api.addr
ตัวอย่างหลาย chains บนเครื่องเดียวกัน:
# mainnet
./build/bin/erigon --datadir="" --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="" --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 แบบแบน Eragon ใช้ฐานข้อมูลคีย์-ค่าและจัดเก็บบัญชีและพื้นที่จัดเก็บข้อมูลด้วยวิธีง่ายๆ
? See our detailed DB walkthrough here.
กำลังประมวลผลล่วงหน้า สำหรับการดำเนินการบางอย่าง Eragon จะใช้ไฟล์ชั่วคราวเพื่อประมวลผลข้อมูลล่วงหน้าก่อนที่จะแทรกลงในฐานข้อมูลหลัก ซึ่งจะช่วยลดการขยายการเขียนและการแทรก DB ก็มีลำดับความสำคัญเร็วขึ้น
? See our detailed ETL explanation here.
รัฐธรรมดา
บัญชีเดี่ยว/รัฐลอง เอริกอนใช้ Merkle Trie เพียงครั้งเดียวสำหรับทั้งบัญชีและพื้นที่เก็บข้อมูล
? Staged Sync Readme
ส่วนประกอบส่วนใหญ่ของ Eragon (txpool, rpcdaemon, snapshots downloader, sentry, ...) สามารถทำงานภายใน Eragon และเป็นกระบวนการอิสระบนเซิร์ฟเวอร์เดียวกัน (หรือเซิร์ฟเวอร์อื่น) ตัวอย่าง:
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 ขาเข้า | ส่วนตัว |
rpcdaemon | 8545 | TCP | HTTP และ WebSockets และ GraphQL | ส่วนตัว |
โดยทั่วไปแล้ว 30303 และ 30304 จะถูกเปิดเผยต่ออินเทอร์เน็ตเพื่อให้สามารถเชื่อมต่อแบบเพียร์ขาเข้าได้ 9090 เปิดเผยเฉพาะภายในสำหรับ rpcdaemon หรือการเชื่อมต่ออื่นๆ (เช่น rpcdaemon -> erigon) พอร์ต 8551 (ตรวจสอบสิทธิ์ JWT) เปิดเผยภายในเฉพาะสำหรับการสืบค้น Engine API JSON-RPC จากโหนด Consensus Layer
caplin
ส่วนประกอบ | ท่าเรือ | โปรโตคอล | วัตถุประสงค์ | ควรเปิดเผย |
---|---|---|---|---|
ทหารรักษาการณ์ | 4000 | ยูดีพี | การเพียร์ | สาธารณะ |
ทหารรักษาการณ์ | 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
การเรียกใช้ erigon จาก build/bin
ในฐานะผู้ใช้แยกต่างหากอาจทำให้เกิดข้อผิดพลาด:
error while loading shared libraries: libsilkworm_capi.so: cannot open shared object file: No such file or directory
จำเป็นต้อง ติดตั้ง ไลบรารีสำหรับผู้ใช้รายอื่นโดยใช้ make DIST=
คุณสามารถใช้ $HOME/erigon
หรือ /opt/erigon
เป็นพาธการติดตั้ง ตัวอย่างเช่น:
make DIST=/opt/erigon install
kill -SIGUSR1
รับการติดตามและหยุด: kill -6
--pprof
flag แล้วรันgo tool pprof -png http://127.0.0.1:6060/debug/pprof/profile?seconds=20 > cpu.png
--pprof
flag แล้วรันgo tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png
? Detailed explanation is here.
นักเทียบท่าใช้ erigon ผู้ใช้กับ UID/GID 1000 (เพื่อเหตุผลด้านความปลอดภัย) คุณสามารถเห็นผู้ใช้รายนี้ถูกสร้างขึ้นใน Dockerfile สามารถแก้ไขได้โดยให้สิทธิ์การเป็นเจ้าของโฟลเดอร์แก่ผู้ใช้โฮสต์ โดยที่ UID/GID ผู้ใช้ของโฮสต์เหมือนกับ UID/GID ผู้ใช้ของนักเทียบท่า (1000) รายละเอียดเพิ่มเติมในโพสต์
--txpool.nolocals=true
admin
ในรายการ --http.api
--http.corsdomain="*"
เป็นแนวทางปฏิบัติที่ไม่ถูกต้อง: ตั้งชื่อโฮสต์หรือ IP ให้ถูกต้อง--rpc.batch.concurrency
, --rpc.batch.limit
https://github.com/mathMakesArt/Erigon-on-RPi-4
นักเทียบท่าอนุญาตให้สร้างและเรียกใช้ Eragon ผ่านคอนเทนเนอร์ ซึ่งช่วยลดความจำเป็นในการติดตั้งการขึ้นต่อกันของบิลด์บนระบบปฏิบัติการโฮสต์
UID/GID ของผู้ใช้จำเป็นต้องซิงโครไนซ์ระหว่างระบบปฏิบัติการโฮสต์และคอนเทนเนอร์ ดังนั้นไฟล์จึงถูกเขียนโดยได้รับอนุญาตอย่างถูกต้อง
คุณอาจต้องการตั้งค่าผู้ใช้/กลุ่มเฉพาะบนโฮสต์ OS ซึ่งในกรณีนี้เป้าหมาย make
ต่อไปนี้จะพร้อมใช้งาน
# create "erigon" user
make user_linux
# or
make user_macos
มีไฟล์ .env.example
อยู่ในรูทของ repo
DOCKER_UID
- UID ของผู้ใช้นักเทียบท่าDOCKER_GID
- GID ของผู้ใช้นักเทียบท่าXDG_DATA_HOME
- ไดเร็กทอรีข้อมูลที่จะติดตั้งกับคอนเทนเนอร์นักเทียบท่าหากไม่ได้ระบุ UID/GID จะใช้ผู้ใช้ปัจจุบัน
ตัวเลือกที่ดีสำหรับ XDG_DATA_HOME
คือการใช้ไดเร็กทอรี ~erigon/.ethereum
ที่สร้างโดยเป้าหมายตัวช่วย make user_linux
หรือ make user_macos
ตรวจสอบสิทธิ์: ในทุกกรณี XDG_DATA_HOME
(ระบุหรือค่าเริ่มต้น) จะต้องเขียนได้โดย UID/GID ของผู้ใช้ใน docker ซึ่งจะถูกกำหนดโดย DOCKER_UID
และ DOCKER_GID
ณ เวลาสร้าง หากการสร้างหรือการเริ่มต้นบริการล้มเหลวเนื่องจากสิทธิ์ ให้ตรวจสอบว่าไดเร็กทอรี, UID และ GID ทั้งหมดที่ควบคุมโดยตัวแปรสภาพแวดล้อมเหล่านี้ถูกต้อง
คำสั่งถัดไปเริ่มทำงาน: Erigon บนพอร์ต 30303, rpcdaemon บนพอร์ต 8545, prometheus บนพอร์ต 9090 และ grafana บนพอร์ต 3000
#
# 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 ถูกใช้ร่วมกันระหว่าง erigon และ rpcdaemon ซึ่งจำเป็นในการเปิดฐานข้อมูลของ Erigon จากกระบวนการอื่น (RPCDaemon โหมดโลคัล) ดู: https://github.com/erigontech/erigon/pull/2392/files
หากการติดตั้ง docker ของคุณต้องการให้ docker daemon ทำงานในฐานะ root (ซึ่งเป็นค่าเริ่มต้น) คุณจะต้องใส่คำนำหน้าคำสั่งด้านบนด้วย sudo
อย่างไรก็ตาม บางครั้งขอแนะนำให้เรียกใช้นักเทียบท่า (และคอนเทนเนอร์ของมัน) ในฐานะผู้ใช้ที่ไม่ใช่รูทด้วยเหตุผลด้านความปลอดภัย สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำเช่นนี้ โปรดดูบทความนี้
โพสต์
--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 อาจเรียกใช้ erigon ได้ 3 วิธีที่เป็นไปได้:
สร้างไบนารีที่ปฏิบัติการได้สำหรับ Windows โดยใช้สคริปต์ PowerShell wmake.ps1
ที่ให้มา ไวยากรณ์การใช้งานเหมือนกับคำสั่ง make
ดังนั้นคุณต้องรัน .wmake.ps1 [-target]
ตัวอย่าง: .wmake.ps1 erigon
สร้าง erigon ที่สามารถเรียกใช้งานได้ ไบนารีทั้งหมดจะอยู่ในโฟลเดอร์ย่อย .buildbin
มีข้อกำหนดบางประการสำหรับการสร้างเนทิฟที่ประสบความสำเร็จบน windows :
chocolatey
- ดูจุดต่อไปนี้).wmake.ps1 db-tools
) จะต้องติดตั้งตัวจัดการแพ็คเกจ Chocolatey สำหรับ Windows โดย Chocolatey คุณต้องติดตั้งส่วนประกอบต่อไปนี้: cmake
, make
, mingw
โดย choco install cmake make mingw
ตรวจสอบให้แน่ใจว่าตัวแปร "Path" ของระบบ Windows มี: C:ProgramDatachocolateylibmingwtoolsinstallmingw64bin หมายเหตุสำคัญเกี่ยวกับการป้องกันไวรัส ในระหว่างขั้นตอนการตรวจจับคอมไพเลอร์ของ MinGW ไฟล์ปฏิบัติการชั่วคราวบางรายการจะถูกสร้างขึ้นเพื่อทดสอบความสามารถของคอมไพเลอร์ มีรายงานว่าโปรแกรมป้องกันไวรัสบางโปรแกรมตรวจพบไฟล์เหล่านั้นว่าอาจติดไวรัสโทรจัน Win64/Kryptic.CIS
(หรือเวอร์ชันอื่น) แม้ว่าสิ่งเหล่านั้นจะเป็นผลบวกลวง เราไม่สามารถควบคุมผู้จำหน่ายผลิตภัณฑ์รักษาความปลอดภัยสำหรับ Windows ได้มากกว่า 100 รายและอัลกอริธึมการตรวจจับที่เกี่ยวข้อง และเราเข้าใจดีว่านี่อาจทำให้ประสบการณ์ของคุณกับ Windows สร้างความอึดอัดได้ ในการแก้ไขปัญหา คุณอาจตั้งค่าการยกเว้นสำหรับโปรแกรมป้องกันไวรัสของคุณโดยเฉพาะสำหรับโฟลเดอร์ย่อย buildbinmdbxCMakeFiles
ของ repo ที่ลอกแบบมา หรือคุณสามารถเรียกใช้ erigon โดยใช้ตัวเลือกอีกสองตัวเลือกต่อไปนี้
ใช้ Docker : ดู docker-compose.yml
ใช้ WSL (ระบบย่อย Windows สำหรับ Linux) บนเวอร์ชัน 2 อย่างเคร่งครัด ภายใต้ตัวเลือกนี้ คุณสามารถสร้าง Eragon ได้เหมือนกับที่คุณสร้างบน Linux ทั่วไป คุณสามารถชี้ข้อมูลของคุณไปยังพาร์ติชั่น Windows ที่ติดตั้งอยู่ ( เช่น /mnt/c/[...]
, /mnt/d/[...]
ฯลฯ ) แต่ในกรณีเช่นนี้ โปรดทราบว่าประสิทธิภาพการทำงานจะได้รับผลกระทบ: สิ่งนี้ เนื่องจากจุดเชื่อมต่อเหล่านั้นใช้ DrvFS
ซึ่งเป็นระบบไฟล์เครือข่าย และนอกจากนี้ MDBX ยังล็อคฐานข้อมูลสำหรับการเข้าถึงแบบเอกสิทธิ์เฉพาะบุคคล ซึ่งหมายความว่ามีเพียงกระบวนการเดียวในแต่ละครั้งเท่านั้นที่สามารถเข้าถึงข้อมูลได้ สิ่งนี้มีผลกระทบต่อการรัน rpcdaemon
ซึ่งจะต้องกำหนดค่าเป็น Remote DB แม้ว่าจะดำเนินการบนคอมพิวเตอร์เครื่องเดียวกันก็ตาม หากข้อมูลของคุณโฮสต์อยู่บนระบบไฟล์ Linux ดั้งเดิม จะไม่มีข้อจำกัดใดๆ โปรดทราบว่าสภาพแวดล้อม WSL2 เริ่มต้นมีที่อยู่ IP ของตัวเองซึ่งไม่ตรงกับหนึ่งในอินเทอร์เฟซเครือข่ายของโฮสต์ Windows: โปรดคำนึงถึงสิ่งนี้เมื่อกำหนดค่า NAT สำหรับพอร์ต 30303 บนเราเตอร์ของคุณ
การสนทนาหลักกำลังเกิดขึ้นบนเซิร์ฟเวอร์ Discord ของเรา หากต้องการรับคำเชิญ ให้ส่งอีเมลไปที่ bloxster [at] proton.me
พร้อมชื่อ อาชีพ คำอธิบายสั้น ๆ ว่าเหตุใดคุณจึงอยากเข้าร่วม Discord และคุณได้ยินเกี่ยวกับ Eragon ได้อย่างไร
erigon.substack.com
x.com/ErigonEth
ส่งอีเมล์ถึง security [at] torquem.ch
htop
แสดงการใช้หน่วยความจำที่ไม่ถูกต้อง DB ภายในของ Eragon (MDBX) โดยใช้ MemoryMap
- เมื่อ OS จัดการ read, write, cache
ทั้งหมดแทน Application (linux, windows)
htop
บน res
คอลัมน์แสดงหน่วยความจำของ "แอป + OS ที่ใช้ในการเก็บแคชหน้าสำหรับแอปที่กำหนด" แต่ก็ไม่ได้ให้ข้อมูลเพราะหาก htop
บอกว่าแอปนั้นใช้หน่วยความจำ 90% คุณยังคงสามารถเรียกใช้แอปได้อีก 3 อินสแตนซ์บนเครื่องเดียวกัน - เพราะส่วนใหญ่ 90%
นั้นเป็น "แคชเพจ OS" ระบบปฏิบัติการจะปล่อยแคชนี้โดยอัตโนมัติทุกครั้งที่ต้องการหน่วยความจำ "ขนาดแคชของเพจ" ที่เล็กลงอาจไม่ส่งผลกระทบต่อประสิทธิภาพของ Eragon เลย
เครื่องมือถัดไปแสดงการใช้หน่วยความจำที่ถูกต้องของ Eragon:
vmmap -summary PID | grep -i "Physical footprint"
หากไม่มี grep
คุณสามารถดูรายละเอียดได้section MALLOC ZONE column Resident Size
แสดงการใช้หน่วยความจำของแอป section REGION TYPE column Resident Size
แสดงขนาดแคชของเพจ OSPrometheus
แสดงหน่วยความจำของแอป Go โดยไม่มีแคชหน้าระบบปฏิบัติการ ( make prometheus
เปิดในเบราว์เซอร์ localhost:3000
ข้อมูลรับรอง admin/admin
)cat /proc//smaps
Erigon ใช้ RAM ~4Gb ระหว่างการซิงค์ต้นกำเนิด และ ~1Gb ระหว่างการทำงานปกติ แคชเพจ OS สามารถใช้หน่วยความจำได้ไม่จำกัดจำนวน
คำเตือน: เอริกอนหลายอินสแตนซ์บนเครื่องเดียวกันจะแตะดิสก์พร้อมกัน ซึ่งจะส่งผลต่อประสิทธิภาพ - หนึ่งในการเพิ่มประสิทธิภาพเอริกอนหลัก: "ลดการเข้าถึงดิสก์แบบสุ่ม" "ขั้นตอนการดำเนินการบล็อก" ยังคงสุ่มอ่านจำนวนมาก - นี่คือสาเหตุที่ทำให้ขั้นตอนนี้ช้าที่สุด เราไม่แนะนำให้ใช้การซิงค์แหล่งกำเนิดหลายรายการบนดิสก์เดียวกัน หากการซิงค์ปฐมภูมิผ่านการซิงค์ ก็เป็นเรื่องปกติที่จะเรียกใช้อินสแตนซ์ Eragon หลายรายการบนดิสก์เดียวกัน
(เช่น gp3) คุณอาจอ่าน: # 1516 (ความคิดเห็น) กล่าวโดยย่อ: ดิสก์เครือข่ายไม่ดีสำหรับการดำเนินการบล็อก - เนื่องจากบล็อกการดำเนินการอ่านข้อมูลจาก db ที่ไม่ใช่แบบขนานที่ไม่ใช่แบบแบตช์ เคล็ดลับ: หากคุณทุ่ม RAM มากพอและตั้งค่าตัวแปร env ERIGON_SNAPSHOT_MADV_RND=false
- ดังนั้น Erigon จะทำงานได้ดีเพียงพอบนคลาวด์ไดรฟ์ - โดยมีต้นทุน IO ที่สูงขึ้น
ตัวอย่างเช่น: ตัวเลือกการจัดเรียงข้อมูลอัตโนมัติของ btrfs - อาจเพิ่มการเขียน IO 100x เท่า
Gnome Tracker - ตรวจจับคนงานเหมืองและฆ่าพวกเขา
สำหรับใครก็ตามที่ได้รับข้อผิดพลาด BuildKit เมื่อพยายามเริ่ม Eragon ด้วยวิธีเก่า คุณสามารถใช้ด้านล่างนี้...
XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose