graphprotocol / graphprotocol/graph-node
Refactor to ease adding new chains
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Rust
- Star
- 3.2k
- Fork
- 1.1k
- Merge trung bình
- 4 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 1
Mô tả
Context
When we only had EVM compatible chains, adding new ones didn't require much change. To support NEAR (our first non EVM-compatible chain) required multiple refactors, trait additions, etc. When that got merged we wondered what could be improved to ease adding new chains, in the sense of code structure/reuse and boilerplate.
With the recent addition of Tendermint (PR) it's now more clear what could be improved.
Objective
This will be an umbrella issue connecting all possible improvements/refactors that we can do today to ease new chains being added on the code level, requiring less boilerplate code.
Possible improvements
The improvements/questions below were noted after a second revision of the Tendermint integration Pull Request.
- Could we somehow concentrate all
build.rsfiles logic into a single place? Since adding new Firehose chains will always require this to buildprost(gRPC library) - About empty/default implementations:
TriggerFilter: could we have a default implementation for this that doesn't do anything?NodeCapabilities: could we have a default when the chain doesn't require anything specific for this?RuntimeAdapter: could we have an empty/default adapter when no logic is needed here?
DataSource:- Should we make the getter code here created by a
macro? I mean in the sense that there are tons of similar getter functions that all chains have to do, the only difference are the fields/types themselves. - There are some checks that could be done for all chains (eg:
handlers > 0). Should we have traits for each type of validation required so the chain chooses to implement what suits best?
- Should we make the getter code here created by a
- ABI/AS code generation: this is being addressed by #2985
- On
main.rs(and related binaries) the part that instantiates the chain code is being addressed by a current refactor forgraphman runthat I'm currently working on (which will remove other code duplication there as well)
I would love to hear opinions from @tilacog @lutter @leoyvens @maoueh 🙂
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách so sánh các tệp build.rs dành riêng cho từng chain và mã tích hợp Tendermint, NEAR và EVM, sau đó kiểm tra các tham chiếu đến các trait dùng chung, DataSource và main.rs được nêu trong issue. Được xem là hoàn tất khi biến một hoặc nhiều ý tưởng được liệt kê thành một refactor cụ thể, có phạm vi rõ ràng, đạt được sự thống nhất về cấu trúc dự kiến và vẫn duy trì hỗ trợ cho các chain hiện có.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- rust
- Lĩnh vực
- blockchain
- Loại issue
- Tái cấu trúc
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 25/100