II. Cài đặt dbsync

1. Cardano DB Sync là gì?

Mục đích của Cardano DB Sync là theo dõi chuỗi Cardano và lấy thông tin từ chuỗi và một bản sao trạng thái sổ cái được duy trì nội bộ. Sau đó, dữ liệu được trích xuất từ chuỗi và chèn vào cơ sở dữ liệu PostgreSQL. Các truy vấn SQL sau đó có thể được viết trực tiếp đối với sơ đồ cơ sở dữ liệu hoặc dưới dạng các truy vấn được nhúng trong bất kỳ ngôn ngữ nào có thư viện tương tác với cơ sở dữ liệu SQL.

Ví dụ về những gì ai đó có thể làm thông qua truy vấn SQL đối với một phiên bản Cardano DB Sync đã được đồng bộ hóa đầy đủ với một mạng cụ thể là:

– Tra cứu bất kỳ khối, giao dịch, địa chỉ, stake pool, v.v. nào trên mạng đó, thường là bằng hash để xác định mục đó hoặc chỉ mục vào một bảng khác.

– Tra cứu số dư của bất kỳ địa chỉ stake nào bất kỳ.

– Tra cứu số lượng ADA được ủy quyền cho mỗi pool trong bất kỳ epoch nào.

Các truy vấn SQL ví dụ có sẵn tại đây.

Cardano DB Sync phụ thuộc vào một máy chủ PostgreSQL và một node hoàn chỉnh đã được cài đặt . Bạn có thể tham khảo Hướng dẫn cài đặt và cấu hình PostgreSQL để thiết lập Postgres và Hướng dẫn cài đặt một node cardano . Cụ thể, chúng tôi mong đợi biến môi trường PGPASSFILE được thiết lập theo hướng dẫn trong tài liệu mẫu, để db-sync có thể kết nối.

Ngoài ra, lưu ý rằng chúng tôi không khuyến khích chạy dbsync trên mainnet nếu RAM của bạn dưới 48GB.

2 Cài đặt

Thực hiện lệnh dưới đây để sao chép repository cardano-db-sync vào thư mục $HOME/git trên hệ thống của bạn:

cd ~/git
git clone https://github.com/intersectmbo/cardano-db-sync
cd cardano-db-sync

a. Xây Dựng Cardano DB Sync

Bạn có thể sử dụng các hướng dẫn dưới đây để xây dựng phiên bản mới nhất của cardano-db-sync:

git fetch --tags --all
git pull
# Include the cardano-crypto-praos and libsodium components for db-sync
# On CentOS 7 (GCC 4.8.5) we should also do
# echo -e "package cryptonite\n  flags: -use_target_attributes" >> cabal.project.local
# Replace tag against checkout if you do not want to build the latest released version
git checkout $(curl -sLf https://api.github.com/repos/intersectmbo/cardano-db-sync/releases/latest | jq -r .tag_name)
# Use `-l` argument if you'd like to use system libsodium instead of IOG fork of libsodium while compiling
$CNODE_HOME/scripts/cabal-build-all.sh


Điều này sẽ sao chép tệp nhị phân cardano-db-sync vào thư mục ~/.local/bin.

b Chuẩn Bị Cơ Sở Dữ Liệu để Đồng Bộ

Bây giờ các tệp nhị phân đã có sẵn, hãy tạo cơ sở dữ liệu của chúng ta (khi gặp phải các thay đổi,hoặc lỗi, bạn có thể cần sử dụng –recreatedb thay vì –createdb trong khi sử dụng lần đầu tiên). Một lần nữa, chúng tôi mong đợi rằng biến môi trường PGPASSFILE đã được thiết lập (tham khảo phần đầu của hướng dẫn này để biết hướng dẫn mẫu):

cd ~/git/cardano-db-sync
# scripts/postgresql-setup.sh --dropdb #if exists already, will fail if it doesnt - thats OK
scripts/postgresql-setup.sh --createdb
# Password:
# Password:
# All good!

Xác Nhận bạn thấy “All good!” như trên!

c. Tạo Liên Kết Tới Thư Mục Schema

Bạn có thể sao chép thư mục ~/git/cardano-db-sync/schema hoặc tạo một liên kết (symlink) đến thư mục đó và làm cho nó có sẵn cho lệnh khởi động mà chúng tôi sẽ sử dụng. Chúng tôi sẽ sử dụng phương pháp liên kết trong ví dụ dưới đây:

ln -s ~/git/cardano-db-sync/schema $CNODE_HOME/guild-db/schema

d. Khôi Phục Dữ Liệu Bằng Snapshot

Nếu bạn đang vận hành một dbsync trên mainnet/preview/preprod, bạn có thể muốn cân nhắc việc sử dụng các snapshot dbsync như được tài liệu hóa ở đây. Các tệp snapshot từ IO cho các cấu hình mặc định của họ trong các epoch gần đây có sẵn qua các liên kết trong ghi chú phát hành. Lưu ý rằng các snapshot chỉ nên được sử dụng liên quan đến các cấu hình cụ thể của chúng; nếu sử dụng cấu hình từ Koios – bạn nên xem các snapshot ở đây.

# Replace the actual link below with the latest one from release notes
wget https://update-cardano-mainnet.iohk.io/cardano-db-sync/13/db-sync-snapshot-schema-13-block-7622755-x86_64.tgz
rm -rf ${CNODE_HOME}/guild-db/ledger-state ; mkdir -p ${CNODE_HOME}/guild-db/ledger-state
cd -; cd ~/git/cardano-db-sync
scripts/postgresql-setup.sh --restore-snapshot /tmp/dbsyncsnap.tgz ${CNODE_HOME}/guild-db/ledger-state
# The restore may take a while, please be patient and do not interrupt the restore process. Once restore is successful, you may delete the downloaded snapshot as below:
#   rm -f /tmp/dbsyncsnap.tgz

e. Kiểm Tra Chạy dbsync Thủ Công Tại Terminal

Để xác minh rằng bạn có thể chạy dbsync, trước khi bắt đầu – bạn nên đảm bảo rằng bạn có thể chạy nó để làm điều này, hãy thử các lệnh dưới đây:

cd $CNODE_HOME/scripts
export PGPASSFILE=$CNODE_HOME/priv/.pgpass
./dbsync.sh


Bạn có thể theo dõi các log nếu cần thông qua một phiên làm việc song song bằng cách sử dụng lệnh tail -10f $CNODE_HOME/logs/dbsync.json Nếu không có lỗi, bạn nên nhấn Ctrl-C để dừng việc thực thi dbsync.sh và triển khai nó dưới dạng dịch vụ systemd. Để làm điều này, hãy sử dụng các lệnh dưới đây (việc tạo tệp được thực hiện bằng quyền sudo, nhưng bạn cũng có thể triển khai nó thủ công):

cd $CNODE_HOME/scripts
./dbsync.sh -d
# Deploying cnode-dbsync.service as systemd service..
# cnode-dbsync.service deployed successfully!!

Để khởi động dbsync, bạn có thể chạy lệnh sau:

sudo systemctl start cnode-dbsync

3. Cập nhập DBSync

Cập nhật dbsync có thể bao gồm các thao tác khác nhau tùy thuộc vào các phiên bản bạn đang sử dụng. Chúng tôi sẽ cố gắng giải thích ngắn gọn các nhiệm vụ cần thực hiện:

– Tắt dbsync (ví dụ: sudo systemctl stop cnode-dbsync)

– Cập nhật các tệp nhị phân (có thể tải xuống các tệp nhị phân đã biên dịch sẵn qua guild-deploy.sh hoặc sử dụng hướng dẫn xây dựng bên trên)

– Đi đến thư mục git của bạn, pull và chuyển sang phiên bản mới nhất như trong ví dụ dưới đây (nếu bạn muốn chuyển sang phiên bản 13.1.1.3):

cd ~/git/cardano-db-sync
git pull
git checkout 13.1.1.3

Nếu bạn đang thực hiện cập nhật phiên bản chính (ví dụ: từ 13.x.x.x lên 14.x.x.x), bạn có thể cần phải xây dựng lại và đồng bộ lại cơ sở dữ liệu từ đầu. Bạn vẫn có thể làm theo phần hướng dẫn khôi phục bằng cách sử dụng snapshot để tiết kiệm thời gian (miễn là bạn sử dụng snapshot tương thích).

Nếu phiên bản cardano-node cơ bản đã thay đổi (đặc biệt là nếu lược đồ ledger-state khác), bạn cũng cần phải xóa thư mục ledger-state (ví dụ: rm -rf $CNODE_HOME/guild-db/ledger-state). Kiểm tra xem tệp dbsync.sh có khởi động tốt bằng cách thủ công như đã mô tả ở trên hay không. Nếu nó hoạt động tốt, hãy tắt nó và tiến hành khởi động dịch vụ systemd (sudo systemctl start cnode-dbsync).

4. Xác thực

Để xác thực, kết nối với phiên bản Postgres của bạn và thực hiện các lệnh như bên dưới:

export PGPASSFILE=$CNODE_HOME/priv/.pgpass
psql cexplorer

Khi ở trong giao diện dòng lệnh psql, tại đây bạn có thể kiểm tra các bảng và xác minh rằng chúng đã được điền dữ liệu:

\dt
select * from meta;

Một kết quả mẫu của hai lệnh trên có thể trông như sau (số lượng bảng và tên có thể khác nhau giữa các phiên bản):

cexplorer=# \dt
List of relations
 Schema |           Name            | Type  | Owner
--------+---------------------------+-------+-------
 public | ada_pots                  | table | centos
 public | admin_user                | table | centos
 public | block                     | table | centos
 public | delegation                | table | centos
 public | delisted_pool             | table | centos
 public | epoch                     | table | centos
 public | epoch_param               | table | centos
 public | epoch_stake               | table | centos
 public | ma_tx_mint                | table | centos
 public | ma_tx_out                 | table | centos
 public | meta                      | table | centos
 public | orphaned_reward           | table | centos
 public | param_proposal            | table | centos
 public | pool_hash                 | table | centos
 public | pool_meta_data            | table | centos
 public | pool_metadata             | table | centos
 public | pool_metadata_fetch_error | table | centos
 public | pool_metadata_ref         | table | centos
 public | pool_owner                | table | centos
 public | pool_relay                | table | centos
 public | pool_retire               | table | centos
 public | pool_update               | table | centos
 public | pot_transfer              | table | centos
 public | reserve                   | table | centos
 public | reserved_ticker           | table | centos
 public | reward                    | table | centos
 public | schema_version            | table | centos
 public | slot_leader               | table | centos
 public | stake_address             | table | centos
 public | stake_deregistration      | table | centos
 public | stake_registration        | table | centos
 public | treasury                  | table | centos
 public | tx                        | table | centos
 public | tx_in                     | table | centos
 public | tx_metadata               | table | centos
 public | tx_out                    | table | centos
 public | withdrawal                | table | centos
(37 rows)



select * from meta;
 id |     start_time      | network_name
----+---------------------+--------------
  1 | 2017-09-23 21:44:51 | mainnet
(1 row)

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Nội dung