Skip to content

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

  1. rankview. Client gọi bằng eth_call.
  2. 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ề.
  3. Hai mảng cùng độ dài. scores[i] ứng với orderedIds[i].
  4. 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;
  • register khô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.
  • setMyAlgorithm chỉ đổi cho tài khoản bạn.
SlotMặc định
SLOT_FEEDHot
SLOT_EXPLOREBest

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.

Tài liệu cho Monad testnet. Nội dung mô tả đúng những gì đang chạy.