Giao diện
Thuật toán xếp hạng
Thứ tự feed là một hợp đồng. Bốn cái có sẵn là của Reddit, cài đúng theo _sorts.pyx công bố, không phải tự nghĩ lại.
Giao diện đầy đủ
solidity
function rank(address viewer, uint256[] calldata candidateIds)
external view
returns (uint256[] memory orderedIds, uint256[] memory scores);
function name() external view returns (string memory);
function description() external view returns (string memory);Client đưa một tập ứng viên và người xem. Bạn trả lại đúng các id đó theo thứ tự của bạn, kèm điểm mỗi cái. Hết.
Bốn quy tắc
ranklàview. Client gọi bằngeth_call.- Không bao giờ revert, với mọi đầu vào. Revert tới người đọc dưới dạng feed trắng, không lời giải thích. Id không tồn tại, mảng rỗng, zero address: tất cả đều bình thường và phải trả về.
- Hai mảng cùng độ dài.
scores[i]ứng vớiorderedIds[i]. - Trả lời trong ~4 giây. Quá hạn client rơi về thứ tự chưa xếp hạng.
Registry và các slot
AlgorithmRegistry giữ danh sách thuật toán và slot mặc định:
solidity
uint8 public constant SLOT_FEED = 0; // feed chính
uint8 public constant SLOT_EXPLORE = 1; // slot thứ hai
function register(IFeedAlgorithm algo) external returns (uint256 id);
function algorithmOf(address user, uint8 slot) external view returns (address);
function setMyAlgorithm(uint8 slot, uint256 id) external;registerkhông cần quyền. Không có hàm admin; không ai gỡ được thuật toán của bạn.algorithmOf(user, slot)trả về thuật toán một tài khoản đã đặt, hoặc mặc định của slot nếu chưa đặt. Zero address đọc được mặc định, nên khách vãng lai vẫn có feed.setMyAlgorithmchỉ đổi cho tài khoản bạn.
| Slot | Mặc định |
|---|---|
SLOT_FEED | Hot |
SLOT_EXPLORE | Best |
Bốn thuật toán:
- Hot — mặc định, có yếu tố thời gian.
- Best — Wilson score, hỏi "chắc tới đâu".
- Controversial — bài gây chia rẽ.
- Chrono — mới nhất trước, không xếp hạng gì.
Muốn viết cái của riêng bạn: Tự viết thuật toán.