Tác giả: Murch
Nguồn: https://x.com/murchandamus/status/1854678133896626293
Mỗi full nút lưu trữ các giao dịch chưa được xác nhận trong "mempool" riêng của nó. Bộ nhớ đệm (mempool) này là một tài nguyên quan trọng cho nút, cho phép mạng lưới chuyển tiếp giao dịch ngang hàng. Bằng cách biết và xác minh phần lớn các giao dịch (trong đó được bao gồm) trước khi một khối mới được công bố, việc truyền khối cũng nhanh hơn.
Bằng cách quan sát giao dịch nào xuất hiện đầu tiên trong nhóm giao dịch và sau đó nhận được xác nhận khối, nút có thể tự ý ước tính mức phí giao dịch cần thiết cho giao dịch không đấu thầu được không gian khối và sau đó được xác nhận.
Nút chuyển tiếp giao dịch đến tất cả nút, điều này rất quan trọng đối với quyền riêng tư của người dùng và khả năng chống kiểm duyệt mạng. Quyền truy cập nhanh chóng và không giới hạn vào các giao dịch chưa được xác nhận cho phép bất kỳ ai xây dựng các mẫu khối cạnh tranh và trở thành thợ đào mà không cần xin phép.
Hiện tại, Bitcoin Core theo dõi từng giao dịch theo góc nhìn của "tổ tiên". Đầu tiên, nó sẽ chọn giao dịch có mức phí tổ tiên cao nhất để đưa vào khối, sau đó cập nhật tập hợp tổ tiên và mức phí của tất cả các giao dịch con bị ảnh hưởng, và lặp lại quá trình này liên tục, tham lam lắp ráp một mẫu khối.

Phương pháp này có một nhược điểm: chúng ta cần liên tục cập nhật dữ liệu giao dịch trong khi xây dựng các mẫu khối và chúng ta chỉ có thể dự đoán điểm khai thác(mức phí để chọn một giao dịch vào khối) sau khi xem xét tất cả các yếu tố liên quan.
Đôi khi, nhu cầu về không gian khối trở nên cấp bách đến mức nút của chúng ta nhận được nhiều giao dịch hơn mức chúng có thể lưu trữ trong bộ nhớ đệm. Khi nhóm giao dịch bị tràn, chúng ta cần loại bỏ các giao dịch kém hấp dẫn nhất để khai thác .
Thật không may, vì một giao dịch có thể phụ thuộc vào các giao dịch khác, chúng ta chỉ có thể dự đoán chính xác giao dịch nào kém hấp dẫn nhất sau khi tính toán tất cả các giao dịch trước đó. Trả giá quá nhiều tính toán lần một giao dịch bị loại bỏ là không thể chấp nhận được.
Do đó, chúng tôi sử dụng phương pháp cận heuristic để đánh giá chưa hoàn hảo giao dịch nào nên bị loại bỏ trước. Hơn nữa, chúng tôi theo dõi từng giao dịch từ góc độ "tập hợp con cháu", sử dụng điểm số tập hợp con cháu thấp nhất làm chỉ báo để loại bỏ giao dịch.

Nếu tỷ lệ của một giao dịch đơn lẻ hoặc tập hợp các giao dịch con của một giao dịch lá trong nhóm giao dịch của chúng ta là thấp nhất, thì kết quả này là chính xác—và nó có thể bị loại bỏ. Tuy nhiên, phương pháp này có thể không xác định chính xác giao dịch được chọn gần đây nhất cho mẫu khối.

Trong ví dụ về sơ đồ giao dịch ở trên, "giao dịch J" có mức phí tổ tiên cao nhất và sẽ bị loại bỏ cùng với giao dịch tổ tiên "giao dịch F"; tuy nhiên, bản thân F có mức phí tổ tiên thấp nhất, do đó nó sẽ bị loại bỏ cùng với tất cả các giao dịch con của nó (bao gồm cả J).

Cuối cùng, như đã biết, quy tắc RBF (Thay thế Phí Giao dịch) được Bitcoin Core sử dụng, lấy cảm hứng từ BIP-125, không phải lúc nào cũng tạo ra các giao dịch thay thế tương thích khích lệ. Chúng tôi biết chắc chắn rằng trong một số trường hợp, việc chấp nhận một giao dịch thay thế không cải thiện tình hình nhóm giao dịch; và trong những trường hợp khác, một giao dịch thay thế có thể cải thiện tình hình nhóm giao dịch sẽ bị từ chối.

- Để minh họa một số vấn đề tương thích khích lệ cụ thể, hãy xem xét ví dụ này: "Giao dịch A" và "Giao dịch B" đang trong quá trình giao dịch, sau đó "Giao dịch A" (xung đột với Giao dịch A) xuất hiện.
Điều này đưa chúng ta đến đề xuất "Cluster Mempool" (cảm ơn Suhas Daftuar và Pieter Wuille): Thật tuyệt vời nếu chúng ta luôn có thể biết sắp xếp của toàn bộ mempool và luôn biết điểm khai thác của mỗi giao dịch.
Thay vì sử dụng góc nhìn của "tập hợp tổ tiên" và "tập hợp con cháu" để theo dõi các giao dịch, chúng tôi theo dõi "họ" giao dịch—toàn bộ "họ" các giao dịch có liên quan.

Mỗi giao dịch chỉ thuộc về một nhóm. Bắt đầu với bất kỳ giao dịch nào thuộc một nhóm, bằng cách cộng tất cả các giao dịch con và giao dịch cha (và các giao dịch con của các giao dịch con này, các giao dịch cha của các giao dịch cha này, v.v.), nhóm có thể được xác định hoàn toàn.
Sau đó, chúng ta có thể "tuyến tính hóa" từng nhóm: chúng ta có thể chuyển đổi biểu đồ giao dịch thành danh sách và sắp xếp chúng theo mức độ ưu tiên về khả năng chúng được chọn vào mẫu khối.

Cho đến nay, chúng ta có thể xem tuyến tính hóa dân số như chạy thuật toán xây dựng khối một lần trong một dân số và ghi lại thứ tự mà các giao dịch này đi vào khối.
Tuyến tính hóa có thể tốn nhiều tính toán trong một quần thể lớn và có cấu trúc phức tạp.
Chi phí tính toán khi vận hành trên các cụm hạn chế khả năng mở rộng của chúng. Chúng ta có thể tạm gác vấn đề này sang một bên, nhưng nếu bạn muốn tìm hiểu thêm, Pieter Wuille đã viết một bài báo trên diễn đàn Delving Bitcoin thảo luận về cách tuyến tính hóa cụm hiệu quả: Giới thiệu về tuyến tính hóa cụm.
Trước đây, chúng tôi đã sử dụng các tập hợp tổ tiên để khám phá (ví dụ) các tình huống trong CPFP khi việc đóng gói cả giao dịch cha và con cùng lúc trở nên hấp dẫn.

Việc tuyến tính hóa các nhóm giao dịch cho phép chúng ta dễ dàng xác định các phân đoạn giao dịch sẽ được đóng gói tự nhiên trong một khối. Khi một giao dịch phí cao tiếp nối một giao dịch phí thấp, chúng ta có thể phân loại chúng thành "các nhóm riêng biệt".

Các nhánh này có một lợi thế rất lớn so với tập hợp tổ tiên: (1) So với giao dịch cha, nhiều giao dịch phụ có tỷ lệ cao hơn có thể tự nhiên hình thành một nhánh và tỷ lệ của nhánh này sẽ cao hơn tỷ lệ của bất kỳ tập hợp tổ tiên nào của giao dịch phụ!

(2) Mức phí của một nhánh chỉ phụ thuộc vào các giao dịch trong nhánh đó. Ngay cả khi một nhánh được chọn vào một khối, mức phí của nhánh vẫn không thay đổi—chúng ta có thể tính toán trước mức phí của nhánh và đọc nó như điểm khai thác cho tất cả các giao dịch trong nhánh!
Do đó, việc xây dựng khối trực tiếp trở thành một quá trình liên tục chọn nhóm con có mức phí cao nhất từ tất cả các nhóm con cho đến khi mẫu khối đầy. Điều này cũng mang lại cho chúng ta một thứ tự toàn cục sắp xếp cho toàn bộ nhóm giao dịch.

Điều này cũng có nghĩa là chúng ta biết chính xác nhánh nào sẽ bị đào lên cuối cùng. Trục xuất chỉ đơn giản là xóa nhánh có mức phí thấp nhất trong tất cả các nhánh.

Kết luận là "nhóm giao dịch dân tộc" cung cấp cho chúng ta:
- Tốc độ xây dựng khối nhanh hơn
- Điểm khai thác luôn có sẵn
- Sự trục xuất quy mô nhỏ gần như tối ưu
- Một khuôn khổ tốt hơn (cái gọi là "biểu đồ tỷ giá") để suy nghĩ về các gói giao dịch RBF
Chi phí chỉ là một số khoản chi phí được tính toán trước và những hạn chế về quy mô dân số.

(qua)


